国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

安全漏洞自動利用綜述

2019-10-21 05:44趙尚儒李學(xué)俊余媛萍黃偉豪蘇璞睿張玉清
計算機(jī)研究與發(fā)展 2019年10期
關(guān)鍵詞:污點漏洞內(nèi)存

趙尚儒 李學(xué)俊 方 越 余媛萍 黃偉豪 陳 愷 蘇璞睿 張玉清

1(西安電子科技大學(xué)網(wǎng)絡(luò)與信息安全學(xué)院 西安 710071) 2(國家計算機(jī)網(wǎng)絡(luò)入侵防范中心(中國科學(xué)院大學(xué)) 北京 101408) 3(中國科學(xué)院軟件研究所可信計算與信息保障實驗室 北京 100190) 4(信息安全國家重點實驗室(中國科學(xué)院信息工程研究所) 北京 100195) 5(中國科學(xué)院大學(xué) 北京 100190)

隨著互聯(lián)網(wǎng)行業(yè)的發(fā)展及軟件系統(tǒng)復(fù)雜性增加,潛在的安全漏洞風(fēng)險也在隨之上升.與此同時各大企業(yè)、政府、高校逐漸重視安全,針對安全的相關(guān)投入也在逐漸增多.相應(yīng)地,漏洞發(fā)現(xiàn)與報告也逐年增加,圖1統(tǒng)計了美國國家漏洞數(shù)據(jù)庫(National Vulnerability Database, NVD)披露的歷年漏洞記錄數(shù)量[1],僅2019年上半年(截至7月1日)披露的漏洞數(shù)量就超過了2016全年披露漏洞數(shù)量.然而已經(jīng)披露的漏洞并不意味著該漏洞已經(jīng)完全被修復(fù),2017年5月12日,WannaCry勒索軟件爆發(fā)就說明了這一點.它利用了2017年3月就已經(jīng)發(fā)布了補丁的Eternal-Blue漏洞攻擊脆弱系統(tǒng).據(jù)了解,攻擊者有平均30天[2]的時間利用公開的補丁信息來恢復(fù)漏洞信息,并攻擊尚未修補的系統(tǒng).

Fig. 1 NVD disclosed the number of vulnerabilities over the years圖1 NVD歷年披露漏洞數(shù)量

當(dāng)前的漏洞分析和修復(fù)工作仍然存在不少難題.首先,軟件供應(yīng)商和研究人員難以確定所提交漏洞的可復(fù)現(xiàn)性[3].漏洞復(fù)現(xiàn)本就是一項需要耗費時間的工作,而由于提交的漏洞報告的質(zhì)量參差不齊,不少漏洞信息更是存在不準(zhǔn)確、不完整的問題.安全研究人員可能還需要大量的時間來找出安全漏洞報告中存在的錯誤,以及補全缺失的信息.這些都嚴(yán)重拖慢了漏洞修復(fù)的速度,甚至?xí)驗閺?fù)現(xiàn)失敗對漏洞造成誤判.另一方面,目前對漏洞的可利用性判斷也存在困難.從漏洞復(fù)現(xiàn)到漏洞利用,這個過程要對二進(jìn)制程序以及程序源代碼的運行過程有很透徹的分析,往往需要耗費安全研究人員大量的心血去研究.由于安全漏洞修復(fù)的周期長、資源有限,軟件供應(yīng)商往往需要快速判斷漏洞的危險性以分配資源.因此,如何快速分析、評估漏洞的可利用性是當(dāng)前漏洞發(fā)掘與分析的關(guān)鍵問題之一[4-6].

雖然軟件自動漏洞利用技術(shù)已經(jīng)取得了初步進(jìn)展,但是軟件復(fù)雜性的增加、控制流完整性檢測和軟件漏洞類型的多樣性,給漏洞利用評估帶來了更多的挑戰(zhàn)[7].如何進(jìn)一步探索和研究軟件漏洞,提出更加高效可靠的自動化解決方案已經(jīng)成為當(dāng)前熱門的研究領(lǐng)域.為此,我們調(diào)研了IEEE,ACM,Springer等出版期刊以及安全會議中有關(guān)漏洞利用的文獻(xiàn),嘗試總結(jié)漏洞自動利用目前的研究成果,指出該領(lǐng)域的研究方向.圖2展示了近年來漏洞自動利用文獻(xiàn)數(shù)量,可以看出漏洞自動利用相關(guān)研究數(shù)量正在穩(wěn)步上升,該領(lǐng)域逐漸受到關(guān)注,相信更多的研究成果即將出現(xiàn).

Fig. 2 Literature number of automatic exploitation generation圖2 漏洞自動利用文獻(xiàn)數(shù)量

本文的主要貢獻(xiàn)有3個方面:

1) 系統(tǒng)地調(diào)研了2006年至今的近70篇漏洞自動利用文獻(xiàn),指出了漏洞利用研究的發(fā)展趨勢,總結(jié)了漏洞自動利用的一般框架;

2) 首次從漏洞利用的信息輸入、漏洞利用的漏洞類型和自動利用的關(guān)鍵方法這3個角度對漏洞利用進(jìn)行梳理,并分別指出了各角度中相關(guān)方案優(yōu)缺點;

3) 分析了當(dāng)前漏洞自動利用研究中的不足,總結(jié)了面臨的七大機(jī)遇與挑戰(zhàn),并指出了未來的研究趨勢與下一步研究方向.

1 漏洞自動利用

1.1 漏洞利用的定義

漏洞(vulnerability)是信息技術(shù)、信息產(chǎn)品、信息系統(tǒng)在需求、設(shè)計、實現(xiàn)、配置運行等過程中,有意無意之間產(chǎn)生的缺陷(bug).這些缺陷一旦被惡意主體利用,可能會影響構(gòu)建在信息系統(tǒng)之上正常服務(wù)的運行,對信息系統(tǒng)的機(jī)密性、完整性以及可用性造成嚴(yán)重?fù)p害[8].然而一些漏洞可能不是系統(tǒng)安全的威脅,而只會導(dǎo)致程序在輸出數(shù)據(jù)時出現(xiàn)特定的錯誤輸出,也就意味著該漏洞是不可利用的.僅當(dāng)漏洞可以被利用時才被稱為安全漏洞,攻擊者可以使用該漏洞程序執(zhí)行惡意行為并破壞計算機(jī)安全[9].

漏洞利用(exploit),本意為“利用”,指的是使用程序中的某些漏洞來得到計算機(jī)的控制權(quán)(使自己編寫的代碼越過具有漏洞的程序的限制,從而獲得運行權(quán)限).在英語中,本詞也作名詞,表示為了利用漏洞而編寫的攻擊程序,即漏洞利用程序[10].漏洞自動利用(或稱漏洞利用代碼自動生成)就是通過給定的數(shù)據(jù)(如可執(zhí)行文件、源代碼、補丁等),生成可以利用該漏洞達(dá)到某特定目的的數(shù)據(jù)或者代碼的過程的自動化實現(xiàn)[11].一般來說漏洞利用生成的利用代碼需要獲得目標(biāo)系統(tǒng)最高權(quán)限(例如拿到shell),雖然部分工作暫時不能做到這一點,但是有朝著拿到shell方向努力或者為此方向做出了貢獻(xiàn).

