---
# System prepended metadata

title: '[Toward Hybrid Static-Dynamic Detection of Vulnerabilities in IoT Firmware](https://ieeexplore.ieee.org/abstract/document/9246617)'
tags: [paper]

---

# [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 靜態檢測

* ![](https://i.imgur.com/XG5XvxB.png)
* 輸入是 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 動態檢測

* ![](https://i.imgur.com/4JTYz0p.png)
* 輸入是設備的 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

* ![](https://i.imgur.com/2jaQqBO.png)
    * 靜態分析檢測到 300 個問題。
    * dangerous process execution 和 unsafe dependency library calls 最多。
    * 與動態相比，靜態對於偵測 hard-coded passwords 更有效率。
* ![](https://i.imgur.com/OQnvtVc.png)
    * 檢測出 200 個問題。
    * 和靜態一樣，dangerous process execution 和 unsafe dependency library calls 最多。
    * 和靜態相比，動態更可以確認漏洞的可利用性。
    * 動態檢測有誤報的可能，需要透過手動檢查。
    * 實驗中隨機選了 80 個檢測到的漏洞做手動檢查，發現 56 個為真漏洞，其餘為誤報。
* 研究發現危險的 process 和危險的 lib 漏洞是最主要的安全問題。

## Conclusion

* 設計了混和平台，結合靜態和動態檢測漏洞。
* 靜態目標為找已知漏洞或弱點等。
* 動態透過模糊測試發現未知漏洞。
* 借助該系統，可在 IoT 設備發布前發現安全漏洞。

###### tags: `paper`