网络安全Kali学习系列 · 第57篇

固件提取与分析

IoT 设备固件 · 解包分析 · 漏洞挖掘
📋 本篇导读
  • 固件获取方式与文件格式识别
  • binwalk、firmadyne、firmware-analysis-toolkit
  • 文件系统解包(SquashFS、JFFS2、UBIFS)
  • 固件安全审计:硬编码密钥、命令注入、未授权访问
  • 固件仿真运行与动态分析

一、固件安全概述

IoT 设备(路由器、摄像头、智能家居)通常运行嵌入式 Linux 系统,其固件中包含完整的操作系统和应用程序。由于设备更新困难,固件中的漏洞往往长期存在,是攻击者的重要目标。

1.1 固件获取方式

方式 说明 难度
官网下载 从厂商官网下载固件升级包 简单
OTA 抓包 拦截设备 OTA 升级请求获取固件 中等
Flash 读取 用编程器直接读取 Flash 芯片 困难
UART/SSH 提取 通过串口或 SSH 登录设备后 dump 中等
漏洞利用 通过 RCE 漏洞获取固件 困难

1.2 常见固件格式

格式 说明 Magic/特征
SquashFS 只读压缩文件系统 hsqs / sqsh
JFFS2 Journalling Flash File System v2 0x1985 魔术字
UBIFS Unsorted Block Image FS(NAND Flash) UBI# 标识
CRFS / CramFS 压缩 ROM 文件系统 0x28cd3d45
TRX / uImage 路由器固件封装格式 HDR0 / 27051956
Encrypted AES/3DES 加密固件 高熵值,无法识别格式

二、binwalk 详解

binwalk 是固件分析的瑞士军刀,能自动识别固件中的文件系统、压缩包、代码段等。

2.1 基本用法

Bash · binwalk 常用命令
1
2
3
4
5
6
7
8
9
10
11
# 1. 固件格式识别(最常用)
binwalk firmware.bin
# 输出: 偏移量 + 文件类型描述
# 2. 自动提取所有识别到的文件
binwalk -e firmware.bin
# 结果保存到 _firmware.bin.extracted/
# 3. 递归提取(深入子文件)
binwalk -eM firmware.bin
# -M: --matryoshka 俄罗斯套娃模式
Bash · binwalk 进阶命令
1
2
3
4
5
6
7
8
9
# 4. 熵值分析(判断是否加密/压缩)
binwalk -E firmware.bin
# 高熵值区域(接近1.0) = 加密/压缩
# 5. 字符串搜索
binwalk -S "admin_password" firmware.bin
# 6. 提取指定偏移处的数据
dd if=firmware.bin bs=1 skip=1048576 count=8388608 of=fs.bin

2.2 binwalk 输出解读

Text · binwalk 输出示例
1
2
3
4
5
6
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------
0 0x0 TRX header, version: 1, ...
28 0x1C uImage header, ... "MIPS Linux Kernel"
1048576 0x100000 Squashfs filesystem, ...
8388608 0x800000 JFFS2 filesystem, little endian
💡 解读要点
第一列是字节偏移(十进制/十六进制),第三列是识别出的文件类型。提取时从偏移量开始截取到下一个段之前。

三、文件系统解包

3.1 SquashFS 解包

Bash · SquashFS 解包
1
2
3
4
5
6
7
8
# 方式一:unsquashfs 直接解包
sudo apt install squashfs-tools
unsquashfs -d rootfs squashfs.bin
# rootfs 目录即为解压后的文件系统
# 方式二:binwalk -e 自动提取
binwalk -e firmware.bin
# 结果在 _firmware.bin.extracted/squashfs-root/

3.2 JFFS2 解包

Bash · JFFS2 镜像挂载
1
2
3
4
5
6
7
8
# 使用 mtdram 内核模块模拟 MTD 设备
modprobe mtdram total_size=16384 erase_size=128
modprobe mtdblock
dd if=jffs2.img of=/dev/mtdblock0
mkdir /mnt/jffs2 && mount -t jffs2 /dev/mtdblock0 /mnt/jffs2
# 或使用 jefferson 工具直接提取
pip install jefferson && jefferson jffs2.img -d jffs2_root/

3.3 UBI/UBIFS 解包

Bash · UBI/UBIFS 解包
1
2
3
4
5
6
7
# 安装 mtd-utils 工具
sudo apt install mtd-utils
# 使用 ubi_reader 工具解析
pip install ubi_reader
ubireader_extract_images ubi.img
ubireader_extract_files ubi.img -o ubifs_root/