1.2 漏洞自動利用的發(fā)展

與漏洞利用有關(guān)的研究非常廣泛,主要包括:漏洞自動利用、攻擊方法、防護(hù)繞過、代碼生成以及內(nèi)存布局等.

1) 攻擊方法

由于漏洞利用本質(zhì)上是各種攻擊方法的實例化,所以攻擊方法是漏洞利用的研究基礎(chǔ).從各種內(nèi)存沖突方案[12-14]到數(shù)據(jù)流攻擊[15-16],攻擊方案的發(fā)展給漏洞利用帶來新鮮的血液.

2) 防護(hù)繞過與代碼生成

隨著安全防護(hù)措施的普及,漏洞利用研究需要考慮這些問題.當(dāng)前研究中防護(hù)繞過和代碼生成往往是相輔相成的,這主要是因為防護(hù)繞過的辦法大部分體現(xiàn)在輸出代碼上,而代碼生成的時候也會涉及防護(hù)繞過的問題.除了普通的防護(hù)繞過方案[17-19],DOP[20-23],Shellcode[24-29]也是常見的解決方案.

3) 內(nèi)存布局

由于內(nèi)存漏洞研究廣泛、危害大,所以有關(guān)內(nèi)存布局的研究也是主要的方向之一,如何精確地控制內(nèi)存數(shù)據(jù)以達(dá)到預(yù)期目的是它們的研究目標(biāo)[30-33].

我們將近年來漏洞自動利用研究的主要文獻(xiàn)進(jìn)行了匯總,如圖3所示.最早的漏洞自動利用嘗試可以追溯到2006年,Yang等人嘗試使用符號執(zhí)行生成文件系統(tǒng)掛載程序的惡意硬盤[34].隨后,有關(guān)漏洞自動利用的研究逐漸發(fā)展,研究數(shù)量總體呈上升趨勢,各研究主要圍繞著3個方向展開:不同輸入信息處理方案、漏洞類型以及自動利用方法.輸入信息方面研究者嘗試通過可執(zhí)行文件、源碼、補丁、漏洞報告[43]和PoC程序等數(shù)據(jù)不斷嘗試生成漏洞利用.在漏洞類型上,最初研究以內(nèi)存溢出及Web注入為主,近年來,也有關(guān)于安卓惡意消息、UAF、內(nèi)存讀取等漏洞類型的利用研究.在自動利用方法上,符號執(zhí)行這一強(qiáng)大的方法自2006年的EXE至2018年的FUZE仍然受到研究者的喜愛.與此同時,為了獲得更好的效果擺脫已有工具的限制,大家也不斷嘗試新的方法:模糊測試、污點分析、模型檢測、形式邏輯、自然語言處理等技術(shù)也紛紛得到應(yīng)用.

Fig. 3 The development of automatic exploitation generation of vulnerabilities圖3 漏洞自動利用的發(fā)展

1.3 漏洞自動利用框架

通過調(diào)研現(xiàn)有文獻(xiàn),我們給出了漏洞自動利用一般過程,包括信息提取、漏洞識別、路徑發(fā)現(xiàn)、狀態(tài)求解及代碼生成,如圖4所示.總的來說,漏洞類型將會指導(dǎo)整個漏洞利用過程.漏洞利用首先從可執(zhí)行文件、源碼等輸入數(shù)據(jù)中提取利用需要的信息,利用路徑發(fā)現(xiàn)與狀態(tài)求解以獲取利用案例,最后輔以代碼生成技術(shù),生成漏洞利用的程序或者數(shù)據(jù).

Fig. 4 Vulnerability automatic exploitation generation framework圖4 漏洞自動利用框架

具體來說,首先從輸入數(shù)據(jù)中提取信息.不同于漏洞挖掘,漏洞利用可以在已知存在漏洞的情況下生成對應(yīng)漏洞的利用數(shù)據(jù),所以給出的數(shù)據(jù)類型可能十分多樣,同時也可能包含非常豐富的信息.例如給出的可能是存在漏洞的可執(zhí)行文件、源代碼這種通用數(shù)據(jù),也可能是補丁、PoC這種針對個別漏洞的專用信息.如何對上述類型各異的信息進(jìn)行處理,并從中提取出可對后續(xù)漏洞利用進(jìn)行有效指導(dǎo)的信息是本步驟的研究重點.當(dāng)然漏洞利用也可以結(jié)合漏洞挖掘,在未知漏洞的情況下先行挖掘漏洞,再對挖掘出來的漏洞進(jìn)行利用.這種情況對利用框架的后續(xù)架構(gòu)沒有太大影響.由于給定的信息可能不足以支持漏洞利用,接下來需要基于提取到的信息獲取出漏洞類型及其他相關(guān)利用信息.這一步是非常靈活的,如果給定的信息可能包含足夠的漏洞信息,甚至可以跳過此識別的步驟.

根據(jù)漏洞信息嘗試發(fā)現(xiàn)利用路徑,求解出可用的利用狀態(tài)與輸入的關(guān)系.這一部分可以說是漏洞利用的關(guān)鍵,因為這一步可以發(fā)現(xiàn)利用狀態(tài)與輸入的關(guān)系,即意味著將來可以根據(jù)此關(guān)系推導(dǎo)出利用目的對應(yīng)的輸入,而這正是達(dá)成漏洞利用最終目的的關(guān)鍵操作.最后,應(yīng)用代碼生成技術(shù),生成符合特殊要求的代碼或者數(shù)據(jù),例如符合特定規(guī)則檢測的數(shù)據(jù)、同一漏洞的不同利用實例等.

2 漏洞利用的信息輸入

在漏洞利用的過程中我們往往需要從一定的數(shù)據(jù)來源中獲取漏洞利用信息.我們統(tǒng)計了當(dāng)前研究中使用信息輸入情況,如圖5所示,可以看出,直接使用可執(zhí)行文件進(jìn)行漏洞利用的研究所占比例最多,占66%,源碼的利用研究數(shù)量次之,占29%,另外還有5%將使用其他的信息輸入例如補丁、PoC等.與其他類型的信息相比,可執(zhí)行文件最容易獲取,而源碼、補丁等數(shù)據(jù)則面臨不被公開、不存在等的問題.然而隨著開源軟件的流行,基于源碼漏洞利用也備受關(guān)注.源碼相比可執(zhí)行文件保留了更多的信息,但是不同的源碼語法規(guī)則、執(zhí)行邏輯的差別導(dǎo)致無法統(tǒng)一利用的問題仍然困擾著研究者.而其他類型的信息包括補丁、PoC等則包含了更為精煉的漏洞信息,甚至直接指明了利用路徑,但是這類信息數(shù)量少、質(zhì)量參差不齊,嚴(yán)重降低了利用效率.

Fig. 5 Information input for exploits圖5 漏洞利用的信息輸入

本節(jié)將進(jìn)一步討論不同的信息輸入對漏洞自動利用的影響.

2.1 可執(zhí)行文件

可執(zhí)行文件是指源代碼經(jīng)過預(yù)處理、編譯、匯編、鏈接等步驟以后,以特定結(jié)構(gòu)組織的二進(jìn)制指令序列文件.可執(zhí)行文件有利用時需要的程序運行級別的細(xì)節(jié),例如堆棧幀、內(nèi)存地址、變量放置和分配.但可執(zhí)行文件在分析時的擴(kuò)展性更差,且不具有源碼級別的抽象信息[46].

由于可執(zhí)行文件是一系列可執(zhí)行的二進(jìn)制指令,根據(jù)是否將指令輸入硬件執(zhí)行,我們可以將可執(zhí)行文件分析方法分為靜態(tài)分析和動態(tài)分析.

靜態(tài)二進(jìn)制分析過程通常從加載和處理要分析的二進(jìn)制文件開始.處理步驟包括解析二進(jìn)制文件、生成二進(jìn)制文件的匯編指令的中間語言表示以及構(gòu)建控制流圖.雖然這項技術(shù)提供了一個系統(tǒng)檢查所有可能的程序路徑的能力,但是靜態(tài)二進(jìn)制分析可能很慢,并且在處理間接跳轉(zhuǎn)語句時有局限性[47].一般來說,靜態(tài)分析使用切片算法和關(guān)于接收輸入數(shù)據(jù)的點和異常終止點的信息,選擇僅由處理輸入數(shù)據(jù)的指令組成的子空間.對于選定的子跟蹤,將構(gòu)造路徑謂詞,生成用戶指定的利用代碼[48].由于可執(zhí)行文件可讀性差,各架構(gòu)格式不統(tǒng)一,還需要將二進(jìn)制代碼轉(zhuǎn)換為中間文件再進(jìn)行分析.

文獻(xiàn)[49]首先使用IDA Pro將二進(jìn)制代碼解包,并使用BinNavi翻譯成REIL中間表示.接著輸入從輸入函數(shù)到潛在可利用語句的REIL指令序列.最后嘗試尋找一個執(zhí)行與潛在可利用語句控制流所需的一組輸入約束.

文獻(xiàn)[50]首先分解EVM字節(jié)碼并重建控制流圖(control flow graph, CFG).接下來,掃描該CFG以獲得關(guān)鍵指令以及狀態(tài)改變指令.接著探索從CFG引導(dǎo)的根到這些指令的路徑,通過符號執(zhí)行從這些指令創(chuàng)建一組路徑約束.最后利用生成模塊解決了關(guān)鍵路徑和狀態(tài)改變路徑的組合約束,以生成利用.文獻(xiàn)[51]反匯編二進(jìn)制代碼得到程序的中間表示(intermediate representation, IR)和CFG,并以此檢查在漏洞利用過程中使用的程序信息,例如二進(jìn)制代碼中是否存在匯編代碼“JMP ESP”和字符串“SH”.接著使用符號執(zhí)行來搜索程序的路徑,并根據(jù)二進(jìn)制代碼的控制流圖挖掘漏洞.最后繞過系統(tǒng)保護(hù)自動生成利用代碼.

文獻(xiàn)[52]從執(zhí)行跟蹤中構(gòu)建一個信息和控制流混合圖(HI-CFG),以結(jié)合代碼、數(shù)據(jù)以及它們之間關(guān)系的信息.在獲取HI-CFG后,使用符號探索來尋找導(dǎo)致故障的緩沖區(qū)內(nèi)容或者導(dǎo)致后續(xù)緩沖區(qū)的期望故障觸發(fā)內(nèi)容.符號探索通過構(gòu)造輸出值和路徑條件的符號表達(dá)式,并使用決策過程求解這些公式,生成程序一部分的可行執(zhí)行路徑.

文獻(xiàn)[40]將x86匯編轉(zhuǎn)換為適合符號執(zhí)行的中間語言.具體來說,對于執(zhí)行的每一條指令,符號執(zhí)行器都會將指令JIT編譯成BAP中間語言.然后直接在IL上執(zhí)行符號執(zhí)行,引入與特定攻擊有效載荷相關(guān)的附加約束,并將公式發(fā)送給SMT求解器以檢查可滿足性.

Coppelia[53]首先使用Verilator將RTL Verilog翻譯成邏輯等價的C++代碼,然后將安全關(guān)鍵斷言添加到生成測試平臺,并使用Clang編譯器將新翻譯的設(shè)計編譯成LLVM字節(jié)碼,最后定義違反安全關(guān)鍵斷言的處理器狀態(tài),使用符號執(zhí)行找到輸入將系統(tǒng)從初始狀態(tài)帶到違反狀態(tài)的路徑.

動態(tài)分析常見的方法有模糊測試和動態(tài)污點分析[54].它們嘗試直接在硬件中執(zhí)行或者模擬執(zhí)行該二進(jìn)制指令序列,在執(zhí)行的過程中定位、提取利用需要的信息,例如堆棧數(shù)據(jù)、內(nèi)存變量地址等.這就意味著需要考慮如何獲取寄存器及內(nèi)存的信息.另外,為了解決設(shè)備外執(zhí)行的問題,最近還提出了模擬執(zhí)行的方法.

文獻(xiàn)[55]允許研究人員開始在目標(biāo)設(shè)備上執(zhí)行固件.開始時固件在設(shè)備上執(zhí)行,直到到達(dá)斷點,接近研究者希望更仔細(xì)分析的有趣代碼段.這也允許研究人員快速到達(dá)感興趣的代碼段,而不必從絕對開始就模擬固件.當(dāng)?shù)竭_(dá)斷點時,在目標(biāo)設(shè)備上停止執(zhí)行,并執(zhí)行文本轉(zhuǎn)換.設(shè)備的整個狀態(tài)(內(nèi)存和寄存器)被傳輸?shù)椒抡嫫鳎抡嫫魅缓髲脑O(shè)備停止的地方恢復(fù)執(zhí)行.上下文切換可以發(fā)生多次,每當(dāng)這種情況發(fā)生時,仿真器擁有的與設(shè)備不同步的任何狀態(tài)(如存儲器和寄存器)被復(fù)制到目標(biāo)設(shè)備,然后從模擬器停止的地方繼續(xù)執(zhí)行.

文獻(xiàn)[56]首先指定目標(biāo)設(shè)備的硬件,創(chuàng)建一個與目標(biāo)處理器非常相似的虛擬機(jī),根據(jù)目標(biāo)設(shè)備的布局人工映射內(nèi)存范圍.隨后將把涉及這些區(qū)域之外的地址的任何操作轉(zhuǎn)發(fā)給目標(biāo)設(shè)備.如果代碼和內(nèi)存沒有映射,那么所有的內(nèi)存操作都將被轉(zhuǎn)發(fā)到目標(biāo)設(shè)備.過于具體而無法放入框架的定制功能,例如呼叫監(jiān)視器、存儲器和寄存器狀態(tài)轉(zhuǎn)移功能也在虛擬配置文件中實現(xiàn).

2.2 源代碼

