導(dǎo)語:美國《連線》雜志網(wǎng)絡(luò)版近日撰文稱,Shellshock漏洞的曝光暴露出當(dāng)今互聯(lián)網(wǎng)開源軟件領(lǐng)域的一個(gè)重大缺陷:由于維護(hù)資源和人手的不足,很多漏洞都已經(jīng)潛伏多年,隨時(shí)有可能給當(dāng)今互聯(lián)網(wǎng)造成毀滅性的打擊。
以下為文章全文:
布萊恩·福克斯(Brian Fox)一路開車從波士頓來到圣巴巴拉,他的后備箱里放著兩盤磁帶。
但這既不是錄音帶,也不是錄像帶,而是電腦磁帶,里面存儲(chǔ)著兩大卷軟件代碼和數(shù)據(jù)。這種磁帶是專門在老式計(jì)算機(jī)上使用的,現(xiàn)在或許只有在一些電影上才能看到這種跟家具大小相仿的古董。
1987年,當(dāng)福克斯橫穿美國,來到他的新家時(shí),后備箱里的那兩盤磁帶里存儲(chǔ)著一個(gè)名為Bash的軟件程序。那是福克斯為UNIX系統(tǒng)設(shè)計(jì)的一款工具。他允許所有人都使用這些代碼,甚至自由傳播給他人。
福克斯雖然只是一個(gè)高中輟學(xué)生,但他卻經(jīng)常與理查德·斯托曼(Richard Stallman)等麻省理工學(xué)院的技術(shù)大拿們混在一起。這也令他的思維得到了極大的拓展,他內(nèi)心懷有勃勃的野心,希望創(chuàng)建一款免費(fèi)、可控而且不受版權(quán)限制的軟件。事實(shí)上,這種思潮在當(dāng)時(shí)被稱作“自由軟件運(yùn)動(dòng)”,其目的是逐步重建所有的UNIX操作系統(tǒng)組件,從而打造一款名為GNU的免費(fèi)產(chǎn)品,與全世界分享。
彼時(shí),開源軟件的大幕正在徐徐拉開。
審查機(jī)制匱乏
福克斯和斯托曼當(dāng)時(shí)并不知道,在此后的幾十年里,他們開發(fā)的工具會(huì)成為全球通訊基礎(chǔ)設(shè)施中最為重要的組成部分。在福克斯帶著那兩盤磁帶來到加州,并重新投入到Bash的開發(fā)過程時(shí),其他工程師也開始使用這款軟件,甚至幫助他推進(jìn)開發(fā)工作。而隨著UNIX逐步催生了GNU和Linux——后者已經(jīng)成為了現(xiàn)代互聯(lián)網(wǎng)的重要支柱——Bash也被安裝到數(shù)以萬計(jì)的設(shè)備中。
但大約在1992年,一名工程師在Bash的代碼中鍵入了一個(gè)漏洞。上周,也就是這個(gè)漏洞出現(xiàn)20多年后,安全研究人員終于注意到福克斯開發(fā)的這款古老程序中的缺陷。它們稱之為Shellshock——有了它,黑客便可對(duì)現(xiàn)代互聯(lián)網(wǎng)造成嚴(yán)重破壞。
在計(jì)算機(jī)行業(yè)的發(fā)展史上,有很多古老但卻始終沒有修復(fù)的漏洞,Shellshock只是其中之一。然而,它的故事卻有些不同尋常。今年早些時(shí)候,研究人員發(fā)現(xiàn)了另外一個(gè)名為“心臟流血”的漏洞,它同樣在開源軟件中潛伏了多年。除非我們改變軟件的編寫和審查方式,否則,以這兩個(gè)漏洞為代表的趨勢將會(huì)繼續(xù)對(duì)互聯(lián)網(wǎng)造成破壞。由于互聯(lián)網(wǎng)上使用的軟件都被廣泛使用和重新利用,里面滲透著許多數(shù)十年前開發(fā)的代碼,其中一些已經(jīng)成為被人遺忘的角落,沒有人再對(duì)它的安全漏洞進(jìn)行審查。
在Bash開發(fā)時(shí),沒有人針對(duì)它抵御網(wǎng)絡(luò)攻擊的能力進(jìn)行過審查,因?yàn)槟窃诋?dāng)時(shí)看來根本沒有意義。“擔(dān)心這會(huì)成為地球上使用最廣泛的軟件之一,并且遭到惡意人士的攻擊,在當(dāng)時(shí)看來是根本不可能的事情。”福克斯說,“等到這成為一種可能時(shí),它已經(jīng)被使用了15年。”如今,谷歌、Facebook和所有的大牌互聯(lián)網(wǎng)公司都在使用Bash,而由于這款軟件是開源的,所以他們隨時(shí)都可以審查其中的問題。事實(shí)上,任何人都可以隨時(shí)審查該軟件。但卻沒有人真正這么做。這種現(xiàn)狀亟待改變。
網(wǎng)絡(luò)建立模式
以數(shù)據(jù)容量來看,福克斯的Bash程序跟iPhone拍攝的一張照片大小相仿。但在1987年,他卻無法橫跨美國發(fā)送電子郵件。當(dāng)時(shí)的互聯(lián)網(wǎng)剛剛開始發(fā)展,萬維網(wǎng)尚未誕生,而最高效的數(shù)據(jù)轉(zhuǎn)移方式,就是放在汽車的后備箱里。
Bash是一個(gè)外殼程序,那是一種與操作系統(tǒng)交互的黑盒方式,誕生日期早于圖形用戶界面。如果你使用過Windows命令行,就會(huì)理解這種模式。這看起來很陳舊,但隨著互聯(lián)網(wǎng)在網(wǎng)絡(luò)瀏覽器和Apache服務(wù)器的推動(dòng)下逐步騰飛,Bash外殼成為了一種簡單卻強(qiáng)大的工具,可以方便工程師把網(wǎng)絡(luò)軟件與操作系統(tǒng)粘合在一起。想讓網(wǎng)絡(luò)服務(wù)器從電腦文件中獲取信息?只要調(diào)用Bash外殼,并運(yùn)行一系列命令即可。這就是網(wǎng)絡(luò)建立的方式——一個(gè)腳本接著一個(gè)腳本逐步堆砌起來。
如今,Bash依然是網(wǎng)絡(luò)工具箱的重要組成部分。Mac中可以找到它的身影,幾乎所有使用Linux操作系統(tǒng)的公司也都把它作為連接電腦程序(例如網(wǎng)絡(luò)服務(wù)器軟件)與底層操作系統(tǒng)的一種快捷而簡單的方法。
然而,該程序的主要維護(hù)者卻并不效力于其中任何一家大牌企業(yè),他甚至并不供職于科技公司。此人名叫切特·拉米(Chet Ramey),他在克利夫蘭的凱斯西儲(chǔ)大學(xué)當(dāng)程序員,只是利用業(yè)余時(shí)間維護(hù)Bash。
最古老的漏洞
1980年代末,拉米接替福克斯,成為Bash的主要維護(hù)者。今年9月12日,一個(gè)名叫史蒂芬·查澤拉斯(Stephane Chazelas)的人通過電子郵件把發(fā)現(xiàn)Shellshock漏洞的事情告訴了他。這正是在上周被公之于眾的那個(gè)嚴(yán)重漏洞。不到幾小時(shí),黑客就設(shè)計(jì)出了可以利用這個(gè)漏洞的代碼,可以把受此影響的設(shè)備組成一個(gè)僵尸網(wǎng)絡(luò)。
拉米無法獲得1990年代早期的源代碼修改日志,但他認(rèn)為,這個(gè)漏洞很可能是自己造成的,時(shí)間大概在1992年左右。這使之成為我們在《連線》雜志聽說過的最古老、最嚴(yán)重的未修補(bǔ)漏洞。我們向普渡大學(xué)教授尤金·斯帕福德(Eugene Spafford)求證此事,他也想不出比這時(shí)間更久遠(yuǎn)的漏洞。“我想不出還有哪個(gè)漏洞存在過這么長時(shí)間。”他說,“肯定還有很多比這時(shí)間更長的漏洞,但沒有一個(gè)能在時(shí)間長度和破壞力度上同時(shí)比肩這個(gè)漏洞。”
然而,對(duì)于熟悉“心臟流血”漏洞的人來說,這種怪誕的感覺卻似曾相識(shí)。那個(gè)漏洞是在廣泛使用的OpenSSL開源加密軟件中發(fā)現(xiàn)的。與OpenSSL相似,Bash也從未接受過全方位的安全審查,它的骨干開發(fā)人員幾乎沒有得到任何財(cái)務(wù)資助。可惜的是,這就是互聯(lián)網(wǎng)的真實(shí)故事。
開源軟件的謊言
在咨詢公司Errata Security CEO羅伯特·格雷厄姆(Robert Graham)看來,Shellshock揭穿了開源軟件的一個(gè)謊言:與封閉的專有軟件相比,開源代碼允許“很多眼睛”審查,而且可以更快地修復(fù)漏洞。這在業(yè)界被稱為“萊納斯定律”。“如果在過去25年間,真的有‘很多眼睛’盯著Bash,這個(gè)漏洞不可能這么長時(shí)間不被發(fā)現(xiàn)。”格雷厄姆上周在博客中寫道。
萊納斯·托瓦茲(Linux Torwalds)是Linux系統(tǒng)的創(chuàng)造者,而“萊納斯定律”正是以他的名字命名的。在托瓦茲看來,這一定律目前仍然有效。但缺陷在于,并非所有的開源項(xiàng)目都會(huì)受到“很多眼睛”的關(guān)注。“事實(shí)上,有很多代碼都沒有吸引太多人的關(guān)注。”他說,“許多開源項(xiàng)目都沒有太多開發(fā)者參與,甚至包括一些非常核心的軟件。”
不過,無論是否開源,任何軟件都會(huì)存在這種問題。畢竟,想要知道甲骨文數(shù)據(jù)庫那樣的封閉軟件究竟有多少漏洞,難度還會(huì)更大。大約10年前,由于部分軟件代碼沒有得到適當(dāng)?shù)膶彶椋④浢媾R了嚴(yán)重的安全問題。但當(dāng)“沖擊波”蠕蟲2003年肆虐Windows系統(tǒng)后,微軟將安全審查視為頭等大事。此后10年,該公司已經(jīng)提升了代碼的安全標(biāo)準(zhǔn)。微軟花費(fèi)數(shù)百萬美元用于安全審查,還聘請了很多白帽黑客來測試軟件。現(xiàn)在,開源軟件社區(qū)也開始采取同樣的措施。
今年5月,就在“心臟流血”漏洞曝光后不久,Linux基金會(huì)便投入了600萬美元用于加強(qiáng)多個(gè)開源項(xiàng)目的安全性,包括OpenSSL、OpenSSH,以及Network Time協(xié)議。但Bash并不在當(dāng)時(shí)的名單上。“這出乎我們的意料之外。”Linux基金會(huì)執(zhí)行理事吉姆·澤姆林(Jim Zemlin)說,“但我們的人員的確在與那些人聯(lián)系,看看我們能給予什么幫助。”
這很不錯(cuò),但關(guān)鍵在于,如何才能在漏洞被外界發(fā)現(xiàn)前加固互聯(lián)網(wǎng)?但愿Linux基金會(huì)、谷歌和Facebook能夠做出一些貢獻(xiàn)。
即使在Shellshock曝光后,福克斯依然為他設(shè)計(jì)的這個(gè)項(xiàng)目感到自豪。“他們用了27年才發(fā)現(xiàn)了一個(gè)漏洞,”他說,“按照使用范圍和漏洞發(fā)現(xiàn)的數(shù)量之間的比率來看,這實(shí)在是太驚人了。”