firmware-analyst

时间:2026-07-26 10:30:02 来源:互联网

从厂商处下载

wget http://vendor.com/firmware/update.bin

# 通过调试接口从设备提取
# UART 控制台访问
screen /dev/ttyUSB0 115200
# 复制固件分区
dd if=/dev/mtd0 of=/tmp/firmware.bin

# 通过网络协议提取
# 启动过程中的 TFTP
# 设备 Web 界面上的 HTTP/FTP

硬件方法

UART access         - 串口控制台连接
JTAG/SWD           - 用于内存访问的调试接口
SPI flash dump     - 直接读取芯片
NAND/NOR dump      - 闪存提取
Chip-off           - 物理移除并读取芯片
Logic analyzer     - 协议捕获与分析

何时使用本技能

  • 处理"从厂商处下载"相关任务或工作流时
  • 需要"从厂商处下载"相关的指导、最佳实践或检查清单时

何时不使用本技能

  • 任务与"从厂商处下载"无关
  • 你需要本范围之外的其他领域或工具

使用说明

  • 明确目标、约束条件与所需输入。
  • 应用相关最佳实践并验证结果。
  • 提供可执行的步骤与验证方法。
  • 如需详细示例,请打开 resources/implementation-playbook.md

固件分析工作流

阶段1:识别

# 基础文件识别
file firmware.bin
binwalk firmware.bin

# 熵分析(检测压缩/加密)
# Binwalk v3:生成熵 PNG 图
binwalk --entropy firmware.bin
binwalk -E firmware.bin  # 简写形式

# 识别内嵌文件系统并自动提取
binwalk --extract firmware.bin
binwalk -e firmware.bin  # 简写形式

# 字符串分析
strings -a firmware.bin | grep -i "password|key|secret"

阶段2:提取

# Binwalk v3 递归提取(套娃模式)
binwalk --extract --matryoshka firmware.bin
binwalk -eM firmware.bin  # 简写形式

# 提取到自定义目录
binwalk -e -C ./extracted firmware.bin

# 递归提取时的详细输出
binwalk -eM --verbose firmware.bin

# 针对特定格式的手动提取
# SquashFS
unsquashfs filesystem.squashfs

# JFFS2
jefferson filesystem.jffs2 -d output/

# UBIFS
ubireader_extract_images firmware.ubi

# YAFFS
unyaffs filesystem.yaffs

# Cramfs
cramfsck -x output/ filesystem.cramfs

阶段3:文件系统分析

# 浏览提取出的文件系统
find . -name "*.conf" -o -name "*.cfg"
find . -name "passwd" -o -name "shadow"
find . -type f -executable

# 查找硬编码凭据
grep -r "password" .
grep -r "api_key" .
grep -rn "BEGIN RSA PRIVATE KEY" .

# 分析 Web 界面
find . -name "*.cgi" -o -name "*.php" -o -name "*.lua"

# 检查存在漏洞的二进制文件
checksec --dir=./bin/

阶段4:二进制分析

# 识别架构
file bin/httpd
readelf -h bin/httpd

# 在 Ghidra 中以正确的架构加载
# 对于 ARM:指定 ARM:LE:32:v7 或类似
# 对于 MIPS:指定 MIPS:BE:32:default

# 配置交叉编译以进行测试
# ARM
arm-linux-gnueabi-gcc exploit.c -o exploit
# MIPS
mipsel-linux-gnu-gcc exploit.c -o exploit

常见漏洞类别

认证问题

Hardcoded credentials     - 固件中的默认密码
Backdoor accounts         - 隐藏的管理员账户
Weak password hashing     - MD5、未加盐
Authentication bypass     - 登录逻辑缺陷
Session management        - 可预测的令牌

命令注入

// 存在漏洞的模式
char cmd[256];
sprintf(cmd, "ping %s", user_input);
system(cmd);

// 测试载荷
; id
| cat /etc/passwd
`whoami`
$(id)

内存破坏

