# Firmware Fuzzing: The State of the Art ## Abstract * 目標:統整IoT韌體模糊測試的方法,分析這些工作,總結現有的缺點。 * 方法:設計幾個研究問題,提取出關鍵字,用這些關鍵字搜尋文獻。 * 結果:fuzzing分為基於現實世界的和模擬的,基於模擬的fuzzing是未來的主流;現有的模糊測試針對的漏洞是內存損壞漏洞;韌體的fuzzing比一般的軟體困難很多。 * 結論:透過分析不同方法的優缺點,為模糊測試技術提供指南和意見。 ## Introduction * 測試IoT設備的方式很多,如靜態分析、符號執行、模糊測試、機器學習的檢測等,模糊測試是研究最多的方法之一。 * Fuzzing生成測試的方式有兩類:generation-based methods and mutation-based methods。 * generation-based透過對輸入格式、環境、協議建模,生成滿足規範的測試。 * Peach, Sulley, MoWF * mutation-based透過改變現有的有效測試來生成新的測試。 * AFL, Honggfuzz, BuzzFuzz ## Research Method ### Research Questions 1. 韌體fuzzing執行環境為何? 2. 韌體fuzzing檢測到的主要漏洞有哪些? 3. 韌體fuzzing和一般fuzzing有什麼差異? ### Study Selectoin * 蒐集IEEE、ACM、SpringerLink(科學界的學術資源平台)和Google Scholar中,和"firmware fuzzing", "IoT security", "firmware simulation"有關的論文。 * 經過過濾,蒐集了37篇,選擇了其中12篇和模糊測試有關的來分析問題。 ## Result ### Simulation-based fuzzing is the mainstream in the future * 因為韌體的架構多樣性和各種外部設備,早期的韌體模糊測試都是在真實設備上進行。 * RPFuzzer(路由器) * IOTFuzzer(IoT通信) * FreeRTOS(嵌入式設備) * 真實設備成本高,覆蓋率低,重心轉為模擬上。 * QEMU * Avatar(外設用真實設備) * SURROGATES(Avatar改良) * Avatar2(Avatar改良) * FIRMADYNE(完整系統模擬) * FIRM-AFL(FIRMADYNE改良) * FirmAE(FIRMADYNE改良) * Laelaps(concolic外部設備輸入) * P2IM(外部設備建模) * DICE(外部設備建模) * HALucinator(外部設備抽象) ### Memory corruption vulnerabilities are the primary detection targets * 基於真實設備上的模糊測試,得到的資訊是有限的,無法確切判斷漏洞的類型。 * RPFuzzer(監控CPU偵測DoS漏洞,Log分析系統崩潰、重啟和zombie process) * IOTFuzzer(目標就是發現IoT設備的內存損壞漏洞) * 模擬可以得到執行時的更多資訊。 * Avatar、SURROGATES、Avatar2是框架,沒有漏洞檢測的功能。 * FIRMADYNE、FirmAE有自動動態分析,包含訊息洩漏、緩衝溢出、命令注入等。 * FIRM-AFL、HALucinator、P2IM、DICE使用AFL作為模糊器,檢測內存損壞漏洞。 * Laelaps使用PANDA插件檢測內存損壞漏洞。 * 現階段重點大多放在模擬上面,因此模糊測試不專注於發現漏洞,而是使用代碼覆蓋率來表示外部設備輸入生成的能力。 ### Firmware fuzzing faces more difficulties than general software fuzzing * 基於真實設備的Fuzzing,不像一般的軟體,可能難以得到Binary檔案。 * 基於模擬設備的Fuzzing,無法達到一般軟體模糊測試的速度。 * FIRM-AFL就是想改善性能,結合了全系統模擬和用戶模式模擬,但還是很慢。 * 韌體的Binary比一般軟體更複雜,因為需要考慮和底層的互動。 * 這也導致在靜態分析、符號執行等技術上的挑戰。如符號執行需要適應特定的指令集和架構。 * 韌體的輸入更複雜。 * 外部設備的輸入可能是麥克風、鏡頭、重力感測器等,以圖像、聲音為基礎轉換為數值輸入。 * 可能需要特定編碼解碼。 * 也可能是無線、藍芽等通訊輸入。 * 需要了解通訊方面的協議並改成Packet的結構。 * 更重要的輸入是中斷,這需要確定輸入時間、輸入值和環境。 * Laelaps、P2IM、DICE都對模糊測試新增中斷的支援。 ## Discussion * 基於真實設備的fuzzing很難發現多種類的漏洞,但基於模擬的卻受限於架構的低擴展性。 * 基於模擬的fuzzing重於解決外部設備輸入的問題,生成有效的測試輸入,而非檢測漏洞。 * 目前基於模擬的fuzzing沒有充分利用模擬器豐富的資訊來判斷漏洞。 * 目前只有FIRMADYNE和Laelaps有利用這些資訊來檢測漏洞。 * 未來可以將漏洞檢測的工具以插件的方式放到模擬平台上,提供漏洞檢測的能力。 * 許多的模糊測試生成各種外部設備的輸入其實沒有實際意義,如果針對通訊協議去建模也許更好。 ## Conclusion * 本論文目的是總結現有的IoT Fuzzing技術並進行評估。 * 分別對基於真實設備和模擬的Fuzzing做分析。 * 充分利用模擬器中的訊息有助於發現更多漏洞。 ###### tags: `paper`