漏洞簡史:為什么一個(gè)漏洞值100萬美金
黑客這個(gè)詞很容易被誤解。它翻譯自「Hacker」,最早將自己視為黑客的一批人,是20世紀(jì)60年代麻省理工學(xué)院搞軟件開發(fā)和電子工程學(xué)的學(xué)生。他們都很聰明,對已有技術(shù)和規(guī)...
黑客這個(gè)詞很容易被誤解。
它翻譯自「Hacker」,最早將自己視為黑客的一批人,是 20 世紀(jì) 60 年代麻省理工學(xué)院搞軟件開發(fā)和電子工程學(xué)的學(xué)生。他們都很聰明,對已有技術(shù)和規(guī)則不屑一顧,惡作劇和電話線路入侵是黑客文化的一部分。蘋果公司的兩名創(chuàng)始人史蒂夫·沃茲尼亞克和史蒂夫·喬布斯在 80 年代也是兩位電話線路入侵者,可以說,家釀?dòng)?jì)算機(jī)俱樂部和之后出現(xiàn)的家用電腦其實(shí)都算是黑客文化的產(chǎn)物。
轉(zhuǎn)變發(fā)生在 1983 年,一群年輕黑客非法入侵公司、政府和學(xué)術(shù)機(jī)構(gòu),并開始試探性地進(jìn)入互聯(lián)網(wǎng)先驅(qū) ARPA 網(wǎng),他們被捕后美國新聞界想不出一個(gè)名字去稱呼他們,于是就用他們自稱的黑客。
從那一刻起,黑客一詞就包含兩種含義:一種指靠自身努力不斷進(jìn)取的天才程序員,另一種是電腦入侵者。隨著計(jì)算機(jī)和互聯(lián)網(wǎng)的成熟,防護(hù)計(jì)算機(jī)可以賺錢,于是一批人開始從事網(wǎng)絡(luò)安全工作,并稱自己為白帽黑客。白帽指過去牛仔片中那些彪悍的男主角,這些人開始將電腦技能用在真理和正義的一方。(以上關(guān)于黑客歷史的內(nèi)容摘自《掘金黑客》一書。)
tombkeeper 是中國白帽黑客中一位響當(dāng)當(dāng)?shù)娜宋?,多?shù)時(shí)候人們叫他 TK,真名是于旸,現(xiàn)在是騰訊玄武實(shí)驗(yàn)室負(fù)責(zé)人。他在互聯(lián)網(wǎng)安全峰會(huì) CSS 上講了漏洞的歷史:漏洞很久以前就被發(fā)現(xiàn)并被利用,但安全人員真正反擊回去是 20 年前。
以下根據(jù)他的現(xiàn)場演講編輯:
冷戰(zhàn)時(shí)的計(jì)算機(jī)入侵
1986 年,克格勃的一個(gè)人從一所西德學(xué)校通過德意志聯(lián)邦郵局再通過一條衛(wèi)星線路接入了美國國家實(shí)驗(yàn)室,這個(gè)實(shí)驗(yàn)室從事與核技術(shù)相關(guān)的研究,克格勃的這個(gè)攻擊者接入實(shí)驗(yàn)室后利用了一個(gè) Emacs 的漏洞,獲得了主機(jī)權(quán)限,然后在機(jī)器中搜尋核技術(shù)相關(guān)資料。
這聽上去仿佛是電影中的場景,而且你絕對不會(huì)想象這發(fā)生在 1986 年。這個(gè)攻擊者被抓住的原因很有意思,因?yàn)樵?1986 年的時(shí)候,計(jì)算機(jī)還是那種大型機(jī),每一個(gè)人按照使用時(shí)間付費(fèi),最后管理這個(gè)大型機(jī)的科學(xué)家,在給他的領(lǐng)導(dǎo)報(bào)帳時(shí)候發(fā)現(xiàn)有 0.75 美元的使用費(fèi)對不上,最后查帳把這個(gè)攻擊者查出來了。
有人很早就意識(shí)到計(jì)算機(jī)安全問題,但沒有引起足夠重視
再把時(shí)間往回推,在 1972 年,James P Aederson 說了這么一段話:
函數(shù)的代碼沒有正確地檢查源地址和目的地址,允許用戶覆蓋部分系統(tǒng)數(shù)據(jù)。這可能被用來向系統(tǒng)中注入代碼,從而使用戶獲得機(jī)器的控制權(quán)。
——《計(jì)算機(jī)安全技術(shù)規(guī)劃研究》James P. Anderson
非常準(zhǔn)確而清晰的描繪了內(nèi)存破壞類的成因及危害。我們今天談?wù)摵陀?jì)算機(jī)安全有關(guān)的各種各樣的概念,在 1972 年的這份規(guī)劃當(dāng)中已經(jīng)寫的非常清晰了。
但意識(shí)到安全問題和讓別人感知風(fēng)險(xiǎn)之間有很大差距,他當(dāng)時(shí)的規(guī)劃沒有引起足夠的重視。
病毒攻擊來臨時(shí),人們對此毫無概念
直到 1988 年,Morris 蠕蟲在數(shù)小時(shí)內(nèi)感染了 10% 的機(jī)器,世界感覺到了這件事的威力。這是世界上最早的經(jīng)由互聯(lián)網(wǎng)傳播的計(jì)算機(jī)病毒之一。
這個(gè)截圖就是當(dāng)時(shí)電視上報(bào)道這件事時(shí)的一個(gè)新聞原始截圖。從這個(gè)播音員的著裝風(fēng)格可以看出那個(gè)年代的風(fēng)格,當(dāng)時(shí)人們對這類事件的認(rèn)識(shí)非常不準(zhǔn)確。他們用的詞是 Virus,這就是當(dāng)時(shí)大眾對這個(gè)事情的認(rèn)識(shí)。
(Morris 蠕蟲病毒爆發(fā)時(shí),世界對計(jì)算機(jī)病毒還沒什么概念,怎么稱呼它都不是一件容易事。)
即使在這樣全球性的事件后,多數(shù)程序員認(rèn)為緩沖區(qū)的溢出只會(huì)導(dǎo)致程序崩潰,只有非常少的人知道相關(guān)技術(shù)是什么,這些技術(shù)仍然悄悄地在地下室中流傳。
一篇文章讓大家開始了解緩沖區(qū)溢出
從 1988 年再往后七年,到 1995 年,世界上才出現(xiàn)第一篇公開描述緩沖區(qū)溢出相關(guān)技術(shù)的文章,這個(gè)時(shí)候搞技術(shù)的人可能才第一次有機(jī)會(huì)去了解這些東西。
這篇文章叫《How to write Buffer Overflows》,作者 mudge,他的真名是 Peiter Zatko。在這篇文章之前,沒有攻和防兩個(gè)方向,是單方向的大屠殺,被攻擊方毫無還手之力。
James 在 24 年前寫下的那段話在此時(shí)才真正被人們廣為接受,攻防雙方在那個(gè)時(shí)候展開較量。1995 年到今天 2015 年整整 20 年。
(Peiter Zatko,世界上第一篇公開描述緩沖區(qū)溢出相關(guān)技術(shù)的文章作者,左邊是他 2009 年加入美國國防部時(shí)拍攝的照片,右邊是早年照片。)
一開始大家認(rèn)為漏洞只能在 Unix 系統(tǒng)上實(shí)現(xiàn),因?yàn)?Windows 系統(tǒng)還不確定,直到 1988 年 1999 年出現(xiàn)兩篇文章討論了 Windows 區(qū)溢出才知道不是這么回事。
防守技術(shù)從緩慢進(jìn)化到快速更新
1997 年 Sun 公司在 Solaris 2.5 當(dāng)中借助 SPARC 處理器的新特性,實(shí)現(xiàn)了禁止在堆棧上執(zhí)行代碼,讓馮諾伊曼結(jié)構(gòu)在邏輯上變成了某種程度的哈佛結(jié)構(gòu),這個(gè)處理器第一次在邏輯上可以把代碼和數(shù)據(jù)存儲(chǔ)區(qū)分開。
同一年 StackGuard 技術(shù)誕生,軟硬兩類技術(shù)在一年誕生了。
個(gè)人電腦真正用上這樣的防御技術(shù)是在 2003 年,由 AMD 引入,同年,微軟在新版 Visual Studio 中增加了類似 StackGuard 的保護(hù)機(jī)制。
從 1995 年到 2003 年,防守技術(shù)的發(fā)展并不是特別快。03 年之后攻防雙方的較量進(jìn)入白熱化狀態(tài)。
從服務(wù)器到個(gè)人 PC,之后戰(zhàn)火又燒到移動(dòng)端。以安卓為例,在攻擊壓力之下,安卓在 09 年引入 ProPolice,接下來每一年都引入若干種新的防御措施。
漏洞史上最高收購價(jià)——100 萬美金
到今天無論是攻擊技術(shù)還是防御技術(shù),都已經(jīng)進(jìn)入綜合、融合、協(xié)同、多維的階段,單點(diǎn)嚴(yán)防死守的思路基本不被業(yè)界人認(rèn)同。我們有一個(gè)很常說的話,沒有什么東西是一招鮮吃遍天。
現(xiàn)在對于漏洞的防御思路是首先盡可能減少漏洞的出現(xiàn),但完全禁止是做不到的,那怎么辦?在假設(shè)我們沒辦法完全禁止漏洞出現(xiàn)的前提下,想辦法讓漏洞的利用過程變的困難,讓利用過程變的不穩(wěn)定,成功率下降,攻擊的成本提高。
這兩天有一個(gè)新聞,美國一家專門收漏洞賣給政府和軍方的公司剛剛給出漏洞收購史上最高價(jià)——100 萬美金。這個(gè)漏洞是只要你用蘋果手機(jī)瀏覽一個(gè)網(wǎng)頁然后這個(gè)手機(jī)會(huì)被別人完全控制。這個(gè)漏洞看上去很可怕,但另一方面,它的成本非常高,所以這種技術(shù)不太有人用來侵害普通人。這就是這么多年防御方不斷努力的結(jié)果,把一個(gè)漏洞的價(jià)錢抬到這么高。
第二個(gè)叫全時(shí)對抗。軟件的整個(gè)生產(chǎn)過程,從設(shè)計(jì)階段到開發(fā)、編譯和運(yùn)行,安全都會(huì)介入。從設(shè)計(jì)時(shí)安全思路進(jìn)入,開發(fā)時(shí)相關(guān)工具介入,編譯時(shí)使用安全特性的編譯軟件,然后在運(yùn)行啟用相關(guān)的安全工具,這個(gè)是全時(shí)對抗。
另外就是多維協(xié)同,多維協(xié)同不只是著眼于技術(shù)層面,不只是用自身力量,而要考慮內(nèi)部和外部的力量,通過業(yè)界合作和社區(qū)建設(shè),用咱們的話說就是打人民戰(zhàn)爭。為什么要變成這樣呢?因?yàn)樾问揭呀?jīng)不一樣了。
It isn't a bunch of kids anymore. These are people who do this for a living.
這件事再也不是兒戲。有人以此為生。
蘭德公司研究員馬丁·C·利比基講了這樣的話,以前安全就是一些小孩鬧著玩,今天不是這樣了,有一些人干這個(gè)是為了生活,他就指這個(gè)吃飯,所以已經(jīng)變成一件非常嚴(yán)肅的事。
回顧過去 20 年,實(shí)際上我想說的是我們要想一想下一個(gè) 20 年安全應(yīng)該怎么辦,這也是需要在座的各位大家一起努力的。