# FirmFuzz: Automated IoT Firmware Introspection and Analysis ## Abstract * 漏洞搜尋應該要是自動化的,且對獨立於設備有擴展性 * FirmFuzz 適用於 Linux Firmware 的自動化模擬與動態分析框架 * 基於灰盒的模糊測試與靜態分析 * 透過模擬和動態分析 32 個 image 來評估 * 在六個不同設備發現七個以前未知的漏洞,分配四個 CVE ## Introduction * 隨著物聯網的興起,攻擊也越來越多。 * 該論文主要分析 Linux Firmware,它由三個部分組成 * Linux kernel * a set of open-source software packages * a set of custom vendor-developed applications * 第三個不是開源且不須公開審核,因此最有可能有漏洞。 * 評估應用程式會面臨三個挑戰 * 輸入語法(格式) * 細粒度監控 * 依賴執行環境 * FirmFuzz 克服了這些挑戰 * 利用 Web 接口為入口點生成合法輸入 * 使用 monitor 監控執行環境 * 模擬 Firmware * 為了增強模糊測試,利用靜態分析來指導 * 雖然使用 Web 當作起點,但在執行期間會與系統互動,進一步發現深層漏洞 * 目標不是分析的廣度而是深度 * 分析 Netgear, D-Link, TRENDNet 三個廠商中 6427 個 image * 在六個不同設備發現七個以前未知的漏洞 * 1 個 CI * 3 個 BO * 1 個 XSS * 1 個 NPD(Null Pointer Dereference) * https://github.com/HexHive/FirmFuzz ## Firmware Preprocessing * FirmFuzz 是一個框架,透過 QEMU 對 Linux-based 的 Firmware 分析和 Fuzzing *  * 分三步驟 * 資訊收集 * 準備 * 模糊測試 * 支援 MIPS 和 little endian ARM ### Information Gathering Phase * 該階段有兩個目標 * 發現用於 Web 的帳密 pair 以增加模糊器的覆蓋率 * 對 PHP 靜態分析,找出常見漏洞 * 不安全的 CI 函數(system, shell_exec) * 汙點分析 $_GET, $_POST 找出不安全的 code ### Firmware Preparation * 該階段將 firmware image 模擬起來 * 使用 full system 模擬,注入輔助 binaries 檔案到 filesystem 和強化 kernel 來發現更多漏洞 #### Peripheral Mapping * 對於未知的外部設備,FirmFuzz 總是回傳 True * 可能造成模擬不穩定 #### Helper Injection * 該程式會在 Firmware 執行時一起執行,檢查 CI 漏洞 * 自動化且不依賴 Firmware 上的程式 * Firmadyne 不支援檢查 CI 漏洞 * 而偵測 BO 漏洞,用 Firmadyne 的 kernel 異常處理機制 * 進一步檢查 NPD 漏洞 * 不須手動分析,利用 Fuzzing 自動觸發且打包成 PoC * XSS 漏洞,利用 host-side 的 monitoring 來偵測 #### Network Configuration * Firmware 命名和分配到 LAN/WAN 接口的方式不同 * 採用和 Firmadyne 一樣的方式,在推理模式下模擬,紀錄 Firmware 和網路的互動,再利用紀錄去做網路配置 ## Firmware Fuzzing * FirmFuzz 使用自訂的 Fuzzer 檢測漏洞 *  * FirmFuzz 透過模擬環境幫助模糊器發現漏洞 * FirmFuzz fuzzer 三個主要特性 * Context-driven input generation: 結合 Firmware 提供的上下文生成輸入 * Deterministic vulnerability detection: 監控整個模擬環境確認漏洞 * "Fuzzing side-effects" elimination: 利用模擬優勢,連續模糊測試而不需重啟 Firmware * 觸發所有按鈕,找出會和 Firmware 互動的按鈕;能填入字元的地方會用預設值或是根據 ID 的關鍵字自動填入(IP, mac 等等) * FirmFuzz 的 Fuzzer 執行 Web 中的 JS code,收集互動資訊生成模糊測試的 input * fuzzer 和 firmware 互動的流量都會通過 proxy server,這些流量資訊都會成為 input 的變異候選 * 檢測 CI, BO, NPD, XSS,將合法的 HTTP request 做為種子做 fuzz * 根據目標漏洞變異 request payload * 檢測到漏洞時會將 request 和 URL 記錄成 PoC ### Syntactically Legal Input Generation * FirmFuzz 使用 headless 瀏覽器和 Firmware 互動,因此 HTTP request 格式是否良好取決於 Web application * FirmFuzz 必須了解 Firmware 的 Web 配置才能與其互動 * 這需要分析人員的手動驗證 ### Deterministic Bug Discovery * 傳統的檢測方法依賴 server 端的 response,但這種方法不夠精準 * FirmFuzz 監控執行期間的 log 來檢測 CI, BO, NPD * CI 監控 execve * BO, NPD 監控 kernel log 查看是否嘗試存取沒 mapping 到的 memory * XSS 可以執行在 host 端檢查 request 中的 JS code 是否被執行 ### Elimination of Fuzzing Side-Effects * 模糊測試 Firmware 時,如果 Firmware 沒有回應,通常需要手動回復穩定狀態 * FirmFuzz 利用 snapshot and rollback,將模擬的 Firmware 快速回復 ### Payload Delivery * 透過觸發 Web 上的按鈕來觸發 JavaScript,並對 input field 自動推斷填入合法值 * 如果按鈕觸發 request 就會把該請求當作種子,後續變異並模糊測試 ## Evaluation * 6427 個 firmware images * Intel i7 processor and 16GB RAM and running Ubuntu 16.04. * QEMU 2.5.0 * Selenium WebDriver version 3.4 * mitmproxy version 0.18.2 ### Firmware Images *  * 6427 個 images 中,有1013 個有 Linux-based 的 File System * 203 個網路配置有推斷出來,32 個有可訪問的 Web 介面 * 同個供應商的不同設備常常有同樣的介面 ### Comparison with Existing Analysis Frameworks *  * Firmadyne 的檢測不夠自動,且擴展性差 * w3af 無法完成認證 * ZAP 不會和 Firmware 本身互動,因此只能發現 XSS 漏洞 ### Vulnerability Detection Accuracy * FirmFuzz 藉由監控 Firmware 來降低誤報率 ## Conclusion * FirmFuzz 是用於嵌入式設備的全系統模擬與模糊測試的自動化框架 * 發現四種類型的漏洞,並找到七個以前未知的漏洞 ###### tags: `paper`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up