Shellshock漏洞潜伏多年:暴露开源软件缺陷

  导语:美国《连线》杂志网络版近日撰文称,Shellshock漏洞的曝光暴露出当今互联网开源软件领域的一个重大缺陷:由于维护资源和人手的不足,很多漏洞都已经潜伏多年,随时有可能给当今互联网造成毁灭性的打击。

  以下为文章全文:

  布莱恩·福克斯(Brian Fox)一路开车从波士顿来到圣巴巴拉,他的后备箱里放着两盘磁带。

  但这既不是录音带,也不是录像带,而是电脑磁带,里面存储着两大卷软件代码和数据。这种磁带是专门在老式计算机上使用的,现在或许只有在一些电影上才能看到这种跟家具大小相仿的古董。

  1987年,当福克斯横穿美国,来到他的新家时,后备箱里的那两盘磁带里存储着一个名为Bash的软件程序。那是福克斯为UNIX系统设计的一款工具。他允许所有人都使用这些代码,甚至自由传播给他人。

  福克斯虽然只是一个高中辍学生,但他却经常与理查德·斯托曼(Richard Stallman)等麻省理工学院的技术大拿们混在一起。这也令他的思维得到了极大的拓展,他内心怀有勃勃的野心,希望创建一款免费、可控而且不受版权限制的软件。事实上,这种思潮在当时被称作“自由软件运动”,其目的是逐步重建所有的UNIX操作系统组件,从而打造一款名为GNU的免费产品,与全世界分享。

  彼时,开源软件的大幕正在徐徐拉开。

  审查机制匮乏

  福克斯和斯托曼当时并不知道,在此后的几十年里,他们开发的工具会成为全球通讯基础设施中最为重要的组成部分。在福克斯带着那两盘磁带来到加州,并重新投入到Bash的开发过程时,其他工程师也开始使用这款软件,甚至帮助他推进开发工作。而随着UNIX逐步催生了GNU和Linux——后者已经成为了现代互联网的重要支柱——Bash也被安装到数以万计的设备中。

  但大约在1992年,一名工程师在Bash的代码中键入了一个漏洞。上周,也就是这个漏洞出现20多年后,安全研究人员终于注意到福克斯开发的这款古老程序中的缺陷。它们称之为Shellshock——有了它,黑客便可对现代互联网造成严重破坏。

  在计算机行业的发展史上,有很多古老但却始终没有修复的漏洞,Shellshock只是其中之一。然而,它的故事却有些不同寻常。今年早些时候,研究人员发现了另外一个名为“心脏流血”的漏洞,它同样在开源软件中潜伏了多年。除非我们改变软件的编写和审查方式,否则,以这两个漏洞为代表的趋势将会继续对互联网造成破坏。由于互联网上使用的软件都被广泛使用和重新利用,里面渗透着许多数十年前开发的代码,其中一些已经成为被人遗忘的角落,没有人再对它的安全漏洞进行审查。

  在Bash开发时,没有人针对它抵御网络攻击的能力进行过审查,因为那在当时看来根本没有意义。“担心这会成为地球上使用最广泛的软件之一,并且遭到恶意人士的攻击,在当时看来是根本不可能的事情。”福克斯说,“等到这成为一种可能时,它已经被使用了15年。”如今,谷歌、Facebook和所有的大牌互联网公司都在使用Bash,而由于这款软件是开源的,所以他们随时都可以审查其中的问题。事实上,任何人都可以随时审查该软件。但却没有人真正这么做。这种现状亟待改变。

  网络建立模式

  以数据容量来看,福克斯的Bash程序跟iPhone拍摄的一张照片大小相仿。但在1987年,他却无法横跨美国发送电子邮件。当时的互联网刚刚开始发展,万维网尚未诞生,而最高效的数据转移方式,就是放在汽车的后备箱里。

  Bash是一个外壳程序,那是一种与操作系统交互的黑盒方式,诞生日期早于图形用户界面。如果你使用过Windows命令行,就会理解这种模式。这看起来很陈旧,但随着互联网在网络浏览器和Apache服务器的推动下逐步腾飞,Bash外壳成为了一种简单却强大的工具,可以方便工程师把网络软件与操作系统粘合在一起。想让网络服务器从电脑文件中获取信息?只要调用Bash外壳,并运行一系列命令即可。这就是网络建立的方式——一个脚本接着一个脚本逐步堆砌起来。

  如今,Bash依然是网络工具箱的重要组成部分。Mac中可以找到它的身影,几乎所有使用Linux操作系统的公司也都把它作为连接电脑程序(例如网络服务器软件)与底层操作系统的一种快捷而简单的方法。

  然而,该程序的主要维护者却并不效力于其中任何一家大牌企业,他甚至并不供职于科技公司。此人名叫切特·拉米(Chet Ramey),他在克利夫兰的凯斯西储大学当程序员,只是利用业余时间维护Bash。

  最古老的漏洞

  1980年代末,拉米接替福克斯,成为Bash的主要维护者。今年9月12日,一个名叫史蒂芬·查泽拉斯(Stephane Chazelas)的人通过电子邮件把发现Shellshock漏洞的事情告诉了他。这正是在上周被公之于众的那个严重漏洞。不到几小时,黑客就设计出了可以利用这个漏洞的代码,可以把受此影响的设备组成一个僵尸网络。

  拉米无法获得1990年代早期的源代码修改日志,但他认为,这个漏洞很可能是自己造成的,时间大概在1992年左右。这使之成为我们在《连线》杂志听说过的最古老、最严重的未修补漏洞。我们向普渡大学教授尤金·斯帕福德(Eugene Spafford)求证此事,他也想不出比这时间更久远的漏洞。“我想不出还有哪个漏洞存在过这么长时间。”他说,“肯定还有很多比这时间更长的漏洞,但没有一个能在时间长度和破坏力度上同时比肩这个漏洞。”

  然而,对于熟悉“心脏流血”漏洞的人来说,这种怪诞的感觉却似曾相识。那个漏洞是在广泛使用的OpenSSL开源加密软件中发现的。与OpenSSL相似,Bash也从未接受过全方位的安全审查,它的骨干开发人员几乎没有得到任何财务资助。可惜的是,这就是互联网的真实故事。

  开源软件的谎言

  在咨询公司Errata Security CEO罗伯特·格雷厄姆(Robert Graham)看来,Shellshock揭穿了开源软件的一个谎言:与封闭的专有软件相比,开源代码允许“很多眼睛”审查,而且可以更快地修复漏洞。这在业界被称为“莱纳斯定律”。“如果在过去25年间,真的有‘很多眼睛’盯着Bash,这个漏洞不可能这么长时间不被发现。”格雷厄姆上周在博客中写道。

  莱纳斯·托瓦兹(Linux Torwalds)是Linux系统的创造者,而“莱纳斯定律”正是以他的名字命名的。在托瓦兹看来,这一定律目前仍然有效。但缺陷在于,并非所有的开源项目都会受到“很多眼睛”的关注。“事实上,有很多代码都没有吸引太多人的关注。”他说,“许多开源项目都没有太多开发者参与,甚至包括一些非常核心的软件。”

  不过,无论是否开源,任何软件都会存在这种问题。毕竟,想要知道甲骨文数据库那样的封闭软件究竟有多少漏洞,难度还会更大。大约10年前,由于部分软件代码没有得到适当的审查,微软面临了严重的安全问题。但当“冲击波”蠕虫2003年肆虐Windows系统后,微软将安全审查视为头等大事。此后10年,该公司已经提升了代码的安全标准。微软花费数百万美元用于安全审查,还聘请了很多白帽黑客来测试软件。现在,开源软件社区也开始采取同样的措施。

  今年5月,就在“心脏流血”漏洞曝光后不久,Linux基金会便投入了600万美元用于加强多个开源项目的安全性,包括OpenSSL、OpenSSH,以及Network Time协议。但Bash并不在当时的名单上。“这出乎我们的意料之外。”Linux基金会执行理事吉姆·泽姆林(Jim Zemlin)说,“但我们的人员的确在与那些人联系,看看我们能给予什么帮助。”

  这很不错,但关键在于,如何才能在漏洞被外界发现前加固互联网?但愿Linux基金会、谷歌和Facebook能够做出一些贡献。

  即使在Shellshock曝光后,福克斯依然为他设计的这个项目感到自豪。“他们用了27年才发现了一个漏洞,”他说,“按照使用范围和漏洞发现的数量之间的比率来看,这实在是太惊人了。”

 

上一篇:智能无惧挑战 山石网科轰动RSA2015

下一篇:美国起诉4名黑客 窃取微软和军方1亿美元数据