最近IT業(yè)界流行著一個(gè)段子:
“你知道為什么新的Windows系統(tǒng)要跳過(guò)Windows 9直接命名為Windows 10嗎?因?yàn)楹芏嘬浖谂卸ú僮飨到y(tǒng)類型時(shí)是這樣寫(xiě)的—if(version.StartsWith(“Windows 9”)) { /* 95 and 98 */ } else { ”。
翻譯成人話就是:如果這些軟件看見(jiàn)一個(gè)系統(tǒng)名字以Windows 9開(kāi)頭,它們就會(huì)認(rèn)為這是Win 95或者Win 98。于是,為了避免被錯(cuò)認(rèn)成20年前的老古董,微軟只好避開(kāi)這個(gè)“雷區(qū)”,將新系統(tǒng)命名為Windows 10。
這個(gè)理由乍聽(tīng)上去很扯,因?yàn)槭煜ひ稽c(diǎn)編程的人都看得出來(lái),這個(gè)代碼寫(xiě)得太簡(jiǎn)單粗暴了,幾乎是“災(zāi)難編程”的范例,市面上隨便抓一個(gè)程序員都不會(huì)這么干。但人們很快發(fā)現(xiàn),著名的OpenJDK(Java開(kāi)發(fā)環(huán)境的開(kāi)源版本)里真的就是這么寫(xiě)的!于是段子一下子變成了現(xiàn)實(shí):就算OpenJDK立馬修改這一點(diǎn),微軟也不可能要求全球數(shù)十上百萬(wàn)個(gè)使用OpenJDK進(jìn)行開(kāi)發(fā)的軟件工程師及時(shí)跟進(jìn),唯一可行的做法,就是避開(kāi)Windows 9這個(gè)名字。
從這個(gè)故事中我們可以總結(jié)兩點(diǎn):一,再厲害的軟件都可能包含低級(jí)錯(cuò)誤;二,新科技有時(shí)候不得不為老錯(cuò)誤買單。
這兩條規(guī)律的適用范圍很廣,新近頻被曝光的“破殼” 漏洞便是一個(gè)絕佳的示范。
根據(jù)Rapid7安全公司的提示,這個(gè)被命名為“破殼”(shellshock)的CVE-2014-6271漏洞的嚴(yán)重程度為10,是已知漏洞中最高的一種,相比2014年4月的“心臟流血”漏洞嚴(yán)重了好幾個(gè)級(jí)別;與此同時(shí),它的利用復(fù)雜程度卻是“低”,黑客可以輕松地用它發(fā)動(dòng)攻擊。
具體來(lái)說(shuō),這個(gè)漏洞存在于Linux系統(tǒng)被廣泛使用的開(kāi)源軟件Bash上。Bash是一款用于控制Linux計(jì)算機(jī)命令提示符的流行軟件,就是所謂的“殼”(shell)?;赨nix平臺(tái)的操作系統(tǒng)絕大部分都采用了Bash軟件,包括Ubuntu等Linux系統(tǒng)和蘋果的OS X系統(tǒng),這就意味著,這個(gè)漏洞并非像“心臟流血”一樣是純粹的服務(wù)器端漏洞,而會(huì)對(duì)服務(wù)器端和客戶端兩方面都造成影響。
另外,“心臟流血”漏洞只是允許黑客非法取得服務(wù)器中儲(chǔ)存的數(shù)據(jù),從而有可能獲得網(wǎng)站敏感信息,而“破殼”漏洞則允許黑客直接獲得計(jì)算機(jī)的控制權(quán)—黑客只需要復(fù)制粘貼一行代碼,就能取代原主人而對(duì)計(jì)算機(jī)發(fā)號(hào)施令。
堵上這個(gè)漏洞比想象中更加困難。紅帽安全公司和Fedora都在漏洞公布后的第一時(shí)間發(fā)布了補(bǔ)丁,蘋果也為Mac OS X發(fā)布了專用補(bǔ)丁。但安全專家查驗(yàn)后表示,這些補(bǔ)丁并不完整。截至漏洞曝光20天后,黑客仍可以繞過(guò)補(bǔ)丁通過(guò)“破殼”漏洞侵入目標(biāo)計(jì)算機(jī)。
最糟糕的是,這個(gè)漏洞已經(jīng)存在25年了,相關(guān)代碼的引入時(shí)間是1989年8月。也就是說(shuō),在這25年里,無(wú)數(shù)頂級(jí)程序員為Bash貢獻(xiàn)代碼,利用和改造它,卻沒(méi)人對(duì)這個(gè)開(kāi)源軟件進(jìn)行過(guò)一遍徹底的代碼審查—所有人都默認(rèn)它是一個(gè)成熟的軟件,卻忘了它誕生于互聯(lián)網(wǎng)仍充滿信任的黃金時(shí)代。在那個(gè)時(shí)代,人們對(duì)安全并沒(méi)有如此重視,代碼審查也還沒(méi)有列入工程規(guī)范。
這就成了一個(gè)無(wú)解的兩難困局:一方面,新科技并非空中樓閣,它必須踩在舊時(shí)代技術(shù)和產(chǎn)品構(gòu)筑的基石之上;另一方面,時(shí)代在進(jìn)步,舊產(chǎn)品某些看似微小的瑕疵卻未必符合新的標(biāo)準(zhǔn),于是,新科技就必須不停地為舊賬買單。