源代碼(source code)是指一系列人類可讀的計算機(jī)語言指令,最終目的是將人類可讀的文本通過編譯器翻譯成為計算機(jī)可以執(zhí)行的二進(jìn)制指令.我們所說的源代碼通常指的是CC++,BASIC,C#,JAVA,PASCAL等高級語言編寫的代碼.

源代碼包含抽象信息,如變量、緩沖區(qū)、函數(shù)和用戶構(gòu)造的類型,使自動推理更容易并具有更好的伸縮性[38].但同時高級語言的抽象隱藏了程序操作的細(xì)節(jié),而這些細(xì)節(jié)對于檢測錯誤和評估它們的嚴(yán)重性非常重要[48].

源代碼作為編程語言,最大的特點就是可以被譯成可執(zhí)行文件.這也就是說,可以在轉(zhuǎn)換之后直接使用可執(zhí)行文件的分析方法.另外,源代碼保留的抽象信息可以幫助我們進(jìn)行靜態(tài)分析,獲取漏洞利用的有關(guān)信息.

AEG[38]分析源代碼程序,生成符號執(zhí)行公式并求解它們,執(zhí)行二進(jìn)制分析,生成二進(jìn)制運行時約束,并將輸出格式化為可以直接輸入易受攻擊程序的實際利用字符串.NAVEX[57]給定應(yīng)用程序源代碼,識別應(yīng)用程序和相應(yīng)模塊中易受攻擊的接收器.在這個階段分別分析每個模塊,并且只優(yōu)先考慮那些有漏洞的模塊從而顯著減少搜索空間并有助于提高可伸縮性.

文獻(xiàn)[58]使用源代碼弱點白盒檢測引擎和開源收集引擎將分析目標(biāo)的源代碼轉(zhuǎn)換為中間代碼,并對轉(zhuǎn)換后的中間代碼和處理后的數(shù)據(jù)進(jìn)行編碼,然后將其傳輸?shù)饺觞c分析引擎服務(wù)器.其利用基于編譯器的符號執(zhí)行在源代碼級進(jìn)行弱演繹,提取測試結(jié)果的弱代碼連接黑盒測試.

除此之外,由于部分高級語言為解釋語言,它們可以通過修改解釋器來進(jìn)行符號執(zhí)行.文獻(xiàn)[59]構(gòu)建了一個基于Java符號執(zhí)行框架,可以理解為一個非標(biāo)準(zhǔn)的Java字節(jié)碼解釋器.它在解釋代碼時強(qiáng)制執(zhí)行路徑探索;例如當(dāng)解釋if語句時,創(chuàng)建2個程序狀態(tài),以便探索2個分支.該解釋器提供了一組路徑選擇策略,可以從各種約束求解器中進(jìn)行路徑條件選擇.

2.3 其他信息

除2.1~2.2節(jié)提到的可執(zhí)行文件以及源代碼之外,還有補丁、PoC等信息可以利用,這一類信息數(shù)量更加少.它們的特點是具有超高的信息密度,它們往往直接提示漏洞位置、觸發(fā)函數(shù)等等關(guān)鍵信息.但是這可能在精簡的過程中遺漏了某些信息而導(dǎo)致利用失敗.所以大部分研究會同時結(jié)合可執(zhí)行文件或者源代碼等其他信息,在保證利用成功的同時提高利用效率.

1) 補丁文件

APEG[35]使用二進(jìn)制分析工具將未安裝補丁的程序與已安裝補丁的程序進(jìn)行對比,識別出添加檢查的差異位置,檢查條件等.根據(jù)識別出來的檢查與可執(zhí)行文件生成到達(dá)檢查點以前的約束公式,接著自動生成不能通過添加的檢查的輸入.

2) PoC

FUZE[44]首先將一個PoC程序作為輸入,識別提取漏洞利用需要的關(guān)鍵信息,例如:①易受攻擊對象的基址和大小;②與留下懸空指針的自由站點相關(guān)的程序語句;③與懸空指針取消引用的站點相對應(yīng)的程序語句.然后,它利用內(nèi)核模糊化來探索各種系統(tǒng)調(diào)用,從而改變內(nèi)核異常的上下文.在每個包含不同內(nèi)核崩潰的上下文中,F(xiàn)UZE進(jìn)一步執(zhí)行符號執(zhí)行,跟蹤評估可能對漏洞利用有用的原語.Revery[45]提出一種使用提供的PoC輸入測試目標(biāo)應(yīng)用程序,基于已知崩潰路徑相關(guān)的信息,結(jié)合堆布局導(dǎo)向模糊測試技術(shù),獲取漏洞程序更多可利用狀態(tài)的方法.它跟蹤每個指針和內(nèi)存對象的狀態(tài),并捕獲崩潰路徑上的安全信息、運行時信息等.Revery還檢查損壞的內(nèi)存對象(表示為異常對象)以及可用于定位異常對象的對象,從路徑中檢索布局貢獻(xiàn)者信息,創(chuàng)建它們之間的點對點關(guān)系.基于這些指令和對象,Revery獲得了一個布局貢獻(xiàn)者有向圖來描述漏洞的內(nèi)存狀態(tài)和貢獻(xiàn)者.

3) 異常輸入

PolyAEG[60]接受一個易受攻擊的程序和一個異常輸入.它使用給定的異常輸入動態(tài)運行易受攻擊的程序,這些異常輸入可以使程序崩潰,跟蹤每個指令并執(zhí)行動態(tài)污點分析以收集執(zhí)行信息.接著分析污點傳播過程來檢測控制流的劫持點,并提取污染的存儲區(qū)域來存儲所使用的跳轉(zhuǎn)指令和Shellcode.基于污點執(zhí)行信息生成路徑約束,確保當(dāng)程序以漏洞為輸入運行時劫持點是可到達(dá)的.最后利用指令構(gòu)建一個跳轉(zhuǎn)指令鏈,將程序的執(zhí)行重定向到Shellcode.至此,通過前面階段中確定的指定數(shù)據(jù)依賴關(guān)系和路徑約束修改相關(guān)輸入字節(jié)來生成一個漏洞利用.

2.4 小 結(jié)

第2節(jié)介紹了漏洞利用中常見的輸入信息.其中可執(zhí)行文件最為研究者青睞,因其使用廣泛、易于獲取.當(dāng)然其他信息例如源代碼、PoC等雖然各有優(yōu)缺點,但是其中蘊含的信息很可能對漏洞利用十分關(guān)鍵.如果漏洞利用的過程中可以獲取的信息越多,漏洞利用的成功率將會越高.因此探索新的信息來源、結(jié)合多種信息利用是當(dāng)前研究熱門話題.

3 漏洞利用中的漏洞類型

