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

IoT设备固件安全与漏洞挖掘第04页:动态分析:模拟执行与固件仿真

动态分析让固件在仿真环境中"跑起来"。本页梳理QEMU双模式体系、Firmadyne四阶段流水线(提取→制盘→网络推断→运行分析)与libnvram模拟机制、FirmAE将仿真成功率从16.28%提升至77.3%的自动修补方法(论文基准数字)、P2IM/μEmu/Laelaps/Fuzzware外设建模学术谱系,以及仿真成功后的Web面验证方法与局限对策。

动态分析QEMUUser-modeSystem-modeFirmadyneFirmAElibnvram重宿主MMIO建模P2IMμEmuFuzzware研究状态:研究中
所属专题未来研究方向 › 物联网与工控安全 › 子课题01
目标受众固件安全研究人员、红队、测评机构
本页要点QEMU双模式 · Firmadyne四阶段流水线与论文基准 · FirmAE 77.3%成功率 · P2IM/μEmu/Fuzzware外设建模 · 仿真局限对策

01 · 为什么需要动态分析

静态分析的盲区在于:配置在运行时才解密(固件内密文配置需运行后观察)、行为依赖硬件状态(NVRAM、GPIO、看门狗)、漏洞触发依赖完整协议交互(仅静态看不出的认证流程缺陷)。动态分析在仿真环境中"跑起来"固件,使Web界面可访问、服务可交互、内存错误可观测。学术与产业界已形成完整方法论谱系,核心难题是分析保真度——用x86主机忠实复现MIPS/ARM设备及其外设行为。

学术脉络:Firmadyne(NDSS 2016)首次证明"无需实物、规模化仿真固件并自动化发现漏洞"可行;FirmAE(USENIX Security 2020)将启动成功率从论文口径的约16%提升至约77%;此后研究重心转向外设建模(P2IM/μEmu/Fuzzware)与模糊测试结合(第5页)。这条脉络是本课题动态分析章节的方法论主干。

02 · 模拟执行体系:QEMU的两种模式

模式原理固件分析中的用途
User-mode仅翻译用户态指令,系统调用转发至宿主Linux内核chroot进解包的根文件系统 + qemu-mipsel-static 执行单个固件二进制;轻量、快,适合命令行工具与库函数行为分析,但无法跑完整系统与内核态逻辑
System-mode完整虚拟机器:虚拟CPU、内存、中断、定时器与部分板级外设固件整机仿真(Firmadyne/FirmAE的载体);可启动内核+根文件系统,暴露真实网络服务;外设缺失需额外建模

2.1 整机仿真的关键工程环节

  • 内核策略:优先使用Firmadyne预编译的通用内核(按架构/端序匹配),规避固件自带内核中厂商私有驱动无法仿真的问题;自定义内核配置开启NBD、网络驱动与调试选项。
  • 网络拓扑:TAP设备+NAT使仿真设备获得可达IP(Firmadyne的inferNetwork阶段即通过观察启动过程中的ARP/DHCP与监听端口推断网络配置)。
  • 存储与NVRAM:根文件系统以NBD/镜像形式挂载;NVRAM读写以自定义libnvram.so拦截并提供默认值——这是解决"启动即挂起"的第一手段。
  • 外设缺失对策:看门狗超时导致重启循环时,可patch二进制跳过喂狗/注册逻辑(分析目的下可接受,须记录patch清单)。
# User-mode 快速验证单二进制
sudo chroot ./squashfs-root /qemu-mipsel-static /bin/busybox
# System-mode 整机仿真(示意:以 Firmadyne 生成的镜像启动)
qemu-system-mipsel -M malta -kernel vmlinux.3.18   -drive file=image.raw,format=raw,if=ide   -append "root=/dev/sda1 console=ttyS0"   -net tap,ifname=tap0,script=no,downscript=no -net nic -nographic

03 · Firmadyne流水线与NVRAM模拟

Firmadyne(NDSS 2016)确立了固件动态分析的四阶段流水线,至今仍是该领域的事实基准:

