# [Toward Hybrid Static-Dynamic Detection of Vulnerabilities in IoT Firmware](https://ieeexplore.ieee.org/abstract/document/9246617) ## Abstract * 嵌入式設備中的 Firmware 大多存在漏洞,如 hardcoded passwords、cryptographic keys、insecure configurations 甚至 backdoors。 * 設計了一個混合平台,利用 offline 靜態檢測和 online 動態檢測來偵測漏洞。 ## Introduction * 由於供應商缺乏資安意識,這些 Firmware 存在各種安全問題,使設備容易受到攻擊。 * 從可利用漏洞到殭屍網路。 * 為了緩解這種狀況,有人提出檢測 DDos 的方法;雖然緩解攻擊很有價值,但檢測和修復漏洞更根本更有效。 * 漏洞檢測的方法雖然很多,但面對 Firmware 的多樣性,大多無法直接應用。 * 獨特的外部設備或沒有OS。 * 該論文中。透過結合靜態動態分析來自動檢測 IoT Firmware 的漏洞。 * 根據實驗發現三個問題: * 許多 key 被 hardcoded 到 Firmware 中,造成敏感資訊洩漏。 * 不安全的 processes 導致流量異常、占用大量記憶體等。 * 使用不安全的 library,容易導致 buffer overflow,提供了攻擊的可能。 * 開發的檢測平台得到的貢獻: * 靜態檢測發現已知漏洞,如 hardcoded 或不安全的 key 等等。 * 動態檢測利用 fuzzing 發現未知漏洞,主要針對網路協議。 * 利用現有的分析工具,實現 Firmware 拆包、filesystem 辨識、關鍵資訊提取等。 * 對路由器、攝影機、NVR 進行離線的靜態檢測、對攝影設備進行 online 動態檢測。 ## Related work * 靜態分析 * Sachidananda et al. 提出靜態分析框架,但漏報率和誤報率高。 * Nilo Redini et al. 提出 KARONTE,用新的靜態分析技術降低誤報。 * 動態分析 * 與靜態分析不同,動態分析需要有實體設備或是模擬器。 * Alejandro et al. 提出 DICE 可分析 DMA 輸入通道。 * Chen et al. 提出 FIRMADYNE 可自動化模擬並進行漏洞驗證。 * Srivastava et al. 提出 FirmFuzz,適用於嵌入式 Firmware 全系統模擬和模糊測試的框架。 * 漏洞檢索 * Gemini 是一種基於深度學習神經網路的方式,可生成二進制函數來搜索已知漏洞。 ## Proposed platform ### Offline 靜態檢測 *  * 輸入是 Firmware 的 binary 檔案,第一個步驟是 Firmware stripping。 * 使用 MIME tools 確定各個元件的偏移位址和文件格式(e.g., SquashFS or Cramfs),再使用對應的工具解壓(e.g., dd, squashfs-tools or uefi-firmware-parse tools)。 * 也使用 Python 的 LIEF lib 來解析格式。 * 對於 MIME 無法識別的文件格式,使用 BINWALK 工具進行解包。 * 第二步驟是逆向模組,分為兩個分析子模組。 * 第一個模組透過 magic files 和 yala rules 整合和定位檔案,主要是針對 libraries、scripts、開機程式、網路元件和執行檔等。 * 第二個模組反組譯 binary 檔,判斷是否為 elf 檔案後根據不同的 CPU 架構反組譯(使用LIEF lib 的 PRASE)。 * 透過逆向工具得到符號表位址,對照 elf 標頭可還原函數名稱。搜尋 openssl 或是 busybox 等關鍵字可得知 lib 的版本資訊。 * 最後一個步驟是安全檢測。 * 利用前面得到的資訊,比較 CVE 開源漏洞庫,找出具體漏洞。 * 包含 hard-coded passwords、dangerous process execution、unsafe dependency library calls、dangerous string processing、unsafe random number processing 和 dangerous memory operation 等問題。 * hard-coded passwords 用正規表達式對照常見的帳號和密碼。 * dangerous process execution 指開機後自動執行的文件。 * unsafe dependency library calls 利用 yara rules 對照已知的 CVE。 * dangerous string processing 指 strcpy 或 strcat 等有危險的 functions。 * unsafe random number processing 是偽隨機數生成器導致的漏洞。 * dangerous memory operation 指溢位等情況。 * 工具 cwe_checker 可檢測後面三種問題。 * 全部功能結合 Python Flask 框架,可 multi-threading 執行。 ### Online 動態檢測 *  * 輸入是設備的 IP、username 和密碼,流程分為四個目標。 * 一開始先對 IP 位址掃描 ports。 * 常被攻擊的 ports 有`20`的 FTP、`554`的 RTSP 和`22`的 SSH 等等。 * 掃描 ports 的常見漏洞後,會登入設備得到更多 Firmware 的資訊和版本相關的資訊。 * 接著利用模糊測試檢測漏洞。 * 根據協議格式生成不同的數據包。 * 如果發生 crash,還是得手動檢查是否真的為漏洞。 * 常見的模糊測試策略有: * 長字串,檢測 buffer overflow。 * 大數,檢測 integer overflow。 * Format string,檢測 format string vulnerability。 * 特殊字元,@#$%& 等等的特殊符號。 ## Evaluation * 機器:Intel i9、32GB RAM、Ubuntu 18.04。 * Dataset 是自己使用爬蟲從官網和論壇爬下來的。 * For 靜態檢測,抓了 300 多個不同版本的 Firmware(小米、ASUS、360、D-link、大華、海康威視)。 * For 動態檢測,對 cameras 做安全測試,品牌有大華和海康威視(DH-IPC-HDW2125S, DH-IPC-HFW1225M-I1, DS-2CD3T47EWD-L, DS-2CE16D1T-IT3F 等)。 ### Experiment Results *  * 靜態分析檢測到 300 個問題。 * dangerous process execution 和 unsafe dependency library calls 最多。 * 與動態相比,靜態對於偵測 hard-coded passwords 更有效率。 *  * 檢測出 200 個問題。 * 和靜態一樣,dangerous process execution 和 unsafe dependency library calls 最多。 * 和靜態相比,動態更可以確認漏洞的可利用性。 * 動態檢測有誤報的可能,需要透過手動檢查。 * 實驗中隨機選了 80 個檢測到的漏洞做手動檢查,發現 56 個為真漏洞,其餘為誤報。 * 研究發現危險的 process 和危險的 lib 漏洞是最主要的安全問題。 ## Conclusion * 設計了混和平台,結合靜態和動態檢測漏洞。 * 靜態目標為找已知漏洞或弱點等。 * 動態透過模糊測試發現未知漏洞。 * 借助該系統,可在 IoT 設備發布前發現安全漏洞。 ###### 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