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

模糊測試技術研究綜述*

2022-12-22 11:31:24牛勝杰張玉杰
計算機工程與科學 2022年12期
關鍵詞:檢測

牛勝杰,李 鵬,張玉杰,

(1.南京郵電大學計算機學院,江蘇 南京210023;2.江蘇省無線傳感網高技術研究重點實驗室,江蘇 南京 210023)

1 引言

如今,惡意攻擊者利用系統漏洞對軟件系統進行攻擊的現象屢見不鮮,已對企業和用戶造成嚴重的影響。傳統的漏洞檢測方法(如靜態分析方法和動態分析方法)具有操作流程繁瑣、測試覆蓋范圍小的缺點,已不符合現階段的需要,這就促使學術界必須提出漏洞挖掘的新技術、新工具和新系統。模糊測試是漏洞檢測方法的一種,通過使用針對目標程序生成的隨機字符流,對目標程序進行多次測試,以檢測可能存在的漏洞。模糊測試技術具有不依賴目標程序源碼、不受限于被測系統內部結構和可復用性強等優點,已成為漏洞挖掘領域的重點研究內容。近年來,研究人員通過對模糊測試技術的不斷創新發展,例如采用漏洞挖掘新方法,提出漏洞挖掘新框架,創造漏洞挖掘新工具等方式,不斷提高軟件系統的漏洞挖掘技術水平。本文結合10年來在國際著名安全會議上發表的有關模糊測試文獻,重點對模糊測試技術的發展及應用進行總結。

本文第2節簡要介紹模糊測試基本概念及工作流程,關注對不同測試目標采用的模糊測試技術,對其進行技術分類并總結其優缺點。提供基于時間軸的模糊技術發展史圖,選取重要的技術提出以及代表型模糊測試工具的創新問世為時間點,幫助讀者直觀地了解模糊測試技術的誕生與發展。第3節介紹模糊測試技術在各領域的應用。針對不同應用場景,模糊測試分別從不同維度提供技術支持,提高漏洞挖掘能力。第4節重點介紹近年來模糊測試技術的創新發展成果。針對不同領域產生的工具、框架及系統原型,分別對其采用的創新理論和具體流程進行梳理總結,并分析其優缺點。第5節結合協議逆向工程、云平臺建設、新興技術(如機器學習和大數據分析)應用、模糊測試對抗技術及模糊測試工具集成,提出模糊測試技術的挑戰和發展方向。

2 模糊測試

2.1 模糊測試的定義與流程

模糊測試(Fuzzing)[1]是一種針對不同測試目標采用不同的技術手段,結合用例生成策略產生測試用例,將其輸入到目標系統后通過監視異常結果來發現漏洞的安全檢測技術。具體來說,模糊測試是利用插樁、符號執行及污點分析等技術收集目標信息,根據對目標內部信息的依賴程度采用不同的測試方法(如黑盒、白盒和灰盒),基于種子生成策略對正常數據進行自動或半自動地變異生成大量預期或非預期的測試用例,通過分析目標的輸出結果進行安全漏洞檢測的方法。

通過對大量文獻的總結梳理,模糊測試的一般流程可分為以下環節:

(1)確定模糊測試對象。測試對象選擇首先要考慮對象本身的因素,如目標程序或系統的性質、功能、運行環境和實現語言等。測試對象包括二進制代碼或者軟件系統,除了自身開發的程序或系統外,通常軟件源代碼不容易得到,因此模糊測試對象大多數為二進制代碼。測試對象的宏觀審視,是整個模糊測試的基礎,它將直接影響模糊測試的技術選擇(如黑盒、白盒和灰盒)。

(2)選擇輸入向量。測試對象的因素組成即輸入向量包括文件數據、網絡數據、注冊表鍵、環境變量及其他信息等。惡意破壞者之所以能夠利用系統安全漏洞,究其根本是由于系統沒有對輸入進行校驗或非法輸入處理。輸入向量和測試用例生成策略可概括為測試用例參考要素,考慮各輸入向量的影響權重,結合測試用例生成策略,找到具有高覆蓋率的測試用例是模糊測試成功的關鍵。

(3)生成測試用例。測試用例的生成基于選定的輸入向量,可以基于變異或生成方法生成大量測試用例。基于變異的測試用例生成方法是通過對已知數據樣本進行定向(如bitflip按位翻轉、interest替代、splice絞接等)或隨機變異的方式產生新的測試用例,該方法利用正常輸入中的信息繞過錯誤檢查代碼,達到可執行的目的,具有較高的擴展性。基于生成的測試用例生成方法是通過人工編寫測試用例生成規則,使得測試用例可以按照目標規則進行生成,保證生成的測試用例可以繞過目標程序的錯誤檢查代碼。

(4)執行測試用例。將測試用例發送到目標軟件或系統,以確保測試對象能夠成功處理測試用例。

(5)監視器。測試用例執行完成后,需要對目標對象的產生結果加以監視。當目標對象崩潰或報告錯誤時,監視器模塊將會收集并分析相關信息,記錄產生異常的測試用例和產生的異常的詳細信息,確定漏洞的真實性。

(6)有效性評估。分析異常產生的原因,跟蹤異常產生前后的處理流程,判斷發現的漏洞是否可被利用。

模糊測試流程圖如圖1所示。

Figure 1 Flow chart of fuzzing

2.2 模糊測試技術的分類

