经常有人问我,是否他们真的应该相信开放源码软件(OSS)?换句话说,人们担心的是:OSS到底是给我们带来美好生活的天使,还是一个破坏我们生活的魔鬼?事实上,这问题早在Linux和各种BSD(Berkeley Software Distribution)操作系统产生之初就已经被提出来了。在现实中,任何一个组织或者企业在计划使用某一个不是来自知名商家的自由软件时,都非常地谨慎。作为一个惯例,一般都要投入大量的资金来对该软件进行全面的检测。
最近发生的一些事情更加剧了人们对OSS的担心。在一些站点上有消息说,一个IDS(入侵检测系统)在其安装脚本中被加入了后门,任何人只要安装了该软件就会使得它的系统处于危险之中。而这个作恶的人对后门进行了伪装,使得其看起来就像是正常配置过程中的一个部分。我们知道,后门是一种对系统做一些特殊处理,以便以后能方便、快捷地使用这个系统,而不被系统的主人所发现的做法。对于软件系统中的后门,一般人都深恶痛绝,但又因为它的特殊功用,一些人对它趋之若鹜。很显然,无论是在商业软件中,还是在OSS中,后门都是威胁系统安全的主要因素之一。
自由软件10多年来发展的事实证明,OSS还是值得信任的。并且,你可以采取一些步骤来确保你下载的软件没有被人进行过恶意的更改,方法是对下载站点的各种数字签名进行检查。
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出现的缺陷负责,所以它并不可靠。事实上,今天大部分被广泛使用的商业软件中都有一个EULA(最终用户协议书)。它规定商家在大部分情况下实际上并不对软件出现的缺陷负责。所以有关负责的争论根本站不住脚。
OSS的程序员在编写或者维护软件时一般都是无偿的。这些程序员得到的回报是:如果写出了很好的软件,他就可以随之声名显赫。因此,对于一个程序员而言,如果在其软件中加入后门,后果无疑是毁灭性的。事实上,在现实中,那怕是一些与安全性相关的Bug,都会严重影响OSS程序员的名誉。
相比于那些为大公司工作的、永远不会被公众知道的程序员而言,OSS程序员对于软件安全的要求拥有更强烈的愿望和责任感。此外,因为OSS程序员会把自己所写的代码公诸于众,所以所有的人都可以对其进行检查。在现实中,在完成某一项特定的工作时,OSS软件无论是其性能还是其提供的安全性都要比相应的商业软件要好得多。OSS在市场上不断取得的成功,正是说明了其各方面的表现越来越得到人们的认可。
OSS提供了使用计算机所需要的工具。事实上,现在很多商家给用户提供软件时并不从中赢利,而是通过使用软件来卖出其它的商品或者服务。事实证明,OSS有很好的安全性,或者说,它要比商业软件安全。我们所要注意的就是在安装一个开放源码的软件前对其源码和签名进行一下验证。