课题研究 物联网与工控安全 子课题01 · 第02页 / 共8页
01子课题 · IoT设备固件安全与漏洞挖掘

IoT设备固件安全与漏洞挖掘第02页:固件获取、解包与文件系统分析

固件解包是全部后续分析的门槛环节。本页系统给出合规获取渠道(官方支持页、OTA抓包、设备导出、芯片读取)、嵌入式固件的魔数与容器识别体系(uImage/FIT/SquashFS/JFFS2/UBI/TRX等)、Binwalk-unsquashfs-ubi_reader标准工具链、四大文件系统的形态对比与工程坑位对策,并给出解包后30分钟内完成的首次侦察清单。

固件获取Binwalk魔数识别SquashfsJFFS2UBIFS大端MIPS固件 carvingNVRAM研究状态:研究中
所属专题未来研究方向 › 物联网与工控安全 › 子课题01
目标受众固件逆向工程师、IoT安全研究人员、测评机构分析人员
本页要点固件获取五渠道 · 魔数识别表 · 解包工具链 · 文件系统对比 · 首次侦察清单

01 · 固件获取的合法渠道与方法

固件分析的第一步是获得目标镜像。所有渠道必须满足合规前提:仅使用自有设备、厂商公开发布的固件,或获得书面授权的目标。实践中按成本与侵入性从低到高排序如下。

渠道方法要点适用场景与限制
厂商官方支持页D-Link、TP-Link、Tenda、Netgear等均在其支持页面公开固件下载;部分固件按地区/硬件版本(Rev)细分,须核对设备标签与固件版本号成本最低、合规性最清晰;局限:仅覆盖仍提供支持的型号,EOL设备无下载
固件聚合镜像库Firmadyne论文构建的固件语料库、社区镜像站等;注意校验来源可信度与文件哈希适合大规模批量分析与学术论文复现;须警惕被篡改样本
OTA升级抓包在自有设备的受控网络中,用 mitmproxy 等代理观察升级请求(升级包下载URL、请求头、签名参数);对HTTPS加密流量仅在自有设备与合法持有证书的前提下分析获得与设备实际运行完全一致的固件;需处理证书固定(certificate pinning)情况
设备Web界面导出部分设备管理界面提供"配置备份/导出"功能,可导出含配置的二进制包;可分析配置结构、敏感字段加密方式非侵入;导出物常是"配置+固件片段"而非完整固件
存储芯片读取拆机后用编程器直接读取SPI NOR/NAND/eMMC内容(见第6页硬件接口章节),可获得含 bootloader 的完整镜像最完整但具侵入性,且读取内容与主控启动镜像可能存在分区差异;仅限自有/报废授权设备

完整性校验:获取后应立即记录来源URL、下载日期与SHA-256哈希;同一型号不同硬件版本、不同地区的固件可能差异显著,分析结论必须绑定"型号+硬件版本+固件版本"三元组,否则漏洞影响范围判定会出现严重偏差。

02 · 格式识别与魔数体系

嵌入式固件没有统一封装格式,常见结构是"多级容器+压缩"嵌套:下载文件可能是厂商私有包头,内嵌 uImage(内核)、SquashFS(根文件系统)、配置文件等多个分区。识别依赖魔数(Magic Number)扫描。

格式/容器魔数特征说明
U-Boot legacy uImage0x27051956(大端字序)U-Boot传统镜像头,内含压缩内核;头部含负载类型、压缩算法、CRC32等字段
U-Boot FIT Image设备树风格文本头(/dts-v1/)扁平化镜像树,可含多配置与签名节点,是Secure Boot的验证对象
SquashFShsqs(小端)/ sqsh(大端)只读压缩文件系统,嵌入式根文件系统绝对主流;注意MIPS设备常见大端变体
JFFS20x1985(节点魔数)NOR闪存日志文件系统,节点对齐与擦除块大小影响提取
UBI/UBIFSUBI#(EC头)NAND闪存上层卷管理层;提取需先解UBI卷再解UBIFS
initramfs (cpio)070701(newc格式)内核内置初始根文件系统,常以gzip压缩形式嵌于内核镜像中
Broadcom TRXHDR0博通方案常见固件容器(华硕、部分D-Link型号)
SEAMA / .chkSEAMA头(D-Link部分型号)/ Netgear chk头厂商私有封装,通常内含uImage+SquashFS
压缩层gzip 1f 8b / LZMA 5d 00 00 / xz fd 37 7a 58 5a / zstd 28 b5 2f fd / LZ4 04 22 4d 18固件普遍多层压缩嵌套,需逐层剥离
# Binwalk 递归扫描与自动解包
binwalk firmware.bin                 # 识别魔数与偏移
binwalk -e firmware.bin              # 提取识别到的文件系统
binwalk -Me firmware.bin             # 递归解包(处理多层嵌套)

# 大端SquashFS(MIPS设备常见)需显式指定
unsquashfs -be squashfs-root-mips64.img    # sasquash 增强版亦可

# JFFS2 与 UBI 提取
jefferson jffs2.img                  # JFFS2 → 目录树
ubireader_extract_images ubi.img     # UBI → UBIFS 镜像
ubireader_extract_files ubi.img      # UBI → 直接解出文件

常见坑位:①厂商修改魔数或魔数偏移——Binwalk扫不到不代表无文件系统,可结合熵分析(高熵区=压缩/加密数据)与字符串搜索交叉定位;②SquashFS大端/小端混淆——unsquashfs报错"Unknown file type"时优先怀疑端序;③加密固件——Bootloader或内核中硬编码AES密钥的情况真实存在(密钥与密文同固件分发),需先静态定位密钥材料再解密(第3页)。

03 · 解包工具链的标准组合

成熟的解包流水线由四类工具构成,建议以容器化方式固化(FACT等框架已内置解包流水线):

  • 识别与初步提取:Binwalk(含v3 Rust重写版,ReFirm Labs维护)负责魔数扫描与自动提取;配合 binwalk --signature --term 精确定位。
  • 文件系统级工具:sasquash/unsquashfs(SquashFS)、jefferson(JFFS2)、ubi_reader(UBI/UBIFS)、yaffs2utils(YAFFS2)、cramfs-tools;固件修改套件firmware-mod-kit(FMK)提供解包-重建闭环,适合差分实验。
  • 手工雕刻(carving):当自动提取失败时,用 dd 按魔数偏移手工切分: dd if=firmware.bin of=rootfs.squashfs bs=1 skip=<offset>;配合 file、熵图与hexdump确认边界。
  • 校验与可重复性:每步保留中间产物与哈希,形成"原始固件→各分区→文件系统树"的证据链,保证后续静态分析结论可回溯。
固件解包流水线:从原始镜像到可分析文件树
与第2—4页分析方法衔接;虚线环节为失败时的降级路径
工具说明以Binwalk、ubi_reader、FACT(Fraunhofer FKIE)官方仓库文档为准。

04 · 嵌入式文件系统形态对比

文件系统存储介质可写性/特性分析关注点
SquashFSSPI NOR/NAND、eMMC只读+压缩(gzip/lzma/xz/zstd);挂载后写操作需overlay解压完整文件树后全部静态分析对象都在其中;注意端序
JFFS2NOR闪存日志结构、磨损均衡、GC压缩节点对齐与擦除块处理;残留数据(未GC的旧版本文件)可能泄露历史凭证
UBIFSNAND闪存(经UBI层)支持写平衡与坏块管理先解UBI卷头(EC/VID)再解UBIFS;坏块表需正确解析
ext4eMMC与桌面Linux通用可用标准工具挂载分析;已删除文件可经取证手段恢复
initramfs/cpio嵌入内核镜像启动时载入内存binwalk对gzip嵌套层的递归提取通常能解出
tmpfs/overlayfs内存/闪存叠加运行时层仅存于运行设备;佐证"固件+运行时配置"双层结构,分析时勿混淆

残留数据价值:日志型文件系统(JFFS2/UBIFS)在GC之前保留旧节点,镜像级分析(而非挂载提取)可能恢复出已被覆盖的历史配置文件、口令与密钥——这是纯逻辑提取容易遗漏的证据源,也是芯片级读取(第6页)的增量价值之一。

05 · 首次侦察清单(First Reconnaissance)

解包完成后,按固定清单快速建立对固件的初步认知,通常30分钟内可完成:

  • 目录结构画像:识别Buildroot/Yocto/OpenWrt构建痕迹(/etc/os-release、/etc/openwrt_release、BUILD_*字符串);确认架构(MIPS/ARM/x86)与端序(ELF头e_machine字段+反汇编验证)。
  • 启动链梳理:init程序与 /etc/init.d/、rcS 脚本枚举开机自启服务;记录每个守护进程的二进制路径与启动参数。
  • 账户与认证:/etc/passwd、/etc/shadow(哈希格式:DES/$1$ MD5-crypt/$5$/$6$)、Web服务器配置文件(lighttpd/thttpd/mini_httpd/uhttpd/GoAhead/boa)中的认证realm与默认账户。
  • 网络服务清单:对外监听端口推断(HTTP管理界面、Telnet/SSH、UPnP、ONVIF、TR-069、MQTT、私有二进制协议)。
  • 敏感位置速查:/www(Web根目录与CGI)、/etc/config、NVRAM访问库、硬编码字符串(第3页规则库批量执行)。

06 · 工程难点与对策

难点表现对策
加密固件整段高熵、无 recognizable 魔数静态定位Bootloader/内核中的AES密钥与IV;熵分析划定密文区间;参考公开解密工具与厂商SDK文档
非标准魔数/偏移Binwalk识别失败但字符串可见字符串锚点+熵图人工分区;对照同方案其他厂商固件比对结构
多分区与烧录格式boot/kernel/rootfs/config分离,部分为烧录器格式带OOB数据识别分区表(uImage头/自定义头);NAND镜像需剥离OOB与ECC
厂商私有压缩/打包工具无法解包从同固件内的解包程序逆向算法(固件自带解包器是常见突破口)

07 · 固件完整性校验与来源核实

  • 哈希登记:下载完成即计算SHA-256并留存,与厂商发布页公布值(如有)比对;无公布值时在报告中注明"未获厂商校验值"。
  • 签名校验:部分厂商与开源固件(如OpenWrt)对发布包提供GPG/签名校验通道;校验失败或签名缺失应记录为风险项(供应链完整性存疑)。
  • 同型号多版本核对:固件按"型号+硬件版本(Rev)+固件版本"三元组管理;地区版本(EU/US/CN)差异常见,分析结论禁止跨版本泛化。
  • 聚合镜像可信度:使用第三方固件库时抽样比对哈希,并检查文件时间线异常(早于官方发布日期的样本可能为伪造或被篡改)。

风险提示:被篡改的固件样本会污染分析结论与规则库。凡来源不可溯的样本仅可用于方法演练,不得产出漏洞结论。

本节参考来源(第2页)

以下均为真实可查的权威来源(学术论文、标准组织、监管机构、官方项目仓库与漏洞库),用于支撑本页事实性表述;涉统计数字均标注原始出处。

[1]

Binwalk官方仓库(ReFirm Labs):github.com/ReFirmLabs/binwalk;原始作者Craig Heffner的分析博客:devttys0.com。

[2]

ubi_reader(UBI/UBIFS提取):github.com/jrspruitt/ubi_reader;firmware-mod-kit:github.com/rampageX/firmware-mod-kit。

[3]

FACT(Firmware Analysis and Comparison Tool,Fraunhofer FKIE):github.com/fkie-cad/FACT_core。

[4]

SquashFS官方文档与端序说明:github.com/plougher/squashfs-tools;Linux MTD子系统文档:docs.kernel.org/mtd。

[5]

Firmadyne论文(NDSS 2016)固件语料与提取统计:ndss-symposium.org/ndss2016;项目仓库:github.com/firmadyne/firmadyne。