,
模糊測試(Fuzz Testing)是一種自動化的軟體測試技術,最初是由威斯康辛大學的巴頓·米勒於1989年開發的,通常用於識別程序中的潛在漏洞。模糊測試的核心是自動或半自動的生成隨機數據輸入到應用程式中,同時監控程序的異常情況,如崩潰、代碼斷言失敗,以此發現可能的程序錯誤,如內存洩漏。模糊化是指自動生成和執行測試,模糊測試中輸入的隨機數據被稱為「Fuzz」,隨機數據的類型包括:超長字符串;隨機數如負數,浮點數,超大數、特殊字符如~!@#$%等包含特殊含義的字符,作為輸入可能會引發報錯;unicode編碼,因為有些程序是不支持unicode的。模糊測試包括幾個基本的測試步驟:確定被測系統->確定輸入->生成模糊數據->使用模糊數據執行測試->監控分析系統的行為->輸出日誌。
目前有三種主要的模糊測試技術:
模糊測試屬於動態測試,是一種自動發現軟體安全漏洞的經濟有效的測試技術,常常會在軟體安全開發生命周期中發現非常嚴重的安全故障或缺陷,例如:崩潰、內存洩漏,未處理的異常等。如果一個軟體產品需要處理不可信的輸入或者具有大型、複雜的數據解析功能,模糊測試是非常有效的。一旦一個模糊生成器啟動並運行,它就可以開始自己尋找缺陷,不需要手動/人工幹預。另外,模糊測試有助於發現傳統測試方法或手動審計無法檢測到的缺陷。
當然,模糊測試無法提供對於一個軟體應用在安全威脅或漏洞方面的整體評估,在處理不會導致應用崩潰的安全威脅時效果較差,例如某些病毒、蠕蟲、木馬等,因此需要結合其它的安全測試手段來保障軟體系統的安全。
模糊測試的核心在於一個有效的模糊生成器(Fuzzer),就像巴頓·米勒教授當初給學生布置的作業:WinAFL:Windows版本的AFL,使用DynamoRIO去插樁閉源程序以獲取代碼覆蓋率信息,同時支持硬體PT獲取覆蓋率信息,但PT獲取覆蓋率其實並沒有插樁獲取得全,但速度可能會快一些。
地址:https://github.com/googleprojectzero/winafl
AFLFast:加速版的AFL,Fuzzing速度確實會比原版快一些。
地址:https://github.com/mboehme/aflfast
2. Radamsa
Honggfuzz是由谷歌開發的,和AFL類似,採用遺傳算法進行編譯,是一個多進程和多線程的模糊生成器,所以用Honggfuzz進行fuzzing的速度非常快,在安全漏洞發現中的表現十分突出。根據該工具開發者的說法,它是唯一找到OpenSSL中導致發布全球安全補丁的關鍵漏洞的模糊測試工具。
Honggfuzz不僅僅適用於Windows。它可以測試在Linux、Mac甚至Android環境下運行的應用程式。由於它能夠在多個平臺下工作,Honggfuzz提供了一個完整的示例和測試用例目錄,開發人員可以使用這些示例和測試用例,也可以根據自己的需要進行修改。
https://github.com/google/honggfuzzLibFuzzer與被測試的庫連結,並通過特定的模糊入口點(也稱為「目標函數」)向被測試的庫提供模糊輸入。隨後,模糊生成器跟蹤觸及的代碼區域,並在輸入數據的語料庫中生成變異,以此來擴大代碼覆蓋率。地址:https://llvm.org/docs/LibFuzzer.htmlOSS-Fuzz 能夠針對開源軟體進行持續的模糊測試,它的目的是利用更新的模糊測試技術與可拓展的分布式執行相結合,提高一般軟體基礎架構的安全性與穩定性。OSS-Fuzz 結合了多種模糊測試技術/漏洞捕捉技術(即原來的libfuzzer)與清洗技術(即原來的 AddressSanitizer),並且通過 ClusterFuzz 為大規模可分布式執行提供了測試環境。boofuzz模糊測試框架是基於已經不再維護的Sulley開發的。該工具使用Sulley核心代碼,但致力於不斷改良。boofuzz是作為Python庫安裝的。開發人員增加了在線文檔、對更多通信媒介的支持、可擴展故障檢測和一個易於使用的界面。該工具還將串行模糊測試、乙太網和UDP廣播添加到了默認功能裡。boofuzz還可將測試結果以CSV文件格式導出,以便在修復檢出故障時可以先研究所有被觸發問題的完整列表。
地址:https://github.com/jtpereyda/boofuzz當紅模糊測試工具之一,發現了逼出Epiphany Web補丁的漏洞和可致Mozilla Firefox觸發緩衝區溢出的漏洞。BFuzz是基於輸入的模糊測試器,以URL和瀏覽器作為其輸入方式。這個意義上講,該工具很像DAST工具,適合重度依賴這些東西的公司企業,因為BFuzz使用類似的測試方法,但找尋不同類型的錯誤。
地址:https://github.com/RootUp/BFuzz
8. PeachTech Peach Fuzzer
PeachTech Peach Fuzzer是PeachTech公司出品的商業模糊測試工具,很多繁瑣的事情都不需要測試人員親力親為了。測試人員只需要用該公司所謂的Peach Pit加載並配置該模糊測試引擎即可。
Peach Pit是預先編寫好的測試定義,覆蓋一系列不同平臺。PeachTech表示,每個Pit包含適用特定目標的規範,比如目標攝入的數據結構,數據流入和流出被測設備或應用程式的方式等。這樣測試人員就可以幾乎不用設置,便能將精力集中在他們的模糊測試上了。用戶使用PeachTech創建自己的Pit也很簡單,令Peach Fuzzer還可用於專用系統。
由於Peach Fuzzer引擎可以Peach Pit編程的原因,幾乎所有系統都在該工具的測試範圍之內:Mac、Windows、Linux,也可以用於模糊測試網絡協議、嵌入式系統、驅動、物聯網設備,只要是能接受命令而易受模糊輸入困擾的系統,就能用Peach Fuzzer進行測試。
地址:http://www.peach.tech/products/peach-fuzzer/
AI模糊測試採用機器學習及類似技術查找應用或系統中的漏洞。智能約束算法和遺傳算法是兩種主流的智能模糊測試算法,上面提到的AFL就是採用遺傳算法。此外,還有一些AI模糊測試工具:
9. 微軟開發的Security Risk Detection (MSRD)MSRD是一個人工智慧驅動的動態應用安全測試服務,可以優化web應用開發周期,以便在bug和安全風險被引入代碼庫時識別和糾正它們。地址:https://www.microsoft.com/en-us/security-risk-detection/
10. ClusterFuzz
American Fuzzy Lop (AFL)使用遺傳算法。該工具集是基於雲的新工具Fuzzbuzz的核心,也是谷歌ClusterFuzz項目的一部分。ClusterFuzz是一個高度可伸縮的模糊測試基礎設施,Google使用ClusterFuzz對所有Google產品進行模糊化,並將其作為OSS-fuzz的後端。
地址:https://security.googleblog.com/2019/02/open-sourcing-clusterfuzz.html
11. Synopsys Defensics Fuzz Testing
Synopsys提供的Defensics是一個全面、通用、自動化的模糊測試框架,能夠幫助企業高效、有效地發現和修復軟體中的安全弱點。這種基于格式生成的模糊器採用有針對性的智能方法進行負面測試;高級文件和協議模板模糊器使用戶能夠構建自己的測試用例。SDK 支持專業用戶使用 Defensics Framework開發自己的測試用例。地址:https://www.synopsys.com/software-integrity/security-testing/fuzz-testing.html
12. Fuzzbuzz
Fuzzbuzz是一個模糊測試平臺,通過自動化的複雜的基礎設施管理和設置以及與工具的連接,將模糊化集成到DevOps工作流中。該平臺在發現缺陷時發出警報,消除重複數據,並對其進行分類,以消除噪音和誤報。
地址:https://www.fuzzbuzz.io/
模糊測試的目的是發現軟體安全漏洞,已經成為軟體安全測試的主流測試技術,迄今為止,這項技術已經幫助人們在各種軟體中發現了數千個安全漏洞。而且,隨著「軟體定義一切」和萬物互聯時代的到來,軟體安全必將日益重要。因此,作為軟體測試人員,有必要掌握模糊測試的技術和工具。想了解更多模糊測試技術,可以點擊「閱讀原文」,參考微軟研究員於2020年4月發表的文章「Fuzzing: Hack, Art, and Science」