漏洞利用和目標(biāo)漏洞類型息息相關(guān).我們統(tǒng)計了當(dāng)前漏洞自動利用研究中漏洞類型的情況,如圖6所示.可以看出:在自動利用漏洞類型中,內(nèi)存溢出類漏洞最多,占55%,Web漏洞其次占24%,另外還有21%的研究嘗試其他的漏洞類型.內(nèi)存溢出漏洞是最為經(jīng)典的漏洞,關(guān)于漏洞的研究的起始正是從內(nèi)存溢出開始的.而且內(nèi)存漏洞與其他漏洞相比,更容易帶來簡單而嚴(yán)重的危害,所以大部分研究者會考慮從內(nèi)存類漏洞進(jìn)行研究.緊接著就是Web注入類漏洞,Web是當(dāng)前最流行的開放系統(tǒng)和信息獲取渠道,自20世紀(jì)80年代以來,Web應(yīng)用程序已從文本,圖像和超鏈接的靜態(tài)HTML頁面演變?yōu)榭勺远x和交互式頁面.這導(dǎo)致了該類漏洞產(chǎn)生,也促進(jìn)了對Web漏洞的研究[61].與此同時,其他漏洞類型也同樣有研究的價值.

Fig. 6 Vulnerability type of exploit圖6 漏洞利用的漏洞類型

3.1 內(nèi)存溢出類漏洞

內(nèi)存溢出類漏洞主要包括:棧溢出、堆溢出和格式化字符串.內(nèi)存溢出漏洞之所以受到大家的關(guān)注,主要是因其危害性嚴(yán)重.一般來說,當(dāng)前計算機(jī)運行程序,首先要將程序代碼、數(shù)據(jù)復(fù)制到內(nèi)存,然后再交由CPU執(zhí)行.如果程序執(zhí)行過程中出現(xiàn)內(nèi)存意外讀寫,就有可能影響到運行的代碼或者數(shù)據(jù).若該漏洞被攻擊者所利用,就會導(dǎo)致各種可能的危害,甚至是被執(zhí)行任意代碼,也就意味著該計算機(jī)被攻擊者完全控制.

內(nèi)存類漏洞由于發(fā)生在內(nèi)存空間,因此非常需要獲取程序運行時的內(nèi)存信息.因此大部分研究需要針對如何獲取漏洞觸發(fā)時信息作出討論.

符號程序計數(shù)器(x86機(jī)器中的EIP寄存器)包含下一條要執(zhí)行的指令的地址,所以控制寄存器是所有控制劫持攻擊的一個常見的攻擊目標(biāo).因此,Crax[62]提出監(jiān)測EIP寄存器的狀態(tài)是解決不同類型的控制流劫持漏洞的一種全面而簡單的方法.當(dāng)符號執(zhí)行探索路徑并污染內(nèi)存時,使用符號數(shù)據(jù)更新EIP寄存器,從而觸發(fā)漏洞利用.漏洞利用生成將搜索內(nèi)存以找到可用的內(nèi)存區(qū)域來注入Shellcode和NOP sled,并將EIP寄存器重定向到Shellcode.

除了EIP寄存器之外,損壞的指針可能間接改變控制流.特別是,分配給符號指針的符號數(shù)據(jù)意味著可以將任意數(shù)據(jù)寫入任意地址.當(dāng)檢測到符號寫入時,寫入操作的目標(biāo)將被重定向到敏感數(shù)據(jù),如返回地址,.dtors或者GOT,以間接更新EIP寄存器[46].

對于堆溢出,如果攻擊者指定的輸入是符號化的,而且關(guān)鍵操作最終會操縱符號字節(jié),那么攻擊者的輸入將可能到達(dá)某些限制下的關(guān)鍵操作.這些約束決定了攻擊者對這些關(guān)鍵操作中使用的值進(jìn)行控制的級別.因此,一旦檢測到目的地的符號數(shù)據(jù)流,就可以發(fā)現(xiàn)堆利用原語[63].

除了直接檢測內(nèi)存數(shù)據(jù)以外,Pangr[64]嘗試了新的基于行為的建模方法.分別對格式字符串、棧溢出和堆溢出漏洞的行為進(jìn)行建模,并利用漏洞在符號執(zhí)行過程中觸發(fā)的內(nèi)在語義來尋找有價值的漏洞.在找到有利于以后漏洞利用的易受攻擊點后,漏洞分析器記錄輸入值和上下文信息,如寄存器、堆棧、堆和環(huán)境變量等.

3.2 Web注入類漏洞

Web注入類漏洞主要包括:SQL注入(SQLi)、XML注入(XMLi)和跨站腳本(XSS).3種類型的漏洞本質(zhì)上是相似的.例如SQLi和XSS都依賴于將惡意內(nèi)容注入到合法數(shù)據(jù)并從輸入源流動到漏洞觸發(fā)點.當(dāng)惡意內(nèi)容通過查詢注入數(shù)據(jù)庫或當(dāng)它到達(dá)向客戶端發(fā)送內(nèi)容(即代碼)的類似回顯的語句時,漏洞即被觸發(fā)[65].

直觀地,我們可以使用測試框架直接測試后端網(wǎng)絡(luò)服務(wù).文獻(xiàn)[66]介紹SOLMI,一個用于XML注入的基于求解器和變異的測試生成框架.它使用一組變異操作符,可以操縱非惡意的XML消息生成4種類型的XMLi攻擊來繞過XML網(wǎng)關(guān)并針對后端網(wǎng)絡(luò)服務(wù)進(jìn)行攻擊.

文獻(xiàn)[36]嘗試檢測以下4種模式來識別漏洞:1)不受信任的數(shù)據(jù)是從一些污點源讀入的,例如用戶控制的文件、網(wǎng)址請求、cookie值或網(wǎng)絡(luò)源.它隨后可以存儲在任意對象中,并作為參數(shù)或返回的結(jié)果傳入傳出.2)有些方法可能會從舊對象中派生出新對象.其中一些,如果傳遞給一個不可信的對象,將產(chǎn)生一個不可信的對象.3)任何不受信任的數(shù)據(jù),無論是來自原始污點源還是通過傳播程序?qū)С龅模疾荒苡糜谌魏挝埸c接收器,例如數(shù)據(jù)庫訪問例程.4)如果對象已經(jīng)通過引用或轉(zhuǎn)義對象內(nèi)容的清理程序,則前面的規(guī)則不適用.

文獻(xiàn)[37]比較由分別在2個輸入上執(zhí)行的PHP程序發(fā)布的數(shù)據(jù)庫狀態(tài)(例如選擇、插入).檢查器比較第1對相應(yīng)的語句,然后比較第2對語句,依此類推.如果任意對中的語句都是有效的SQL,但具有不同的語法結(jié)構(gòu)(即解析樹),則檢查器發(fā)出攻擊信號.

NAVEX[57]構(gòu)建了一個攻擊字典,用于實例化針對每類漏洞的分析模板.它包含:1)接收器.這些指令執(zhí)行攻擊的惡意內(nèi)容.例如回顯和打印PHP函數(shù)是XSS攻擊的接收器;2)清理器.包括一個廣泛的PHP清理列表,包括內(nèi)置的清理函數(shù)和操作符,它們可以隱式清理輸入(例如轉(zhuǎn)換操作符).3)遍歷類型.它指定了圖形所需的遍歷類型.4)攻擊字符串.攻擊字符串是可能出現(xiàn)在接收器上的(惡意)值的規(guī)范.目前,攻擊字典包含SQLi,XSS、文件包含、命令注入、代碼執(zhí)行和EAR的條目.

符號執(zhí)行也可以被用來識別Web注入類漏洞.Craxweb[67]將準(zhǔn)備好的符號數(shù)據(jù)注入到一個超文本傳輸協(xié)議請求中.如果符號數(shù)據(jù)可以在符號執(zhí)行過程中通過套接字傳播到HTTP響應(yīng)或數(shù)據(jù)庫查詢,則表明響應(yīng)或查詢易受攻擊,可以由原始輸入的符號數(shù)據(jù)控制.

3.3 其他類型漏洞

除了內(nèi)存溢出和Web注入2類常見漏洞外,仍有許多類型的漏洞值得探索.

1) UAF漏洞

對于?;蚨岩绯雎┒?,簡單地改變PoC程序的上下文就可能促進(jìn)對這些漏洞的利用,而UAF漏洞的利用需要對易受攻擊的對象進(jìn)行暫時和臨時的控制,在這些限制下,上下文的微小變化通常不利于可利用性的探索.FUZE[44]首先準(zhǔn)確定位懸空指針出現(xiàn)的位置,以及指針被PoC程序中定義的系統(tǒng)調(diào)用取消引用的位置.然后在上下文中執(zhí)行符號執(zhí)行,目的是確定上下文是否可以將內(nèi)核執(zhí)行導(dǎo)向可利用的機(jī)器狀態(tài).接著基于通過內(nèi)核模糊化獲得的內(nèi)容來設(shè)置符號執(zhí)行.最后通過使用符號執(zhí)行來識別對開發(fā)真正有用的機(jī)器狀態(tài).

2) 參數(shù)篡改漏洞

當(dāng)服務(wù)器端參數(shù)驗證弱于客戶端驗證時,網(wǎng)絡(luò)應(yīng)用程序被認(rèn)為是易受攻擊的.換句話說,服務(wù)器對客戶端提供的輸入的格式執(zhí)行的檢查比客戶端少.WAPTEC[39]利用網(wǎng)絡(luò)應(yīng)用程序中客戶機(jī)中代碼構(gòu)成的關(guān)于參數(shù)驗證檢查意圖的描述,直接從客戶機(jī)代碼中提取一個規(guī)范,然后用該規(guī)范檢查服務(wù)器端代碼的漏洞.

3) 安卓意圖(intent)欺騙

意圖是安卓系統(tǒng)中一個要執(zhí)行的操作的抽象描述.意圖消息要么攜帶特定目的地的信息,要么表達(dá)需要由某個能夠管理它的流程提供服務(wù)的通用請求,還可以作為廣播消息,通知一組感興趣的進(jìn)程發(fā)生了一些狀態(tài)更改[41].然而,安卓意圖傳遞機(jī)制不會向接收組件提供任何關(guān)于意圖來源的信息,因此有助于創(chuàng)建帶有惡意輸入數(shù)據(jù)的欺騙意圖.如果這種惡意輸入在被處理之前沒有被應(yīng)用程序正確驗證或凈化,則可能導(dǎo)致拒絕服務(wù)或者跨應(yīng)用腳本執(zhí)行[68].為了識別潛在的進(jìn)程間拒絕服務(wù)攻擊,文獻(xiàn)[69]檢查意圖屬性(即意圖動作、額外數(shù)據(jù)或類別)的每次使用,并沿著相應(yīng)屬性的使用定義鏈執(zhí)行反向數(shù)據(jù)流分析,以確定是否有可能導(dǎo)致未處理的空指針異常.對于跨應(yīng)用腳本執(zhí)行,文獻(xiàn)[69]首先通過在應(yīng)用程序中識別WebView.loadUrl(…)的調(diào)用來識別易受跨應(yīng)用程序腳本攻擊的語句.從這樣的語句開始,沿著傳遞給該語句的調(diào)用WebView.loadUrl(…)的參數(shù)的use-def鏈執(zhí)行向后數(shù)據(jù)流分析.如果這些參數(shù)中的任何一個是定義語句的使用,其右側(cè)涉及提取意圖屬性,則認(rèn)為該語句易受該漏洞的攻擊,可以依據(jù)此路徑生成漏洞利用.

4) 安全策略執(zhí)行不一致

安卓框架利用基于權(quán)限的安全模型,提供對各種系統(tǒng)資源的受控訪問.但是,敏感操作可能從不同的路徑到達(dá),這可能會導(dǎo)致安全檢查失效.因此,權(quán)限不足的攻擊者可能會通過采用缺乏安全檢查的路徑來執(zhí)行敏感操作.Centaur[59]首先找到所有到達(dá)敏感操作的可行路徑,然后給出每個可行路徑所需的許可(所需的許可包含在每個路徑條件中),接著驗證可行路徑之間的許可一致性,最后嘗試生成使用可行路徑驗證可疑漏洞的輸入.

5) 信息泄露

文獻(xiàn)[15]提出了一種在面向?qū)ο蟪绦蛑凶詣由尚畔⒘餍孤┞┒吹姆椒?他們的方法將自組合和符號執(zhí)行結(jié)合起來,為給定的信息流策略和程序位置的安全級別規(guī)范組成一個不安全公式.不安全公式產(chǎn)生了一個模型,該模型用于為該漏洞生成輸入數(shù)據(jù).

3.4 小 結(jié)

第3節(jié)介紹了不同漏洞類型的特點,并對常見的內(nèi)存溢出類漏洞、Web注入類漏洞及其他漏洞類型的常見利用方式作總結(jié).可以看出雖然不同種類的漏洞有所相似,但是進(jìn)行利用甚至自動化利用時仍然有不可逾越的區(qū)別.另外,當(dāng)前漏洞自動利用研究中,每次利用方案生成往往只能有一種漏洞類型,如何綜合多個漏洞(同類型或者不同類型)利用仍然是有待研究的問題.

4 自動利用的關(guān)鍵方法

獲得漏洞利用的相關(guān)信息以后,需要對這些信息進(jìn)行處理,以得到漏洞利用中最關(guān)鍵的信息:漏洞觸發(fā)與輸入的關(guān)系.只有獲得了這個信息,我們才有可能做到“利用”.常見的方法有:符號執(zhí)行、模糊測試、污點分析等.由于這些方法都有各自的局限,當(dāng)前研究主要針對這些方法進(jìn)行改進(jìn)優(yōu)化.

4.1 符號執(zhí)行

符號執(zhí)行(symbolic execution)是一種程序分析技術(shù),其可以通過分析程序來得到讓特定代碼區(qū)域執(zhí)行的輸入.目標(biāo)程序的輸入被當(dāng)成是符號變量,當(dāng)代碼執(zhí)行時,數(shù)據(jù)被“替代”為條件表達(dá)式和其他操作,結(jié)果遞增地表示為對輸入值的約束,以便在給定路徑上繼續(xù)執(zhí)行.每次代碼執(zhí)行包含符號值的條件檢查時,都會需要分叉執(zhí)行,在真實路徑上添加分支條件持有的約束,而在錯誤路徑上添加它不持有的約束.最后通過使用約束求解器來查找滿足約束的具體值,從而為程序生成測試用例[70].符號執(zhí)行是自動利用中使用得最多的方法.自2006年有人首次使用[34]至今最新的研究[71],符號執(zhí)行一直是漏洞利用中強(qiáng)有力的工具.