根據在模糊測試過程中所需的輸入信息或對程序內部信息分析的程度,模糊測試技術可分為3大類:黑盒模糊測試、白盒模糊測試和灰盒模糊測試。

(1)黑盒模糊測試。黑盒模糊測試也稱為輸入輸出驅動模糊測試或者功能模糊測試,其原理是把目標當做一個看不到內部邏輯結構的黑盒,在完全不考慮內部結構和性能的情況下,使用一些預定義的種子文件創建表單輸出的模糊測試技術。在測試過程中,由于黑盒模糊測試無法跟蹤目標內部的執行狀態,只能通過檢測目標的輸出數據來判斷目標的狀態。測試過程中會生成大量冗余的測試用例,是導致該類技術的代碼覆蓋率低、測試效果差的主要原因。

(2)白盒模糊測試。白盒模糊測試也稱為邏輯驅動模糊測試,與黑盒模糊測試截然不同,白盒模糊測試是將目標看作一個內部結構高度可視化的透明盒,在全面了解目標內部邏輯的基礎上進行的模糊測試技術。白盒模糊測試是將目標內部結構單元化,并將單元測試的范圍擴展到整個目標的安全測試。白盒模糊測試具有測試全覆蓋的優勢,但正是由于其高度可視化,在實際應用中,目標對象內部的復雜程度嚴重制約了它的發展。

(3)灰盒模糊測試。灰盒模糊測試是白盒模糊測試的一種變體,繼承了黑盒模糊測試與白盒模糊測試的優點,同時對兩者的缺點進行了改進。它是在對目標對象有部分了解的情況下進行的漏洞檢測方式。與白盒模糊測試相比,兩者都是利用目標程序的信息來減輕黑盒模糊測試的盲目性,但對目標信息的依賴程度不同。

各類模糊測試技術特點如表1所示。

Table 1 Classification of fuzzing technologies

2.3 模糊測試技術的發展簡史

模糊測試技術發展史如圖2所示。

Figure 2 History of the development of fuzzing technologies

1990年,模糊測試由Miller等人[1]率先提出。1995年第一款針對UNIX系統的模糊測試工具Fuzz誕生,Miller設計的模糊測試工具包括一個隨機字符串產生器[2],通過該產生器對setuid應用程序進行隨機模糊測試,可提高setuid應用程序的可靠性。2001年,Protos項目[3]誕生,標志著模糊測試應用于網絡協議分析的新起點,也是模糊測試技術成為實用性工具的開始。2002年,Aitel[4]詳細講解并演示了基于生成的模糊測試工具SPIKE。2008年,針對Microsoft Office等復合文檔安全,Gao等人[5]提出了一種可以有效提高測試效率的測試用例構造方法。2009年,基于污點分析的Vganesh技術[6]被廣泛應用。2010年,Wang等人[7]結合混合符號執行與細顆粒度動態污點跟蹤技術,提出一種繞過系統校驗和防護機制的方法,提高了漏洞挖掘能力。2011年,Zhu等人[8]提出了模糊測試組件生成模型,可以從龐大的數據集樣本中自動生成具有較高覆蓋率的測試用例。

2013年至今的模糊測試技術發展,是本文重點總結的內容,將在第3、4節中詳述,在圖2中不再一一說明。

3 模糊測試的應用領域

模糊測試已成為挖掘系統漏洞的中堅力量,本節對模糊測試在各領域的重要應用進行歸納整理。通過對大量文獻調研與歸類,本文將模糊測試應用領域分為軟件測試、協議測試及其他應用領域。

3.1 軟件測試

3.1.1 Android測試

隨著技術水平和社會經濟的迅速發展,智能手機在人們的日常生活中越來越普及,從衣食住行等不同方面影響著人們的生產和生活方式。智能手機開發平臺多種多樣,其中Android是應用最為廣泛的平臺之一。為應對快速增長的系統安全威脅,研究人員提出了針對智能手機系統安全的解決方法,例如靜態分析技術[9]和自動動態分析技術[10,11]。

有效觸發惡意行為是實現智能手機惡意軟件自動化分析的前提。Wang等人[12,13]專注于對抗Android惡意軟件中的各種躲避技術,在自動動態分析中觸發更多隱藏的惡意行為,從而幫助生成更全面的惡意軟件報告。針對Android組件通信過程中由于組件暴露產生的安全問題,王凱等人[13]結合模糊測試和逆向分析技術,設計并實現了Android漏洞挖掘工具KMDroid。張密等人[14]提出了一種基于模糊測試方法的組件通信測試方案,以 Android SDK提供的數據為基礎,引導高覆蓋率的測試用例生成,設計并實現了工具FuzzerAPP。關于Android應用程序的健壯性測試,趙賽等人[15]提出了一種基于模糊測試的檢測方法,使用Android組件相關信息來構造測試用例,設計實現了全自動測試工具ICCDroidFuzzer,實驗中結合測試結果對源碼進行分析,得出了拋出異常的根本原因。針對Android驅動安全,何遠等人[16]提出了基于黑盒模糊測試的遺傳算法,通過測試執行結果的實時反饋來引導遺傳算法,實現了Android驅動的模糊測試系統Add-fuzz(Android device driver fuzz)。

3.1.2 Windows測試