阶段脚本/组件功能
提取(Extract)extractor.py调用Binwalk解包固件,识别并提取根文件系统与内核
制盘(Make Image)makeImage.sh将文件系统树制作为QEMU可引导磁盘镜像,注入架构匹配的预编译内核
网络推断(Infer Network)inferNetwork.sh短暂启动仿真并抓包,推断IP配置与对外监听端口
运行分析(Run Analysis)runAnalysis.sh / analyze.py全量启动:截图Web界面、枚举开放端口、执行预置漏洞检测(含Metasploit模块调用)

论文基准数字(原始文献口径):对来自42家厂商的23,035个固件镜像,9,486个可成功仿真启动(约41.3%),其中646个被检出含有已知CVE对应的漏洞。这组数字既是该范式的里程碑,也揭示了规模化分析的现实成功率上限——多数固件卡在解包、外设或网络配置环节。

3.1 NVRAM模拟:Firmadyne的关键补丁

嵌入式程序通过厂商私有API读写NVRAM(配置存储),QEMU中不存在该硬件,程序即挂起或反复重启。Firmadyne以自定义libnvram.so(LD_PRELOAD注入)模拟get/set行为、从固件内提取默认配置值。该机制的有效性直接决定了"启动成功率"这一指标。

04 · FirmAE:自动化提升仿真可达率

FirmAE(ACSAC 2020)针对Firmadyne的四类失败原因(内核版本错配、网络配置推断失败、NVRAM缺失、服务启动依赖时序)做了系统性自动化修补:多版本内核重试、网络配置多策略推断、增强NVRAM覆盖、以及基于页面相似度的Web界面可达性判定。论文基准数字:在来自21家厂商的1,124个固件上,FirmAE成功仿真892个(77.3%),而Firmadyne仅183个(16.28%)。

77.3%
FirmAE仿真成功率
ACSAC 2020论文口径:1,124个固件中892个成功启动(21家厂商样本)
16.28%
Firmadyne同集成功率
同一固件集上Firmadyne仅183个成功,凸显自动修补的价值
41.3%
Firmadyne论文启动率
NDSS 2016口径:23,035个固件中9,486个可仿真(42家厂商)
646
检出含已知漏洞固件
Firmadyne论文在可仿真固件中检出的含CVE漏洞镜像数

工程启示:成功率提升的主因不是更强的仿真器,而是失败归因后的自动化修补闭环。本课题部署手册据此设计"失败分类→针对性补丁→重试"的三层循环,并对每次失败记录归因标签(解包失败/内核错配/外设缺失/网络推断失败),形成可度量的成功率台账(对应KQ-1)。

05 · 重宿主进阶:外设与MMIO建模

系统级仿真的天花板在外设:设备程序通过MMIO(内存映射IO)访问寄存器,QEMU的通用机器模型(malta/vexpress)无法满足,程序随即卡死。近年学术工作的主线即为自动外设建模:

工作出处核心思想
P2IMUSENIX Security 2020(Feng等)静态识别MMIO访问模式,自动生成外设接口模型供Unicorn/QEMU执行
μEmuIEEE S&P 2021Unicorn引擎+QEMU双模式:系统路径用QEMU保证兼容性,fuzz路径用Unicorn提速;自动化外设模型推断
LaelapsACM CCS 2020(Cao等)路径敏感的外设建模:沿探索路径动态生成寄存器语义,提升可达深度
FuzzwareUSENIX Security 2022精确MMIO建模:将外设行为归纳为少量抽象规则,在Unicorn上以AFL++高速fuzz固件二进制

对分析者而言,实践启示是:先判定目标依赖哪些外设(串口日志中卡住的MMIO地址、看门狗寄存器访问)——仅依赖定时器/UART/NVRAM的程序用FirmAE级流水线即可覆盖;深度依赖专用外设(相机ISP、NPU、专用加密引擎)的程序则需重宿主路线或回归实物分析(第6页)。

06 · 仿真后的Web面动态验证

仿真环境跑通后,管理Web界面是最常见的动态验证入口:

  • 资产确认:截图首页、枚举cgi端点(/cgi-bin/目录遍历与目录字典),确认固件版本与型号信息。
  • 认证流程测试:默认口令尝试(第3页挖掘结果)、认证绕过(参数篡改、直接访问内部页面、会话固定)。
  • 注入面探测:"网络诊断"(ping/traceroute/DNS查询)类CGI是命令注入高发区;参数加;id|等无害探针观察回显差异(仅在自有仿真环境执行)。
  • 文件操作类端点:配置导入导出、固件升级接口的认证与路径校验。

边界声明:本节所有动态测试仅针对仿真环境中的自有固件;对公网真实设备的主动测试须获得书面授权。漏洞确认后按第8页披露流程处理,不保留任何可复用的攻击载荷。

07 · 仿真分析的局限与对策

局限影响对策
内核与用户态错配固件程序依赖特定内核接口版本,通用内核下异常退出FirmAE多内核重试;必要时编译同版本内核+必要驱动
外设缺失MMIO读写卡死、看门狗复位循环libnvram注入、看门狗patch、重宿主建模(5.2节)
行为真实性存疑仿真中"漏洞不存在"不等于实物安全(时序/并发差异)关键结论在实物上复核;报告注明仿真环境参数
加密固件解包阶段即失败第3章密钥定位+解密后再进入仿真流水线
固件动态分析决策树(从解包到可交互环境)
失败归因标签直接进入成功率台账(KQ-1度量)
流水线与工具名以Firmadyne/FirmAE官方仓库为准;成功率数字均引自原始论文。

08 · 仿真环境工程规范(隔离、快照与可重复性)

  • 网络隔离:仿真设备一律接入专用虚拟网段(TAP+NAT+防火墙白名单),禁止桥接至办公网;仿真环境的对外连接经出站代理审计。
  • 快照与重置:每个固件分析前创建环境快照,分析后回滚,保证批次间无状态污染;触发崩溃的样本环境单独留存以便复现(衔接第5页崩溃分析)。
  • 串口与内核调试:以 -serial file:console.log 留存完整启动日志;深度分析可启用KGDB(内核)与gdbserver(用户态)远程调试。
  • 性能基线:记录TCG翻译执行的性能开销;宿主与目标同架构时可用 -accel kvm 提速,异构(x86宿主跑MIPS/ARM固件)则维持TCG并记录吞吐基线。
  • 可重复性:环境版本(QEMU、内核、libnvram、patch清单)写入报告附录,保证第三方可复现分析结论。

本节参考来源(第4页)

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

[1]

D. Chen 等《Towards Automated Dynamic Analysis for Linux-based Embedded Firmware》(NDSS 2016):ndss-symposium.org/ndss2016;github.com/firmadyne/firmadyne。

[2]

M. Kim 等《FirmAE: Towards Large-Scale Emulation of IoT Firmware for Dynamic Analysis》(ACSAC 2020):以ACM数字图书馆检索"FirmAE"为准;项目仓库:github.com/pr0v3rbs/FirmAE。

[3]

QEMU官方文档:qemu.org/docs/master;Unicorn引擎:unicorn-engine.org。

[4]

B. Feng、A. Mera、L. Lu《P2IM: Scalable and Hardware-independent Firmware Testing via Automatic Peripheral Interface Modeling》(USENIX Security 2020);Y. Zhou 等《μEmu: An Emulation Architecture for Binary-Only Firmware with Automatic Peripheral Modeling》(IEEE S&P 2021);T. Scharnowski 等《Fuzzware: Using Precise MMIO Modeling for Effective Firmware Fuzzing》(USENIX Security 2022);另见 A. Costin 等《Automated Dynamic Firmware Analysis at Scale: A Case Study on Embedded Web Interfaces》(AsiaCCS 2016)——均以USENIX/IEEE/ACM官方论文库为准。

[5]

OWASP IoTGoat(故意含缺陷的靶场固件,适合演练本章方法):github.com/OWASP/IoTGoat。