dennislee928/firmware-research-demo
GitHub: dennislee928/firmware-research-demo
一个集成binwalk、Ghidra、YARA的固件分析演示框架,提供从解包到特征检测的自动化流程和容器化部署环境。
Stars: 7 | Forks: 0
# 🔍 韌體解包與特徵檢測演示
本專案展示了韌體分析方面的實作探索,主要關注於:
- 🧩 使用 `binwalk` 和 `hexdump` 進行韌體解包
- 🧠 通過 `Ghidra` 進行靜態字串和模式分析
- 🧪 使用 `YARA` 進行基於規則的檢測
- 📑 針對嵌入式系統中元件識別的模擬報告
- 🐳 Docker 容器化與自動化分析流程
## 直接使用:
docker pull dennisleetw/firmware-analyzer
container port set to 3000:3000
open localhost:3000

## Demo:
https://youtu.be/J5Wb_5GvQmA
## 📦 專案結構
firmware-analysis-demo/
├── firmware.bin # 樣本韌體映像檔
├── binwalk-analysis/ # 使用binwalk解包的目錄
├── hexdump-analysis/ # 原始十六進位 + 偏移註釋
├── yara-rules/ # YARA規則與檢測結果
│ ├── telnetd_rule.yar # 檢測telnet服務的規則
│ └── network_services_rule.yar # 檢測多種網路服務的規則
├── ghidra-notes.md # 字串/函數參考 + 註釋
├── simulated_report.md # 特徵檢測摘要
├── can-log-demo.txt # 模擬CAN協議片段
├── screenshots/ # 分析工具截圖
├── firmware_samples/ # 韌體樣本儲存目錄
├── reports/ # 分析報告輸出目錄
├── firmware_analyzer.sh # 自動化分析腳本
├── setup_cron.sh # 定時任務設置腳本
├── Dockerfile # Docker映像定義
├── docker-compose.yml # Docker環境配置
└── README.md # 本文檔
## 🛠️ 使用工具
| 工具 | 用途 |
| ------- | --------------------- |
| binwalk | 韌體提取與分析 |
| hexdump | 原始數據檢查 |
| Ghidra | 二進制分析 + 字串映射 |
| YARA | 基於規則的特徵匹配 |
| Docker | 環境容器化與部署 |
| Cron | 自動化定期執行分析 |
## 🔬 實作過程
### ✅ 步驟 1:使用 binwalk 解包韌體
- 提取檔案系統和元件標頭
- 識別壓縮載荷和 ELF 標頭
- → 查看 `/binwalk-analysis/`
### ✅ 步驟 2:使用 hexdump 進行檢查
- 檢視已知模式的偏移(telnetd, dropbear, /etc/shadow)
- 對潛在規則映射位元組範圍
- → 查看 `/hexdump-analysis/`
### ✅ 步驟 3:使用 Ghidra 進行分析
- 將.bin 載入 Ghidra
- 使用「已定義字串」和「函數圖」視圖
- 定位嵌入式服務(例如,BusyBox, sshd)
- 💡 在 `/screenshots/` 中包含 Ghidra 分析截圖
### ✅ 步驟 4:編寫並運行 YARA 規則
rule Detect_Telnetd {
strings:
$telnet = "telnetd"
condition:
$telnet
}
- 成功檢測到解包文件中的 telnetd
- 可能表明存在不安全的傳統服務
### ✅ 步驟 5:自動化與容器化
- 創建自動化分析腳本執行完整流程
- 設置定時任務定期分析新韌體
- 通過 Docker 容器提供一致的分析環境
## 📊 執行方式
以下是不同的執行方式,根據您的需求選擇:
### 本地執行
# 運行單次分析
./firmware_analyzer.sh
# 設定每30分鐘自動執行
./setup_cron.sh
### Docker 容器執行
# 構建並啟動容器化環境
docker-compose up -d
# 查看執行日誌
docker logs firmware-analyzer
## 📋 命令行選項
自動化分析腳本支援的選項:
使用方式: ./firmware_analyzer.sh [選項] [韌體檔案路徑]
選項:
-h, --help 顯示幫助訊息
-f, --file <路徑> 指定單個韌體檔案進行分析
-d, --directory <路徑> 指定目錄,分析該目錄下所有韌體檔案
-e, --extension <副檔名> 與 -d 一起使用,指定要分析的檔案副檔名 (默認: .bin)
-r, --recursive 與 -d 一起使用,遞迴分析子目錄
-y, --yara-only 僅運行YARA規則檢測
-b, --binwalk-only 僅運行binwalk分析
-x, --extract 提取檔案系統 (與binwalk一起使用)
### 使用範例
# 分析單個檔案
./firmware_analyzer.sh firmware.bin
# 分析指定目錄中的所有.bin檔案
./firmware_analyzer.sh -d firmware_samples
# 遞迴分析所有.img檔案
./firmware_analyzer.sh -d firmware_samples -e .img -r
# 只對指定檔案執行YARA分析
./firmware_analyzer.sh -f firmware.bin -y
## 📋 使用 Docker 鏡像的完整流程
以下流程圖展示了用戶如何使用 Docker 鏡像進行韌體分析的完整流程:
flowchart TD
A[開始] --> B{已安裝 Docker?}
B -->|否| C[安裝 Docker]
B -->|是| D[拉取韌體分析鏡像]
C --> D
D --> E[準備韌體樣本]
E --> F[掛載本地目錄]
F --> G[啟動容器]
G --> H{選擇分析模式}
H -->|單次分析| I[執行firmware_analyzer.sh]
H -->|定期分析| J[設置cron任務]
I --> K[查看分析報告]
J --> K
K --> L[檢查檢測到的威脅]
L --> M{需要深入分析?}
M -->|是| N[使用Ghidra進行靜態分析]
M -->|否| O[生成最終報告]
N --> O
O --> P[結束]
subgraph "Docker命令"
Q[docker pull dennislee928/firmware-analyzer:latest]
R[docker run -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples -v $(pwd)/reports:/firmware-analysis/reports dennislee928/firmware-analyzer:latest]
S[docker-compose up -d]
end
### Docker Hub 使用步驟
1. **拉取鏡像**:
docker pull dennislee928/firmware-analyzer:latest
2. **執行容器**:
docker run -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples \
-v $(pwd)/reports:/firmware-analysis/reports \
dennislee928/firmware-analyzer:latest
3. **使用 docker-compose**:
# 下載docker-compose.yml
wget https://raw.githubusercontent.com/dennislee928/firmware-research-demo/main/docker-compose.yml
# 運行環境
docker-compose up -d
4. **查看結果**:
分析報告將存儲在掛載的`reports`目錄中。
## 📋 命令行選項
自動化分析腳本支援的選項:
使用方式: ./firmware_analyzer.sh [選項] [韌體檔案路徑]
選項:
-h, --help 顯示幫助訊息
-f, --file <路徑> 指定單個韌體檔案進行分析
-d, --directory <路徑> 指定目錄,分析該目錄下所有韌體檔案
-e, --extension <副檔名> 與 -d 一起使用,指定要分析的檔案副檔名 (默認: .bin)
-r, --recursive 與 -d 一起使用,遞迴分析子目錄
-y, --yara-only 僅運行YARA規則檢測
-b, --binwalk-only 僅運行binwalk分析
-x, --extract 提取檔案系統 (與binwalk一起使用)
### 使用範例
# 分析單個檔案
./firmware_analyzer.sh firmware.bin
# 分析指定目錄中的所有.bin檔案
./firmware_analyzer.sh -d firmware_samples
# 遞迴分析所有.img檔案
./firmware_analyzer.sh -d firmware_samples -e .img -r
# 只對指定檔案執行YARA分析
./firmware_analyzer.sh -f firmware.bin -y
## 📋 使用 command-line/Docker 鏡像的完整流程
以下流程圖展示了用戶如何使用 Docker 鏡像進行韌體分析的完整流程:
**查看結果**:
分析報告將存儲在掛載的`reports`目錄中。
### Docker 環境中使用命令行選項
在 Docker 容器中使用命令行選項時,需要將選項傳遞給容器內的 `firmware_analyzer.sh` 腳本。以下是幾種常見的使用方式:
#### 使用 `docker run` 直接執行
# 分析單個檔案
docker run -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples \
-v $(pwd)/reports:/firmware-analysis/reports \
dennislee928/firmware-analyzer:latest \
firmware_analyzer.sh -f /firmware-analysis/firmware_samples/firmware.bin
# 分析目錄中所有 .bin 檔案
docker run -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples \
-v $(pwd)/reports:/firmware-analysis/reports \
dennislee928/firmware-analyzer:latest \
firmware_analyzer.sh -d /firmware-analysis/firmware_samples
# 僅執行 YARA 分析
docker run -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples \
-v $(pwd)/reports:/firmware-analysis/reports \
dennislee928/firmware-analyzer:latest \
firmware_analyzer.sh -f /firmware-analysis/firmware_samples/firmware.bin -y
#### 使用 `docker-compose` 執行
如果使用 `docker-compose.yml` 進行部署,可以在 `docker-compose.yml` 中定義命令:
version: "3"
services:
firmware-analyzer:
image: dennislee928/firmware-analyzer:latest
volumes:
- ./firmware_samples:/firmware-analysis/firmware_samples
- ./reports:/firmware-analysis/reports
command: firmware_analyzer.sh -d /firmware-analysis/firmware_samples -r
或者使用 `docker-compose run` 執行特定命令:
# 使用 YARA 分析特定檔案
docker-compose run --rm firmware-analyzer firmware_analyzer.sh -f /firmware-analysis/firmware_samples/firmware.bin -y
# 遞迴分析特定目錄中所有 .img 檔案
docker-compose run --rm firmware-analyzer firmware_analyzer.sh -d /firmware-analysis/firmware_samples -e .img -r
#### 進入容器執行多個命令
如果需要在容器內執行多個命令,可以先進入容器:
# 啟動並進入容器
docker run -it --rm -v $(pwd)/firmware_samples:/firmware-analysis/firmware_samples \
-v $(pwd)/reports:/firmware-analysis/reports \
dennislee928/firmware-analyzer:latest /bin/bash
# 在容器內執行命令
firmware_analyzer.sh -h
firmware_analyzer.sh -f /firmware-analysis/firmware_samples/firmware.bin
firmware_analyzer.sh -d /firmware-analysis/firmware_samples -e .img -r
#### 注意事項
- 容器內路徑與主機路徑不同,請使用容器內的完整路徑 (例如 `/firmware-analysis/firmware_samples/`)
- 結果報告會自動保存到掛載的 `reports` 目錄中
- 建議將韌體檔案放置在 `firmware_samples` 目錄中,以便容器能夠存取
### 使用 Web 界面
最新版本的韌體分析工具現已支援網頁界面,提供直觀的使用者操作體驗:
#### 啟動 Web 界面
# 使用Docker Compose啟動帶有Web界面的容器
docker-compose up -d
# Web界面將在以下位置可用
http://localhost:3000
#### Web 界面功能
Web 界面提供以下功能:
1. **韌體檔案上傳**:
- 直接從瀏覽器上傳韌體檔案進行分析
- 支援多種檔案格式 (.bin, .img, .fw)
2. **指定掃描目錄**:
- 可以指定容器內目錄路徑進行批次分析
- 支援按檔案副檔名過濾
3. **自訂分析選項**:
- 僅執行 YARA 規則檢測
- 僅執行 binwalk 分析
- 提取檔案系統
- 遞迴掃描子目錄
4. **設置定時分析**:
- 透過網頁界面一鍵設置 cron 定時任務
5. **報告管理**:
- 查看最近分析報告列表
- 直接在瀏覽器中開啟報告
#### 界面截圖

