4
本文作者: 史中 | 2016-07-11 11:41 | 專題:100個(gè)頂級(jí)黑客的故事 |
閉上你的眼睛,想象你是一束電流,在無(wú)邊的迷宮里穿行。
你的面前有無(wú)數(shù)道門,而你每次只能選其一。每當(dāng)你穿過(guò)一道門,又會(huì)進(jìn)入新的房間。經(jīng)過(guò)無(wú)數(shù)次的選擇,你走出迷宮,仰望天日,從一個(gè)問(wèn)題變成一個(gè)答案。
沒(méi)錯(cuò),你正在模擬一段代碼輸入一個(gè)系統(tǒng)的過(guò)程。
但是這個(gè)世界的奇妙之處就在于,它并不永遠(yuǎn)給出合理的答案。當(dāng)你偶然打開(kāi)一扇門,會(huì)發(fā)現(xiàn)周圍的世界突然變得怪異,世界開(kāi)始崩塌。
于是,你發(fā)現(xiàn)了一個(gè)漏洞。
然而這個(gè)迷宮如宇宙般龐大,你根本不可能窮盡所有的路線。一個(gè)橫沖直撞的普通人可能窮其一生都無(wú)法遇到一扇漏洞之門。簡(jiǎn)單來(lái)說(shuō),一個(gè)黑客的全部手藝,就是比“愚蠢的人類”更知道怎樣找到那扇奇特的門。
騰訊科恩實(shí)驗(yàn)室首席科學(xué)家吳石就是這樣的一個(gè)人。但他又不僅僅是這樣的一個(gè)人。
因?yàn)樗瞪呐L(fēng)背后,隱藏著一套神秘的武器——用一條條數(shù)學(xué)公式模擬出整個(gè)賽博世界。這個(gè)武器曾經(jīng)幫助他找到微軟、谷歌、阿里、騰訊核心軟件中的總計(jì)數(shù)百個(gè)致命漏洞。
在這個(gè)世界上,幾乎無(wú)人能出其右。
【吳石】
你可以認(rèn)為計(jì)算機(jī)是數(shù)學(xué)的分支。因?yàn)榫幊坛S玫恼齽t表達(dá)式和數(shù)學(xué)中的“Kleene 代數(shù)”是完全等價(jià)的。而現(xiàn)在所有的計(jì)算機(jī)都是圖靈機(jī),它在本質(zhì)上和“Lamda 演算”是完全等價(jià)的。
吳石的眼神淡定而祥和,和那些看穿世界本質(zhì)的先知?jiǎng)e無(wú)二致。
對(duì)于一個(gè)擁有數(shù)百萬(wàn)行代碼的程序來(lái)說(shuō),沒(méi)有人可以用窮舉的方法來(lái)判斷它究竟是否存在漏洞。但是使用數(shù)學(xué)工具把它抽象出來(lái),而且通過(guò)經(jīng)驗(yàn)篩選,只模擬你關(guān)心的那一部分。這樣就把一個(gè)窮舉問(wèn)題,轉(zhuǎn)化成了運(yùn)算問(wèn)題。
吳石告訴雷鋒網(wǎng),由于公式和軟件之間是模擬映射,所以很可能在同樣的位置出現(xiàn)問(wèn)題。
例如在數(shù)學(xué)中存在“除零”問(wèn)題。如果零作為被除數(shù),將會(huì)導(dǎo)致運(yùn)算無(wú)法進(jìn)行。如果在模擬的公式里出現(xiàn)了除零問(wèn)題,那么在真正的軟件里非??赡艽嬖谕瑯拥膯?wèn)題。
“宇宙的秘密”在于:如何精確地為程序代碼找到一組神似的數(shù)學(xué)公式。
最開(kāi)始,我喂給這個(gè)程序隨即的數(shù)據(jù),看它是否會(huì)崩潰。
然后,我會(huì)詳細(xì)學(xué)習(xí)程序語(yǔ)言,例如 JavaScript,根據(jù)程序能聽(tīng)懂的語(yǔ)言,構(gòu)建一些奇怪的數(shù)據(jù)。
第三步,我會(huì)分析程序的處理過(guò)程,把輸入數(shù)據(jù)可能產(chǎn)生的情況分類
最后,我會(huì)根據(jù)程序的結(jié)構(gòu)對(duì)輸入的數(shù)據(jù)做變化,讓它盡可能地覆蓋奇葩的運(yùn)行狀態(tài)。
面對(duì)不斷涌來(lái)的奇葩數(shù)據(jù),程序也許會(huì)招架不住,內(nèi)心是崩潰的。這個(gè)崩潰的瞬間,正是吳石伺候已久的時(shí)機(jī)。在這個(gè)瞬間,賽博空間里突然閃現(xiàn)出一扇新的門。吳石打開(kāi)它,從代碼的海洋中猛然浮起,成為這個(gè)世界的上帝。
這就是這套系統(tǒng)打開(kāi)漏洞之門的全過(guò)程。
想必你也猜到了,吳石絕不是一個(gè)學(xué)渣,他畢業(yè)于復(fù)旦大學(xué)數(shù)學(xué)系。數(shù)學(xué)對(duì)別人來(lái)說(shuō)是計(jì)算工資的火柴棍,對(duì)于他來(lái)說(shuō),是轟開(kāi)世界的迫擊炮。
初二之前,我的數(shù)學(xué)非常差。但是那一年,我遇到一位很好的數(shù)學(xué)老師。從此對(duì)數(shù)學(xué)興趣濃厚,一發(fā)不可收拾。高二的時(shí)候,我拿了全國(guó)數(shù)學(xué)競(jìng)賽的一等獎(jiǎng)。
我就是一個(gè)學(xué)霸,吳石說(shuō)。
懷著滿腹信心,吳石進(jìn)入了復(fù)旦大學(xué)數(shù)學(xué)系。在這里,他明白了一個(gè)詞:絕望。“基礎(chǔ)數(shù)學(xué)專業(yè),你懂的。所有的人都是一等獎(jiǎng)進(jìn)來(lái)的,還有幾個(gè)是國(guó)際上拿過(guò)獎(jiǎng)的。我拼了命才能拿到中上的成績(jī),但是很多人只是考試前看一晚上書,就能考得很好?!?/span>
面對(duì)開(kāi)掛的同學(xué)們,吳石對(duì)數(shù)學(xué)的一腔熱情被兜頭澆滅。大二的時(shí)候,他決定尋找一個(gè)新的“寄托”,計(jì)算機(jī)進(jìn)入了他的視野。此時(shí)他人生的第一個(gè)漏洞已經(jīng)近在咫尺了。
【MUD(Multiple User Domain)多用戶虛擬空間游戲】
1996年,吳石癡迷于一個(gè)網(wǎng)絡(luò)游戲,名叫“MUD”。這是一個(gè)歷史悠久的純字符結(jié)構(gòu)的游戲。并不滿足于正常游戲的吳石動(dòng)起了“歪心”。他研究出了一種方法,可以黑進(jìn)游戲的服務(wù)器,并且成功修改了自己的游戲數(shù)據(jù)。
這個(gè)漏洞帶給了吳石極大的快樂(lè),某種程度上說(shuō),計(jì)算機(jī)開(kāi)始代替了數(shù)學(xué)在他生命中的位置。整個(gè)大三,吳石把全部的精力放在了去軟件公司打工,以至于幾乎沒(méi)有上一節(jié)課,在考試中掛了一科便是他的代價(jià)。
然而后來(lái)的事實(shí)證明,上帝總會(huì)給天才留下一條道路。
只是在他找到這條路之前,難免頭破血流。
吳石的第一份工作是軟件研發(fā),不過(guò)在工作之余仍然花很多時(shí)間在他喜歡的漏洞挖掘上,MSN、UC、QQ、旺旺等 IM 軟件不幸進(jìn)入了這個(gè)天才的射程。翻開(kāi)當(dāng)年的新聞,你依稀可以看到這些漏洞的威力。
只要給對(duì)方旺旺發(fā)送一條消息,就可以完全控制對(duì)方的主機(jī)。要命的是,旺旺可以給任何陌生人發(fā)消息,這就意味著掌握這個(gè)漏洞的黑客可以控制任何使用旺旺的人。阿里巴巴在修復(fù)的新版旺旺界面里,專門對(duì)吳石進(jìn)行了致謝。
只要給對(duì)方的QQ發(fā)送一條消息,就能夠得到對(duì)方電腦的權(quán)限,控制對(duì)方的電腦。這件事直接推動(dòng)了 TSRC(騰訊安全應(yīng)急響應(yīng)中心)的成立。有趣的是,當(dāng)年騰訊負(fù)責(zé)處理此事的,正是吳石的老友,現(xiàn)在 UCLOUD 的掌門人季昕華。
作為漏洞獵手的吳石,已經(jīng)顯露出鋒利的光芒。
這些漏洞,讓吳石獲得了去杭州和深圳免費(fèi)旅行的獎(jiǎng)勵(lì)。然而免費(fèi)的旅行似乎遠(yuǎn)不敵這些漏洞的真正價(jià)值,因?yàn)楹诋a(chǎn)愿意為這些即時(shí)通訊軟件的漏洞付更多的錢。
2006年的時(shí)候,季昕華告訴我,在南京有一個(gè)黑產(chǎn)小組,兩三個(gè)月的時(shí)間賺了六千萬(wàn)。
吳石成功引起了黑產(chǎn)的注意。
當(dāng)時(shí)經(jīng)常有人托朋友找到我,說(shuō)辭大概是:“給兩個(gè)漏洞,我們一起掙點(diǎn)錢,然后分你一大筆。
只要給出漏洞,他甚至不用多動(dòng)一根手指,就可以坐地分錢。但是吳石的選擇是“躲得遠(yuǎn)遠(yuǎn)的”。至于原因,吳石也很坦誠(chéng):“我對(duì)金錢的渴望沒(méi)這么嚴(yán)重,而且當(dāng)時(shí)我對(duì)自己的現(xiàn)狀很滿意,不愿意冒這個(gè)風(fēng)險(xiǎn)掙這個(gè)錢?!?/span>
那些人碰了一鼻子灰,也不再對(duì)這個(gè)“油鹽不進(jìn)”的漏洞獵人抱希望。
彼時(shí)的吳石也許沒(méi)有意識(shí)到,自己即將面對(duì)生活最為艱難的一年。因?yàn)樵?006年底他選擇了下海創(chuàng)業(yè)。
我辭職的那年,我的一位同事做到了部門 leader,他的年終獎(jiǎng)拿到1000塊,然而卻要給20個(gè)同事分。公司在走下坡路,房?jī)r(jià)卻越來(lái)越高。
這是吳石創(chuàng)業(yè)的理由,平凡一如你我。
他做了一款可以識(shí)別正常流量和p2p流量的系統(tǒng),可以幫助運(yùn)營(yíng)商清洗迅雷和電驢類軟件對(duì)帶寬的占用。整整九個(gè)月,這款軟件的銷售額為“0”。商業(yè)社會(huì)用這種方式對(duì)這位技術(shù)大牛做出了殘酷的評(píng)價(jià)。
我創(chuàng)業(yè)的九個(gè)月時(shí)間,總收入是五千塊,這五千塊還是我給別人做安全服務(wù)賺的,和我公司業(yè)務(wù)沒(méi)關(guān)系。不能說(shuō)窮途末路,但是是坐吃山空。
雷鋒網(wǎng)好奇,在最艱難的日子,他如何保守初心沒(méi)有被黑產(chǎn)所動(dòng)搖。然而他的回答是:
在我最窮的那幾個(gè)月,其實(shí)我掙扎過(guò),但是很可惜那時(shí)候沒(méi)有黑產(chǎn)找我。再后來(lái)我就開(kāi)始一個(gè)月可以掙好幾千美金,再后來(lái)一個(gè)月幾萬(wàn)美金,就不用了。
所謂造化弄人,看來(lái)不過(guò)如此。
和美金做朋友,源自吳石偶然提交給微軟的一個(gè)漏洞。這是一個(gè)非常高質(zhì)量的漏洞,可以實(shí)現(xiàn)系統(tǒng)提權(quán)。伴隨微軟致謝函而來(lái)的,還有著名的漏洞團(tuán)隊(duì) ZDI。
他們一開(kāi)始向我詢問(wèn)一些這個(gè)漏洞的細(xì)節(jié),末了非常遺憾地跟我說(shuō):“這么高質(zhì)量的漏洞,應(yīng)該給我們,我們會(huì)給你錢。”
吳石抱著懷疑的態(tài)度向他們提交了另外一個(gè)漏洞,他怕 ZDI 像國(guó)內(nèi)的廠商一樣:先拿到漏洞詳情,再告訴對(duì)方這個(gè)漏洞不符合要求,我們不要。經(jīng)過(guò)一個(gè)月的忐忑等待,吳石的賬戶里多了三千多美金。
“然后我用了一個(gè)月時(shí)間就找到了第二個(gè)漏洞。當(dāng)你沒(méi)飯吃的時(shí)候,你的動(dòng)作會(huì)很快的?!?strong>從這一刻起,他再也不是那個(gè)致謝函就可以打發(fā)的白帽子,而成為了一個(gè)佩戴著智慧之矛和尊嚴(yán)之盾的賞金獵人。
熱情被點(diǎn)燃的吳石開(kāi)始著手用更通用的方法挖掘漏洞,那個(gè)在他腦海里盤旋數(shù)年的漏洞數(shù)學(xué)模型終于被付諸實(shí)施。連續(xù)三四個(gè)月的時(shí)間,除了每天下來(lái)兩次買盒飯,睡幾個(gè)小時(shí)覺(jué),他所有的時(shí)間都在搭建這套系統(tǒng)。也許在冥冥之中他已經(jīng)能感受到,這個(gè)系統(tǒng)可以改變網(wǎng)絡(luò)安全的歷史。
吳石就這樣連續(xù)賣了數(shù)十個(gè)漏洞,然而由于這位大?;鹆θ_(kāi),一股腦提交的漏洞太多,甚至超過(guò)了微軟自己的安全團(tuán)隊(duì),這直接驚動(dòng)了微軟的“黨中央”。在2007年的時(shí)候,微軟找到了吳石,邀請(qǐng)他加入。
吳石的工作狀態(tài)是這樣的:
從來(lái)不去微軟中國(guó),也不去微軟美國(guó),每年部門領(lǐng)導(dǎo)從美國(guó)飛到吳石家里看他一次。而他每年20多個(gè)可用漏洞的工作量,累計(jì)用一個(gè)月就能完成。他用剩下的時(shí)間不斷改進(jìn)漏洞挖掘系統(tǒng),讀讀書,看看電影。順便用這些錢買了套房。
【2014年的 KEEN Team 陳良(左)方家宏(右)在 Pwn2Own】
KEEN Team 走進(jìn)了吳石的生活。王琦、陳良、方家宏一眾微軟同事建立的這家公司,在2013年之前經(jīng)營(yíng)著并不賺錢的企業(yè)安全業(yè)務(wù)。
受邀加入公司的“漏洞批發(fā)商”吳石建議,可以用手上的漏洞去參加由 ZDI 舉辦的著名黑客大賽 Pwn2Own。話雖如此,但是包括吳石本人在內(nèi),幾乎所有人都沒(méi)有漏洞利用的經(jīng)驗(yàn),“奉旨”編寫漏洞利用程序的陳良也滿心忐忑。
然而,數(shù)學(xué)再一次拯救了吳石,還有 KEEN Team。
UAF 漏洞(Use After Free),是系統(tǒng)漏洞的一個(gè)類型,這種漏洞通過(guò)對(duì)兩個(gè)函數(shù)進(jìn)行操作,某個(gè)數(shù)值在第一個(gè)函數(shù)里被釋放,卻在第二個(gè)函數(shù)里被引用,由此造成崩潰,閃現(xiàn)出那道漏洞之門。
2013年8月的一天,吳石突然拍案而起。他發(fā)現(xiàn)了一種數(shù)學(xué)規(guī)則,可以讓這種 UAF 漏洞大規(guī)模地被產(chǎn)生;而諸多的 UAF 漏洞,有一定比例可以在特殊情況下被利用。
當(dāng)時(shí)除了我們還有一個(gè)老外在研究同樣的利用方式,但是這種實(shí)現(xiàn)并不容易,他最后以失敗告終。當(dāng)陳良寫出第一個(gè)應(yīng)用實(shí)例的時(shí)候,我就知道這個(gè)事能成了。公司當(dāng)時(shí)很窮,但我們還是在路邊吃了烤串來(lái)慶祝。
吳石緊急找到了國(guó)內(nèi)著名黑客會(huì)議Xcon的掌門人呆神,在會(huì)議開(kāi)始前十幾天要求“加塞”來(lái)演講這個(gè)重大的成果。KEEN Team 由此聲名鵲起,第二年全世界的黑客用類似方法掀起了挖掘 IE 漏洞的狂潮。
懷揣這樣的“硬貨”,團(tuán)隊(duì)決定參加當(dāng)年11月舉辦的 Pwn2Own Mobile。甚至出乎自己的意料,他們用兩種不同的姿勢(shì)搞定了 Safari,拿到了數(shù)萬(wàn)美金的獎(jiǎng)金。
就在團(tuán)隊(duì)回國(guó)不久,騰訊向他們伸出了橄欖枝。至此,包括吳石在內(nèi)的 KEEN Team 的核心成員加盟騰訊,成立了科恩實(shí)驗(yàn)室。
【2016年 騰訊戰(zhàn)隊(duì)拿到 Pwn2Own 冠軍】
從2013年開(kāi)始,Pwn2Own 成為了科恩實(shí)驗(yàn)室的保留節(jié)目。2016年,團(tuán)隊(duì)達(dá)到了前所未有的高度。在3月的 Pwn2Own 大賽上,科恩實(shí)驗(yàn)室和騰訊電腦管家組成的聯(lián)合戰(zhàn)隊(duì) Sniper 一舉拿下了 Edge、Safari、Chrome,總分38分,以超越第二名13分之多的優(yōu)勢(shì)摘得了“世界破解大師”。
“每一個(gè)破解過(guò)程都用到不止一個(gè)漏洞,所有的破解中都至少有一個(gè)我的系統(tǒng)跑出來(lái)的漏洞?!闭f(shuō)吳石是科恩實(shí)驗(yàn)室的“兵工廠”毫不為過(guò)。
但是吳石仍然心存遺憾。
每次 Pwn2Own 之前, 廠商都會(huì)把他們掌握的漏洞在最后時(shí)候全部修復(fù),目的就是為了讓破解的團(tuán)隊(duì)措手不及。如果已經(jīng)準(zhǔn)備好的漏洞被修補(bǔ)了,那么留給團(tuán)隊(duì)重新發(fā)現(xiàn)漏洞、寫利用程序的時(shí)間就只剩下幾天了。
今年破解 Flash 的是趙澤光,比賽之前三天,Adobe 放出“大補(bǔ)丸”(漏洞補(bǔ)?。疽瓜螺d補(bǔ)丁的趙澤光早晨告訴我,這個(gè)漏洞被修補(bǔ)了。雖然當(dāng)時(shí)我們手里還有一堆 Flash 的漏洞,但是只靠他一個(gè)人時(shí)間已經(jīng)不夠了。于是我和幾個(gè)年輕人都加入進(jìn)來(lái),三天三夜沒(méi)睡覺(jué),一直在嘗試各種方法重新攻破 Flash。
在兩天多的時(shí)候,我提出來(lái)一種新的利用方法,但是所有的人都已經(jīng)沒(méi)體力去驗(yàn)證了。最后的比賽,我們以失敗告終。但是回來(lái)之后只用了兩周,我們就采用之前提到的那種方法成功攻破了 Flash。
吳石轉(zhuǎn)了轉(zhuǎn)水杯,笑了。
那個(gè)看到數(shù)字兩眼放光的學(xué)生,
那個(gè)在賽博世界里用漏洞射落美金的賞金獵人,
那個(gè)為了追趕房?jī)r(jià)而身赴商海的創(chuàng)業(yè)者,
那個(gè)曾為了生計(jì)而在黑產(chǎn)邊緣掙扎的凡人,
那個(gè)四個(gè)月不出門和“0”“1”一起睡覺(jué)的瘋子,
那個(gè)坐在路邊一邊擼串一邊暢想未來(lái)的做夢(mèng)者,
那個(gè)科恩實(shí)驗(yàn)室的首席科學(xué)家,
那個(gè)和無(wú)數(shù)漏洞戰(zhàn)斗的吳石,
至此全部站到我們面前。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。