圖形用戶界面GUI(Graphical User Interface)可視化計算機程序,其目的是促進用戶和設備之間的交互。GUI測試是軟件測試的關鍵部分,驗證界面和用戶之間的交互行為,而不考慮任何編碼細節。Din等人[17]提出了一種基于模糊自適應教與學優化ATLBO(Adaptive Teaching Learning-Based Optimization)算法的GUI功能測試策略,該算法是基于教與學優化TLBO(Teaching Learning-Based Optimization)算法的變體[17],利用事件交互圖EIG(Event-Interaction Graph)來生成高質量測試用例。為提高GUI測試時空轉時機判定的準確率,張興等人[18]提出了基于Bi-Gram模型以及統計分析的空轉狀態識別方法。

3.1.3 瀏覽器測試

針對瀏覽器安全,Zalewski[19]提出了模糊測試工具AFL(AmericanFuzzy Lop),根據測試結果計算覆蓋率,進而指導數據變異生成測試用例。霍瑋等人[20]提出了一種基于模式生成的瀏覽器模糊測試方法,通過對測試模式分析、定義與自動化提取,產生模糊測試器完成測試數據構造,設計并實現了一個瀏覽器模糊測試工具autofuzzy。不足之處在于對獲取的測試模式沒有一個較好的管理和反饋機制,還需要更多的基礎數據來滿足樣本的生成。

3.2 協議測試

3.2.1 互聯網協議

網絡協議的安全問題近期受到人們的廣泛關注。隨著網絡協議逆向工程的提出,針對手工模糊測試操作繁瑣且代碼覆蓋率低的問題,李偉明等人[21]采用了一種可以對網絡協議實現自動化識別并且能對其進行有效模糊測試的漏洞挖掘方法,顯著提升了測試效率。針對現有網絡不能較好地支持狀態轉換的問題,Ma等人[22]根據有狀態網絡協議的特點,提出了有狀態網絡協議半有效模糊測試SFSNP(Semi-valid Fuzzing for the Stateful Network Protocol),通過分析協議交互,構建出帶有路徑標記的擴展有限狀態機,并根據擴展有限狀態機、協議狀態規則樹及半有效算法獲得模糊測試序列,采用狀態轉換標記算法,以減少冗余測試用例生成,縮短測試時間。針對傳輸層安全協議TLS(Transport Layer Security)安全性測試,Walz等人[23]設計了一種通用的動態數據結構——通用消息樹GMTs(Generic Message Trees)。基于GMT概念,提出了一種隨機算法來生成高度多樣化和大部分有效的TLS握手消息;使用消息生成算法來差異測試現有較為流行的TLS服務器,經過實驗驗證其算法的高效性;開發的工具tls-diff-testing作為開源項目已經向外界公布。

支持實時流傳輸協議RTSP(Real Time Streaming Protocol)的視頻監控設備在市場中應用廣泛,針對RTSP協議模糊測試用例改進,Ma等人[24]先后提出了基于分類樹、啟發式算子、規則狀態機和狀態樹指導模糊測試用例生成的方法,可有效刪除無用項,大大提高了測試數據生成質量。

3.2.2 工控協議

工業控制系統是用于管理關鍵基礎設施服務的操作技術系統的運行和功能的重要組成部分。Tacliad等人[25]開發了一款模糊測試工具ENIP Fuzz,用于檢測可編程邏輯控制器中使用的以太網/IP軟件漏洞。針對傳統模糊測試應用于數據采集與監控系統SCADA(Supervisory Control And Data Acquisition)的不足,張亞豐等人[26]提出了一種基于狀態的工控協議模糊測試方法,設計基于協議狀態機的測試序列生成算法PSTSGM(Protocol State based Test Sequences Generating Method),提出了基于心跳的異常監測與定位方法HFDLM(Heartbeat based Faults Detection and Location Method),設計并實現了原型系統SCADA-Fuzz,在此基礎上對實際電力SCADA系統進行了測試,得到了良好的實驗效果。為提高模糊測試用例的覆蓋率和模糊測試效率,針對工控協議制造報文規范MMS(Manufacturing Message Specification)的模糊測試,Kim等人[27]采用對數據相關信息進行分類的方法引導測試用例生成。Li等人[28]引入遺傳算法并設計了其適應度函數來生成測試用例。Wang等人[29]采用靜態分析、動態監測和符號執行等策略,選擇出安全性更強的種子對測試對象進行定向模糊測試,設計并實現了SeededFuzz模型。李佳莉等人[30]提出了根據狀態關系構造協議狀態圖,并基于協議狀態圖進行深度遍歷選擇覆蓋率更高的測試用例的方法。

3.2.3 未知協議

隨著互聯網技術的不斷進步,大量未知的、私有的通信協議廣泛應用在不同領域。針對未知協議的復雜多樣且安全性較差的問題,張蔚瑤等人[31]提出基于協議特征庫的未知協議的逆向分析方法,自動學習協議結構和語義特征,提出多維變異的測試數據自動化生成方法生成測試數據,設計并實現了自動化模糊測試工具UPAFuzz。

3.3 其他測試

除了上述應用場景外,模糊測試還廣泛應用在內核安全測試[32]、機器人操作系統ROS(Robot Operating System)[33]、云計算[34]、嵌入式固件[35]、軟件定義網絡SDN(Software Defined Network)[36]和大數據[37]等方面。

針對圖形處理單元GPU(Graphics Processing Unit)內核高度復雜,導致模糊測試編程實現困難的問題,Peng等人[32]提出了一種基于突變的模糊和選擇性約束求解相結合的開放運算語言OpenCL(Open Computing Language)內核測試生成技術,以實現快速、有效和可擴展。該方法隨機改變輸入內核參數值,以增加分支覆蓋率。