符號執(zhí)行的弱點是執(zhí)行過程中的路徑爆炸問題,這給大規(guī)模網(wǎng)絡(luò)應(yīng)用程序上的漏洞生成帶來了挑戰(zhàn).為應(yīng)對這個問題,最基礎(chǔ)的方法就是減少開銷.Craxweb[67]利用并發(fā)測試的優(yōu)勢嘗試提高效率.文獻(xiàn)[46]提出了一種基于路徑選擇優(yōu)化、選擇性符號輸入和偽符號變量惰性賦值的自動匹配漏洞生成方法來處理符號指針.文獻(xiàn)[69]通過從易受攻擊的語句啟動靜態(tài)符號執(zhí)行,減少了必須計算路徑的空間,而不是從應(yīng)用程序入口點開始到從這些入口點可訪問的所有語句執(zhí)行正向符號執(zhí)行.這種修剪可以減少利用生成的計算時間.而EOEDroid[72]則嘗試使用選擇性符號執(zhí)行探索事件處理程序中的路徑并收集路徑約束.更具體地說,給定一個應(yīng)用程序,其調(diào)用“選擇性符號執(zhí)行”來重復(fù)測試每個事件處理程序,直到遍歷所有內(nèi)部感興趣的路徑.有趣的路徑由子模塊“啟發(fā)式生成”發(fā)現(xiàn).當(dāng)一個分支被標(biāo)記為有趣時,不管條件語句是否是符號性的,EOEDroid都會強(qiáng)制遍歷這條路徑.同時,構(gòu)造并保存相應(yīng)的路徑約束.對于每一輪測試,子模塊“分析沙箱”用于保護(hù)分析環(huán)境免受污染,并保持每一輪測試的獨立性.

除此之外,AEG[38]提出了一種針對更有可能被利用的路徑優(yōu)先化技術(shù)和預(yù)處理符號執(zhí)行技術(shù).例如只探索具有最大輸入長度的路徑,或者與HTTP GET請求相關(guān)的路徑.然后使用基于啟發(fā)式方法優(yōu)先級隊列路徑優(yōu)先化技術(shù),使得程序首先選擇可能更易被利用的路徑.文獻(xiàn)[59]提出了一種分階段的具體執(zhí)行到符號執(zhí)行的技術(shù),用于分析像安卓框架這樣的中間件軟件.它將初始化階段作為整個系統(tǒng)的具體執(zhí)行運行,然后從具體執(zhí)行提供的執(zhí)行上下文中的一個入口點方法開始執(zhí)行符號執(zhí)行.避免了由于復(fù)雜的初始化階段導(dǎo)致的狀態(tài)空間爆炸,同時為符號執(zhí)行提供了上下文,使得輸入變量的類型和值信息可用.

4.2 模糊測試

模糊測試(fuzzing)是一種軟件測試技術(shù).其核心思想是將自動或半自動生成的隨機(jī)數(shù)據(jù)輸入到一個程序中,并監(jiān)視程序異常,以發(fā)現(xiàn)可能的程序錯誤.模糊測試常常用于檢測軟件或計算機(jī)系統(tǒng)的安全漏洞.典型模糊測試范例:測試生成、崩潰檢測和測試縮減.首先變異并產(chǎn)生符合輸入規(guī)范的數(shù)據(jù).然后定制數(shù)據(jù)各元字段中可以修改的部分.在執(zhí)行過程中,評估執(zhí)行的測試用例是否會產(chǎn)生導(dǎo)致利用的影響.每當(dāng)發(fā)現(xiàn)新的漏洞時,最小化相關(guān)操作,并生成一個只包含一組基本操作的PoC代碼作為證明[73].

針對模糊測試存在效率低下的問題.文獻(xiàn)[58]創(chuàng)建一個針對模糊化的軟件數(shù)據(jù)模型,并自動對數(shù)據(jù)文件和軟件本身進(jìn)行分析.通過靜態(tài)分析(弱點信息、輸入文件結(jié)構(gòu))進(jìn)行建模,建模后的數(shù)據(jù)結(jié)構(gòu)和弱點代碼通過連接模糊化測試,用于提取輸入數(shù)據(jù).Pangr[64]嘗試使用符號輔助模糊化利用了符號執(zhí)行對語義理解的優(yōu)勢,并且模糊化的執(zhí)行時間短.Deepfuzz[42]提出一種結(jié)合了初始種子生成協(xié)同執(zhí)行、路徑概率分布、路徑選擇和約束模糊化的深度模糊算法.

另外,Revery[45]采用了一種面向內(nèi)存布局的模糊化解決方案來擴(kuò)展發(fā)散路徑.它只探索內(nèi)存布局與PoC輸入相似的各種路徑.因此,它能驅(qū)動模糊器探索接近內(nèi)核崩潰的路徑,但是沒有使用完整的碰撞該路徑,而是使用前面提到的布局貢獻(xiàn)者指令作為模糊器的指導(dǎo).而且,Revery并不打算在模糊化過程中匹配確切的崩潰路徑或觸發(fā)漏洞.相反,它忽略了崩潰路徑中的大部分指令,只保留前面提到的布局貢獻(xiàn)者指令,這可能產(chǎn)生與漏洞類似的內(nèi)存布局.因此,模糊器可以探索許多不同的路徑,并有更好的機(jī)會找到可利用的狀態(tài),同時保持漏洞的記憶狀態(tài).Revery使用啟發(fā)式方法在不同的路徑中尋找可利用的狀態(tài)和劫持點,并試圖合成新的利用輸入,以觸發(fā)分叉路徑中的可利用狀態(tài)和崩潰路徑中的漏洞.它采用一種新的控制流拼接解決方案將分叉路徑和碰撞路徑拼接在一起,然后利用輕量級符號執(zhí)行來生成利用輸入.

4.3 污點分析

污點分析是一種跟蹤并分析污點信息在程序中流動的技術(shù).在漏洞分析中,使用污點分析技術(shù)將所感興趣的數(shù)據(jù)(通常來自程序的外部輸入)標(biāo)記為污點數(shù)據(jù),然后通過跟蹤和污點數(shù)據(jù)相關(guān)的信息的流向,可以知道它們是否會影響某些關(guān)鍵的程序操作,進(jìn)而挖掘或利用程序漏洞.

ARDILLA[37]介紹了一個使用污點分析識別Web注入漏洞的5項規(guī)則:

1) 污點源是輸入.在測試中的PHP程序的執(zhí)行過程中,污染源會導(dǎo)致污染數(shù)據(jù).ARDILLA為從輸入?yún)?shù)中讀取的每個值分配一個唯一的污點,由該值的來源標(biāo)識.

2) 污點集描述了每個運行時值如何受到污點源的影響,并且可以包含任意數(shù)量的元素.

