布莱恩·福克斯(Brian Fox)驾车从圣巴巴拉(Santa Barbara)来到了波士顿,其车后备箱内放着两卷巨大的磁带。
这些并不是音乐磁带或者视频磁带。它们转载的是电脑软件代码及数据,是专为过去有家具般大小的电脑服务的,就像我们在《Dr. Strangelove》和《Three Days of the Condor》等经典电影中看到的一样。
那一年是1987年,福克斯驾车横跨美国来到了他的新家。他所携带的磁带装载了一个名为Bash的软件程序,而这个程序就是后来在UNIX系统及相关再发行版中随处可见,用于桥接用户与操作系统的重要工具。
福克斯是一名高中辍学生,其平时大量时间都与麻省理工(MIT)的电脑极客们,如理查德·斯托尔曼(Richard Stallman)等一起度过。尽管当时的福克斯只是个脚架焊接工,但其却有着一颗壮志雄心——要创建出一套完全免费,并可让人随意删节,且不受繁重拷贝条款限制的软件系统。福克斯将这一想法称为“自由软件运动”,其最终的目的是将UNIX操作系统全部重建,并以GNU的方式完全免费地与世人共享。这也便是开源软件生态的雏形。
福克斯和斯托尔曼在那个时候并不知道,他们正在开发的软件随后会成为全世界通信基础设施几十年里几近不可或缺的重要工具。在福克斯将两卷磁带从波士顿带回到加州后,此时已有不少工程师开始注意到并使用Bash,有的甚至还帮助进行开发。在UNIX的带动下,GNU和Linux开始迅速崛起,尤其是后者如今俨然已成为当代互联网的躯干组成,Bash也因此进驻了数以亿计的计算机当中。
直到1992年的某一天,一位工程师将一个程序Bug键入到了Bash中。又过了20多年,终于有安全专家在上周发现了这一沉睡已久的安全漏洞。这一Bug被称专业人士们称为Shellshock,其危害性将可导致黑客肆意大规模地破坏当今的互联网结构。
Shellshock是人类计算机史上已知的、最老的、尚未修复的程序Bug。事实上在今年早些时候,专家们也在另一个已存在多年的开源软件上找到了一个名为“心脏出血”(Heartbleed)的Bug。这两个Bug都表明出当今互联网的一个问题,即除非我们能够改变代码编写的方式和软件审查的方式,否则同样的问题或将一直阻碍和威胁着互联网的发展。互联网建立在大量被重复使用的软件之上,其中一些软件甚至是几十年前就已存在的,而那个时候,我们甚至还没有对安全问题的审查考虑。
譬如Bash被创立之时,就没有人想过要为其遭受网络攻击的可能性进行评估,因为这在当时毫无意义。
“(当时)去担心这个软件会成为地球上被使用最多的一个,并要考虑会被一些恶意的人利用在网上发起攻击,这完全是不现实的。”福克斯说,“当可能的条件具备时,Bash已经被使用有15年之久了。”在今天,谷歌、Facebook,或者任何一个互联网巨头都在使用Bash,因为它是开源的,任何人都可以在任何时候对它进行审查。然而事实是,尽管任何人都可以在任何时候去审查Bash的安全性,但却没有一个人想过这么去做。这种现象需要发生改变。
网络是怎么建成的
从数码的角度看,福克斯的Bash程序大致与iPhone的桌面截屏图大小一致。但在1987年,这个程序是无法利用电子邮件发送至美国彼岸的。当时的互联网雏形才刚刚形成,跨越全球的WWW概念则还处于酝酿中。于是这就有了福克斯驾车带着两卷磁带由圣巴巴拉开往波士顿的一幕。
Bash是一个shell工具,是一个在图形用户界面出现前用于与计算机进行交流的指令行键入工具。这有点类似Windows下的命令提示符工具。尽管它看上去很“古老”,但却是在互联网盛行的时代,在Apache网络服务器遍及的时代,桥接网页应用软件和操作系统之间最简单和最高效的方式——只需要在Bash shell下键入一系列指令,网页服务器就可以从计算机中获得文件信息——这就是当今互联网的基础。一套建立在脚本之上的脚本指令。
今天,Bash仍旧在网页服务器管理工具中扮演重要角色。Mac系统中也有它的存在。事实上,任何运行Linux操作系统或UNIX操作系统的公司都在通过该工具快速而简单地与运行于这些系统之上的应用软件建立连接。
然而,领导Bash开发的程序员却并不为任何一家互联网巨头工作。他甚至不在为一家科技公司工作。这名程序员名叫切特·雷米(Chet Ramey),是克里夫兰Case Western Reserve University的程序开发人员,并只在业余时间对Bash进行维护。
“相当长一段时间了”
80年代末,雷米取代福克斯成为了Bash的领导开发者。在9月12日这天,雷米收到了一封来自安全专家史蒂芬·查兹拉斯(Stephane Chazelas)有关Shellshock程序Bug的电子邮件。这是一个高危的安全漏洞,全世界的人在上周都意识到了这个问题——仅在数个小时,就有黑客发布了攻击代码,可利用
Shellshock漏洞将一台未补丁的机器瞬间转变称可任意操控的僵尸网“肉鸡”。
雷米并没有权限访问Bash开发项目原始代码的更新日志,这些数据是在90年代初期创立的。不过雷米认为自己很可能是那个编写了Shellshock程序Bug的人,而Bug创建的时期大约要追溯到1992年的某个时候。这个时间显然足以让Shellshock成为当今最古老、最重要,且尚未修补的安全漏洞。《连线》为此还特别联系了普渡大学的尤金·斯帕福德(Eugene Spafford)教授以证实猜测。而斯帕福德也明确表示:“我无法回忆起任何其它尚未修补的比这个更古老的漏洞。当然这个世界上肯定还有很多历史更久远的Bug存在,但考虑到漏洞产生的潜在影响及存在时间,Shellshock无疑是最耀眼的。”
不过,上述的情况让那些对“心脏流血”十分熟悉的人有似曾相识的感觉。“心脏流血”也是发现于一个历史悠久的开源软件项目——SSH,该软件同样亦被广泛使用。与SSH项目的开发一样,Bash也从未有过任何安全性审查,软件是由一组志愿爱好者维护开发的,且基本上他们并不会因开发Bash而获得任何财务方面的赞助。很不幸的是,这种模式也正是互联网的发展过程。
“多双眼睛”的谎言
安全咨询公司Errata Security首席执行官罗伯特·格莱汉姆(Robert Graham)指出,Shellshock对开源软件的主要用户撒了一个谎言,即:开源软件允许“许多双眼睛”来共同监督和修复Bug,这能使其效率和安全性要好过闭源的商业版权软件。这种美好的想法亦被称为“林纳斯定律”(Linus’s Law)。
“如果真有许多双眼睛在过去25年里一直都在关注Bash,那么这些Bug早在多年前就会被发现了。”格莱汉姆上周在博客上写到。
“林纳斯定律”是由林纳斯·托瓦兹(Linus Torvalds)创建了Linux操作系统后命名。Shellshock漏洞曝出后,林纳斯表示该定律依旧成立。
“有很多代码实际上并没有很多双眼睛在监督。很多开源项目也并没有真正让大量开发者参与到其中,即使其中一些是非常核心的开源应用。”林纳斯表示。
这个问题在任何软件中都是存在的,无论是开源或者闭源。总体来说,我们更难说清闭源软件里究竟存在多少Bug,譬如甲骨文的数据库应用。而在大约十年前,微软也曾面临过严重的安全问题,因为该公司部分代码并未没有正确地经过审核。但在经历过2003年的Windows Blaster蠕虫问题后,微软终将安全审查列到了第一位。于是在接下来的十年里,微软的代码质量提高了。微软每年都会聘请大量的“白帽”黑客和花费千万美元来保证产品的安全性。如今开源软件社区也将会开始同样的旅程。
今年5月,在“心跳流血”漏洞首次公开后不久,Linux基金会筹集了600万美元,以针对一些被广泛使用的开源项目的安全性进行一次大检修,其中包括了SSH、NTP(网络事件协议)等等。然而不幸的是,Bash并未在其列。
“这是不可预料的。”Linux基金会执行董事吉姆·泽姆林(Jim Zemlin)表示,“但当然的,我的人一定会去接触相关的开发人员,以看看是否能提供帮助。”
这很好,但前提是要在Bug发现前继续维护好互联网。希望Linux基金会、谷歌或Facebook等可以继续做好这一点。
即使有了Shellshock这一瑕疵,布莱恩·福克斯仍然为让自己曾经横跨美国的创造出的Bash而骄傲。
“在它首个Bug被发现之前,这个软件已经存在27年了。”福克斯说,“鉴于软件的使用情况和Bug的发现比例,这个结果非常令人难以忘记。”
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/45384.html