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

基于Crash 的漏洞利用自動生成系統

2020-06-28 08:15:12靳憲龍徐世偉黃雅娟
現代計算機 2020年14期
關鍵詞:程序利用

靳憲龍,徐世偉,黃雅娟

(1.四川大學計算機學院,成都610065;2.中國人民解放軍78156 部隊,蘭州730030;3.國防科技大學國際關系學院,南京210012)

0 引言

在網絡空間斗爭日益激烈的形式下,安全漏洞始終是博弈雙方關注的核心問題之一。安全漏洞的研究主要分為漏洞挖掘、漏洞分析及利用、漏洞評估、漏洞修復等。近年來,隨著模糊測試、機器學習等技術在漏洞挖掘領域的應用,顯著提升了漏洞挖掘的自動化水平。由于漏洞分析的復雜性及編寫利用程序的靈活性,傳統的漏洞分析與利用依賴具備專業知識的安全專家進行。隨著漏洞挖掘自動化程度的提高,有限的人力資源已不足以有效應對漏洞的快速增長,為了能夠實現對新披露漏洞的快速響應,進一步提升漏洞利用的自動化水平已迫在眉睫。

與此同時,美國國防部高等研究計劃署(DARPA)通過研究得出,自動化攻防在當前技術體系下已可實現,并于2013 年發起網絡超級挑戰賽(Cyber Grand Challenge,CGC)[1]。經過三年的預決賽,最終于2016的DEFCON CTF[2]中舉辦了自動化攻防領域中的首次人機對戰,體現出自動化攻防對自動化漏洞利用的迫切需求與廣闊前景。

漏洞自動利用是指通過給定的數據,如可執行程序、源代碼、補丁程序等,生成可以利用該漏洞達到某特定目的的數據或者代碼的過程的自動化實現[3]。該過程非常復雜,包括準確定位漏洞點、通過符號執行技術生成能夠觸發漏洞的程序輸入、獲取運行時信息及崩潰現場數據、通過SMT 對約束集合求解并最終生成漏洞利用樣本。

自2008 年D. Brumley 首次提出基于補丁比對的漏洞利用自動生成方法APEG[4]以來,研究人員陸續提出AEG[5]、AXGEN[6]、MAYHEM[7]等方案。依據所需輸入數據的不同,可將現有方案分為四類:基于可執行文件、基于源代碼、基于補丁文件、基于異常輸入的解決方案。本文通過分析CRAX[8]、FUZE[9]、Revery[10]、Poly-AEG[11]等基于異常輸入的解決方案,發現基于異常輸入的方案存在以下問題:①初始異常輸入無法保證漏洞復現的成功率;②在成功復現漏洞的情況下,無法保證漏洞利用的成功率。

為了緩解以上問題,我們提出基于Crash 的漏洞利用自動生成系統C-Rex。系統遵循以下設計原則:①采用混合符號執行技術復現崩潰路徑;②復現失敗時搜索相鄰路徑,嘗試獲取新崩潰點;③分析崩潰現場并判定其可利用性;④生成劫持控制流的漏洞利用樣本。

1 方法概述

本文設計并實現了基于Crash 的漏洞利用自動生成系統C-Rex,系統采用動態分析、符號執行[12]等技術,結合異常輸入對目標程序中所存在漏洞進行復現、判定其可利用性并自動生成實現控制流劫持的漏洞利用樣本。系統架構如圖1 所示。

圖1 C-Rex 架構圖

基礎層中CLE、archinfo 負責裝載二進制對象及其所依賴的庫并生成地址空間;PyVEX 將匯編代碼轉換為中間語言VEX,以實現對不同架構的支持;Claripy為符號求解引擎,完成變量符號化、約束生成、約束求解等。平臺層實現了符號執行引擎及多種二進制程序分析方法。基礎層與平臺層共同構成了二進制分析平臺angr。基于該平臺,C-Rex 實現了路徑搜索、可利用性判定、利用樣本生成。