3) 污點傳播指定運行時值如何獲取和丟失污點.ARDILLA通過應(yīng)用程序代碼中的分配和過程調(diào)用傳播未更改的污點集.在調(diào)用不是污點過濾器的內(nèi)置PHP函數(shù)時,ARDILLA為返回值構(gòu)造了一個污點集,它是函數(shù)參數(shù)值污點集的聯(lián)合.ARDILLA還通過合并組件字符串的污染集,為串聯(lián)創(chuàng)建的字符串值構(gòu)建污染集.在調(diào)用數(shù)據(jù)庫函數(shù)時,ARDILLA存儲或檢索數(shù)據(jù)值的污點.

4) 污點過濾器是內(nèi)置的PHP函數(shù),用于凈化輸入.在調(diào)用污點過濾器函數(shù)時,ARDILLA為返回值創(chuàng)建了一個空污點集.ARDILLA的用戶可以選擇指定污點過濾器列表.

5) 敏感的污點接收器是內(nèi)置的PHP函數(shù),可在XSS和SQLi攻擊中利用.例如,XSS的回顯和打印以及SQLi的mysql查詢.當(dāng)?shù)竭_(dá)對敏感接收器的調(diào)用時,ARDILLA記錄參數(shù)的污點集,指示從輸入到接收器的數(shù)據(jù)流,從而指示攻擊的可能性.

4.4 小 結(jié)

第4節(jié)介紹了漏洞自動利用中常見的3種方法.其中,符號執(zhí)行可以精確獲取輸入輸出與程序運行的關(guān)系,但是遇到狀態(tài)空間爆炸的問題;模糊測試可以少量信息下盡可能地探索可利用狀態(tài),但是效率較低;污點分析可以快速獲得輸入輸出存在的聯(lián)系,但是不能精確解出狀態(tài)與路徑.當(dāng)前研究主要圍繞優(yōu)化、結(jié)合這3種方法,但是目前效果仍不夠理想,繼續(xù)優(yōu)化現(xiàn)有方法或是提出新的方法將是漏洞自動利用領(lǐng)域深遠(yuǎn)而困難的問題.

5 未來研究展望

在綜述現(xiàn)有研究的同時,本文嘗試總結(jié)漏洞自動利用領(lǐng)域當(dāng)前面臨的主要挑戰(zhàn),并結(jié)合相關(guān)研究進(jìn)展給予展望.我們在表1中列舉了漏洞自動利用中一些挑戰(zhàn)與機(jī)遇.

Table 1 Top Seven Challenges and Opportunities

1) 綜合利用信息

在可執(zhí)行文件的漏洞利用研究方面,當(dāng)前主要集中在X86架構(gòu),然而隨著物聯(lián)網(wǎng)設(shè)備的普及,不同架構(gòu)的設(shè)備與漏洞也隨之增加.目前跨架構(gòu)的信息處理仍然存在較大的困難.除了常見的可執(zhí)行文件、源代碼等信息,仍然有很多信息值得進(jìn)行利用探索,例如漏洞庫、博客、論壇等.當(dāng)前不少研究在自動利用的過程中也嘗試使用了自定義的信息,但尚未有系統(tǒng)性的總結(jié)與分析.當(dāng)前研究漏洞種類單一,所使用的信息也較少,可以預(yù)見未來所需要的信息種類和數(shù)量將大大增加,因此需要對這些不常見的信息進(jìn)行系統(tǒng)性分析與利用研究.綜合多種信息進(jìn)行漏洞利用看似是漏洞自動利用的完美解決方案.

2) 利用的漏洞類型與數(shù)量

漏洞自動利用由于受到技術(shù)以及精力的限制,過去研究涉及漏洞類型有限.然而隨著漏洞自動利用的發(fā)展,相信將來會更多的漏洞類型被引入.同時我們也觀察到,不同的漏洞類型也會有相似之處,甚至可以被一個統(tǒng)一的利用方法進(jìn)行利用.那么,是不是所有的漏洞類型都可以被統(tǒng)一利用?如果不行的話,不同類型的漏洞自動利用邊界會在哪?

另外,在大部分實際情況中,如果要達(dá)到某種漏洞利用目的,往往需要同時結(jié)合多個漏洞來利用[74].但是當(dāng)前的自動利用研究都無法產(chǎn)生綜合多個漏洞的利用.這對于漏洞評估的實踐來說仍是一個不得不重視的問題.

3) 利用關(guān)鍵方法的改進(jìn)

當(dāng)前利用方法仍然存在較大的局限.例如符號執(zhí)行的狀態(tài)空間爆炸問題、模擬執(zhí)行的環(huán)境建模問題、模糊測試的效率低下問題等.符號執(zhí)行使用至今已經(jīng)有10余年的歷史,經(jīng)歷了從最初的靜態(tài)符號執(zhí)行到動態(tài)符號執(zhí)行、混合符號執(zhí)行的發(fā)展.我們觀察到,當(dāng)前的研究也傾向于結(jié)合多種方法的優(yōu)點以進(jìn)行自動利用.雖然現(xiàn)有的工作已經(jīng)有一部分的成果,但仍然有很大的改進(jìn)空間.在將來,進(jìn)一步優(yōu)化、改進(jìn)現(xiàn)有方法,提出更適合于自動利用的方法將是自動利用的核心問題.

6 總 結(jié)

隨著計算機(jī)技術(shù)的不斷發(fā)展,各種技術(shù)不斷更新,漏洞自動利用作為漏洞評估的利器重新得到研究人員的重視.

本文總結(jié)了漏洞利用方面的最新研究,歸納了漏洞自動利用的整體框架,并從利用信息、漏洞類型、利用方法3方面對現(xiàn)有研究進(jìn)行綜述.

我們認(rèn)為在未來:從更多的信息類型獲取漏洞利用信息,整合多種信息進(jìn)行漏洞利用將是發(fā)展趨勢;拓展更多漏洞類型進(jìn)行自動利用,多個漏洞同時綜合利用將是研究重點;優(yōu)化現(xiàn)有自動利用方法,提出新的漏洞自動利用方案將對漏洞自動研究、漏洞評估能力有重大影響.

猜你喜歡
污點漏洞內(nèi)存
漏洞
基于代碼重寫的動態(tài)污點分析
筆記本內(nèi)存已經(jīng)在漲價了,但幅度不大,升級擴(kuò)容無須等待
黑螞蟻
“春夏秋冬”的內(nèi)存
基于selenium的SQL注入漏洞檢測方法
污點
漏洞在哪兒
內(nèi)存搭配DDR4、DDR3L還是DDR3?
上網(wǎng)本為什么只有1GB?
乐业县| 西城区| 大连市| 远安县| 雷波县| 广宁县| 石楼县| 钟山县| 七台河市| 云和县| 新巴尔虎左旗| 石门县| 中宁县| 延吉市| 化州市| 五大连池市| 五华县| 岳普湖县| 江源县| 泌阳县| 津市市| 长岛县| 海门市| 台安县| 建昌县| 甘肃省| 淅川县| 丹东市| 华坪县| 芦山县| 江山市| 尉犁县| 南平市| 伊吾县| 新安县| 丁青县| 瑞昌市| 习水县| 西宁市| 阿勒泰市| 淳安县|