四、固件静态审计

解包文件系统后,可以对固件进行静态安全审计,查找硬编码密钥、命令注入、弱口令等漏洞。

4.1 敏感信息搜索

Bash · 敏感信息 grep 搜索
1
2
3
4
5
6
7
8
9
10
11
# 1. 搜索硬编码密码
grep -rn "password\|passwd\|pwd" ./rootfs/etc/ | head -20
grep -rn "admin\|root\|guest" ./rootfs/etc/shadow
# 2. 搜索密钥与 Token
grep -rn "secret\|token\|api_key\|private_key" ./rootfs/
find ./rootfs -name "*.key" -o -name "*.pem" -o -name "*.crt"
# 3. 搜索命令注入风险点
grep -rn "system\|exec\|popen\|/bin/sh\|/bin/bash" ./rootfs/www/
grep -rn "passthru\|shell_exec\|eval" ./rootfs/www/

4.2 常见漏洞模式

漏洞类型 典型特征 危害等级
硬编码后门账号 /etc/shadow 中有已知密码的账号 严重
命令注入 CGI/Web 脚本中直接拼接用户输入执行命令 严重
未授权访问 管理页面无鉴权、调试接口开放 高危
硬编码密钥 AES/RSA 密钥写死在代码中 高危
路径遍历 Web 接口未校验 ../ 路径 高危
SQL 注入 SQL 语句拼接用户输入 中危

五、固件仿真与动态分析

静态分析只能发现潜在漏洞,动态分析可以验证漏洞是否真实可利用。firmadyne 是常用的固件仿真工具。

5.1 FirmAE / firmadyne

工具 说明 适用架构
firmadyne 自动化固件仿真框架,QEMU 虚拟化 MIPS/ARM
FirmAE firmadyne 改进版,仿真成功率更高 MIPS/ARM
firmware-analysis-toolkit 集成 firmadyne + binwalk + asavr99 MIPS/ARM
QEMU user mode 直接运行单个二进制文件 MIPS/ARM/x86

5.2 QEMU user mode 快速测试

Bash · QEMU 运行 MIPS 二进制
1
2
3
4
5
6
7
8
9
# 安装 QEMU 用户模式
sudo apt install qemu-user-static qemu-mips-static
# 运行 MIPS 二进制(需要 lib 库)
qemu-mips-static -L ./rootfs/ ./rootfs/usr/bin/httpd
# 检查二进制架构
file ./rootfs/bin/busybox
# 输出: MIPS32, ARM, etc.

六、固件分析工具集

工具 功能 类型
binwalk 固件格式识别与自动提取 必备工具
FirmAE 自动化固件仿真 动态分析
firmwalker 固件文件系统敏感信息扫描 静态分析
emba 嵌入式固件安全审计框架 综合审计
ghidra / IDA 二进制逆向分析 逆向分析
jefferson JFFS2 文件系统解包 解包工具
ubi_reader UBI/UBIFS 解析 解包工具

七、完整分析流程

Step 1:获取固件(官网下载 / OTA 抓包 / Flash 读取)
Step 2:binwalk 识别格式 + 熵值分析(判断是否加密)
Step 3:binwalk -eM 递归提取文件系统
Step 4:静态审计(硬编码密码 / 密钥 / 命令注入 / 未授权访问)
Step 5:使用 FirmAE 或 QEMU 仿真运行固件
Step 6:动态验证漏洞(复现、提权、横向)
Step 7:编写 PoC,提交漏洞报告

八、小结

🔑 本篇要点
  • 固件获取方式:官网下载、OTA 抓包、Flash 读取、UART/SSH 提取、漏洞利用
  • 常见文件系统:SquashFS(最常见)、JFFS2、UBIFS、CramFS
  • binwalk 是固件分析首选工具:识别格式(binwalk)、自动提取(-e)、递归提取(-eM)、熵分析(-E)
  • SquashFS 用 unsquashfs 解包,JFFS2 用 jefferson,UBIFS 用 ubi_reader
  • 静态审计重点:硬编码密码、密钥、命令注入点、未授权接口、路径遍历
  • 动态仿真:FirmAE / firmadyne 全系统仿真,QEMU user mode 单程序运行
  • 典型漏洞:后门账号、命令注入、未授权访问、硬编码密钥(IoT 最常见)
下一篇预告
第 58 篇:IoT 协议安全与硬件调试
UART/JTAG/SWD 硬件调试 + 常见 IoT 协议攻击
网络安全Kali学习系列 · 第57篇 · 固件提取与分析