Web 界面使得非技術人員也能輕鬆使用這套分析工具,無需記憶複雜的命令行選項。
## 📑 模擬檢測報告
查看 `simulated_report.md` 了解:
- 匹配元件
- 風險評估
- 映射到檢測特徵格式
## 🎯 實作成果
| 目標 | 達成狀態 |
| ------------------ | -------- |
| 理解嵌入式韌體布局 | ✅ |
| 練習二進制分析工具 | ✅ |
| 創建自定義檢測特徵 | ✅ |
| 自動化分析流程 | ✅ |
| 記錄審查過程 | ✅ |
## 🧠 後續步驟
- 使用 YARA 正則表達式和元數據擴展規則集
- 將模式匹配整合到自動化流程(Python)
- 探索 binwalk -eM 處理多層映像
- 學習 radare2 或 IDA Pro 進行更深入分析
- 擴展容器化部署到雲端環境
## 📚 參考資源
- [Binwalk 文檔](https://github.com/ReFirmLabs/binwalk)
- [YARA 規則指南](https://yara.readthedocs.io/)
- [Ghidra 使用指南](https://ghidra-sre.org/)
- [Docker 容器化最佳實踐](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
## 💬 聯絡方式
Dennis Lee
- 🔗 GitHub: @dennislee928
- 🔗 作品集: next-js-portfolio
- 📧 需要時可提供電子郵件
參考資料:https://sergioprado.blog/reverse-engineering-router-firmware-with-binwalk/
标签:Binwalk, Cutter, Docker, Ghidra, Hexdump, IoT安全, NIDS, Windows日志分析, YARA, 二進位分析, 云资产可视化, 云资产清单, 威脅檢測, 安全防御评估, 容器化, 嵌入式系統, 情报收集, 惡意碼檢測, 漏洞研究, 物聯網安全, 網路安全, 自動化分析, 请求拦截, 資安工具, 逆向工程, 配置审计, 靜態分析, 韌體分析, 韌體安全