鑒于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年之久了。”在今天,谷歌、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的發現比例,這個結果非常令人難以忘記。”