路徑搜索通過動態分析與混合符號執行技術復現程序崩潰,當復現失敗時搜索臨近路徑并探索新崩潰點。由于真實環境及漏洞分析的復雜性,使得無法保證漏洞復現及生成漏洞利用樣本的成功率。當復現失敗時,雖然該崩潰路徑無法利用,但一定程度上反應出該路徑或周邊路徑在軟件測試階段并未被充分測試,通過對周邊路徑的深入探索,挖掘出新崩潰點的概率較高。因此,當復現失敗時,路徑搜索模塊將采用動態符號執行技術,對崩潰點臨近路徑進行搜索,以獲取新崩潰點。

可利用性判定通過收集崩潰現場的運行時信息,分析寄存器中的符號化狀態、符號化指令指針、符號寫等行為,對劫持程序控制流的行為進行監控,以實現對漏洞可利用性的判定。

漏洞利用生成負責生成多樣性漏洞利用樣本,利用方式可分為代碼注入與代碼復用兩類。對于代碼注入類利用,首先檢查被用戶輸入數據控制的內存區域,搜索滿足條件的連續內存區域以存放Shellcode。對于代碼復用類利用,主要采用ret2libc[15]、ROP[16]技術,生成漏洞利用樣本。

2 系統設計與實現

C-Rex 在執行過程中,首先加載目標程序及異常輸入,結合具體執行與動態符號執行復現崩潰;復現失敗時,重新探索程序狀態空間,搜索臨近路徑,挖掘新崩潰點;其次,在獲取到有效Crash 的基礎上,采集崩潰現場數據,分析EIP、EBP 寄存器及內存中符號變量的布局,對Crash 的可利用性作出判定;最后,選取利用方式并生成漏洞約束,對約束集合求解生成漏洞利用樣本。執行流程如圖2 所示。

圖2 C-Rex 流程圖

系統實現過程中,使用開源模擬器QEMU[13]獲取程序執行路徑,通過該路徑指引動態符號執行路徑;使用angr[12]作為符號執行引擎,實現Crash 復現與新路徑搜索;使用Z3[14]作為約束求解器,以生成漏洞利用樣本。系統由Crash 路徑搜索、可利用性判定、利用生成三個模塊構成。

2.1 Crash路徑搜索

Crash 路徑搜索模塊負責復現崩潰并搜索臨近崩潰點,由Concolic Tracing、Path Explore 兩部分構成。其中,Concolic Tracing 負責對崩潰進行復現,Path Explore負責復現失敗時對臨近路徑的搜索,如圖3 所示。

(1)Concolic Tracing

通過QEMU 加載待分析的二進制程序及導致程序崩潰的異常輸入,設置調試參數為“-nochain”、“-exec”、“-page”以獲取程序執行路徑,并將執行結果以日志的形式保存。設置符號執行引擎angr 的路徑搜索方式為“Tracer”、“Oppologist”。“Tracer”使得在采用動態符號執行技術分析程序時,能夠以QEMU 日志中所記錄的執行路徑為導向,指引程序沿同一路徑執行。“Oppologist”參數使得遇到不支持的指令時,將其具體化并使用unicorn 引擎進行模擬,從而允許繼續執行。隨后,通過動態符號執行復現執行路徑,若復現成功,將崩潰時的狀態保存至Crashed Stash 中;若復現失敗,將程序執行結束前的最后兩個狀態保存至Traced Stash 中,以供后續探索新崩潰點時使用。Stashes 為angr 中的核心概念之一,用以對程序執行過程中的狀態進行管理,通過Stashes 可以根據需要對程序狀態進行過濾、合并、移動等操作。

圖3 Crash路徑搜索

(2)Path Explore

當完成Concolic Tracing 且未能成功復現崩潰時,C-Rex 執行Path Explore 以探索臨近路徑,挖掘新崩潰點。首先,獲取Traced Stashes 中存儲的Basic Block 地址;隨后,依據異常輸入,初始化initial_state 及Simulation Manager;將獲取到的Basic Block 地址作為約束條件,依托angr 進行動態符號執行,通過監測執行過程中是否出現Unconstrained 狀態,以判斷是否成功挖掘出新崩潰點。

(3)參數優化