針對ROS安全問題,王穎等人[33]提出了一種差分模糊測試方法,對輸入文件進行加工處理并基于生成策略生成測試用例,對測試結果中的不一致輸出進行差異計算并評估,分別對ROS不同版本的功能包進行測試。

針對云平臺基礎設施及服務IaaS(Infrastructure as a Service)層虛擬化機制安全問題,結合已知虛擬化平臺相關漏洞的先驗知識,沙樂天[34]等人通過抽取并推演目標數據集合,提出了一種基于灰度馬爾可夫模型的自動化預測方法,并實現了原型系統VirtualFuzz。

針對嵌入式固件安全問題,Gao等人[35]提出了一種將模糊測試與實時內存檢查緊密結合的固件漏洞檢測工具EM-Fuzz。基于內存插件,固件模糊化不僅可以通過傳統的分支覆蓋引導生成高質量的種子來探索難以到達的區域,還可以通過記錄的內存敏感操作來持續鍛煉易受攻擊的敏感區域。該工具還集成了現有模糊測試工具未實現的實時內存檢查器來暴露內存漏洞。

針對SDN安全漏洞檢測,Shukla等人[36]提出了一種新的網絡驗證方法PAZZ,通過定期檢測測試數據包報頭空間,將檢測結果與實際數據平面狀態進行比較,以自動檢測和定位數據平面中表現不一致的故障。

數據密集型可擴展計算DISC(Data Intensive Scalable Computing)系統有助于解決大數據可擴展性問題,但由于數據具有不完整性和隨時間不斷發展的特點,實現自動化測試具有挑戰性。Zhang等人[37]提出了一種基于覆蓋導向的模糊測試工具BigFuzz。基于對DISC應用程序錯誤類型的深入研究,設計了模式感知的數據變異操作符。

4 模糊測試技術的發展現狀

模糊測試工具是以指定文件格式或網絡協議為測試目標,對支持目標格式或協議的應用程序進行壓力測試,實現某一部分的功能;框架可描述為若干功能的整合體,是針對某個具體領域的通用解決方案,它允許使用可復用實用程序使其達到擴展最大化;系統的概念是更高的抽象,包括各組成元素、各元素的業務邏輯及交互關系等。通過大范圍的調研,本節整理和總結近10年來模糊測試的發展近況,具體分為模糊測試工具、框架、系統及方法的匯總,并為方便讀者查閱,在此節給出直觀的表格。

4.1 模糊測試工具的發展

漏洞檢測方法可分為靜態分析方法和動態分析方法。利用靜態分析方法對測試目標進行信息收集,可以為模糊測試提供可行的變異方案。Intent是Android通信中的一種運行綁定機制,用于連接程序運行過程的2個組件,是組件間信息交流的常用載體。為解決Android應用程序的安全問題,FuzzerAPP[14]、ICCDroidFuzzer[15]都是通過提取靜態注冊的組件信息,生成具有高覆蓋率的Intent測試用例,同時監測Android設備日志文件,實現應用程序健壯性的自動化測試,不同點在于前者采用空域、交叉值、隨機值的方法完成完全有效匹配、半有效匹配和完全不匹配Intent,而后者在測試用例生成策略上采用顯式Intent和隱式Intent構造相結合的方法。

動態分析方法是一種重要的動態檢測方法,在測試過程中通過檢測測試目標狀態,從而檢測出是否存在漏洞的技術。針對瀏覽器特定測試模式漏洞挖掘測試成本高、開發周期長以及生存時間短的問題,Autofuzzy[20]結合靜態識別和動態執行的方法獲取瀏覽器模塊間的依賴關系,根據依賴關系形成測試模式。李偉明等人[38]結合靜態分析和動態跟蹤技術,提出了基于內存模糊測試工具PyFuzzer。該工具首先通過對輸入數據中的危險函數進行優先級劃分,然后基于動態跟蹤技術對其進行自動化識別,最后采用基于快照恢復的方法對測試對象進行內存模糊測試。基于動態符號執行和動態污點分析技術,EWFT(Execution-based Whitebox Fuzzing Tool)[39]在動態執行目標程序時進行動態指令插樁,得到準確的動態程序執行信息,通過構建程序執行路徑之間的動態結構和各數據元素變量之間的依賴關系,對相關敏感操作進行脆弱性分析。基于遺傳變異算法構造測試用例,通過執行測試用例時監控執行狀態和計算程序路徑權重,完成對目標程序的模糊測試。EM-Fuzz[35]和MemLock[40]皆利用覆蓋率和內存消耗信息來動態指導模糊化過程。

種子生成策略是模糊測試整個過程的核心組成部分。針對以太網虛擬機EVM(Ethereum Virtual Machine)安全問題,Fu等人[41]提出了第一個使用差分模糊技術檢測EVM漏洞的工具EVMFuzzer。該工具的核心思想是通過不斷生成種子合約,并將其輸入到目標EVM和基準EVM,從而盡可能多地發現執行結果之間的不一致,通過輸出交叉引用發現漏洞。為有效解決種子輸入選擇時代碼覆蓋率低的問題,MutaGen[42]通過動態地改變生成代碼的程序片段,利用輸入格式信息來引導生成具有高覆蓋率的測試用例,能夠達到被測程序的深層狀態。

