百度安全重新定義Fuzzing 技術

百度安全長期關注軟件安全技 術研 究。 Fuzzing是當下最常用的軟件漏洞自動化發現技術。 百度安全持續對Fuzzing 技術進行研究,與合作團隊針對不同場景推出了一系列圍繞Fuzzing的技術方案。 百度安全把我們在Fuzzing方面的新技術統稱 百中術 (源於我們對漏洞發現的期望: “百Fuzz百中”)。 百度安全計劃對相 關技術進行系列介紹,相應的技術細節及成果也預計會在近期的工業和學術會議中亮 相。

混合模糊測試(Hybrid Fuzzing)的應用

混合模糊測試(Hybrid Fuzzing)作爲一種有效地漏洞發掘技術,已經被廣泛地應用到學術界和工業界。
Hybrid Fuzzing 本質上是灰盒模糊測試和符號執行相結合的一種漏洞發掘方法。單純的Fuzzing技術,例如AFL 這類灰盒模糊測試,是採用有反饋的隨機種子生成方式來產生輸入樣本進行測試。但是這類Fuzzing手段很難產生有效的輸入樣本觸發複雜的路徑分支。符號執行是採集執行路徑的相關指令,將其轉化爲可以解的條件約束(constraints)。這樣,對於複雜的路徑分支,符號執行可以得到觸發該路徑的所有constraints,通過約束求解的方法破解出一個有效的輸入來觸發該路徑。Hybrid Fuzzing 就是將Fuzzing和符號執行同時應用到同一個被測程序的方法。
目前流行的混合模糊測試系統是依賴於模糊測試爲主導,符號執行輔助的測試模式。以著名的自動化攻防比賽DARPA CGC爲例,決賽戰隊基本都採用了以Fuzzing爲主導的混合模糊測試系統。這類系統利用高效地模糊執行進行路徑探索。當遇到複雜的Fuzzing長時間無法覆蓋的路徑分支時,再利用準確但費時的符號執行進行破解。

重新思考Hybrid Fuzzing的架構

從CGC比賽到現在已經五年過去了。隨着新興的高效符號執行方法的出現,傳統的以Fuzzing爲主導的混合測試的方法也許已經不再是最佳方案。百度安全和UC Riverside聯合研究發現新興的符號執行方法的執行效率已經大幅度提高,不再成爲混合模糊測試的瓶頸。相反,新興的符號執行方法在執行效率上已經可以與模糊測試並駕齊驅,進行路徑探索。
新興的符號執行有哪些呢?根據符號執行中生成constraints的方法,符號執行可以分爲 IR-level,Instruction-level 以及compilation based。對於IR-level來說,混合測試的符號執行部分將機器指令轉化爲IR中間語言 (例如 llvm bc),然後在IR上進行constraints的計算和求解。這是相對傳統的符號執行。Instruction level符號執行是直接在機器指令上進行constraint的採集和求解,這樣極大減少轉化時間,但是增加了採集和求解constraints的難度。基於編譯器的(Compilation-based)符號執行是新興的一種符號執行方法。它直接將constraints的採集和求解邏輯在編譯過程中加固到源代碼中,這樣極大簡化了求解的難度,並且節省了轉化的時間。
圖1. CocoFuzz的體系結構圖
符號執行技術的性能提升,讓我們有機會重新審視Hybrid Fuzzing的架構設計。符號執行不再需要作爲一個輔助角色,反而可以成爲Hybrid Fuzzing的核心驅動。
基於這個思路百度安全和UC Riverside近期聯合提出了一種新型架構的混合模糊測試的方法CocoFuzz。它是一種以符號執行爲驅動的混合模糊執行方法。這個技術重構了現有的混合模糊測試的方法,並且添加了適用於新設計體系的種子變異選取策略。方法已經在標準測試數據集和真實用例上通過測試。實驗結果證明該方法在路徑探索覆蓋率上的性能超出目前已有的混合模糊測試的方法。

Hybrid Fuzzing部分實驗結果

爲了展示新配置策略的功效,我們對比了兩個不同類型的Hybrid Fuzzing系統:QSYM 作爲傳統以Fuzzing爲中心的代表,CocoFuzz 作爲以符號執行爲中心的代表。這裏我們用幾個常見工具程序作爲Fuzz目標時,程序被測的覆蓋率隨着時間增長的趨勢。以符號執行爲代表的 CocoFuzz 在多數配置情況下明顯優於傳統Hybrid Fuzzing的代表QSYM。更多實驗評價以及在真實系統中的評價將在後續的論文中發佈。
表1. 實驗配置說明  UF = universal flipping (i.e., flipping every symbolic branch). PP = path-prefix-based branch flipping. FSQ = fuzzer's seed queue. ECQ = edge-coverage queue. PCQ = path-coverage queue. FIFO = first in first out.
圖2. 對於幾個簡單應用的覆蓋率比較

小結

百度安全長期關注軟件安全技術。這一次 Hybrid Fuzzing的工作是和UC Riverside 團隊第二次在軟件安全領域共同推動安全技術。我們在Fuzzing 領域的工作不侷限於與符號執行的結合,還包括與其它程序分析技術的融合,以及在AI領域對Fuzzing的應用。百度安全會在近期介紹這幾方面的工作。

本文分享自微信公衆號 - 百度安全實驗室(BaiduX_lab)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章