999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

安全漏洞自動利用綜述

2019-10-21 05:44:12趙尚儒李學俊余媛萍黃偉豪蘇璞睿張玉清
計算機研究與發展 2019年10期
關鍵詞:程序利用信息

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

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

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

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

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

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

Fig. 2 Literature number of automatic exploitation generation圖2 漏洞自動利用文獻數量

本文的主要貢獻有3個方面:

1) 系統地調研了2006年至今的近70篇漏洞自動利用文獻,指出了漏洞利用研究的發展趨勢,總結了漏洞自動利用的一般框架;

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

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

1 漏洞自動利用

1.1 漏洞利用的定義

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

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

1.2 漏洞自動利用的發展

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

1) 攻擊方法

由于漏洞利用本質上是各種攻擊方法的實例化,所以攻擊方法是漏洞利用的研究基礎.從各種內存沖突方案[12-14]到數據流攻擊[15-16],攻擊方案的發展給漏洞利用帶來新鮮的血液.

2) 防護繞過與代碼生成

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

3) 內存布局

由于內存漏洞研究廣泛、危害大,所以有關內存布局的研究也是主要的方向之一,如何精確地控制內存數據以達到預期目的是它們的研究目標[30-33].

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

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

1.3 漏洞自動利用框架

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

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

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

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

2 漏洞利用的信息輸入

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

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

本節將進一步討論不同的信息輸入對漏洞自動利用的影響.

2.1 可執行文件

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

由于可執行文件是一系列可執行的二進制指令,根據是否將指令輸入硬件執行,我們可以將可執行文件分析方法分為靜態分析和動態分析.

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

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

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

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

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

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

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

文獻[55]允許研究人員開始在目標設備上執行固件.開始時固件在設備上執行,直到到達斷點,接近研究者希望更仔細分析的有趣代碼段.這也允許研究人員快速到達感興趣的代碼段,而不必從絕對開始就模擬固件.當到達斷點時,在目標設備上停止執行,并執行文本轉換.設備的整個狀態(內存和寄存器)被傳輸到仿真器,仿真器然后從設備停止的地方恢復執行.上下文切換可以發生多次,每當這種情況發生時,仿真器擁有的與設備不同步的任何狀態(如存儲器和寄存器)被復制到目標設備,然后從模擬器停止的地方繼續執行.

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

2.2 源代碼

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

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

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

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

文獻[58]使用源代碼弱點白盒檢測引擎和開源收集引擎將分析目標的源代碼轉換為中間代碼,并對轉換后的中間代碼和處理后的數據進行編碼,然后將其傳輸到弱點分析引擎服務器.其利用基于編譯器的符號執行在源代碼級進行弱演繹,提取測試結果的弱代碼連接黑盒測試.

除此之外,由于部分高級語言為解釋語言,它們可以通過修改解釋器來進行符號執行.文獻[59]構建了一個基于Java符號執行框架,可以理解為一個非標準的Java字節碼解釋器.它在解釋代碼時強制執行路徑探索;例如當解釋if語句時,創建2個程序狀態,以便探索2個分支.該解釋器提供了一組路徑選擇策略,可以從各種約束求解器中進行路徑條件選擇.

2.3 其他信息

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

1) 補丁文件

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

2) PoC

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

3) 異常輸入

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

2.4 小 結

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

3 漏洞利用中的漏洞類型

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

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

3.1 內存溢出類漏洞

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

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

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

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

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

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

3.2 Web注入類漏洞

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

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

文獻[36]嘗試檢測以下4種模式來識別漏洞:1)不受信任的數據是從一些污點源讀入的,例如用戶控制的文件、網址請求、cookie值或網絡源.它隨后可以存儲在任意對象中,并作為參數或返回的結果傳入傳出.2)有些方法可能會從舊對象中派生出新對象.其中一些,如果傳遞給一個不可信的對象,將產生一個不可信的對象.3)任何不受信任的數據,無論是來自原始污點源還是通過傳播程序導出的,都不能用于任何污點接收器,例如數據庫訪問例程.4)如果對象已經通過引用或轉義對象內容的清理程序,則前面的規則不適用.

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

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

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

3.3 其他類型漏洞

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

1) UAF漏洞

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

2) 參數篡改漏洞

當服務器端參數驗證弱于客戶端驗證時,網絡應用程序被認為是易受攻擊的.換句話說,服務器對客戶端提供的輸入的格式執行的檢查比客戶端少.WAPTEC[39]利用網絡應用程序中客戶機中代碼構成的關于參數驗證檢查意圖的描述,直接從客戶機代碼中提取一個規范,然后用該規范檢查服務器端代碼的漏洞.