逆向技術是一種技術重現技術,它通過對目標進行逆向分析及研究,可推演出功能相近或者結構相似的結果。近些年來,逆向技術為模糊測試提供了可靠且有效的技術支持。例如針對Android私有組件保護問題,KMDroid[13]結合模糊測試技術和逆向分析方法,可以有效挖掘出應用通信過程中的安全漏洞。多文本格式RTF(Rich Text Format)是一種跨平臺文檔格式,RTF 數組溢出漏洞挖掘工具RAVD(RTF Array Vulnerability Detector)[43]通過逆向分析文件結構,明確文件結構中特定數據塊與代碼塊的聯系,可提高漏洞的挖掘效率,實現定向模糊測試,可挖掘RTF數組溢出漏洞。RAVD的缺點是采用手工逆向分析,導致整體效率較低,且存在一定的錯檢率。BigFuzz[37]與RAVD設計邏輯較為相似,通過抽象框架代碼和分析應用程序邏輯,執行源到源的自動化轉換,以構建一個適用于快速測試的等效數據密集型可擴展計算DISC應用程序,使DISC應用程序的模糊測試變得易于處理。與隨機模糊測試相比,BigFuzz在測試時間、應用程序代碼覆蓋率、檢測應用程序錯誤上均有較大提高。MutaGen[42]考慮靜態反匯編的不確定性,使用動態切片的方式選擇變異的指令,以此提高代碼的覆蓋率。

此外,逆向技術和模糊測試技術被廣泛應用于協議的逆向分析與漏洞檢測中。針對未知協議安全測試,張蔚瑤等人[31]提出了UPAFuzz工具,對輸入協議數據進行分析和學習,可以在無先驗知識的情況下實現未知協議的分析和格式提取,基于協議特征形成描述協議特征的腳本程序,結合常見漏洞攻擊模式生成多維變異的測試數據。對比現有模糊測試工具,UPAFuzz具有效率更高、性能更優的優勢。SFSNP[22]根據協議交互建立帶有路徑標記的擴展有限狀態機模型,基于該模型獲得測試序列,對測試序列中的每個狀態轉換執行半有效變異操作,得到協議模糊測試用例,并采用狀態轉移標記算法來解決在生成協議模糊化序列時生成多余測試用例的問題,SFSNP不僅能保證發現漏洞,還能減少測試用例數量,縮短測試執行時間。

灰盒模糊測試中影響較為廣泛的研究成果是AFL[19],其工作原理是在程序編譯時進行插樁,同時引入了進化算法,模糊測試的效果得到了有效改善,但AFL測試覆蓋范圍較小,這嚴重限制了它發現漏洞的能力。Fairfuzz[44]是由Lemieux等人提出的基于AFL的改進工具。該工具通過自動識別由少數AFL生成的輸入(稀有分支)執行的分支,結合針對稀有分支的變異掩碼創建算法,來增加AFL的覆蓋范圍。通過實驗對比,FairFuzz可以更快的速度實現高分支覆蓋率。

上述各工具匯總及特點分析如表2所示。

4.2 模糊測試框架的發展

近幾年,模糊測試框架不斷創新,為軟件測試提供更為高效的漏洞檢測技術。例如,目前APP測試任務大部分交給了工作人員,而人工提交的測試報告存在冗余度高、質量參差不齊的問題,測試報告模糊聚類框架TERFUR[45]通過將冗余和錯誤的測試報告聚合到集群中來減少檢查的測試報告的數量。該框架包含過濾器、預處理器以及兩階段合并組件分別解決無效屏障、不均勻屏障和多漏洞屏障的問題。針對高級惡意軟件通常采用各種規避技術來隱藏惡意行為問題,DirectDroid[12]通過實現靜態分析器和動態執行器,分別完成待檢測的Android應用程序包APK(Android application PacKage)信息收取和為靜態分析器反饋動態信息,并處理了強制執行導致的潛在程序崩潰漏洞。黃樺烽等人[46]建立的程序運行時漏洞模型Weak-Tainted結合脆弱性和污點屬性對漏洞進行定義,通過漏洞挖掘、分析及利用流程形成一體化的描述規范,采用基于頁面標簽的動態污點傳播分析方法和基于輸出特征反饋的輸入求解方法,有效解決了符號執行無法求解的問題。

Table 2 Development of fuzzing tools

為滿足通用型模糊測試器的低成本定制和高可擴展性需求,楊梅芳等人[47]提出了一種可編程模糊測試框架Puzzer。首先提出一種基于模糊測試原語的模糊測試器編寫語言規范,根據該規范編寫制導程序,通過解析器解析,生成模糊測試抽象語法樹。通過結合遍歷語法樹和模糊測試原語庫,模糊測試引擎可生成一個由Python語言編寫的模糊測試器。該框架可有效降低模糊測試器的開發成本與門檻,且生成的模糊器具有高擴展性、高針對性的優點。

覆蓋率是模糊測試評估中的一大指標,具體來說覆蓋率指的是在執行測試用例的過程中,測試對象被覆蓋到的分支占所有分支的比重。具有較高覆蓋率的測試用例往往能夠發現更多的漏洞。基于覆蓋率的模糊測試工具的典型代表是AFL[19],其核心思想是增加邊覆蓋率。除此之外,各種增加覆蓋率的模糊測試框架被相繼提出。DeepHunter[48]是一種覆蓋引導的模糊測試框架,采用一種結合基于多樣性的種子選擇策略,可提高代碼覆蓋率,解決基于深度神經網絡的軟件安全問題。Zhou等人[49]提出了一個覆蓋敏感的跟蹤和調度框架Zeror,利用自修改跟蹤機制和實時調度機制,為更有效地覆蓋收集提供零開銷檢測。

