Intel PT的使用以及PTFuzz、NEUFuzz



前言

在之前關(guān)于AFL的程序執(zhí)行路徑在AFL第三節(jié)講過详羡,首先是afl-gcc對每個基本塊隨機賦予一個隨機值州弟,然后在執(zhí)行的時候钧栖,通過fork()后的“子進程”去執(zhí)行插樁的部分代碼,把隨機值亦或后的字節(jié)加一婆翔,通過共享的bitmap存儲區(qū)域就可以知道執(zhí)行當前種子的bitmap(執(zhí)行路徑)是多少了拯杠。但是存在幾點問題:1、bitmap利用率啃奴,bitmap大小為65536個字節(jié)潭陪,有些程序的邊可能會超過(概率很小)最蕾,但是也存在很多利用率不足的問題依溯。2、可能存在碰撞瘟则,因為隨機分配的值就有可能相同黎炉,其次異或操作之后可能會相同,那么兩條不同的邊對應(yīng)的值卻相等了醋拧。
有一個解決方法就是使用Intel Processor Tracing慷嗜,Intel研發(fā)的一個程序跟蹤功能,這個部件可以直接對二進制程序進行跟蹤丹壕。由于程序執(zhí)行的時候庆械,它本身的代碼在CPU中的地址是固定的,PT可以返回CPU中的數(shù)據(jù)流操作雀费,通過篩選程序的地址的包信息干奢,就可以獲取程序的操作流從而獲得程序執(zhí)行路徑。舉個例子盏袄,hello world這個程序運行的時候忿峻,基本塊在CPU中的id是45-90,那么運行這個程序的時候使用PT就可以捕獲CPU中的執(zhí)行數(shù)據(jù)辕羽,可能有很多包(包括鼠標逛尚、顯示器、其他程序刁愿、終端等等)绰寞,篩選id在45-90的PT包,這些數(shù)據(jù)包就是運行“hello world”產(chǎn)生的包信息,然后對包信息中的基本塊id就可以描繪出程序執(zhí)行的邊路徑了滤钱。因為一個程序載入內(nèi)存運行后地址是固定的觉壶,準確無碰撞,且不依靠源碼的插樁件缸,還比AFL自帶的QEMU模式快不少铜靶,成為一個不錯的方法。
我在這就介紹以下在fuzz中使用的一個PTFuzzer他炊、NEUFuzzHonggfuzz争剿。



PTFuzz

這個工具是在AFL的基礎(chǔ)上做出了改進,把AFL的基礎(chǔ)上去除了插樁的依賴痊末,把run_target里面的fork子進程跑插樁代碼部分改成fork一個子進程利用PT收集包信息蚕苇、篩選包信息,根據(jù)包信息獲取當前種子的執(zhí)行路徑凿叠。
簡單說一下他的創(chuàng)新點:

利用PT包信息

通過PT部件可以獲得兩個種類的包信息:基本執(zhí)行信息(時間戳計時器涩笤、包流邊界等)和控制流信息(時間、程序執(zhí)行流等)幔嫂。PT提供了三類調(diào)用包:直接調(diào)用辆它、間接調(diào)用和遠轉(zhuǎn)換調(diào)用誊薄。當捕獲了這樣的Change of Flow Instructions(COFI)包時履恩,就可以獲取基本塊的跳轉(zhuǎn)信息,即邊信息呢蔫。

不同于統(tǒng)一大小的bitmap

AFL中的bitmap時固定大星行摹(65536),而PTfuzz會在初始化載入二進制程序的時候片吊,就構(gòu)建了COFI map绽昏。利用python的CLE和capstone庫把程序中text部分的調(diào)用地址記錄下來并且存放在MSR寄存器,那么MSR寄存器就可以用來篩選PT的包信息俏脊。(MSR寄存器是PT指定可以實現(xiàn)篩選功能的寄存器)全谤。


在實驗部分,分為對有源碼的代碼進行測試比較和對二進制程序進行測試比較爷贫。
在有源碼可插樁的代碼比較中认然,PTfuzz比AFL稍慢(有python編寫的decoder的腳本收集PT包信息并處理得到運行路徑),但是可以測試出更多漏洞漫萄,并且在單位時間發(fā)現(xiàn)更多的邊卷员。
在無源碼的二進制程序比較中,PTfuzz優(yōu)于QEMU模式的AFL腾务,QEMU需要使用虛擬化技術(shù)毕骡,性能比AFL源碼插樁速度慢2到5倍,因此發(fā)現(xiàn)的邊信息也就比PTFuzz少了。
最后說一下PTFuzz文章中說的不足未巫,需要使用包含PT功能的Intel芯片窿撬,內(nèi)核版本有限制,必須在linux使用叙凡,這些局限導致了PTFuzz不能廣泛使用尤仍。



NeuFuzz

這個fuzzer看名字是深度網(wǎng)絡(luò)訓練,由兩部分組成狭姨,offline的深度學習模塊和正常的PTFuzz部分宰啦,在PTFuzz的種子選取部分,通過加入預測模型對種子進行排序饼拍,預測模型認為是1(vulnerable seed)的種子會優(yōu)先執(zhí)行赡模,更快地發(fā)現(xiàn)crash。


image.png

訓練模型