C-Rex 在實現過程中,通過優化以提高執行效率,首先對分析平臺angr 進行訂制,通過冗余路徑剪枝、狀態合并等方式提高效率;其次通過增加前置約束,以緩解動態符號執行過程中出現的狀態空間爆炸、路徑選擇等問題。優化內容如表1 所示,Content 表示優化項目、Options 表示優化內容。

2.2 可利用性判定

表1 參數優化

表2 崩潰類型

State 是angr 中用以存儲程序狀態的對象,其中包含當前狀態中的內存、寄存器、文件系統及任何會在執行中改變的數據。C-Rex 在判定崩潰的可利用性時,首先獲取發生異常時的state,通過state.regs.ip、state.regs.bp、state.mem 訪問此刻的寄存器及內存狀態,判斷其中符號變量的分布,針對IP_OVERWRITE、BP_OVERWRITE、 PARTIAL_IP_OVERWRITE、 PARTIAL_BP_OVERWRITE、 WRITE_WHAT_WHERE、 WRITE_X_WHERE 六類異常,能夠生成劫持控制流的漏洞利用樣本。

2.3 利用生成

(1)代碼注入

C-Rex 使用shellcode 作為Payload,將其注入具有執行權限且可控的內存空間,通過覆蓋程序返回地址以劫持控制流,完成漏洞利用。在實現過程中,C-Rex通過state 中的memory 接口獲取崩潰時的內存布局,查找其中連續且具有執行權限的地址空間,隨后選取shellcode 并計算其長度。在劫持程序控制流時,首先采取以shellcode 起始地址覆蓋函數返回地址的方式,通過函數返回地址、shellcode 地址、shellcode 長度構造約束條件并求解,若求解成功則生成以shellcode 起始地址覆蓋函數返回地址的漏洞利用樣本。若求解失敗,則搜索內存中存在的“jmp esp”指令,使用該指令的地址覆蓋函數返回地址實現對程序控制流的劫持。通過已獲取的“jmp esp”指令地址、崩潰時的內存布局、shellcode 長度,構造約束條件并求解,生成使用“jmp esp”作為跳板的漏洞利用樣本。

(2)代碼復用

代碼復用攻擊是指通過存在漏洞的二進制程序地址空間中已存在的代碼片段構造惡意代碼,主要包括:ret2libc、ROP、JOP 等技術。C-Rex 在實現過程中,主要針對ret2libc 與ROP 兩種方式。

ret2libc 技術不以Shellcode 為Payload,而是將控制流導向庫函數入口,通過執行庫函數以實現惡意功能。由于庫函數具有可執行權限,因此ret2libc 可以繞過DEP 的保護。在實現過程中程序依賴共享庫libc.so.6,其中包含大量可利用函數,在不考慮ASLR 的情況下,共享庫的加載基址不會改變,C-Rex 首先獲取system()函數、“/bin/sh”字符串在共享庫中的偏移,結合基址計算出內存中的真實地址,劫持控制至system()函數,通過執行system(“/bin/sh”)獲取本地shell。

ret2libc 以函數為單位進行代碼復用,在實際應用中缺乏靈活性,因此C-Rex 實現了第二種復用方式ROP(Return-Oriented Programming)。ROP 技術通過串接以ret 指令為結尾的代碼片段(gadgets)實現惡意功能。C-Rex 調用angrop 查找所需gadgets 并自動構建ROP 鏈,最終實現ROP 攻擊。

運用Epidata 3.1對數據進行雙錄入,采用SPSS 20.0對數據進行整理與分析。符合正態分布的計量資料以(±s)表示,采用t檢驗進行組間比較;計數資料以例數(%)表示,采用x2檢驗進行組件比較。P<0.05為差異有統計學意義。

3 實驗與評估

為了驗證C-Rex 自動生成漏洞利用的效果,我們設計了兩類實驗。首先,通過存在漏洞的CTF 題目,以驗證C-Rex 的有效性;其次,以AEG 所使用的測試集為基礎,從中選取10 款包含漏洞的開源應用,評估生成效果。

(1)實驗環境

本文中所使用的實驗環境如下:處理器采用Intel Core i7 2.5 GHz,內存為DDR3 1600MHz 16GB,操作系統為Ubuntu 18.04 x86_64,編譯器為GCC 7.3.0[17],編譯時使用-O2、-z execstack、-fno-stack-protector、-nopie、-z norelro 選項,禁用FORTIFY、NX、Canary、PIE、RELRO。