3) 安卓意圖(intent)欺騙

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

4) 安全策略執行不一致

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

5) 信息泄露

文獻[15]提出了一種在面向對象程序中自動生成信息流泄漏漏洞的方法.他們的方法將自組合和符號執行結合起來,為給定的信息流策略和程序位置的安全級別規范組成一個不安全公式.不安全公式產生了一個模型,該模型用于為該漏洞生成輸入數據.

3.4 小 結

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

4 自動利用的關鍵方法

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

4.1 符號執行

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

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

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

4.2 模糊測試

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

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

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

4.3 污點分析

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

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

1) 污點源是輸入.在測試中的PHP程序的執行過程中,污染源會導致污染數據.ARDILLA為從輸入參數中讀取的每個值分配一個唯一的污點,由該值的來源標識.

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

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

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

5) 敏感的污點接收器是內置的PHP函數,可在XSS和SQLi攻擊中利用.例如,XSS的回顯和打印以及SQLi的mysql查詢.當到達對敏感接收器的調用時,ARDILLA記錄參數的污點集,指示從輸入到接收器的數據流,從而指示攻擊的可能性.

4.4 小 結

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

5 未來研究展望

在綜述現有研究的同時,本文嘗試總結漏洞自動利用領域當前面臨的主要挑戰,并結合相關研究進展給予展望.我們在表1中列舉了漏洞自動利用中一些挑戰與機遇.

Table 1 Top Seven Challenges and Opportunities

1) 綜合利用信息

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

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

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

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

3) 利用關鍵方法的改進

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

6 總 結

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

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

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

猜你喜歡
程序利用信息
利用min{a,b}的積分表示解決一類絕對值不等式
中等數學(2022年2期)2022-06-05 07:10:50
利用一半進行移多補少
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
利用數的分解來思考
Roommate is necessary when far away from home
“程序猿”的生活什么樣
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
主站蜘蛛池模板: YW尤物AV无码国产在线观看| 欧美日韩福利| 日韩中文无码av超清| 婷五月综合| 四虎永久免费地址在线网站| 婷婷色狠狠干| 中国一级特黄视频| 国产激情在线视频| 亚洲精品免费网站| 久久综合色视频| 天天综合网在线| 色偷偷男人的天堂亚洲av| lhav亚洲精品| 久久精品一卡日本电影| 久久精品午夜视频| 国产亚洲精久久久久久无码AV| 99久久成人国产精品免费| 狠狠操夜夜爽| 亚洲欧洲日产国产无码AV| 美女无遮挡被啪啪到高潮免费| 日本一区高清| 亚洲AV无码精品无码久久蜜桃| 国产精品无码AV片在线观看播放| 日韩专区欧美| 欧美不卡视频在线观看| 91欧美亚洲国产五月天| 国产精品手机在线播放| 午夜一区二区三区| 国产日韩精品欧美一区灰| 久久人人爽人人爽人人片aV东京热 | 国产经典在线观看一区| 四虎影视库国产精品一区| 1024国产在线| 国内精品久久九九国产精品| 亚州AV秘 一区二区三区 | 久久婷婷综合色一区二区| 欧洲极品无码一区二区三区| 久久99精品久久久久久不卡| 69综合网| 2048国产精品原创综合在线| 日韩无码视频网站| 日韩无码视频播放| 国产成人免费观看在线视频| 亚洲人在线| 久久狠狠色噜噜狠狠狠狠97视色 | 色婷婷成人| 久综合日韩| 9999在线视频| 91亚洲精品第一| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 欧美国产另类| 久久人人妻人人爽人人卡片av| 在线精品自拍| 国产一区在线视频观看| 亚洲美女久久| 久久黄色毛片| 最新日本中文字幕| 波多野结衣无码AV在线| 欧美在线视频不卡第一页| 综合久久五月天| 中文字幕人成乱码熟女免费| 中文成人在线视频| 国产女人综合久久精品视| 国内精品久久九九国产精品| 麻豆精品国产自产在线| 国产偷国产偷在线高清| 欧洲熟妇精品视频| 中文字幕欧美日韩高清| 欧美精品一区在线看| 伊人久久精品亚洲午夜| lhav亚洲精品| 亚洲精选无码久久久| 伊人久久综在合线亚洲2019| 国产精品久久国产精麻豆99网站| 国产一级毛片在线| 亚洲欧美日韩精品专区| 国产高潮流白浆视频| 色精品视频| 在线国产三级| 67194在线午夜亚洲| 国产在线高清一级毛片| 18禁色诱爆乳网站|