模糊測試
模糊測試過程通常是自動化的。這個過程經典地分為以下幾個階段。
- 準備:這是第一階段,重點是 SUT 輸入和輸出格式的識別和規范。基于此,規范可以減少生成初始無效模糊數據的可能性并創建有效且精確的輸入。
- Fuzz Data Generation:在這個階段,生成SUT的輸入數據,同時考慮到前一階段識別的輸入格式。通常,數據的生成是通過更改特定數據來完成的。首先,選擇一個種子(即原始輸入);接下來,模糊器通過在種子中插入小的修改來創建新的模糊數據。這一代是模糊測試的一個關鍵方面,因為漏洞搜索的性能與這些輸入的質量直接相關[11]、[15],尤其是初始種子的選擇[49]。
- 執行:在這個階段,通過使用指定的媒體(通信包、輸入文件、環境變量、模擬輸入等)將先前生成的數據發送到SUT。
- 監控:在此階段,監控 SUT 的輸出和行為,以檢測可能與觸發漏洞相關的意外輸出或崩潰。這是模糊測試的核心基礎之一,缺乏監控功能可能會導致漏洞發現結果不佳。
- 分析:在此階段,分析崩潰和監控階段提供的輸入,以確定哪些測試用例導致漏洞或異常行為觸發。
- Bug Reporting:最后,當fuzzing過程完成時,報告在監控階段發現并稍后分析的漏洞。此外,保存觸發的測試用例,以便重復測試和重現崩潰,從而更深入地分析漏洞。