(2)有效性驗證

使用Insomni Hack CTF 2016[18]中的題目作為測試樣例。存在漏洞的源碼如圖4 所示,代碼中為字符數組component_name 分配的空間為128 字節,為結構體component 中的成員name 分配的空間為32 字節。溢出點位于第十行,將cmp_name 中的數據復制至cmp->name 時,未對緩沖區邊界進行檢查,導致緩沖區溢出進而對程序控制流進行劫持。

圖4 漏洞源碼

使用GCC 對源碼進行編譯,生成二進制程序Demo_Vul,構造異常輸入36 個“A”。通過C-Rex 加載Demo_Vul 及異常輸入,最終成功生成漏洞利用樣本,劫持Demo_Vul 控制流并獲得本地shell,驗證了CRex 的有效性。

(3)對比測試

以AEG 的測試集為基礎,從中選取10 款開源應用,通過C-Rex 以及Rex 自動生成漏洞利用樣本,表4總結了實驗結果。其中,“Program”為開源應用名稱、“Version”為所對應版本、“Input Src”為輸入數據的類型、“Vul Type”為漏洞類型、“C-Rex”為C-Rex 生成結果、“Rex”為Rex 生成結果、“Advisory ID”為漏洞所對應CVE/OSVDB 編號。

表4 實驗結果

對比C-Rex 與Rex 的實驗結果可以看出,由Shellphish[19]開發的漏洞自動利用系統Rex,其設計初衷在于參加CGC 競賽,因此對真實應用程序的支持并不完善,對于選取的10 款開源應用均無法生成漏洞利用樣本。本文所提出的漏洞利用自動生成系統C-Rex 在實驗當中,針對10 款開源應用,均能夠成功生成漏洞利用樣本,有效驗證了C-Rex 的實用性。

4 相關工作

2008 年D. Brumley 等人在IEEE S&P 會議上,首次提出了基于補丁比對的漏洞利用自動生成方法APEG。由于該方法操作性強,因此在實際測試過程中取得了良好的效果,并得到了安全研究者的普遍認可。其不足主要表現在:首先,對補丁程序的依賴;其次,隨著軟件復雜度的提升,簡單的指令比對難以快速定位漏洞位置,與漏洞無關的補丁也對分析漏洞機理造成了一定的影響;再次,APEG 所生成的利用程序以DoS 為主,對漏洞的利用程度有限。

2011 年CMU 的T.Avgerinos 等人在NDSS 會議上首次提出了基于源碼的漏洞利用自動生成方法AEG。該方案能夠針對棧溢出、格式化字符串漏洞生成具備控制流劫持能力的利用樣本,是首個完整實現從漏洞挖掘到漏洞利用生成全流程的自動化解決方案。該方法的局限性主要體現在:首先,依賴源代碼;其次,所針對的漏洞類型限于棧溢出與格式化字符串,無法處理整型溢出、堆溢出等類型的漏洞;最后,生成的利用程序對系統環境依賴嚴重。

2012 年Shih-Kun Huang 等人提出了基于異常輸入的漏洞利用自動生成系統CRAX。相較于AEG 采用動態分析技術獲取崩潰點的動態信息,CRAX 采用回溯分析獲取漏洞點的動態信息,提高了所生成的漏洞利用程序的成功率。該方法的局限性主要體現在,對導致程序崩潰的異常輸入的強依賴,能否成功生成利用程序與異常輸入數據密切相關。

2018 年Wei Wu 等人在USENIX 安全會議上首次提出了基于內核UAF 漏洞的漏洞利用自動生成系統FUZE。該方案綜合運用模糊測試、符號執行、動態追蹤等技術,針對內核UAF 漏洞自動生成利用程序。通過對15 個內核UAF 漏洞進行測試,FUZE 成功生成利用程序并一定程度上繞過保護機制,證明了該方法的有效性。