大多數基于覆蓋的模糊器平等地考慮程序的所有部分,并且過多地關注如何提高代碼覆蓋,這種方式是低效的。Li等人[50]設計并實現了一個名為V-Fuzz的進化模糊化框架。對于給定的一個二進制程序,漏洞預測模型將給出一個關于易受攻擊程序片段的先驗估計,模糊器利用進化算法結合易受攻擊預測結果引導生成更有可能到達易受攻擊位置的輸入用例,能夠在有限的時間內高效快速地發現二進制程序的錯誤。

在協議測試方面,tls-diff-testing[23]實現了通用消息樹GMT概念的軟件框架,允許在不依賴協議本身的情況下完成TLS協議消息語法解析。

上述各模糊測試框架匯總如表3所示。

4.3 模糊測試系統的發展

根據測試前對目標對象內部結構的掌握情況,模糊測試方法可分為黑盒模糊測試、白盒模糊測試和灰盒模糊測試。很多模糊測試系統的提出都是基于這3種模糊測試方式之一進行的相關改進,并應用在不同領域中。例如,為提高Android驅動漏洞挖掘能力,何遠等人[16]提出了基于黑盒測試的遺傳算法,設計并實現了模糊測試系統Add-Fuzz,利用測試結果遞歸指導和改進遺傳算法,生成高效的測試用例,根據已知漏洞特征優化可變參數輸入,以提高模糊測試的命中率。ArtFuzz[51]采用基于白盒模糊測試的方法提高暴露通過緩沖區溢出進行惡意輸入漏洞的概率,通過模糊測試結果和內存布局信息指導生成測試用例。

Table 3 Development of fuzzing framework

模糊測試技術的改進不僅僅體現在模糊測試用例的生成上,其他步驟的改進也同樣影響測試的整體指標,例如在評估階段如何對目標系統的異常行為進行及時檢測與精確定位。為提高測試引擎對程序進入空轉狀態時機判斷的能力,張興等人[18]提出了基于Bi-Gram模型以及統計分析的空轉狀態識別方法。Bi-Gram算法大量收集正常狀態下目標程序的執行跡,并采用特征提取方法將執行跡轉變為特征序列。通過統計分析實現空轉特征序列的提取,將得到的空轉特征輸入實時檢測算法中,實現空轉時機實時檢測。PAZZ[36]采用比較控制平面和數據平面的轉發規則、拓撲及路徑的方法進行異常檢測和定位。利用當前控制信息主動計算所有源到目標的可達數據包,生成預期報告,并對路徑和規則進行編碼;模糊器計算控制器和流量未覆蓋的數據包報頭空間,同時為模糊測試網絡生成活動流量;數據平面組件對轉發規則的路徑和序列進行編碼,以生成采樣的實際報告;通過比較預期報告和實際報告實現故障的檢測和定位,解決軟件定義網絡中發生實際數據平面狀態與預期控制平面狀態不一致時定位困難的問題。

除此之外,還有一些針對特定領域所提出的應用型原型系統,例如SCADA-Fuzz[26]和VirtualFuzz[34]。

Peach[52]是以黑盒模糊測試方法為技術背景所誕生的測試工具,主要應用于網絡、文件、物聯網模糊測試中。SCADA-Fuzz[26]系統是在Peach基礎上實現的工控協議模糊測試原型系統,目的是對電力SCADA系統進行模糊測試。以工控協議會話流量報文作為輸入,通過狀態機推斷模塊得到協議狀態機,由腳本生成模塊編寫系統可識別的描述腳本,結合遷移信息和用例生成策略生成包含正常交互的模糊測試用例。SCADA-Fuzz雖然耗時較長,但可發現Peach未成功檢測出的拒絕服務漏洞。

VirtualFuzz[34]是面向IaaS層虛擬化平臺實現的原型系統,該系統基于源碼靜態審計的方法得出虛擬化各模塊的函數關系,通過與靜態源碼對比,進行動態調試分析動態函數調用路徑和執行結果,以此確定函數執行的具體信息。基于標準化的隨機種子生成方法生成測試用例,將其輸入到目標系統后與基于灰度馬爾科夫鏈的預測模型進行擬合,從而指導當前虛擬化模塊下的模糊測試方向,可實現虛擬化漏洞高效挖掘與檢測。

上述各模糊測試系統匯總如表4所示。

4.4 模糊測試方法的創新

應用較為廣泛的程序分析技術包括符號執行和污點分析。符號執行通過推導一個表示程序執行的邏輯等式,基于此等式可推斷出該程序在不同輸入上的行為。污點分析的技術思想在于觀測程序數據受到污染源的污染范圍,以此來跟蹤污染源和匯聚點之間的信息流。模糊測試技術結合程序分析技術的優點,在測試方法上有著重要創新。