在模型訓練方面师抄,他選了NIST SARD項目(人工合成注入的漏洞)漓柑、Gtihub項目和Exploit-DB的項目。認為存在漏洞或者有注入漏洞的為vulnerable 程序叨吮,打過補丁或者沒有注入漏洞的程序為non-vulnerable程序辆布。一共收集了28475個vulnerable和27436個non-vulnerable。
然后通過使用POC(能觸發(fā)漏洞的輸入)跑上面這些程序茶鉴,如果觸發(fā)漏洞锋玲,程序執(zhí)行路徑稱為vulnerable path,反之涵叮,為non-vulnerable path惭蹂。同時用PT來獲取執(zhí)行路徑。
再把獲取到的執(zhí)行路徑轉(zhuǎn)換成向量形式割粮。NEUFuzz選擇了Word2vec(這個機器學習對向量長度有一定限制盾碗,輸入一大就不行了)。每條指令的地址(如0x223344)就轉(zhuǎn)換成向量舀瓢,路徑中指令數(shù)的上限為n伦乔,不足n的用0向量補齊祝峻。在Word2vec轉(zhuǎn)換后盛龄,使用LSTM(長短期記憶網(wǎng)絡(luò))這個深度學習網(wǎng)絡(luò)進行學習夜牡。在后面的結(jié)果顯示他的模型準確率高達92%。

online fuzz

之前提到過PT利用TNT(jnz朵锣,je這樣的直接調(diào)用)谬盐、TIP(call,jmp這樣的間接調(diào)用)和FUP(exception诚些、interrupt這樣的遠程調(diào)用)獲取hit的基本塊并記錄邊信息飞傀。NEUFuzz則繼續(xù)利用PT皇型,在對種子重跑獲取執(zhí)行路徑后使用預測模型判斷種子是否是vulnerable。

結(jié)果

NEUFuzz使用和PTFuzz一樣的實驗程序——LAVA-M以及一些實際存在程序(libtiff砸烦、binutils等)弃鸦。效果非常好,可能是因為有深度網(wǎng)絡(luò)的輔助幢痘,在PTFuzz基礎(chǔ)上更快找到crash唬格。很明顯,因為PTFuzz是coverage-oriented颜说,這是改善了覆蓋信息购岗,NEUFuzz在此基礎(chǔ)上還做了crash-oriented。
個人覺得他這樣的實驗不是很好门粪,雖然深度學習網(wǎng)絡(luò)的應(yīng)用增加了效率喊积,但是他只跟PTFuzz比較,在a的基礎(chǔ)上加了優(yōu)點變成b玄妈,只跟a比卻不跟基礎(chǔ)AFL乾吻、AFL的變種進行比較或者跟其他二進制程序fuzz的fuzzer比較是有失公允的。



Honggfuzz

面向安全的Honggfuzz模糊測試器是多線程的拟蜻,而且經(jīng)過了優(yōu)化绎签,可以利用各種系統(tǒng)資源。很多模糊測試工具必須運行多個實例才能達到這種效果酝锅,但Honggfuzz自動使用所有可用CPU核心加速模糊測試過程诡必。
Honggfuzz不僅僅適用于Windows,也可以測試在Linux屈张、Mac擒权,甚至Android環(huán)境中運行的應(yīng)用程序。由于其多平臺適用的特性阁谆,Honggfuzz有一系列例子和測試用例可供開發(fā)人員使用,或一字不改直接套用愉老,或根據(jù)自身需求加以修改场绿,或者僅做簡單參考以便設(shè)計自己的模糊測試規(guī)則。
可能是由于能在多平臺執(zhí)行模糊測試的能力嫉入,Honggfuzz用來展示開發(fā)人員捕獲漏洞的戰(zhàn)果頁面相當龐大焰盗。開發(fā)者介紹,找出引發(fā)全球安全補丁的OpenSSL關(guān)鍵漏洞的模糊測試工具僅此一款咒林。
關(guān)于honggfuzz的文章大家可以去看這篇https://bbs.pediy.com/thread-247954.htm
熬拒,講的非常到位。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垫竞,一起剝皮案震驚了整個濱河市澎粟,隨后出現(xiàn)的幾起案子蛀序,更是在濱河造成了極大的恐慌,老刑警劉巖活烙,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徐裸,死亡現(xiàn)場離奇詭異,居然都是意外死亡啸盏,警方通過查閱死者的電腦和手機重贺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回懦,“玉大人气笙,你說我怎么就攤上這事∏釉危” “怎么了健民?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贫贝。 經(jīng)常有香客問我秉犹,道長,這世上最難降的妖魔是什么稚晚? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任崇堵,我火速辦了婚禮,結(jié)果婚禮上客燕,老公的妹妹穿的比我還像新娘鸳劳。我一直安慰自己,他們只是感情好也搓,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布赏廓。 她就那樣靜靜地躺著,像睡著了一般傍妒。 火紅的嫁衣襯著肌膚如雪幔摸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天颤练,我揣著相機與錄音既忆,去河邊找鬼。 笑死嗦玖,一個胖子當著我的面吹牛患雇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宇挫,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼苛吱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了器瘪?” 一聲冷哼從身側(cè)響起翠储,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绘雁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彰亥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咧七,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年任斋,在試婚紗的時候發(fā)現(xiàn)自己被綠了继阻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡废酷,死狀恐怖瘟檩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澈蟆,我是刑警寧澤墨辛,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站趴俘,受9級特大地震影響睹簇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寥闪,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一太惠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疲憋,春花似錦凿渊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秋忙,卻和暖如春彩掐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翰绊。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工佩谷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人监嗜。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像抡谐,于是被迫代替她去往敵國和親裁奇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容