黃樺烽 余媛萍 張 濤
(1. 中國科學(xué)院軟件研究所 可信計算與信息保障實驗室, 北京 100190; 2.中國科學(xué)院大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 北京 100190; 3.中國信息安全測評中心, 北京 100085)
軟件漏洞是存在于系統(tǒng)或者應(yīng)用軟件中,可導(dǎo)致攻擊者在未授權(quán)情況下訪問或破壞系統(tǒng)的安全缺陷.軟件漏洞形成的原因具有多樣性,包括開發(fā)人員疏忽及水平受限、編譯器安全缺陷、程序功能邏輯復(fù)雜、程序測試不充分等因素.鑒于軟件的高復(fù)雜度,包括代碼規(guī)模、功能組成、多線程并發(fā)、數(shù)據(jù)資源共享等復(fù)雜機制,即使經(jīng)過代碼審查與測試也難以消除軟件中的安全漏洞,以致嚴重威脅到系統(tǒng)的信息系統(tǒng)的安全.
軟件漏洞是網(wǎng)絡(luò)安全的主要威脅,隨著軟件數(shù)量的和規(guī)模的擴張,漏洞數(shù)量逐年增加,而依賴于人工的漏洞分析與利用生成已難以滿足現(xiàn)實需求.同時,漏洞利用是系統(tǒng)入侵滲透的主要手段,如何提高軟件漏洞的自動化利用能力是攻防雙方共同關(guān)注的焦點.隨著基礎(chǔ)安全分析技術(shù)的發(fā)展和漏洞分析需求的增加,人類逐步推動漏洞自動攻防的研究.在漏洞自動分析與利用所需技術(shù)基本滿足要求的情況下,2014-2016年美國DARPA組織的CGC(Cyber Grand Challenge)比賽在漏洞自動攻防方向進行了初步的嘗試,并受到業(yè)界的廣泛關(guān)注[1].CGC是實現(xiàn)漏洞挖掘、分析、利用、修復(fù)等完全自動化的一次嘗試,參賽團隊通過建立“自動攻擊防御系統(tǒng)”,在無人干預(yù)的條件下,自動尋找程序漏洞、生成利用攻擊敵方,以及部署補丁抵御對手的攻擊.CGC是軟件漏洞挖掘與自動化利用的里程碑,國內(nèi)從2017年開始組織類似的自動攻防比賽RHG(Robot Hacking Game),驗證了無人干預(yù)條件下的自動化網(wǎng)絡(luò)攻防的可行性,構(gòu)建出一套具備自主攻擊及自我防御的軟件,推動了軟件漏洞自動利用的發(fā)展.
本文根據(jù)漏洞自動利用各環(huán)節(jié)面臨的不同問題,利用方法及技術(shù)的差異進行分類總結(jié),從控制流劫持漏洞自動利用、面向堆漏洞的自動分析與利用、安全機制的自動化對抗方法和綜合性的漏洞自動利用框架等四個方面,介紹當(dāng)前軟件漏洞自動利用研究的進展,從而分析未來軟件漏洞自動利用發(fā)展趨勢.
漏洞利用的主要目的是在程序中執(zhí)行滿足攻擊者意圖的代碼,如下載惡意代碼、執(zhí)行shell、添加賬戶等功能,也就是通常所說的任意代碼執(zhí)行漏洞.而控制流劫持漏洞就是一種典型的任意代碼執(zhí)行漏洞,這種漏洞大多屬于高危漏洞,針對這種漏洞自動化地生成利用代碼已有多年的研究.
控制流劫持漏洞自動利用構(gòu)造的基本思路是在程序動態(tài)運行過程中基于數(shù)據(jù)流分析方法,檢測程序是否運行到一個執(zhí)行指令可被輸入控制的狀態(tài),這些狀態(tài)包括:指令代碼受到輸入控制、指令指針寄存器直接或間接受到輸入代碼控制;執(zhí)行了可直接或者間接引起任意代碼執(zhí)行的相關(guān)函數(shù),如system等命令執(zhí)行函數(shù)參數(shù)可任意控制.當(dāng)程序執(zhí)行到執(zhí)行指令可被輸入控制的狀態(tài)時,基于當(dāng)前的輸入數(shù)據(jù)為模板,關(guān)聯(lián)輸入與執(zhí)行路徑直接的約束關(guān)系,同時建立劫持點、攻擊載荷(shellcode)與輸入數(shù)據(jù)的依賴關(guān)系,最后基于符號執(zhí)行等約束求解方法自動生成漏洞利用攻擊代碼.相關(guān)工作包括APEG[2]、AEG[3-4]、Mayhem[5]、CRAX[6]、PolyAEG[7],本文根據(jù)其各自特點分別展開分析.
基于補丁信息的漏洞自動利用構(gòu)造核心思想是針對補丁位置的過濾約束條件,基于污點分析和符號執(zhí)行的基本方法構(gòu)造違反補丁約束條件的輸入,最后基于污點分析判斷違規(guī)輸入是否造成控制流劫持,進一步構(gòu)造滿足漏洞利用條件.APEG是在2008年,Brumley等[2]提出的基于二進制補丁對比的程序漏洞自動利用方法.此方法借助了補丁信息對比的輔助,也是漏洞自動利用的首次嘗試,其關(guān)注重點其實是基于補丁對比實現(xiàn)漏洞挖掘,由于早期的字符串拷貝溢出漏洞泛濫等因素,該方法對微軟的多個補丁程序進行測試并驗證了方法的有效性.但實際效果表面,其在漏洞利用代碼生成方面并未深入,所構(gòu)造的利用大多只是崩潰,未能通過控制流劫持達到任意代碼執(zhí)行的效果.
源碼輔助的漏洞自動利用構(gòu)造基本思想是基于源碼編譯過程中的中間信息,數(shù)據(jù)變量及代碼邏輯依賴關(guān)系,提取程序中的脆弱點和觸發(fā)脆弱點的約束條件,構(gòu)造潛在威脅的輸入,再結(jié)合二進制程序動態(tài)運行的信息,自動根據(jù)相關(guān)約束條件構(gòu)造漏洞利用代碼并進行驗證.AEG是2011年Avgerinos等[3-4]在NDSS會議上提出的漏洞自動挖掘與利用方法.此方法借助了源代碼的輔助,提取編譯過程中的LLVM字節(jié)碼文件,通過字節(jié)碼文件的分析提取漏洞觸發(fā)路徑約束,以及漏洞相應(yīng)的內(nèi)存變量屬性,通過約束求解獲得觸發(fā)漏洞的POC輸入;然后將POC輸入載入程序動態(tài)執(zhí)行,通過程序動態(tài)指令插樁技術(shù),基于數(shù)據(jù)流分析內(nèi)存布局關(guān)系,建立攻擊代碼布局約束條件,使用優(yōu)化的混合符號執(zhí)行求解路徑約束與攻擊代碼布局約束條件,實現(xiàn)了漏洞利用自動生成.AEG依賴于程序源代碼進行程序錯誤靜態(tài)搜索和路徑約束條件的生成,同時,其只支持棧溢出和格式化字符串漏洞的利用自動生成.
針對二進制代碼的漏洞自動利用構(gòu)造其核心思想是結(jié)合二進制代碼靜動態(tài)分析、污點傳播和符號執(zhí)行方法,構(gòu)造觸發(fā)程序執(zhí)行脆弱點的POC,再基于插樁分析監(jiān)測POC對目標程序破壞程度的影響,通過內(nèi)存污點數(shù)據(jù)布局分析、二進制代碼執(zhí)行路徑約束條件的求解自動構(gòu)造漏洞利用代碼.
Mayhem是2012年Cha等[5]在S&P會議上提出的針對二進制程序的漏洞利用自動生成方法.該方法綜合利用了離線式符號執(zhí)行內(nèi)存消耗低的特點和在線式符號執(zhí)行速度快的優(yōu)勢,構(gòu)建出基于索引的內(nèi)存模型,用于優(yōu)化處理符號化內(nèi)存的加載問題,以提高符號執(zhí)行的效率.在程序運行狀態(tài)檢測方面,Maythem通過插樁分析和污點傳播檢測call/jmp/ret等敏感指令是否受到輸入控制,當(dāng)檢測出程序運行到控制流劫持狀態(tài)后,將相應(yīng)的輸入信息提交給符號執(zhí)行子系統(tǒng)進行分析和利用代碼自動構(gòu)造.CRAX是2012年Huang等[6]提出的基于S2E符號執(zhí)行平臺,對觸發(fā)程序崩潰的POC進行動態(tài)分析,優(yōu)化過濾了無關(guān)函數(shù),提升了約束求解效率,支持格式化字符串、堆棧溢出、變量未初始化等多種類型漏洞,但因采用了重量級的符號執(zhí)行引擎S2E,其效率及資源消耗難以滿足實際的應(yīng)用需求.
隨著攻防雙方對抗過程的發(fā)展,可利用漏洞資源是相對稀缺的,攻擊者為對抗病毒特征碼掃描需要對漏洞攻擊代碼進行變形,而防御者為了能夠檢測變形的攻擊代碼也需要主動構(gòu)造變形的攻擊代碼測試和提升檢測引擎的能力,因此,漏洞利用樣本的多樣性生成對于漏洞攻擊與防御雙方能力的提升具有重要的促進作用.漏洞利用樣本多樣性生成的基本思想是基于動態(tài)污點分析檢測所有的程序控制流劫持點,搜索潛在的攻擊路徑,通過攻擊代碼分段布局、等效指令替換等手段構(gòu)建不同的控制流轉(zhuǎn)移模式,實現(xiàn)漏洞利用樣本的多樣性生成.Wang等[7]在2013年的Secure Comm會議上提出了一套針對控制流劫持類漏洞的利用樣本多樣性自動生成方法PolyAEG.PolyAEG在實現(xiàn)上通過QEMU進行二進制指令代碼插樁,通過反匯編指令的分析實現(xiàn)污點傳播,通過樹結(jié)構(gòu)記錄污點傳播流圖和壓縮MAP記錄內(nèi)存和寄存器存儲單元污點狀態(tài).PolyAEG針對覆蓋返回地址和覆蓋函數(shù)指針的控制流劫持漏洞實現(xiàn)了一套漏洞利用樣本多樣化生成的自動化構(gòu)造方案,測試驗證了8個現(xiàn)實漏洞程序,其中針對單個控制流劫持漏洞最多生成了4 724個利用樣本變種.該方案是一種較為有效的控制流劫持漏洞自動利用生成方法,但對于尚未觸發(fā)控制流劫持點的POC樣本難以生成有效利用,對POC具有較強依賴性.
堆漏洞是一種常見的漏洞類型,包括堆溢出、釋放后重用(Use After Free簡稱UAF)、Off by One 等.與棧溢出等控制流劫持漏洞相比,堆漏洞的利用過程更為復(fù)雜,這主要是由于堆數(shù)據(jù)類型的多樣性導(dǎo)致,不像棧存在一個返回地址指針,堆數(shù)據(jù)的多樣性體現(xiàn)在堆數(shù)據(jù)是動態(tài)生成的,可以是一個整型變量、一塊緩沖區(qū)、一個地址指針,甚至是一個函數(shù)指針等.而堆漏洞利用的基本思路是破壞堆結(jié)構(gòu)中的地址指針或者函數(shù)指針,來實現(xiàn)任意地址寫的能力或控制流劫持.堆結(jié)構(gòu)的復(fù)雜多樣性和safe unlink等機制給堆漏洞自動利用帶來了挑戰(zhàn),模糊測試等方法挖掘出的堆漏洞POC大多只是一個崩潰,尚未達到任意地址寫或者控制流劫持的能力.近年來,安全社區(qū)和學(xué)術(shù)界共同致力于推進漏洞自動分析與利用技術(shù)的研究,并且取得了相關(guān)進展.
漏洞的可利用性分析是漏洞利用自動構(gòu)造的前提,堆漏洞與控制流劫持漏洞最大的差異就是其可利用性無法保證.堆漏洞的可利用性判定主要思路是分析堆漏洞所能破壞的數(shù)據(jù)內(nèi)容,進一步分析破壞的數(shù)據(jù)內(nèi)容是否可操控,以及這部分內(nèi)容將對程序后續(xù)執(zhí)行造成怎樣的影響.基于該思路,He等[8]提出了基于堆溢出崩潰和溢出修復(fù)的堆漏洞可利用性評估方法HCS IFTER,該方法首次提出了通過修復(fù)被破壞的內(nèi)存,使得程序能夠繼續(xù)執(zhí)行,并檢測被破壞的內(nèi)存數(shù)據(jù)后續(xù)使用情況,進而分析判定內(nèi)存破壞點是否潛在利用條件,雖然該方法能夠檢測出觸發(fā)崩潰樣本本身是否潛在可利用性,但還不具備內(nèi)存重新布局和構(gòu)造的能力,即使檢測出當(dāng)前條件不可利用也不能得出該漏洞不可利用的結(jié)論.
針對堆破壞相關(guān)內(nèi)存重新布局和構(gòu)造能力提升,以觸發(fā)更多執(zhí)行路徑及狀態(tài)的需求,Wang等[9]在2018年提出了一種基于已知崩潰路徑,結(jié)合導(dǎo)向模糊測試的技術(shù),獲取漏洞程序更多可利用狀態(tài)的方法Revery.該方法定義了兩種可利用的狀態(tài),包括任意內(nèi)存寫和任意地址執(zhí)行.首先,使用動態(tài)分析研究崩潰路徑下漏洞的細節(jié),從而構(gòu)建漏洞內(nèi)存布局與其貢獻指令的關(guān)系圖;然后,運用內(nèi)存布局導(dǎo)向的模糊測試搜索可利用路徑;最后,基于控制流縫合技術(shù)將崩潰路徑和可利用路徑縫合生成能夠同時觸發(fā)漏洞和達到可利用狀態(tài)的利用樣本.Revery是基于ANGR開源框架實現(xiàn)的,針對19個CTF樣本進行了測試驗證,其中47%可以直接生成利用代碼,26%可以觸發(fā)到可利用狀態(tài).
堆漏洞利用自動構(gòu)造難點在于堆數(shù)據(jù)結(jié)構(gòu)的多樣性,解決這一問題堆思路是將數(shù)據(jù)流分析與模糊測試方法相結(jié)合.國外的Repel等[10]針對堆漏洞自動分析與利用困難點在于需構(gòu)造滿足堆操作函數(shù)的參數(shù)和特定的堆操作序列,構(gòu)建了一個可利用狀態(tài)堆操作序列數(shù)據(jù)庫,在堆操作函數(shù)模糊測試過程中挑選出堆操作序列匹配成功的測試用例,并設(shè)計了一個原型系統(tǒng)驗證了該方法,但是產(chǎn)生合適的測試用例效率低.針對效率問題,Heelan等[11]提出通過構(gòu)造輸入自動操控堆內(nèi)存布局實現(xiàn)堆漏洞利用的方法,該方法解決了上面方法產(chǎn)生合適測試用例帶來的時間開銷,但是堆布局成功的穩(wěn)定性與脆弱點的堆大小和構(gòu)造利用的數(shù)據(jù)結(jié)構(gòu)有關(guān).Yun等[12]針對堆開發(fā)技術(shù)的根源問題,通過找出像jemalloc、ptmalloc、tcmalloc這些堆管理函數(shù)的共性,從而更好地輔助堆漏洞利用自動構(gòu)造.
UAF漏洞是堆漏洞中的常見漏洞,廣泛出現(xiàn)在瀏覽器和操作系統(tǒng)內(nèi)核中.賓州州立大學(xué)的Wu等[13]在2018年的USENIX Security會議上提出了針對內(nèi)核UAF漏洞的自動利用框架FUZE,該框架利用內(nèi)核模糊測試技術(shù)提供更多的內(nèi)核崩潰上下文環(huán)境作為漏洞利用的依據(jù),并利用符號執(zhí)行求解在不同的上下文環(huán)境中去嘗試利用目標漏洞,選取了15個內(nèi)核Use-After-Free漏洞進行了驗證,其中12個漏洞能實現(xiàn)利用,而公開的資料只有5個是被黑客成功利用的,提升了內(nèi)核UAF漏洞利用的能力.
軟件安全機制緩解技術(shù)可以在一定程度上緩解漏洞利用攻擊,典型的安全機制包括Stack Guard[14]、DEP(Data Execution Prevention)[15]、ASLR(Address Space Layout Randomization)[16]和CFI(Control-Flow Integrity)[17].安全機制的自動化對抗研究,是軟件漏洞自動利用過程中的一個重要環(huán)節(jié),國內(nèi)外研究團隊從ROP、DOP和BOP等方面給出了安全機制自動繞過的相關(guān)方案.
針對數(shù)據(jù)執(zhí)行保護DEP的利用緩解方案,攻擊者通常采用ROP/JOP等方式實現(xiàn)漏洞利用代碼,其基本思想是基于目標程序自身代碼片段,收集其中特定功能片段的Gadget, 并通過Gadget 的自動化編程拼接構(gòu)建ROP,生成滿足特定功能的代碼序列.針對ASLR通常需要未開啟ASLR的相關(guān)模塊或者信息泄露漏洞.典型的代表工作是2011 年Schwartz等[18]在USENIX Security 會議上提出的一套面向高可靠性漏洞利用的ROP 代碼自動生成方法Q.該方法首先搜索系統(tǒng)中未使用地址隨機化的程序或動態(tài)庫模塊,在這些模塊中找出具備特定功能的Gadget 集合,同時提供了一種稱為QooL的編程語言,將滿足特定語義功能的目標代碼編譯成面向Gadget 的指令序列,最后通過利用已獲取的Gadget 集合及對應(yīng)地址,生成Gadget片段對應(yīng)的最終ROP 代碼.該方法通過對9 個真實軟件漏洞的實驗,驗證了數(shù)據(jù)執(zhí)行保護和地址隨機化功能可被繞過的結(jié)論,但其依賴于系統(tǒng)中存在未隨機化模塊的前提,在早期ASLR還未大范圍普及的情況下能發(fā)揮一定作用,但在當(dāng)前新版本系統(tǒng)及軟件環(huán)境下效果欠佳.
國內(nèi)的方皓等提出了基于符號執(zhí)行與安全機制繞過技術(shù)Return-to-dl-resolve結(jié)合的自動利用代碼生成方案R2dlAEG[19-20],通過控制流劫持漏洞利用基本方法與Return-to-dl-resolve過程自動化實現(xiàn)的結(jié)合,針對控制流劫持漏洞,實現(xiàn)了自動生成能繞過ASLR 與NX 防護機制的利用代碼,同時不依賴于未隨機化的動態(tài)庫模塊和信息泄露漏洞,并通過CTF樣本和部分已知漏洞進行了驗證.
CFI是一種控制流完整性的漏洞利用緩解技術(shù),逐步在Windows10等新版本系統(tǒng)得到應(yīng)用,用于檢測和攔截控制流劫持漏洞利用.為了對抗CFI的防護機制,面向數(shù)據(jù)流攻擊的利用方法應(yīng)運而生,其思想在不直接影響和操控程序控制流的前提下,通過分析程序?qū)斎霐?shù)據(jù)的處理,構(gòu)造出一個或多個利用輸入數(shù)據(jù)改變程序數(shù)據(jù)流的利用路徑,進而完成權(quán)限提升、認證機制繞過和信息泄露等功能.在數(shù)據(jù)執(zhí)行保護、地址隨機化以及控制流完整性等安全機制防護下,面向數(shù)據(jù)流的利用方法顯得熠熠生輝.
面向數(shù)據(jù)流攻擊的代表性工作是Hu等[21]在2015年提出的Flow Stitch,該方法利用已知內(nèi)存錯誤直接或間接地篡改程序原有數(shù)據(jù)流中的關(guān)鍵變量,通過比對錯誤執(zhí)行記錄和正常執(zhí)行記錄,篩選并確定內(nèi)存錯誤影響范圍中的敏感數(shù)據(jù),來完成信息泄露、權(quán)限提升等利用的構(gòu)造.2016年Hu等[22]繼而提出DOP,即基于數(shù)據(jù)流的攻擊代碼編程模型,同時給出針對實際應(yīng)用程序的基于數(shù)據(jù)流的攻擊代碼塊和指令調(diào)度分配代碼塊的搜索、提取和編程方法,初步顯示DOP是圖靈完備的,能夠?qū)崿F(xiàn)任意代碼的執(zhí)行,并能繞過DEP、ASLR和CFI等系統(tǒng)防護措施.
針對CFI的對抗,除了數(shù)據(jù)流攻擊還要面向塊編程代碼重用技術(shù)BOP,該方法是在2018年由Ispoglou等[23]提出的只依賴于數(shù)據(jù)的面向塊編程的攻擊方案BOPC.BOPC是一種自動評估攻擊者能否在使用了CFI防御的二進制程序上實現(xiàn)任意代碼執(zhí)行的方案.其主要思路是引入一種面向塊編程的代碼重用技術(shù),它利用整個基本塊作為程序代碼Gadgets,在不違反CFI等防護策略情況下編織實現(xiàn)任意內(nèi)存寫原語,并通過修剪不可達路徑來減少搜索空間,使用啟發(fā)式方法引導(dǎo)搜索可行路徑,構(gòu)建任意內(nèi)存寫能力的payload集合.
軟件漏洞自動利用是一系列復(fù)雜過程的組合,包括最基礎(chǔ)的棧溢出利用[24],大多基于動態(tài)分析展開,在程序動態(tài)執(zhí)行過程中監(jiān)測程序輸入數(shù)據(jù),對其進行污點源標記,基于指令集的代碼插樁技術(shù)提取所執(zhí)行的每一條指令,再通過反匯編或者中間語言解析指令的語義實現(xiàn)污點傳播分析及符號執(zhí)行表達式構(gòu)建,然后在敏感指令等位置檢測是否為可利用漏洞,當(dāng)檢測為可利用點之后,基于約束求解和內(nèi)存布局分析,自動生成漏洞利用代碼.整個漏洞自動利用過程所依賴的基礎(chǔ)方法主要包括指令代碼插樁、指令分析、污點傳播分析和符號執(zhí)行,ANGR就是利用這些技術(shù)形成的代表性的綜合性漏洞自動利用開源框架,可自行源碼安裝,也可以使用其docker虛擬機[25].
ANGR是由加州大學(xué)圣塔芭芭拉分校的Shoshitaishvili等[25]提出的面向二進制軟件攻防的基礎(chǔ)分析框架平臺.該框架主要是將已有基礎(chǔ)性軟件分析方法進行模塊化實現(xiàn),形成一套功能完整的分析框架,包括控制流圖生成、動態(tài)分析執(zhí)行、符號執(zhí)行、值域分析等內(nèi)容.ANGR的指令插樁基于QEMU實現(xiàn),類似的工具還有PIN[26-27]、DynamoRIO[28]等;ANGR的指令反匯編解析基于Capstone[29]反匯編引擎,同類工具還有udis86[30]等;ANGR的符號執(zhí)行求解基于Z3[31]實現(xiàn),類似的引擎還有S2E[32]等.
ANGR是一個程序漏洞分析與利用的基礎(chǔ)框架,在此基礎(chǔ)上可以實現(xiàn)針對二進制程序的漏洞挖掘、分析與利用等具體功能,同時可以將各項功能組合構(gòu)建成自動化的漏洞分析利用系統(tǒng).ANGR的作者將該系統(tǒng)應(yīng)用到了CGC比賽中,通過組合不同的分析技術(shù)與方法構(gòu)建面向二進制軟件的漏洞自動挖掘與利用系統(tǒng).ANGR本身也提供了程序漏洞利用生成的AEG插件,雖然針對其測試用例能夠成功生成利用樣本,但針對靜態(tài)鏈接等規(guī)模稍微大一點的程序,會產(chǎn)生內(nèi)存爆炸導(dǎo)致無法成功生產(chǎn)利用代碼.
ANGR被廣泛應(yīng)用到CTF比賽中進行二進制代碼分析和漏洞利用代碼生成,GitHub中有一個angr_ctf的項目集成了18個左右的插件用于CTF樣本分析,功能包括程序及庫文件分析,任意地址讀、寫、跳轉(zhuǎn),API劫持,寄存器、內(nèi)存、棧的符號化分析等功能.另外,學(xué)術(shù)界也有不少基于ANGR平臺開展的漏洞自動挖掘與利用研究工作[9,33-34],其更側(cè)重于驗證方法的可行性,測試用例大多選擇簡單的CTF樣本,距離真正的實用還有一定距離.
綜上所述,目前漏洞自動利用研究較為成熟的主要針對控制流劫持漏洞,隨著漏洞利用緩解機制的發(fā)展,安全機制的自動化對抗技術(shù)也逐步發(fā)展,而堆漏洞是比較復(fù)雜的漏洞類型,其利用過程需逐步構(gòu)造突破任意地址寫到任意地址執(zhí)行,仍有較大的突破空間.而目前尚未出現(xiàn)實用性的漏洞自動利用系統(tǒng),大部分工作都只是一個原型系統(tǒng),包括ANGR框架,其自動化程度也不高,需要針對特定樣本,結(jié)合人工分析進行調(diào)整才能真正發(fā)揮效果.
針對特定目標的漏洞利用自動生成可能是未來的一個趨勢,包括針對Linux內(nèi)核提權(quán)[35]、針對瀏覽器[36]、針對固件設(shè)備[37]和針對Android系統(tǒng)組件[38]等.由于特定目標具有其特定的屬性,脆弱環(huán)節(jié)和漏洞利用方式存在一些特點,基于這些特征知識可內(nèi)置特定的利用環(huán)節(jié)輔助漏洞利用的快速生成.
現(xiàn)有的漏洞利用自動生成大多基于模糊測試、污點分析、符號執(zhí)行求解這些專家知識與漏洞利用技巧融合實現(xiàn),還不具備真正的AI智能.目前AI領(lǐng)域主要應(yīng)用在分類、判斷、策略擇優(yōu)等方面,其具有一定的概率性.而漏洞利用需要具備相應(yīng)的知識基礎(chǔ),過程步驟復(fù)雜,相關(guān)步驟需要精確計算,這些步驟并不適合使用AI智能技術(shù).未來AI智能技術(shù)在漏洞自動利用的應(yīng)用上,還需要與專家系統(tǒng)知識相結(jié)合,在部分不依賴于精確計算的環(huán)節(jié)上輔助提升漏洞利用自動生成的能力,如多路徑情況下利用AI技術(shù)進行路徑選擇與擇優(yōu).