結合符號執行與模糊測試的優點,謝肖飛等人[53]提出了基于符號執行與模糊測試的混合測試方法Afleer。該方法首先將給定程序進行編譯,生成經過插樁的可執行文件,利用模糊測試和符號執行技術,不斷地生成具有高覆蓋率的測試用例并更新覆蓋信息,符號執行負責遍歷程序執行樹搜索未覆蓋的分支,經過反復迭代,該方法可覆蓋更多的分支,從而發現更多的漏洞。為檢測二進制文件中的漏洞,Chen等人[54]提出了彩色污點分析方法CTAM(Colorful Taint Analysis Method)來計算警戒條件,使用不同的污點顏色確定目標程序中的輸入數據與變量之間的關系,與傳統污點分析方法相比,該方法可減少時間和空間開銷。為解決大型或路徑條件復雜的目標程序模糊測試效率低下的問題,李明磊等人[55]提出了一種針對復雜路徑條件下的漏洞檢測技術SymFuzz,結合導向式模糊測試技術與選擇符號執行技術,首先通過靜態分析定位漏洞函數,利用導向式模糊測試技術探索程序路徑,以生成可達漏洞函數的測試用例。不足之處在于SymFuzz對靜態分析的依賴性較高。

Table 4 Development of fuzzing system

符號執行和污點分析技術都有一個缺點,由于程序的復雜性,其存在的多條分支可引起路徑爆炸的問題,且路徑爆炸問題會隨著程序復雜程度的增加變得更加嚴峻。對此,部分研究人員致力于解決該問題。例如PWA(Path Weight Analysis)算法[39]是動態檢測二進制程序中針對程序執行路徑空間所提出的覆蓋測試算法,通過分析目標程序相關信息并結合程序執行的路徑空間測試方法構造測試用例集合,解決程序執行路徑空間覆蓋率低、路徑狀態空間爆炸等問題。

PSTSGM[26]通過遍歷協議狀態機有向圖,建立狀態引導報文序列庫,根據狀態引導報文序列實現對目標系統的狀態引導,有助于被測設備觸發異常。HDLMF[26]則是基于心跳的異常監測與定位方法,利用心跳探測和回溯定位來精確發現出現異常的目標序列,可實現工控嵌入式設備利用傳統異常檢測方法進行漏洞安全檢測。值得注意的是,與HDLMF方法核心類似,Autofuzzy[20]采用活動性檢查、意外響應和性能測量,在測試期間監控遠程設備,實現遠程故障檢測策略;UPAFuzz[31]基于逆向分析技術可與被測設備實時交互,可主動探測被測設備運行狀態。

機器學習技術已經成熟,部分研究人員已實現把機器學習更好地應用在模糊測試上。例如Lean&fuzz[56]是Godefroid等人提出的使用樣本輸入和基于神經網絡的統計機器學習技術自動生成適合輸入語法的測試用例的方法。將輸入的PDF文件對象看作字符序列,基于循環神經網絡的字符集語言模型學習PDF序列的生成模型,結合對象生成策略構建新的PDF對象實例。該算法基于輸入概率分布智能地指導模糊輸入的位置,不僅可生成格式良好的對象實例,而且能夠增加PDF解析器的覆蓋率。

上述各模糊測試方法的特點匯總如表5所示。

4.5 模糊測試用例生成算法改進

傳統模糊測試用例存在覆蓋率低的問題,相關科研工作者提出結合測試結果優化生成策略和利用機器學習的方法改進測試用例生成過程。除了前面提到的Lean&fuzz[56]外,還有一些其他重要的改進算法被相繼提出。例如在并行模糊測試中,鄒燕燕等人[58]提出了一種基于變異策略感知的并行模糊測試方法,通過動態調整變異策略和進行多實例間有效樣本同步,減少測試實例的冗余度。為解決高結構樣本識別問題,張羿辰等人[59]提出了一種基于神經網絡的敏感區域預測的模糊測試方法,利用變異算法生成與敏感區域相關聯的種子,通過循環增量學習,不斷完善預測算法模型,可高效提升模糊測試效率和檢測深度。針對Web安全模糊測試,涂玲等人[60]提出了將測試模板規則與網站過濾協議變形相結合的測試用例生成方法,實現在不同過濾機制下生成最有效的測試用例,并且采用基于污染傳播策略的漏洞響應數據分析方法解決漏洞響應的有效驗證問題。劉淵等人[61]提出了一種基于遺傳算法的漏洞挖掘測試用例生成方法,解決多輸入測試用例難以生成和非線性問題求解困難問題。為解決Web應用跨站腳本XSS(Cross-Site Scripting)安全性問題,程誠等人[62]提出了一種基于模糊測試和遺傳算法的XSS攻擊樣本優化生成方法,以有效挖掘漏洞。

Table 5 Innovation of fuzzing testing methods

5 模糊測試的機遇與挑戰

模糊測試技術從誕生發展至今,已逐步成為一種占據重要地位的安全測試技術。隨著網絡規模的擴大和應用種類的增多,協議逆向的時效性要求越來越高,自動化協議逆向分析技術成為人們追求的目標,將模糊測試應用在協議逆向分析上是一重要方向。云計算技術因其可虛擬化和大規模化的優勢不斷滿足人們的需要,這也對云計算環境安全提出新的挑戰。結合機器學習和云計算等新興技術的發展,模糊測試技術與之相融是大勢所趨。模糊測試擁有強大的漏洞檢查能力,同樣也為惡意攻擊者提供了便利,因此這也為模糊測試對抗技術帶來了巨大的挑戰。根據不同需求,大量的模糊測試工具應運而生,如若將各種工具進行集成化處理,則可減少針對不同測試目標的開發周期和實現成本。綜上所述,模糊測試技術未來的研究熱點可能包括以下幾個方面:

(1)應用于協議逆向工程。