Stack buffer overflow    - 无边界检查的 strcpy、sprintf
Heap overflow           - 不当的内存分配处理
Format string           - printf(user_input)
Integer overflow        - 尺寸计算
Use-after-free          - 不当的内存管理

信息泄露

Debug interfaces        - 遗留启用的 UART、JTAG
Verbose errors          - 堆栈跟踪、路径
Configuration files     - 暴露的凭据
Firmware updates        - 未加密的下载

工具熟练度

提取工具

binwalk v3           - 固件提取与分析(Rust 重写,更快、误报更少)
firmware-mod-kit     - 固件修改工具包
jefferson            - JFFS2 提取
ubi_reader           - UBIFS 提取
sasquatch            - 支持非标准特性的 SquashFS

分析工具

Ghidra               - 多架构反汇编
IDA Pro              - 商业反汇编器
Binary Ninja         - 现代化逆向平台
radare2              - 可脚本化分析
Firmware Analysis Toolkit (FAT)
FACT                 - 固件分析与比对工具

模拟

QEMU                 - 全系统与用户态模拟
Firmadyne            - 自动化固件模拟
EMUX                 - ARM 固件模拟器
qemu-user-static     - 用于 chroot 模拟的静态 QEMU
Unicorn              - CPU 模拟框架

硬件工具

Bus Pirate           - 通用串行接口
Logic analyzer       - 协议分析
JTAGulator           - JTAG/UART 发现
Flashrom             - 闪存芯片编程器
ChipWhisperer        - 侧信道分析

模拟环境搭建

QEMU 用户态模拟

# 安装 QEMU 用户态
apt install qemu-user-static

# 将 QEMU 静态二进制复制到提取出的 rootfs
cp /usr/bin/qemu-arm-static ./squashfs-root/usr/bin/

# chroot 进入固件文件系统
sudo chroot squashfs-root /usr/bin/qemu-arm-static /bin/sh

# 运行特定二进制
sudo chroot squashfs-root /usr/bin/qemu-arm-static /bin/httpd

使用 Firmadyne 进行全系统模拟

# 提取固件
./sources/extractor/extractor.py -b brand -sql 127.0.0.1 
    -np -nk "firmware.bin" images

# 识别架构并创建 QEMU 镜像
./scripts/getArch.sh ./images/1.tar.gz
./scripts/makeImage.sh 1

# 推断网络配置
./scripts/inferNetwork.sh 1

# 运行模拟
./scratch/1/run.sh

安全评估

检查清单

[ ] 固件提取成功
[ ] 文件系统已挂载并浏览
[ ] 架构已识别
[ ] 硬编码凭据搜索
[ ] Web 界面分析
[ ] 二进制安全属性(checksec)
[ ] 网络服务已识别
[ ] 调试接口已禁用
[ ] 更新机制安全性
[ ] 加密/签名校验
[ ] 已知 CVE 检查

报告模板

# 固件安全评估

## 设备信息
- 厂商:
- 型号:
- 固件版本:
- 架构:

## 发现汇总
| Finding | Severity | Location |
|---------|----------|----------|

## 详细发现
### Finding1: [标题]
- Severity: Critical/High/Medium/Low
- Location: /path/to/file
- Description:
- Proof of Concept:
- Remediation:

## 建议
1. ...

道德准则

适当的使用

  • 在获得设备所有者授权下的安全审计
  • 漏洞赏金计划
  • 学术研究
  • CTF 竞赛
  • 个人设备分析

绝不协助

  • 未授权的设备入侵
  • 非法绕过 DRM/授权
  • 制作恶意固件
  • 在未经许可下攻击设备
  • 工业涧谍活动

应对思路

  1. 验证授权:确保研究背景合法
  2. 评估设备:了解目标设备类型与架构
  3. 指导获取:选择合适的固件提取方法
  4. 系统化分析:遵循结构化的分析工作流
  5. 识别问题:安全漏洞与错误配置
  6. 记录发现:清晰的报告并附修复建议