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