开放源码软件值得信任?[转]
|
冬天的菠菜
正式写手
|
[1楼]
大 中
小 发表于 2006-4-11 12:46:46 只看该作者
开放源码软件值得信任?[转] 引子
ken到台湾的一个大学(好像也是清华)去介绍unix的一些知识,清华大学的教授和ken吹嘘他们的unix系统多么多么的安全,如何如何很难攻破,吹的ken都烦了,就和他们说他可以保证在5秒之内攻破任何一个unix的系统,那般教授不相信,于是跟着ken进入机房,在教授们换好鞋子,准备去看看ken是如何攻破unix的过程的,ken已经在控制台上面使用root权限操作了半天的机器。在大家的追问下面,ken才道出了那个编译器的秘密。 http://www.51cto.com/html/2005/1219/15025.htm 开放源码软件值得信任? 经常有人问我,是否他们真的应该相信开放源码软件(OSS)?换句话说,人们担心的是:OSS到底是给我们带来美好生活的天使,还是一个破坏我们生活的魔鬼?事实上,这问题早在Linux和各种BSD(Berkeley Software Distribution)操作系统产生之初就已经被提出来了。在现实中,任何一个组织或者企业在计划使用某一个不是来自知名商家的自由软件时,都非常地谨慎。作为一个惯例,一般都要投入大量的资金来对该软件进行全面的检测。 最近发生的一些事情更加剧了人们对OSS的担心。在一些站点上有消息说,一个IDS(入侵检测系统)在其安装脚本中被加入了后门,任何人只要安装了该软件就会使得它的系统处于危险之中。而这个作恶的人对后门进行了伪装,使得其看起来就像是正常配置过程中的一个部分。我们知道,后门是一种对系统做一些特殊处理,以便以后能方便、快捷地使用这个系统,而不被系统的主人所发现的做法。对于软件系统中的后门,一般人都深恶痛绝,但又因为它的特殊功用,一些人对它趋之若鹜。很显然,无论是在商业软件中,还是在OSS中,后门都是威胁系统安全的主要因素之一。 自由软件10多年来发展的事实证明,OSS还是值得信任的。并且,你可以采取一些步骤来确保你下载的软件没有被人进行过恶意的更改,方法是对下载站点的各种数字签名进行检查。 软件后门的幕后“黑手” 程序员在软件中加入后门,目的是可以取得对安装了该软件的系统进行访问的权力。在商业软件和系统中,后门有着“维护账号”等一些其它的名字,并且这些后门为该系统的所有者所熟知。当然情况也并不总是这样的。 在20世纪80年代晚期,DEC(Digital Equipment Corporation,后被Compaq公司合并)就在其产品中包含了一些带有默认密码的系统级账号。这样DEC的工程师就可以很轻易地访问公司的VMS操作系统。大约在同一时期,DG(Data General,www.dg.com)Aviion系统将一个特定的选项作为其打印机服务器管理命令的一部分。使用这个特定的选项(该选项并没有被公开),用户可以获得root访问权限。维护公司小型机的AT&T工程师曾经使用程序中的一个Bug使自己成为超级用户。这些商家在其产品中加入后门的行为一直持续到了20世纪90年代早期。 在Unix软件里,后门也有着很长的历史。Ken Thompson,Unix操作系统的设计者之一,在1984的ACM(Association for Computing Machinery)颁奖会的发言中,他讲了这样一段话:写操作系统的人很难忍得住诱惑,因此会在系统里面装些后门。想想看,如果我写操作系统时,偷偷在登录的部分加一段程序代码,使得全世界的这套操作系统只要看到我的账号和密码就让我进去,给我root权限,这该是多有趣呀。 但是我不能直接在登录程序的源代码里面这样写,否则一下就被人抓到了。 该怎么办呢?就从编译器里面动手脚,我暂且将其称作“补丁1”吧。在编译器中多加一道手续, 如果发现被编译的原始程序“疑似”在做登录动作,就把它开个漏洞,让我进得去。但是这样也不见得行得通,编译器以后也会改版,新版的编译器可能不是我在写。装系统的人也不见得用我的编译器。怎么办呢?于是我在编译器的源代码中作第二次手脚,称作“补丁2”。如果这个编译器觉得在编译的程序“疑似”另一个编译器的话,就加入上面的“补丁1”和这个“补丁2”本身。好!现在操作系统推出了,CC1 是我写的内建编译器,其中有我动的两个手脚。现在某人在编译Unix, 不得不用这个编译器。然而CC1 中已经有了“补丁1”,于是一旦编译到登录,编译出来的登录程序就被动了手脚。只要看到我的名字,就一定让我进系统,给我root权限。 当时,Ken Thompson宣称其有一个万能密码,使用这个密码,它可以以任何用户的身份登录到任何Unix系统之中。我想Thompson的万能密码可以称得上是知名度最高、最复杂的后门代码了。 此外还有一个为大家所熟知的人是Eric Allman。他在早期的Sendmail中加入了一些后门。当Allman刚开始写Sendmail时,全球只有三个Unix系统在使用该软件,并且这些系统都位于加利福尼亚的伯克利大学中。也就是说,当时Allman拥有所有这些系统的root权限。当Sendmail被安装在第四个系统上以后,Allman的这些后门才被修正。不过在早期,互联网是一个友好的相互信任的研究人员之间的交流平台。按照Eric Allman的解释,他是为了方便才留了一些后门。 在1982年,Bill Joy还是加利福尼亚伯克利大学的一个学生,现在是Sun公司的创始人之一。他创建了一个包含有后门的Sendmail版本,并且将其拷贝分发到了50个站点,创建了第一个BSD。这其中一个最让人称奇的后门是一个“附加的”SMTP命令,它为任何可以提供配置的用户提供一个root shell。后来,Sendmail去掉了这个密码,而只需连接到Sendmail,然后输入“wiz”即可拥有root权限。所以,一个远程用户只需telnet到安装有Sendmail系统的25端口,输入wiz,然后接着输入shell,就能获得一个root shell进而控制系统。 Sun、HP等商业的Unix工作站商家后来去掉了Sendmail中的这个后门,但是它们却忽视了第二个后门(或者说是Bug)。这个后门可以以root的身份执行任何一个命令行。在1988年11月,Internet蠕虫利用这个错误命令来加载和执行一个可以扩散的蠕虫短程序。商家终于意识到了这个错误的存在,于是将其从Sendmail的源码中去除了。后来又发现了第三个后门,不过它在很久以前就已经被修正了。 软件后门的发展趋势 20世纪80年代以后,OSS后门的历史开始困扰其发展。Unix开发人员希望并且相信他们的操作系统可以成为主流,而后门代码在商业领域中是不被接受的。尽管如此,后门代码并没有完全消失。在这一时期里,最为大家所熟知的是微软软件里的后门。微软的Excel里包含有开发人员的照片和各种各样的小游戏。当然,要看到这些东西,你必需要知道如何调用这些后门,这就是所谓的“复活节彩蛋(Easter Eggs)”。相关内容可查看网址:http://www.eeggs.com/tree/279.html。当然,现在有很多Excel版本在使用,而不是所有的版本中都藏有游戏。 在20世纪90年代早期,用于OSS下载的FTP服务器是关注的焦点。因为如果有人在不被觉察的情况下侵入站点,并且对提供下载的软件进行更改的话,就可能会有成千上万的用户在毫不知情的情况下下载并且安装这些软件。有一些人则会使用一些其它的途径,比如把特洛伊木马伪装成一个安全软件。最近一个宣称专门用于检测用户系统弱点的工具实际上就会在使用它的系统上安装一个后门。而该工具的确可以检测到一些安全问题以及系统存在的弱点的列表。此外,在写本文的前几天(10月8日),LinuxSecurity.com报道CERT/CC已经得到确认一些Sendmail的源码包拷贝被入侵者修改,加入了木马代码。并且提醒使用、分发和镜像站点应立即确认原数据包的完整性。 作为用户,要保证下载的OSS软件的安全性有几种途径。对于对编程狂热的高手,他们会研究所有的源代码,寻找可能存在的后门。一个比较简单、快捷的办法是对代码进行扫描,查找可以进行网络连接、执行命令或者打开文件的那些代码。因为后门代码一般来说做的就是这些操作。 事实上,对于很大的OSS软件包,很少有人会这么去做。8.0版的BIND(Berkeley Internet Name Daemon)、OSS DNS等软件的源代码就有17万行。在最近几年,Bug一直在BIND中泛滥,因此产生了很多补丁程序。对于这种情况,对安全非常敏感的程序员只需要检查新旧版本之间的不同即可。一般来说,每一个补丁程序只会对其中几行进行更改或者添加几行代码。在现实中,大多数人都选择信任软件发行者,而不是尝试去读懂源代码。虽然在一般情况下,这也是一个行之有效的方法,但是作为一个用户又怎么知道自己所使用的源码版本是否可信呢? 在2002年春,一些软件发行版的站点被攻破,并且可下载的软件包很有可能被进行了一些微小的更改。这两个站点一个是IRC (Internet Relay Chat)软件的站点,另外一个是 Monkey.org。其上有著名安全专家Dug Song写的软件fragrouter。 在上述两种情况中,攻击者对安装OSS软件时常用的安装脚本进行了更改。这些脚本一般用于名字配置、搜索系统中软件安装的位置和配置安装脚本以使其和目标系统相匹配。配置脚本通常会创建一个简短的测试程序来查看目标系统中是否有需要的库和功能。因为配置脚本由很多的检测过程组成,所以攻击者使得后门程序看起来就像在做一次正常地检测。攻击者把后门程序保存至一个文件中,编译并且执行它,然后删除源码和编译过的程序。一次成功的攻击留下的唯一证据就是一个正在运行的程序,并且该程序会定时地尝试连接到远程的服务器。 如果连接远程服务器成功,后门程序就会执行一个shell。这个shell和安装该软件的人具有相同的权限。这种类型的后门在进行对外连接时有很大的便利,很多防火墙都无法阻止这种行为。 作为OSS用户,由于大部分OSS都遵从GPG(GNU Privacy Guard),所以可以尽量避免由于有人对源码的篡改带来的影响。GPG是保证数据传输和存储安全的GNU工具,它可以用于加密数据和创建数字签名。GPG包括了高级的密匙管理工具而且遵循RFC2440中描述的OpenPGP的国际标准。 PGP(Pretty Good Privacy)是GPG的继承者,它由Philip Zimmerman在1991年发布。 也许你从来没有访问过OSS站点,但是你很有可能见过签名文件,只不过是并没有意识到它的存在而已。软件包的签名文件一般会有一个容易让人误解的后缀.asc。它实际上是一个ASCII版的数字签名。在网上,我们可以找到如何使用GPG或者PGP来检查签名和OSS软件包关联的方法。当软件包的签名检测正确的时候, 你就可以确认它并没有被篡改过。这时你可以相信对软件包签名的人。这个签名密匙还处于保密状态,也就是说在进行签名的过程中,没有人在源代码中加入后门。 OSS更安全 现在我们又回到了是否应该相信OSS的问题。人们经常容易提到的是由于没有一个商业实体为OSS出现的缺陷负责,所以它并不可靠。事实上,今天大部分被广泛使用的商业软件中都有一个EULA(最终用户协议书)。它规定商家在大部分情况下实际上并不对软件出现的缺陷负责。所以有关负责的争论根本站不住脚。 OSS的程序员在编写或者维护软件时一般都是无偿的。这些程序员得到的回报是:如果写出了很好的软件,他就可以随之声名显赫。因此,对于一个程序员而言,如果在其软件中加入后门,后果无疑是毁灭性的。事实上,在现实中,那怕是一些与安全性相关的Bug,都会严重影响OSS程序员的名誉。 相比于那些为大公司工作的、永远不会被公众知道的程序员而言,OSS程序员对于软件安全的要求拥有更强烈的愿望和责任感。此外,因为OSS程序员会把自己所写的代码公诸于众,所以所有的人都可以对其进行检查。在现实中,在完成某一项特定的工作时,OSS软件无论是其性能还是其提供的安全性都要比相应的商业软件要好得多。OSS在市场上不断取得的成功,正是说明了其各方面的表现越来越得到人们的认可。 OSS提供了使用计算机所需要的工具。事实上,现在很多商家给用户提供软件时并不从中赢利,而是通过使用软件来卖出其它的商品或者服务。事实证明,OSS有很好的安全性,或者说,它要比商业软件安全。我们所要注意的就是在安装一个开放源码的软件前对其源码和签名进行一下验证。
http://blog.csdn.net/thisisll/
http://spaces.msn.com/thisisll/
|
|
TOP |