2018 年Yan Wang 等人在CCS 安全會議上提出了針對堆漏洞的解決方案Revery。該方案在實現過程中,首先,分析漏洞位置和相關內存布局,建立異常對象內存布局圖、內存布局貢獻者圖;其次,以異常對象的內存布局為導向,采用定向Fuzzing 探索替代路徑,并結合污點分析技術,在替代路徑中探索可利用狀態;最后,確定拼接點、拼接路徑,組合生成漏洞利用路徑。求解約束集合并生成漏洞利用樣本。在測試過程中,Revery 以19 個CTF 賽題為樣本,對其中9 個程序自動生成漏洞利用,5 個可以自動化轉化為可利用狀態,證明了該方法的有效性。

5 結語

本文提出基于Crash 的漏洞利用自動生成方法CRex,該方法包含Crash 路徑搜索、可利用性判定、利用生成三個環節。在實驗中,能夠對CTF 題目及10 款開源應用成功生成劫持控制流的漏洞利用樣本,證明了C-Rex 的有效性。C-Rex 采用angr 作為符號執行引擎,但目前angr 缺少必要的系統調用支持,使得C-Rex對大型應用的支持并不完善,同時C-Rex 所能解決的漏洞限于經典的棧溢出,并不適用于更復雜的漏洞類型,以上問題的解決有待于更進一步的研究。

猜你喜歡
程序利用
利用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-03-30)2017-03-30 06:44:45
主站蜘蛛池模板: 久久精品亚洲热综合一区二区| 成人久久18免费网站| 亚洲码在线中文在线观看| 免费jjzz在在线播放国产| 国内精品视频| 9cao视频精品| 亚洲国产理论片在线播放| 尤物在线观看乱码| 久久免费精品琪琪| 丁香婷婷综合激情| 波多野结衣爽到高潮漏水大喷| 亚洲人成成无码网WWW| 久久无码av三级| 国产爽歪歪免费视频在线观看 | 久热re国产手机在线观看| 久久黄色影院| 成人国产一区二区三区| 无码有码中文字幕| 国产尤物视频在线| 中文天堂在线视频| 国产无码网站在线观看| 国产免费a级片| 亚洲国产精品久久久久秋霞影院| 最新亚洲人成无码网站欣赏网 | 成人午夜亚洲影视在线观看| 在线免费无码视频| 欧美成人看片一区二区三区 | 久久精品人妻中文系列| 国产成人免费高清AⅤ| 国产97视频在线观看| 看你懂的巨臀中文字幕一区二区| 久久精品国产亚洲AV忘忧草18| 91午夜福利在线观看精品| 凹凸国产分类在线观看| 国产成人无码AV在线播放动漫 | 美女潮喷出白浆在线观看视频| 免费一级无码在线网站| 久久亚洲精少妇毛片午夜无码| 国产污视频在线观看| 中文字幕一区二区人妻电影| 精品撒尿视频一区二区三区| 一区二区三区四区日韩| 亚洲第一中文字幕| 国产成人一区免费观看| 久久久精品国产SM调教网站| 欧美精品1区2区| 亚洲手机在线| 中文字幕无码av专区久久| 性视频久久| 欧美精品1区| 国产成人精品一区二区免费看京| 久久一色本道亚洲| 亚洲一级毛片在线观播放| 国产在线第二页| 99无码中文字幕视频| 国产午夜福利片在线观看| 久久综合九九亚洲一区| 99热国产在线精品99| 国产人人射| 亚洲视频在线青青| 国产剧情伊人| 91精品专区国产盗摄| 国产一区二区三区在线观看视频| 91年精品国产福利线观看久久| 呦系列视频一区二区三区| 无码专区第一页| 亚洲无码视频图片| 中文字幕永久在线观看| 日本高清成本人视频一区| 91系列在线观看| 黑人巨大精品欧美一区二区区| 精品91自产拍在线| 欧美日韩中文国产va另类| 成人国产小视频| 国产精品成人AⅤ在线一二三四| 亚洲精品自拍区在线观看| 国产毛片高清一级国语 | 亚洲天堂日韩av电影| 中国特黄美女一级视频| 日韩精品成人网页视频在线| 福利在线一区| 亚洲精品无码久久毛片波多野吉|