3、固件获取与预处理:固件提取方法(芯片读取、OTA抓包、官网下载)、固件格式识别与解包(bin、hex、squashfs、cramfs等)

固件是嵌入式设备硬件与上层应用之间的“灵魂”,它直接决定了设备的功能、性能与安全性。在固件漏洞分析与利用的完整流程中,固件获取与预处理是后续静态分析、动态调试和漏洞挖掘的基石。如果拿不到正确的固件,或者无法从原始二进制中还原出文件系统与内核镜像,后续的一切分析都将无从谈起。本章将系统讲解固件获取的三大主流途径(芯片读取、OTA抓包、官网下载),并深入剖析固件格式识别与解包的核心技术,帮助读者建立起从“物理介质”到“可分析文件系统”的完整知识链路。

固件获取与预处理工程链路 固件获取途径 ① 芯片读取(SPI/JTAG/ISP) ② OTA抓包(HTTP/TFTP/私有协议) ③ 官网/厂商支持站点下载 格式识别与预处理 文件类型探测(file/binwalk) 头部/魔数/结构分析 熵值/压缩/加密判断 解包与文件系统还原 bin/hex → 镜像提取 squashfs/cramfs → 挂载/解压 内核/文件系统/应用分离 输出:可分析固件包(内核+文件系统+应用) 后续分析方向 静态代码审计 动态调试 漏洞挖掘

上图展示了固件获取与预处理的完整工程链路。从左侧的三大获取途径出发,经过中间的格式识别与预处理,再到右侧的解包与文件系统还原,最终输出可供后续分析使用的固件包。整个流程环环相扣,任何一个环节的疏漏都可能导致分析失败或误判。

3.1 固件提取方法:三大途径的实战对比

3.1.1 芯片读取:物理层级的“硬提取”

核心原理:芯片读取是最直接、最底层的固件获取方式,适用于设备未提供OTA升级功能、固件加密保护较弱或需要获取Bootloader等底层代码的场景。常见的芯片包括SPI NOR Flash、SPI NAND Flash、并行NOR Flash以及eMMC等。读取方式主要有三种:SPI Flash编程器读取、JTAG/SWD调试接口读取和ISP(In-System Programming)在线读取。

操作流程:以最常见的SPI Flash读取为例,具体步骤如下:

  1. 硬件准备:确认Flash芯片型号(如Winbond W25Q128、MXIC MX25L25645G等),准备对应的编程器(如RT809H、CH341A)和测试夹或热风枪。
  2. 连接与备份:使用测试夹夹住芯片(免拆焊)或将芯片焊下放入编程器座,读取前先读取芯片ID确认型号匹配,然后执行全片读取,保存为.bin文件。
  3. 校验与验证:读取完成后,建议连续读取两次并比对MD5值,确保数据完整性。若芯片有写保护或加密位,需先解除保护。
风险提示:芯片读取存在硬件损坏风险。测试夹接触不良可能导致读取数据错误;热风枪拆焊温度过高可能损坏芯片或PCB焊盘。建议优先使用免拆焊测试夹,并在读取前对芯片引脚进行清洁。

3.1.2 OTA抓包:网络侧的“软截获”

核心原理:现代物联网设备普遍支持OTA(Over-The-Air)固件升级。当设备发起升级请求时,固件包会通过网络传输。通过中间人代理或网络抓包工具,可以截获传输中的固件包。常见协议包括HTTP/HTTPS、TFTP、FTP以及厂商自定义的私有协议。

判断方法与操作流程:

  • 环境搭建:将设备与PC接入同一局域网,使用Burp Suite、Fiddler或Wireshark进行抓包。对于HTTPS流量,需要将设备证书替换为自签名证书(若设备支持导入证书)。
  • 触发升级:在设备管理界面点击“检查更新”或“立即升级”,同时观察抓包工具中的流量变化。
  • 固件提取:在Wireshark中过滤http或tftp协议,找到包含固件文件特征的请求(如URL中包含.bin、.img、.pkg等后缀),右键“导出对象”即可保存固件。
经验提醒:部分设备会先下载一个小的版本描述文件(如version.json),再根据其中的URL下载实际固件。务必同时抓取这两个请求,并关注响应头中的Content-Length字段,以判断固件包大小是否合理。

3.1.3 官网下载:最便捷的“白嫖”路径

核心原理:厂商官网、技术支持社区或GitHub官方仓库通常会提供固件下载。这种方式无需硬件操作,且固件版本明确,适合快速获取目标版本进行漏洞比对。

操作流程:访问厂商官网的支持/下载页面,输入产品型号或序列号,选择固件版本下载。部分厂商会提供固件校验和(MD5/SHA256),下载后务必校验完整性。

获取方式适用场景优点缺点工具/设备
芯片读取无OTA、需Bootloader、加密固件最底层、最完整硬件操作风险、可能损坏设备编程器、测试夹、热风枪
OTA抓包支持远程升级的设备无需拆机、可获取最新版本HTTPS加密可能拦截失败Burp Suite、Wireshark
官网下载厂商公开提供固件便捷、版本明确可能缺少历史版本浏览器、下载工具

