热门问题
时间线
聊天
视角

american fuzzy lop

来自维基百科,自由的百科全书

American fuzzy lop
Remove ads

american fuzzy lop (AFL) 是一個自由的模糊測試工具,採用遺傳演算法以有效地提高測試用例代碼覆蓋率。目前為止,它幫助檢測了數十個主要自由軟體專案中的重大程式錯誤,包括X.Org Server[2]PHP[3]OpenSSL[4][5] pngcrushbash[6]Firefox[7]BIND[8][9] Qt[10]SQLite[11]

快速預覽 開發者, 首次發布 ...

american fuzzy lop的原始碼發布在GitHub上。american fuzzy lop得名於美國垂耳兔英語American Fuzzy Lop

Remove ads

典型用法

AFL要求使用者提供一個執行測試應用程式的範例命令和至少一個範例輸入檔案。例如,在對音訊播放器進行測試時,可以指示AFL用它打開一個簡短的聲音檔案。然後,模糊測試器嘗試實際執行指定的命令,如果成功,它會嘗試將輸入檔案減少到觸發相同行為的最小檔案。

在初始階段之後,AFL通過對輸入檔案進行各種修改來開始實際的模糊測試過程。當被測程式崩潰假當機時,表明發現了一個新錯誤,可能是一個安全漏洞。此時修改後的輸入檔案被儲存以供使用者進一步檢查。

為了最大限度地提高模糊測試效能,建議使用american fuzzy lop進行灰盒測試,即在一個實用程式的幫助下編譯被測程式原始碼,該實用程式在編譯被測程式時插入跟蹤控制流的輔助函式(即「插樁」)來instrument英語Instrumentation_(computer_programming)代碼。這允許模糊測試器檢測目標的行為何時回應輸入而改變。在灰盒測試不可能的情況下,也支援黑箱測試

Remove ads

特性

模糊引擎

Thumb
AFL的logo通過模糊測試輸入拼接為一個動畫產生。[12]

american fuzzy lop的模糊測試引擎使用幾個演算法儘可能觸發被測程式的異常行為,如位翻轉或將輸入的整數資料修改為可能引發異常的邊界值。[13] 除此之外,AFL可以根據範例關鍵字生成測試用例,這有助於對使用基於文字語法的程式進行模糊測試,例如 SQLite。[14] 生成的測試用例執行程式碼的不同部分,AFL記錄會引起異常的輸入資料,之後可以將這些資料輸入到更專業的診斷程式進行進一步分析。進行模糊測試時,假當機可以通過設定的定時器逾時來檢測,而崩潰通過結束程式時的訊號處理程式檢測。

使用AFL進行模糊測試時,輸入的測試用例可以通過標準輸入或作為行程命令列中指定的輸入檔案提供給測試程式。目前不支援對通過網路接受輸入資料的網路應用程式進行模糊測試,但在某些情況下有可行的解決方案。[15]

效能

american fuzzy lop面臨的一大挑戰是每秒對幾百個行程的spawn英語spawn (computing)。除了從頭開始spawn每個行程的原始引擎,american fuzzy lop提供高度依賴fork系統呼叫的預設引擎。[16] 可以通過利用LLVM延遲分叉伺服器模式或類似的持久模式進一步加快速度,但這是以必須修改測試程式為代價的。[17] 另外,american fuzzy lop支援通過網路對同一個程式進行模糊測試。

使用者介面

american fuzzy lop擁有彩色的命令列介面,即時顯示模糊測試過程和統計資訊,可以通過命令列介面或者環境變數修改組態,也可以從機器可讀檔案格式中讀取執行時統計資訊。

實用程式

除了提供afl-fuzz用於模糊測試,american Fuzzy lop還包含用於監控模糊測試過程的實用程式。除此之外,afl-cminafl-tmin可以用於最小化測試用例和語料庫,當其他模糊測試器也需要使用afl-fuzz生成的測試用例時尤其實用。

AFL++

快速預覽 首次發布, 目前版本 ...

由於Google2017年9月以後對AFL的上游開發相對停滯,故誕生了一個社群維護的AFL分叉AFL++AFLplusplus[19] 。它包含了一些新特性和效能提升。[20]

Google推出的為開源軟體提供免費模糊測試服務的OSS-Fuzz計劃,也於2021年1月將AFL選項替換為了AFL++。[21]

參考資料

拓展閱讀

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads