?

基于人機協同的漏洞挖掘框架設計*

2024-03-20 01:16方恩博范希明
通信技術 2024年2期
關鍵詞:測試工具污點漏洞

方恩博,范希明,賈 鵬

(1.中國電子科技集團公司第三十研究所,四川 成都 610041;2.四川大學 網絡空間安全學院,四川 成都 610200)

0 引言

模糊測試是現代漏洞挖掘最有效的技術之一,其為被測程序提供大量輸入,并監視其出現的異常行為,例如堆棧溢出、越界讀寫、內存泄漏等[1]。自從模糊測試的方法問世以來,其在業界和學界受到廣泛關注并不斷發展,基于此,研究人員開發了各種工具應用于不同的測試場景。近年來,隨著AFL[2]家族的出現,灰盒模糊測試的發展不斷完善,并取得了優秀的成果。

群體智能思想是近年來熱門的研究方向,研究人員將人的先驗知識與機器的算力相結合,在部分領域取得了很好的成果?;诖?,本文在模糊測試中引入人機協同的思想,讓專家來解決模糊測試執行中遇到的問題。首先,對每一個專家的特點和經驗進行量化描述并繪制知識圖譜,以此作為任務分配的依據;其次,實現了任務自動化拆分和分配模塊,將每一個漏洞挖掘任務自動化拆分為若干子任務,再對每一個子任務分配相應的專家或機器;最后,每一個漏洞挖掘任務都由若干臺底層機器完成,每一臺機器都配有若干個漏洞挖掘工具,按照專家的建議選擇某種工具。在LAVA-M 測試集和兩個真實程序上進行實驗,底層使用20臺并行化的主機,結果遠優于AFL。

1 相關技術介紹

1.1 模糊測試

模糊測試是指向待測程序提供大量畸形數據作為輸入,監視程序的異常情況,并基于導致異常的輸入分析發現漏洞的一種方法[1]。根據測試用例生成的方法,模糊測試可以分為基于生成的模糊測試和基于變異的模糊測試。前者需要已知的數據格式,在不破壞格式的前提下生成測試用例;后者是將初始數據進行大量變異,生成測試用例。按照對待測程序的分析程度,模糊測試方法可以分為白盒模糊測試、灰盒模糊測試和黑盒模糊測試。白盒模糊測試需要全部源代碼,黑盒模糊測試則不需要任何待測程序的信息,灰盒模糊測試介于二者之間,通過運行時的反饋來指導模糊測試。模糊測試已在漏洞挖掘領域發揮重要作用,但其仍然面臨著許多問題,如代碼覆蓋率不高,不能完全探索程序空間等。目前主流的模糊測試工具有Peach[3]、AFL、AFLGo[4]等。

1.2 符號執行

符號執行是指將程序的約束條件轉化為抽象的符號,則一個程序的輸出即可轉化為一個關于輸入的函數。符號執行可以得出到達目標代碼段所需要的輸入條件。符號執行分為靜態符號執行和動態符號執行,其中靜態符號執行是通過符號值模擬程序執行,而動態符號執行是在程序運行時進行約束求解。雖然符號執行可以達到較高的代碼覆蓋率,但是其狀態空間爆炸、復雜約束無法求解、資源開銷過大等問題限制了符號執行的實際使用[5]。目前,主流的符號執行工具有KLEE[6]、CUTE[7]、DART[8]、angr[9]等。

1.3 污點分析

污點分析的核心思想是跟蹤污點數據在程序執行中的傳播情況。污點分析可以分為靜態污點分析和動態污點分析。靜態污點分析通過對源碼或者匯編代碼進行分析,建立寄存器和數據之間的順序依賴關系,依次判斷污點數據的傳播路徑;動態污點分析是指在程序執行過程中,結合插樁的手段跟蹤污點數據的流向。污點分析同樣面臨著隱式流、污點清除和開銷過大的問題。目前主流的污點分析工具有TaintCheck[10]、Dytan[11]、libdft[12]等。

2 整體流程與核心模塊設計

該框架整體流程如圖1 所示。首先,當框架收到一個Fuzz 任務時,該框架將Fuzz 任務和其相關信息傳入漏洞智能拆分模塊。該模塊依據環節不同、策略不同,將一個Fuzz 任務拆分為若干子任務。

其次,當任務拆分結束后,該框架將每一個子任務與相關信息傳入漏洞智能分配模塊。該模塊通過任務類型、個體特長、任務完成情況等信息對每一個個體進行打分,得出結果后,將每一個子任務分配給相應的個體。其中每一個個體都由事先的個體建模得到。

再次,當每一個個體收到子任務后,開始執行相關的漏洞挖掘任務,其中,機器自動化執行過程中,遇到問題可以參考專家意見或者由專家介入代為處理。

最后,在所有機群和人群個體完成任務后,將所有任務進行匯總。匯聚的結果經過去重后傳入結果與crash 分析,以詳細獲取漏洞信息。根據每個個體產生的結果,系統會評估每一個個體的工作情況并打分。該分數將不斷積累并影響接下來的任務分配,如果某一個體在其從事的任務上效果并不理想,則根據相關算法降低其再次接受同種任務的概率。

2.1 基于知識圖譜的個體庫

個體庫從多個維度對專家和機器進行描述,其中,專家個體庫的特征維度如表1 所示,機器個體庫的特征維度如表2 所示。

表2 機器個體庫的特征維度

基于上述維度,對每個個體進行建模,并基于neo4j 數據庫建立知識圖譜。在后續的任務分配算法中,會根據各個維度的值對子任務進行合理的分配,每個子任務會選擇最合適的專家或機器。

2.2 自動化任務拆解和分配模型

如圖2 所示,將一個漏洞挖掘任務拆分為若干個子任務,這樣每一個個體可以尋找到最適合其自身優勢的子任務。以模糊測試為例,將一個模糊測試任務拆分為種子選取、測試過程、異常處理和crash 分析4 個子任務。其中,測試過程是通過并行若干臺模糊測試終端實現。種子選取是指,由被指派該子任務的專家個體對當前待測試程序進行靜態分析,得出哪些種子可能對模糊測試效果更好,對初始種子隊列進行精簡和增添。異常處理是指,當模糊測試工具長時間陷入覆蓋率停滯狀態時,該框架允許專家介入程序現場,通過逆向分析的方法判斷當前程序是已經達到了覆蓋率飽和狀態,還是無法通過某些路徑,專家可以手動分析該路徑的約束條件,從而修改種子或修改模糊測試工具的字典,以通過該路徑約束,crash 分析是指當模糊測試工具發現crash 時,需要對所得的種子進行crash 分析,判斷crash 成因并生成poc。雖然對不同的模糊測試工具存在不同的子任務拆解策略,但是模糊測試的大體拆解思路按照上述實現。當任務拆解完成后,根據各項維度的值選擇最合適的個體進行任務分配,并在每一次任務完成后,根據評估算法調整個體的表現情況,以便在下一次任務分配時可以制訂更加合理的分配方案。

圖2 自動化任務拆解和分配模型(以Fuzzing 任務為例)

2.3 并行化漏洞挖掘引擎

如圖3 所示,當專家完成種子選擇后,即開始模糊測試。每一臺機器中都包含如AFL、AFL-Fast[16]、InsFuzz 等開源模糊測試工具,按照專家的建議采用相應的模糊測試工具。在并行化中,最重要的問題是解決bitmap 合并,本文采用的方法是在服務器端不斷地輪詢每一個節點,從中取出位圖和種子文件,然后在服務器端進行合并,合并后再分發給每一個節點。如此一來,實現了位圖和種子隊列的同步。雖然在過程中會因為輪詢順序導致節點存在同步的滯后性,但是從長時間來看,每一個節點都會分配到其他節點具有價值的種子,并且位圖保持一致。

圖3 并行化漏洞挖掘引擎框架

此外,本文在某些節點提供了若干符號執行和污點分析工具,雖然這二者由于代價問題不可能每次漏洞挖掘任務都會應用,但是針對某些特殊的場景,需要二者與模糊測試工具相互配合。其中,符號執行工具包括KLEE、S2E、angr 等,污點分析工具包括TaintCheck、TaintDroid 等。

3 實驗結果分析

為了驗證基于人機協同的漏洞挖掘框架的有效性,選擇LAVA-M 測試集和真實世界的兩個程序nm-new、readelf 進行測試。為了體現人的先驗知識的效果,本次實驗采用專家進行預先的靜態分析,針對每一次比較指令的判斷做出處理,將比較指令的值作為字典加入模糊測試工具中。本次模糊測試使用添加了人工字典的20 臺AFL 和20 臺AFL 運行5 h 進行對比,體現人的先驗知識的效果。

如表3 所示,加入人工先驗知識的AFL 效果遠優于原版AFL,因此證明,這種基于人機協同的漏洞挖掘框架會大幅度提高漏洞挖掘的效率。

表3 AFL 與AFL(含專家知識)運行5 h 的覆蓋率和crash 數量對比

同時,進行另一個實驗測試,將專家指導的快速到達目標點的策略引入AFLGo,專家在不同階段進行不同的種子篩選策略。在Binutils 測試集上與AFLGo 進行對比,將每個實驗運行20 次取平均值,時間預算設置為8 h。觀察專家指導下的漏洞挖掘框架在通用漏洞披露(Common Vulnerabilities&Exposures,CVE)復現上的能力。

如表4 所示,引入專家知識后的AFLGo 效果優于原始AFLGo,這是因為AFLGo 并沒有對更有價值的種子進行排序,而專家知識改變了AFLGo原始的種子選擇策略,優先運行更有價值的種子,從而提高了命中目標點的次數,并縮短了CVE 的復現時間。

表4 AFLGo 與AFLGo(含專家知識)的命中目標點次數和CVE 復現時間對比

4 結語

本文實現了一種基于人機協同的漏洞挖掘框架設計,該框架主要由基于知識圖譜的個體庫、任務智能拆解與分配、并行化漏洞挖掘引擎3 個模塊組成。在人的參與下,實驗證明其結果要優于傳統的漏洞挖掘工具,這種人機結合的思想發揮了作用。在未來的工作中,將會進一步完善人的參與過程,將人機交互接口化,構成一個完整的人機交互漏洞挖掘系統。

猜你喜歡
測試工具污點漏洞
邊緣智力兒童及其智力測試工具的研究進展
漏洞
基于代碼重寫的動態污點分析
Http并發連接測試工具
使用Lightroom污點去除工具清理照片中的瑕疵
三明:“兩票制”堵住加價漏洞
漏洞在哪兒
基于移動平臺APP 測試
高鐵急救應補齊三漏洞
我國“污點證人”刑事責任豁免制度的構建
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合