Try   HackMD

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