3.2 固件格式识别:从二进制到结构化数据

3.2.1 文件类型探测与魔数分析

核心原理:固件文件本质上是一个二进制大对象(Blob),其内部可能包含Bootloader、内核、文件系统、设备树等多个部分。识别固件格式的第一步是确定文件类型和内部结构。Linux下的file命令和binwalk工具是首选。

操作流程:

# 使用file命令查看文件类型
file firmware.bin

# 使用binwalk扫描固件内部结构
binwalk firmware.bin

# 使用binwalk提取所有可识别的文件
binwalk -e firmware.bin

案例拆解:某路由器固件router.bin,file命令输出为data,说明是未知格式。使用binwalk扫描后,发现偏移量0x20000处有squashfs filesystem的魔数签名hsqs,偏移量0x10000处有uImage头部(27 05 19 56)。由此可以判断该固件包含一个Linux内核和一个SquashFS根文件系统。

3.2.2 熵值分析与加密判断

核心原理:熵值(Entropy)用于衡量数据的随机性。正常固件的熵值通常在0.5~0.8之间(压缩数据),而加密后的固件熵值接近1.0(高度随机)。通过计算固件各段的熵值,可以快速定位加密区域或隐藏数据。

操作流程:使用binwalk -E或ent工具计算熵值。若发现某段熵值异常高且无文件签名,则可能被加密或混淆。

实战要点:对于加密固件,不要急于放弃。检查Bootloader中是否包含解密密钥或解密函数;部分设备使用AES-ECB/CBC模式,密钥可能硬编码在Bootloader或设备树中。通过逆向Bootloader,往往能恢复解密逻辑。

3.3 固件解包:还原文件系统与内核

3.3.1 常见固件格式与解包工具

核心原理:固件内部常见的文件系统格式包括SquashFS、CramFS、JFFS2、UBIFS、EXT4等。每种格式都有其特定的头部魔数和压缩算法。解包的核心是识别格式并选择合适的工具。

格式魔数/特征解包工具备注
SquashFShsqs (0x68737173)unsquashfs只读压缩文件系统,最常见
CramFS0x28cd3d45cramfsck, cramfs-tools老式只读文件系统
JFFS20x1985 (little-endian)jefferson, jffs2dumpNOR/NAND Flash常用
UBIFSUBI# (0x55424923)ubireader_extract_filesNAND Flash常用
EXT40x53EF (superblock)debugfs, mount较少见,多见于eMMC设备

3.3.2 解包操作实战

操作流程:以SquashFS为例,使用unsquashfs工具解包:

# 解包SquashFS文件系统
unsquashfs rootfs.squashfs

# 查看解包后的目录结构
ls -la squashfs-root/

案例拆解:完整固件分析闭环

某智能摄像头固件camera_fw.bin,大小16MB。分析过程如下:

  1. 初步识别:binwalk camera_fw.bin显示在0x0处有uImage头部,0x40000处有squashfs签名。
  2. 分离内核与文件系统:使用dd命令按偏移量切割:dd if=camera_fw.bin of=kernel.bin bs=1 skip=0 count=262144,dd if=camera_fw.bin of=rootfs.squashfs bs=1 skip=262144。
  3. 解包文件系统:unsquashfs rootfs.squashfs,得到squashfs-root/目录。
  4. 分析关键文件:在squashfs-root/etc/下发现shadow文件,squashfs-root/usr/bin/下发现主程序camera_app。使用strings命令搜索硬编码凭据:strings camera_app | grep -i "password\|secret\|key",发现硬编码的AES密钥。
  5. 结果:成功提取固件并定位到硬编码密钥,为后续漏洞利用(如固件解密、后门植入)奠定了基础。
常见误区:
1. 忽略Bootloader:Bootloader中可能包含硬件初始化代码、加密密钥和恢复模式,是漏洞挖掘的高价值目标。
2. 盲目使用binwalk -e:binwalk自动提取可能遗漏部分文件或产生错误提取,建议先手动分析偏移量,再使用dd精确切割。
3. 忽视文件系统挂载点:解包后应检查/etc/init.d/、/etc/config/等目录,了解系统启动流程和配置项,这对后续漏洞利用至关重要。

3.4 总结与复盘

固件获取与预处理是嵌入式安全分析的“第一公里”。本章从三大获取途径出发,详细讲解了芯片读取、OTA抓包和官网下载的适用场景与操作要点;随后深入固件格式识别,介绍了file、binwalk和熵值分析等核心方法;最后通过SquashFS等常见格式的解包实战,展示了从原始二进制到可分析文件系统的完整流程。在实际工作中,分析师应根据设备类型、硬件可访问性和固件加密情况灵活选择获取方式,并熟练掌握格式识别与解包工具链。下一阶段,我们将基于提取出的固件进行静态代码审计和动态调试,进一步挖掘潜在的安全漏洞。