Shellshock漏洞那些事:网络安全噩梦的开始

jopen 10年前

  9 月 30 日消息,据国外媒体报道,鉴于 Linux/UNIX 系统近日再次曝出危险等级超“心脏出血”的 Bash 漏洞——“Shellshock”,《连线》杂志周一特别刊文,介绍了该漏洞的过往与今生,并指出对于已经破损不堪的互联网而言,Shellshock 或将只是一切噩梦的开始。

  以下为《连线》文章全文翻译内容:

  布莱恩·福克斯(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 年之久了。”在今天,谷歌、非死book,或者任何一个互联网巨头都在使用 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 基金会、谷歌或 非死book 等可以继续做好这一点。

  即使有了 Shellshock 这一瑕疵,布莱恩·福克斯仍然为让自己曾经横跨美国的创造出的 Bash 而骄傲。

  “在它首个 Bug 被发现之前,这个软件已经存在 27 年了。”福克斯说,“鉴于软件的使用情况和 Bug 的发现比例,这个结果非常令人难以忘记。”

来自: 网易科技