一個完整的協議逆向分析系統包括輸入預處理、協議格式提取和協議狀態機推斷3個階段。模糊測試技術作為軟件或系統漏洞檢測的先進技術之一,可以為協議逆向系統提供技術支持。例如在狀態機推斷階段,模糊測試技術可以為協議狀態機生成測試序列,對其進行漏洞檢測。在模糊測試技術應用在協議逆向工程方面,李偉明等人[21]和張蔚瑤等人[31]進行了相關研究。

(2)應用于云平臺。

云計算具有規模大、可虛擬化、可靠性高、通用性強、可擴展性高和價格低等優點,近幾年的發展和應用格外迅速。云計算在為人們日常生活提供便利的同時,也帶來了較大的安全威脅。利用模糊測試技術對云平臺進行安全防護,可以說是今后模糊測試技術的一個重要研究方向。關于模糊測試技術在云計算方面的研究,讀者可閱讀林闖等人[63]和沙樂天等人[34]發表的相關文章。

(3)與新興技術的結合。

近幾年來,機器學習、云計算技術等新興技術迅速崛起,模糊測試技術也同樣可以針對不同的需要進行合理且高效的利用。例如模糊測試技術想要利用機器學習,就必須解決數據源的處理、樣本數據不平衡問題以及模糊測試的執行速度等一系列問題。

(4)模糊測試對抗技術的研究。

隨著軟件和網絡安全意識的增強,模糊測試作為一種高效的漏洞檢測技術,深受研究人員的熱愛。事物都有其兩面性,模糊測試技術也不例外。模糊測試可以作為安全漏洞檢測技術存在,目的是安全防護,正是由于其在該方面的突出表現,惡意破壞者也同樣可以利用模糊測試進行攻擊破壞。因此,模糊測試技術在發展的同時要統籌兼顧反模糊測試技術。無論是模糊測試對抗技術自身的研究,還是其帶給模糊測試技術的挑戰,都是研究的重要方向。

(5)模糊測試工具的集成。

為針對不同需要,如今模糊測試工具的種類繁多,可以說是各有利弊。例如著名的基于生成的模糊測試工具SPIKE[4]使用基于塊的方法定義輸入格式,雖然SPIKE在測試方面表現得非常成功,但對于不容易轉換為塊模式的輸入數據來說,利用SPIKE則不能取得良好的測試效果。在低成本與高擴展性的基礎上實現模糊測試工具的集成,應該是模糊測試今后的重要發展方向。

6 結束語

模糊測試是一種安全測試技術,主要應用于安全漏洞檢測。本文詳細介紹了模糊測試的基本概念、測試流程、技術方法以及應用。特別地,本文總結了近10年來的優質論文,并對模糊測試工具、框架、系統及方法的創新發展進行了分類和概要說明,這有助于相關科研人員進行查閱和總結。最后,本文討論了模糊測試技術的挑戰和發展方向,為了模糊測試技術的發展,鼓勵進一步的研究和實踐以解決相關問題。

猜你喜歡
檢測
QC 檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
“有理數的乘除法”檢測題
“有理數”檢測題
“角”檢測題
“幾何圖形”檢測題
主站蜘蛛池模板: 国产91无毒不卡在线观看| 九色最新网址| 一本色道久久88亚洲综合| 丁香六月激情综合| 中文字幕人妻av一区二区| 国产区91| 国产人在线成免费视频| 99久久精品久久久久久婷婷| 久草性视频| 国产成人喷潮在线观看| 国产精品爽爽va在线无码观看| 亚洲黄色成人| 中文字幕在线观看日本| 欧美日在线观看| 99国产在线视频| 色综合久久综合网| 免费一级毛片完整版在线看| 亚洲无码在线午夜电影| 午夜啪啪福利| 国产99精品久久| 亚洲精品va| 九九热在线视频| 99热最新网址| 国产精品福利导航| 色偷偷综合网| 亚洲天堂成人| 亚洲视频a| 国产午夜无码专区喷水| 91探花在线观看国产最新| 中文一区二区视频| 亚洲精品无码在线播放网站| 亚洲一区二区视频在线观看| 国产在线98福利播放视频免费| 日韩视频免费| 看国产一级毛片| 亚洲A∨无码精品午夜在线观看| 国产精品无码AV片在线观看播放| 国产精品美乳| 亚洲av无码人妻| 日韩一级二级三级| 欧美成人在线免费| 国产成人亚洲无吗淙合青草| 91美女视频在线| 91无码人妻精品一区二区蜜桃| 国产精品永久久久久| 制服丝袜一区| 伊人无码视屏| 欧美久久网| 激情综合五月网| 国产精品人莉莉成在线播放| 亚洲无线观看| 亚洲精品国产乱码不卡| 亚洲妓女综合网995久久| 综合人妻久久一区二区精品 | 欧美午夜视频| 国产亚洲欧美在线中文bt天堂| 日韩福利在线观看| 午夜视频日本| 五月婷婷激情四射| 久久国产亚洲偷自| 国内熟女少妇一线天| 一级全黄毛片| 国产v欧美v日韩v综合精品| 无码电影在线观看| 日韩福利在线视频| 在线欧美日韩国产| 中文字幕一区二区人妻电影| 亚洲视频三级| 91破解版在线亚洲| 免费一级α片在线观看| 99re热精品视频国产免费| 精品视频免费在线| 国产无码在线调教| 日本不卡在线| 亚洲日本精品一区二区| 免费毛片在线| 国产精品亚洲αv天堂无码| 黄色网在线免费观看| 91在线精品麻豆欧美在线| 中国一级特黄视频| 欧美成人看片一区二区三区| 91青草视频|