3
本文作者: 史中 | 2016-07-23 07:45 | 專題:100個(gè)頂級(jí)黑客的故事 |
一個(gè)真正的黑客,內(nèi)心絕不平靜。
如果你見到袁哥,幾乎會(huì)懷疑上述判斷。你很難把眼前這個(gè)和善,甚至有些木訥的大叔和那個(gè)當(dāng)年依靠一段代碼就可以隨意出入所有個(gè)人計(jì)算機(jī)和服務(wù)器的“賽博空間之神”聯(lián)系起來。
但請相信我,一旦走進(jìn)他的精神世界,你會(huì)看到驚濤駭浪。
相比文字和語言,袁哥更習(xí)慣用數(shù)字和代碼抒情。一個(gè)沉默的人不斷向世界索要答案,屢次掀翻了人們對賽博空間的根本認(rèn)識(shí)。
現(xiàn)實(shí)就是這么驚悚,我們愛這樣的劇情。
【袁哥 袁仁廣】
迷戀數(shù)學(xué)的人,身上都有一種冷峻的氣息。當(dāng)袁哥還是小袁哥的時(shí)候,確切地說在小學(xué)的時(shí)候,就已經(jīng)每天捧著數(shù)學(xué)理論的書籍,站在呼嘯而過的時(shí)間里。
我生在農(nóng)村,家里條件并不好,所以我只能在小學(xué)圖書館或鎮(zhèn)上的新華書店看我喜歡的書。幸好我關(guān)心的數(shù)學(xué)方面的書籍,銷量都不是太好。一毛錢、兩毛錢就可以買一本。但即使是這樣,我也很難買得起,只挑最喜歡的、最厚的同時(shí)也是最便宜的那一本買回家。
到了中學(xué)的時(shí)候,袁哥已經(jīng)開始看研究生的群論內(nèi)容,《布爾代數(shù)》《對稱恒等式》,你可以腦補(bǔ)同學(xué)們看他端著這些書時(shí)候的眼神。
買這些書,是需要代價(jià)的。
初中的時(shí)候,一支圓珠筆都是很好的文具了。有一次我和家里要了幾毛錢想去買一支圓珠筆。但是正好我考試成績很好,得到了學(xué)校獎(jiǎng)勵(lì)恰恰是一支圓珠筆。我告訴父母這就是我用錢買的筆,把省下來的錢買了一本書。
這次事件,以哥哥“告密”,袁哥被父親暴打結(jié)尾。那個(gè)年代,精神的脫貧走到了物質(zhì)脫貧的前面。袁哥雖因一本書挨打,顯然運(yùn)氣還不算太壞。
對數(shù)學(xué)和邏輯的偏執(zhí),讓他得以用獨(dú)特的視角和世界相處。
我有個(gè)同學(xué)的哥哥喜歡下象棋,所以我對象棋殘局很有興趣。下殘局的時(shí)候有一個(gè)重要的原則,那就是不能按照大多數(shù)人的思維考慮,而是要考慮所有邏輯上的可能性。比如在平時(shí),你不會(huì)輕易拿車給別人吃,但是在殘局里,你要考慮整個(gè)空間,其實(shí)每一步都可以抽象成布爾代數(shù)邏輯的一個(gè)步驟,用數(shù)學(xué)方法可以很好地解決這樣的謎題。
除了是殘局高手以外,少年袁哥還是撲克牌謎題高手,腦筋急轉(zhuǎn)彎高手。也許對于他來說,這個(gè)世界上沒有比嚴(yán)密的邏輯更性感的事物了。
【時(shí)任山東大學(xué)校長,數(shù)學(xué)家潘承洞】
因?yàn)檠瞿缴綎|大學(xué)校長、數(shù)學(xué)大師潘承洞的名望,嚴(yán)重偏科的袁哥依靠數(shù)學(xué)和物理兩門幾乎滿分的成績有驚無險(xiǎn)地考入了山東大學(xué)數(shù)學(xué)系。不過,到了大學(xué)的袁哥面臨一個(gè)棘手的問題,那就是幾乎所有的課程他都在高中階段完成了自學(xué)。坐在課堂上發(fā)呆睡覺對他來說是一種折磨。
“我不想上大課,我喜歡自學(xué),因?yàn)樽詫W(xué)學(xué)得更快,也更深。”他的理由簡單明了。袁哥在物色一個(gè)讓他著迷的新世界,計(jì)算機(jī)就這樣正式走進(jìn)了他的生命。
1993-1997年是袁哥的大學(xué)時(shí)代,當(dāng)時(shí)的賽博世界還沒有像今天這樣連接成浩瀚的海洋。計(jì)算機(jī)病毒往往通過軟盤從一臺(tái)計(jì)算機(jī)傳播到另一臺(tái)計(jì)算機(jī)。袁哥回憶,當(dāng)時(shí)就是想“搞明白病毒這塊兒”。一旦袁哥想搞明白某件事情,那就是真的要搞、明、白。你懂的。
由于病毒的特殊屬性,往往它們都藉由計(jì)算機(jī)底層邏輯傳播?!白冯S”病毒的袁哥,也來到了賽博空間的底層?!秴R編語言》《計(jì)算機(jī)原理》《操作系統(tǒng)原理》《磁盤控制器原理》,一節(jié)課都不去上的袁哥整日泡在圖書館里看這些書。
學(xué)校里上機(jī)是要錢的,所以我不能總是待在機(jī)房。我在機(jī)房里用 debug 反匯編操作系統(tǒng) BIOS 代碼,遇到需要仔細(xì)研究的代碼,我就用學(xué)校發(fā)的作業(yè)本手抄下來。有些代碼翻譯成高級(jí)代碼沒有幾行,但因?yàn)槲页亩际堑讓拥膮R編代碼,量非常大。后來我發(fā)現(xiàn)發(fā)的作業(yè)本都被我抄滿了。
對于他來說,大學(xué)四年獲得的最強(qiáng)技能,就是掌握了和計(jì)算機(jī)靈魂溝通的能力——二進(jìn)制語言。對于計(jì)算機(jī)來說,二進(jìn)制代碼就像每個(gè)人用來思考的“鄉(xiāng)音”,沒有任何一種語言比二進(jìn)制語言更能直指“機(jī)器之心”。如今的袁哥在看二進(jìn)制代碼的時(shí)候,可以自動(dòng)腦補(bǔ)出高級(jí)語言的源代碼,能夠像這樣以計(jì)算機(jī)的世界觀思考的人,全世界并不多。他就像一個(gè)“風(fēng)語者”,口中的一段抒情詩在普通人眼中卻像一陣風(fēng)。
計(jì)算機(jī)的底層原理很枯燥,但如果感興趣的話,你發(fā)現(xiàn)掌握這個(gè)原理能夠理解和控制計(jì)算機(jī)的基本運(yùn)行,這很舒服。如果你的計(jì)算機(jī)原理底子好,稍微加一些投入,基本都能成為大牛。
袁哥斬釘截鐵。
大學(xué)時(shí)代的袁哥不僅把各種編程語言爛熟于心,還從病毒身上見識(shí)了對這些語言最為詭譎精巧的運(yùn)用。袁哥回憶道:
例如當(dāng)時(shí)著名的幽靈病毒,可以自動(dòng)變形,這就突破了依靠病毒特征碼查殺的規(guī)則;
例如 DIR 病毒,可以徹底繞過防毒卡的機(jī)制,創(chuàng)造出一個(gè)新的感染方式。
對袁哥來說,跳出這個(gè)賽博世界的所有禁錮,是他內(nèi)心不滅的江流。除了攻破學(xué)校機(jī)房的防毒卡導(dǎo)致病毒肆虐以外,破解當(dāng)時(shí)叼炸天的殺毒軟件“KV300”也是他的行動(dòng)之一。
【上世紀(jì)末最流行的殺毒軟件(沒有之一):KV 300 殺毒軟盤】
當(dāng)時(shí)我在研究一個(gè)CPU運(yùn)行的特別機(jī)制:DMA。一些信息由 CPU 直接傳輸,可能要等待很長時(shí)間,所以可以由 DMA 控制器直接控制內(nèi)存實(shí)現(xiàn)輔助傳輸,為 CPU 分擔(dān)一些工作。我發(fā)現(xiàn)這個(gè)機(jī)制是可以被利用的,因?yàn)槊慨?dāng) DMA 傳輸完成之后,會(huì)產(chǎn)生一個(gè)中斷,如果在這個(gè)時(shí)候進(jìn)行攔截,就可以解析出它對磁盤的操作內(nèi)容。用這種方法循環(huán)往復(fù),就可以把整個(gè)殺毒軟盤的信息讀出來,完全繞過了它的加密技術(shù)。
當(dāng)時(shí)其他人做的破解盤,隔一段時(shí)間就會(huì)被江民公司封殺,但是我的破解盤,只要更新病毒庫,就可以一直正常使用。
對于當(dāng)年的“作品”,袁哥還是很滿意的。以至于當(dāng)他因?yàn)橛⒄Z沒過四級(jí)而拿不到畢業(yè)證和學(xué)位證的時(shí)候,他甚至想到,如果實(shí)在找不到工作,就去賣盜版盤算了?!叭思艺尜u260、360,我只要十分之一的價(jià)格,26、36,應(yīng)該生意不錯(cuò)?!?/p>
上天沒有給袁哥成為“盜版販子”的機(jī)會(huì),他還是在海信謀得了一份單片開發(fā)的職位。
熟悉另一位黑客啟蒙者張迅迪的人都知道,因?yàn)楣┞毜木频曜钤缃尤雽拵?,他才走上安全研究道路,?chuàng)立了黑客界的黃埔軍?!鞍踩裹c(diǎn)”。和張迅迪類似,袁哥接觸互聯(lián)網(wǎng),是因?yàn)?997年海信就申請了網(wǎng)絡(luò)專線,這使得袁哥可以在工作之余研究新的課題。這次,他想搞一下網(wǎng)絡(luò)協(xié)議。你應(yīng)該了解,按照袁哥的劇本,但凡被他“搞”,就一定被搞到外焦里嫩死去活來。
我學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的時(shí)候,就一邊看書記憶,一邊反匯編成二進(jìn)制代碼對照看。這就像學(xué)英語,一邊背單詞,一邊做對話才能記得牢。
這個(gè)因?yàn)闆]考過英語四級(jí)而沒畢業(yè)的黑客居然很有幽默感地拿英語舉例子。
現(xiàn)實(shí)世界有無數(shù)種邏輯,而每一種邏輯,只要它存在,哪怕多么離奇,多么難以想象,可能都是改變世界的武器。袁哥抓住了一扇看起來怪異的邏輯之門。
在 Windows 9X 中,很流行網(wǎng)絡(luò)共享文檔。我研究共享協(xié)議代碼的時(shí)候發(fā)現(xiàn),服務(wù)端對客戶端進(jìn)行密碼驗(yàn)證的時(shí)候,密碼長度校驗(yàn)是以客戶端發(fā)來的信息為準(zhǔn)。這件事情看上去非常奇怪。因?yàn)榻?jīng)驗(yàn)告訴我們,密碼有多長,一定是要以服務(wù)器上存儲(chǔ)的密碼為準(zhǔn)的。我馬上寫了驗(yàn)證代碼,從客戶端發(fā)送信息,告訴服務(wù)器只驗(yàn)證一個(gè)字節(jié),服務(wù)器果然就只驗(yàn)證一個(gè)字節(jié)。而一個(gè)字節(jié)只有256種可能,非常好破解了。
袁哥黑進(jìn)了同事和領(lǐng)導(dǎo)的電腦,一邊看著他們的工資條,一邊慨嘆世界的神奇,一邊立志要做一個(gè)網(wǎng)絡(luò)安全專家。
【windows 98 界面(謹(jǐn)供懷舊)】
這是他發(fā)現(xiàn)的第一個(gè)真正意義上的漏洞。從此之后,袁哥一發(fā)不可收拾。
他發(fā)現(xiàn)了名噪一時(shí)的 Windows 共享密碼驗(yàn)證漏洞,可以隨意訪問共享文件;
他參與創(chuàng)建國內(nèi)老牌安全公司綠盟,研究出很多高危 IIS 服務(wù)器漏洞,可以隨意訪問任何 IIS 網(wǎng)站服務(wù)器;
他研究每個(gè)個(gè)人電腦都使用的 RPC 協(xié)議,發(fā)現(xiàn)了很多嚴(yán)重的 RPC 服務(wù)緩沖區(qū)漏洞,可以直接突破所有 Windows 計(jì)算機(jī)的權(quán)限,實(shí)現(xiàn)遠(yuǎn)程入侵。
21世紀(jì)初,在迅速普及的互聯(lián)網(wǎng)大潮中,很多技術(shù)愛好者登陸黑客論壇時(shí),袁哥已經(jīng)成為了黑客界的一盞精神燈塔。
一開始,袁哥積極地把發(fā)現(xiàn)的漏洞提交給微軟,但彼時(shí)的微軟并不是如今那個(gè)愿意為漏洞買單的微軟,對方不置可否的態(tài)度讓袁哥逐漸喪失了提交的熱情,以至于2001年當(dāng)袁哥發(fā)現(xiàn)了可以用來攻擊任何一臺(tái)電腦的 RPC 服務(wù)的致命漏洞時(shí),他選擇了沉默。直到兩年之后,美國18歲少年杰弗里通過同樣的技術(shù)制造出沖擊波蠕蟲病毒,席卷半個(gè)世界。
雖然在2000年之前,微軟對于白帽子的態(tài)度一直是冷漠的,但這并不妨礙袁哥對網(wǎng)絡(luò)安全的探索。袁哥覺得,這是他人生最“高產(chǎn)”的時(shí)候。每天吃飯、睡覺、上廁所的時(shí)間都在想代碼。他在考慮的最核心的命題是——能否用一個(gè)通用的安全模型來輔助甚至代替自己挖掘漏洞。
想要理解袁哥的工具,需要先了解漏洞的本質(zhì)。
計(jì)算機(jī)的本質(zhì)是程序處理。根據(jù)輸入的數(shù)據(jù)不同,一串代碼會(huì)在計(jì)算機(jī)內(nèi)部打開無數(shù)不同的門,最終成為一個(gè)結(jié)果。而當(dāng)輸入的信息符合一定的特殊條件,它就會(huì)在計(jì)算機(jī)內(nèi)部找到一扇奇特的門并且試圖打開它。這時(shí),賽博世界就會(huì)遭遇崩潰,一個(gè)漏洞就此產(chǎn)生。
也就是說,找到這個(gè)特定的代碼,就找到了可以擊潰系統(tǒng)的漏洞。所以漏洞挖掘有兩個(gè)主要方向:
1、模糊測試。模糊測試是黑盒測試的一種,通過隨機(jī)給系統(tǒng)一些數(shù)據(jù),觀察系統(tǒng)是否有異常反應(yīng)。然而,一個(gè)系統(tǒng)是如此龐大,輸入的信息又有無數(shù)種可能,這個(gè)可能性空間之廣袤是指數(shù)級(jí)的。所以如果盲目測試,即使到宇宙毀滅,甚至都不能測試所有可能性的億億分之一。
2、白盒測試。通過研究系統(tǒng)的源代碼或二進(jìn)制代碼,發(fā)現(xiàn)其中的邏輯漏洞和潛在問題。這種方法同樣存在問題,那就是對于一個(gè)復(fù)雜程序來說,代碼量之巨大已經(jīng)超越了人的閱讀能力。而且一個(gè)程序中有很多是描繪界面內(nèi)容的代碼,這不是漏洞挖掘者關(guān)心的,而在閱讀之前,你是無法把這些無用的代碼剔除出來的。
【軟件運(yùn)行的邏輯樹示意圖】
袁哥的工具結(jié)合了模糊測試和白盒測試,他稱之為“數(shù)據(jù)流”的測試方法。
根據(jù)研究員的興趣點(diǎn),構(gòu)造有針對性的數(shù)據(jù),讓系統(tǒng)進(jìn)行處理。在處理的過程中,可以通過斷點(diǎn)在調(diào)試器里查看程序運(yùn)行的狀態(tài),而通過調(diào)試器里停留的代碼,可以反向推測出是哪段代碼在處理這段數(shù)據(jù)。用這種方法,不用通過大量的代碼審計(jì),就可以直接定位到關(guān)鍵的一段代碼,對這段代碼進(jìn)行反匯編,就可以讀懂它的“心思”。根據(jù)這段代碼,可以推測出它的所有邏輯分支,從而根據(jù)這些全量的分支有針對性地重新構(gòu)建新的數(shù)據(jù),進(jìn)行進(jìn)一步的有針對性的嘗試。
聽上去似乎并不困難,然而這個(gè)系統(tǒng)的最難之處還未到來。
雖然你能看懂這段代碼,但是你需要用數(shù)學(xué)的方法把這段代碼的內(nèi)容抽象出來,才能推演出它的所有邏輯分支,有些人類很好理解的邏輯,想要用程序自動(dòng)化求解,就需要很復(fù)雜的邏輯描述。而且針對每一個(gè)細(xì)小的邏輯點(diǎn),其后都可能跟隨著極多的路徑層級(jí),在這種情況下同樣有無數(shù)的可能性存在,這就涉及到約束求解的數(shù)學(xué)問題。
袁哥說。
正如盜夢空間中所展現(xiàn)的那樣,袁哥對于數(shù)字和世界邏輯的深刻見解,在賽博世界最深處的 Limbo,在只有幾個(gè)字節(jié)的騰挪空間里,給了他洞悉真相的判斷。
2008年左右,微軟難以抵擋無數(shù)漏洞的侵襲,開始逐步推出漏洞利用緩解措施。這類機(jī)制并不會(huì)減少漏洞出現(xiàn),而是讓漏洞的利用變得非常困難。它們就像一堵堵墻,你明知道漏洞就在對面,但是你卻無法接近。包括 DEP、ASLR、emet,包括后來推出的 cfi 都是有效的漏洞利用緩解措施。
袁哥站在墻后面,準(zhǔn)備“搞”一下。他突然覺得眼前的景象,像極了近十年前的一段記憶。
1997年的時(shí)候,宏病毒正在流行,這是一種利用腳本代碼執(zhí)行來搞破壞的病毒。由于病毒只能依靠文字屬性的腳本進(jìn)行攻擊,所以包括金山在內(nèi)的很多研究機(jī)構(gòu)覺得這類病毒的破壞力非常有限,甚至說它“只能用來惡作劇”。
但袁哥不這么認(rèn)為,他相信自己的判斷:“宏代碼雖然是解釋執(zhí)行,但解釋執(zhí)行也是執(zhí)行,和機(jī)器碼沒有本質(zhì)區(qū)別?!彼麑懥藥灼恼?,證明了把二進(jìn)制病毒代碼編譯成了純文本格式的可能性。也就是說,一個(gè)攻擊程序可以看上去完全是字母和數(shù)字的樣子。這大概相當(dāng)于把一把沙土通過改變原子的排列結(jié)構(gòu)而轉(zhuǎn)化成了金子,讓人嘆為觀止。
時(shí)光又回到2008年,袁哥突然發(fā)現(xiàn),自己在十年前提出的世界觀有可能從更高的維度繞過所有的漏洞緩解措施。那就是,用腳本(文字)代碼編寫攻擊程序,通過某種精巧的設(shè)計(jì),攻擊過程中根本不會(huì)觸發(fā)微軟用以防護(hù)的 DEP 芯片。
然而,把一串攻擊代碼變成純文本說起來簡單,實(shí)現(xiàn)起來卻非常繁雜。
兩三個(gè)月的時(shí)間,袁哥做了如下N件事:
通讀了 JavaScript 和 VBScript 的詳細(xì)原理,補(bǔ)齊了代碼編譯的短板;
找到了 IE 上的攻擊漏洞;
嘗試了無數(shù)攻擊路徑,配置了很多漏洞的攻擊組合;
完成攻擊代碼的編寫和調(diào)試。
這個(gè)攻擊方法,通殺從早期的 IE 3 到彼時(shí)剛推出的 IE 9 之間的所有版本。甚至兩年后 IE 10 推出的時(shí)候,在不改動(dòng)一個(gè)代碼的情況下, 仍然可以完成攻擊。這就是袁哥最引以為傲的技術(shù):DVE(數(shù)據(jù)虛擬執(zhí)行技術(shù) ),他本人稱之為“上帝之手”。
這就像在另一個(gè)更高維的空間里做出動(dòng)作,所有人都無法看到動(dòng)作的過程,只能承受動(dòng)作的結(jié)果。
他解釋說。
代碼,在袁哥眼里只是一種工具。站在“上帝位置”的人,甚至可以用一首詩,一首每個(gè)單詞都有意義的詩來擊潰一個(gè)系統(tǒng)。所謂“談笑間,檣櫓灰飛煙滅”不過如此。
然而,這個(gè)游走在賽博空間的上帝終究還是觸碰了人類的商業(yè)困境。2010年,微軟想要用35萬美金收購“上帝之手”——DVE 技術(shù),但是這個(gè)技術(shù)在袁哥心中,遠(yuǎn)遠(yuǎn)超過這個(gè)價(jià)值。這個(gè)生意并沒有成功,直到三年后,袁哥的好友,大名鼎鼎的黑客教主 TK 獨(dú)立向微軟提交了一套對抗技術(shù),獲得了那著名的十萬美金。由于其中涉及到的技術(shù)和 DVE 技術(shù)有交集,微軟才在某種程度上封堵了 DVE 攻擊的一部分。
2014年,袁哥選擇在互聯(lián)網(wǎng)上公布 DVE 的技術(shù)細(xì)節(jié),曾經(jīng)的上帝降落凡塵。
【湛盧劍(一稱湛瀘)】
湛瀘
袁哥在期待自己的下一個(gè) DVE。
為此,這位改寫了互聯(lián)網(wǎng)安全歷史的黑客宗師加盟騰訊,建立了全新的實(shí)驗(yàn)室,名曰“湛瀘”。
袁哥告訴雷鋒網(wǎng):“湛瀘,是春秋時(shí)代名匠歐冶子所鑄名劍?!柿x之劍,大巧若拙’是世人對湛瀘的評(píng)價(jià)。”這也是已過不惑之年的袁哥的某種內(nèi)心寫照。他需要一把劍,一把能再次穿透云霄的劍。
對于袁哥來說,雖然自己的靈感和成績無法被復(fù)制,但是他意識(shí)到,自己比以往更需要一個(gè)團(tuán)隊(duì)的配合。
現(xiàn)在的漏洞挖掘和利用已經(jīng)到了比較高級(jí)的階段,如果沒有團(tuán)隊(duì)和一整套技術(shù)力量支持,有些東西靠一個(gè)人的力量是做不到的。
他說。
至于加入騰訊的原因,袁哥給出了簡單的理由:“TK、吳石都在,我了解他們,對他們的為人都很認(rèn)同。安全這個(gè)行業(yè)就是人聚人?!?/p>
2016年3月,湛瀘實(shí)驗(yàn)室成立。袁哥站在賽博世界的邊疆,等待新的戰(zhàn)友。
那個(gè)讓他成為上帝的瞬間,終會(huì)歸來。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。