热门问题
时间线
聊天
视角
american fuzzy lop
来自维基百科,自由的百科全书
Remove ads
american fuzzy lop (AFL) 是一個自由的模糊測試工具,採用遺傳算法以有效地提高測試用例的代碼覆蓋率。目前為止,它幫助檢測了數十個主要自由軟件項目中的重大程序錯誤,包括X.Org Server、[2]PHP、[3]OpenSSL、[4][5] pngcrush、bash、[6]Firefox、[7]BIND、[8][9] Qt[10] 和SQLite。[11]
american fuzzy lop的源代碼發布在GitHub上。american fuzzy lop得名於美國垂耳兔。
Remove ads
典型用法
AFL要求用戶提供一個運行測試應用程序的示例命令和至少一個示例輸入文件。例如,在對音頻播放器進行測試時,可以指示AFL用它打開一個簡短的聲音文件。然後,模糊測試器嘗試實際執行指定的命令,如果成功,它會嘗試將輸入文件減少到觸發相同行為的最小文件。
在初始階段之後,AFL通過對輸入文件進行各種修改來開始實際的模糊測試過程。當被測程序崩潰或假死機時,表明發現了一個新錯誤,可能是一個安全漏洞。此時修改後的輸入文件被保存以供用戶進一步檢查。
為了最大限度地提高模糊測試性能,建議使用american fuzzy lop進行灰盒測試,即在一個實用程序的幫助下編譯被測程序源代碼,該實用程序在編譯被測程序時插入跟蹤控制流的輔助函數(即「插樁」)來instrument代碼。這允許模糊測試器檢測目標的行為何時響應輸入而改變。在灰盒測試不可能的情況下,也支持黑盒測試。
Remove ads
特性

american fuzzy lop的模糊測試引擎使用幾個算法儘可能觸發被測程序的異常行為,如位翻轉或將輸入的整數數據修改為可能引發異常的邊界值。[13] 除此之外,AFL可以根據示例關鍵字生成測試用例,這有助於對使用基於文本語法的程序進行模糊測試,例如 SQLite。[14] 生成的測試用例執行程序代碼的不同部分,AFL記錄會引起異常的輸入數據,之後可以將這些數據輸入到更專業的診斷程序進行進一步分析。進行模糊測試時,假死機可以通過設定的定時器超時來檢測,而崩潰通過結束程序時的信號處理程序檢測。
使用AFL進行模糊測試時,輸入的測試用例可以通過標準輸入或作為進程命令行中指定的輸入文件提供給測試程序。目前不支持對通過網絡接受輸入數據的網絡應用程序進行模糊測試,但在某些情況下有可行的解決方案。[15]
american fuzzy lop面臨的一大挑戰是每秒對幾百個進程的spawn。除了從頭開始spawn每個進程的原始引擎,american fuzzy lop提供高度依賴fork
系統調用的默認引擎。[16] 可以通過利用LLVM延遲分叉服務器模式或類似的持久模式進一步加快速度,但這是以必須修改測試程序為代價的。[17] 另外,american fuzzy lop支持通過網絡對同一個程序進行模糊測試。
american fuzzy lop擁有彩色的命令行界面,實時顯示模糊測試過程和統計信息,可以通過命令行界面或者環境變量修改配置,也可以從機器可讀文件格式中讀取運行時統計信息。
除了提供afl-fuzz
用於模糊測試,american Fuzzy lop還包含用於監控模糊測試過程的實用程序。除此之外,afl-cmin
和afl-tmin
可以用於最小化測試用例和語料庫,當其他模糊測試器也需要使用afl-fuzz
生成的測試用例時尤其實用。
AFL++
由於Google2017年9月以後對AFL的上游開發相對停滯,故誕生了一個社區維護的AFL分叉AFL++(AFLplusplus)[19] 。它包含了一些新特性和性能提升。[20]
Google推出的為開源軟件提供免費模糊測試服務的OSS-Fuzz計劃,也於2021年1月將AFL選項替換為了AFL++。[21]
參考資料
拓展閱讀
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads