固件仿真技术初探:从原理到工具

admin 2026-04-27 04:42:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统介绍了固件仿真技术原理与应用,阐述了固件定义及其与通用软件的区别,并详细解析了用户态仿真与全系统仿真的核心差异。重点分析了基于QEMU的自动化仿真框架Firmadyne和FirmAE,其中FirmAE通过五次仲裁机制将仿真成功率提升至79.36%。文档提供了具体安装命令、调试方法和漏洞验证流程,最后展望了物联网安全领域的技术发展趋势。 综合评分: 85 文章分类: IoT安全,安全工具,二进制安全,漏洞分析,渗透测试


cover_image

固件仿真技术初探:从原理到工具

原创

尺物科技 尺物科技

尺物科技

2026年3月24日 16:58 四川

在小说阅读器读本章

去阅读

在物联网安全与行业文档中,固件是一个高频又核心的概念。

0x00

什么是固件?

固件是嵌入式设备与 IoT 设备最底层的软件集合,与硬件深度绑定,直接决定设备能否正常启动、稳定运行。它通常包含负责硬件初始化与系统引导的Bootloader(如 U‑Boot),并根据设备复杂度,进一步涵盖嵌入式操作系统内核、驱动程序、文件系统、网络协议栈、设备控制逻辑及上层应用。

固件与通用软件的核心差异如下:

-通用软件:运行于操作系统之上,具备可随意安装、卸载、更新的特性,与硬件的关联性较弱。

-固件:与硬件强绑定,位于系统底层或直接替代操作系统,负责硬件启动与基础功能,通常可升级但必须严格匹配硬件型号,一般不可独立卸载。

0x01

固件常见于哪些设备?

固件广泛应用于各类嵌入式及IoT设备,核心场景及代表设备如下,此类设备的共性是依赖固件实现硬件驱动与核心功能运行:

  • 路由器、交换机、AP

  • 网络摄像头、IoT 设备

  • 智能家电(空调、洗衣机、机顶盒)

  • 打印机、扫描仪

  • 工控设备、车载控制器

  • 无人机、开发板等嵌入式硬件

0x02

什么是固件仿真?

固件仿真,是指在通用计算机平台上,通过专用仿真软件,对嵌入式设备的 CPU 架构(如 ARM、MIPS、PowerPC 等)、内存、总线、外设、存储与网络等完整硬件环境进行软件模拟,将包含操作系统、驱动、应用程序的完整设备固件加载并运行,使其在不依赖真实硬件的条件下,完成启动、执行、交互、调试与行为分析的专用技术。

其核心原理与通用计算机的虚拟机技术相近,简单来说,就是用软件虚拟出一台 “虚拟设备”,让固件认为自身运行在真实硬件上,从而实现对设备逻辑、功能与漏洞的离线分析与验证。

固件仿真的核心价值,在于摆脱对真实 IoT 与嵌入式硬件的依赖,解决开发、测试与安全分析过程中面临的硬件限制。当前大量 IoT 设备(如路由器、摄像头、智能家居产品等)采用 ARM、MIPS、PowerPC等专用架构,普遍存在硬件接口封闭、调试端口受限、采购成本高、环境搭建复杂、调试效率低、难以并行测试等问题。

而固件仿真能够在通用计算机上虚拟出完整硬件环境,使固件脱离实机即可正常启动、运行与交互。在安全研究与漏洞挖掘场景中,它可以完整观测设备运行行为,包括启动流程、端口开放、服务运行、Web 界面、加密逻辑与指令执行流程,并支持动态调试,如断点、单步执行、内存查看等操作,从而实现漏洞的精准复现、分析与验证。

0x03

用户态仿真与系统仿真?

在固件分析与仿真实践中,根据模拟层次的不同,通常分为用户态仿真和系统态(全系统)仿真两种方式,二者在模拟范围、运行环境、依赖条件与使用场景上存在本质区别,是固件仿真技术里最核心的分类。

简单来说,两者的区别如下。

  • 用户态仿真

    仅模拟应用程序的指令执行与系统调用过程,不模拟操作系统内核、硬件及外设,仅支持单个用户态二进制程序的运行。其核心优势是轻量、启动速度快,无需搭建完整硬件与内核环境,适用于局部功能分析、协议解析、简单功能验证等场景,可作为系统态仿真的辅助手段,提升分析效率。

  • 全系统仿真

    完整模拟 CPU、内存、总线、外设等硬件平台及操作系统内核,可加载并运行完整的 Bootloader、内核、文件系统与系统服务,运行状态高度贴近真实物理设备。其核心优势是可实现完整固件的全流程运行与调试,适用于完整固件启动验证、后台服务深度分析、动态调试、漏洞攻击路径复现等核心场景,是固件安全分析与全功能验证的核心手段。

由于物联网设备架构的多样性,在实际固件仿真中,用户态与全系统仿真通常都会依赖 QEMU 实现。

QEMU(Quick Emulator)是一款开源跨平台的通用机器仿真器与虚拟化工具,由 Fabrice Bellard 于 2003 年发起,以GPL/LGPL 协议开源,其核心定位是通过动态二进制翻译技术,实现不同处理器架构间的指令转换与完整硬件系统模拟。QEMU 支持用户态与全系统两种核心运行模式,其中全系统模式可模拟包括CPU、内存、总线及各类外设在内的完整计算机系统,能够启动不同架构的操作系统与固件镜像,为嵌入式固件仿真提供底层硬件虚拟化支撑,但并非专为物联网固件分析场景原生设计,其嵌入式相关硬件环境的模拟需依赖额外扩展组件补充实现。

它在ubuntu环境下的安装命令如下:

sudo apt install qemu-user-static qemu-user qemu-system

其中,qemu-user-static会安装静态的QEMU用户态程序,方便用户在需要切换工作根目录(chroot)时无需担心依赖问题。

由于全系统固件仿真流程较为繁琐,涉及固件解包、架构识别、网络配置、启动项分析等多个环节,在大批量固件自动化分析场景下会变得效率低下、难以规模化。为此,业界逐步出现了一批自动化固件仿真框架,本文将重点介绍其中两种代表性工具Firmadyne和FirmAE。

0x04

Firmadyne

Firmadyne 是 IoT 固件仿真领域早期极具代表性的全系统动态仿真框架,也是 FirmAE、FAT 等后续工具的重要参考与思想基础。它主要面向路由器、摄像头、网关等嵌入式设备,提供架构识别、系统环境模拟、QEMU全系统仿真及漏洞验证等能力。该项目于 2016 年开源,堪称固件仿真研究方向的里程碑式工作。

Firmadyne 重点解决了以下关键问题:

  • 跨架构运行困难

    通过 QEMU 全系统仿真,使 MIPS/ARM 等架构的嵌入式固件可在 x86 主机上完整运行。

  • 固件解包繁琐

    基于 binwalk 自动识别并提取 squashfs、UBI 等常见嵌入式文件系统,简化手动解包流程。

  • 硬件环境缺失

    通过自研 libnvram.so 模拟 NVRAM 配置读写,并虚拟 Flash、MTD 块设备等硬件环境,使固件可脱离真实设备启动。

  • 网络仿真复杂

    自动配置虚拟网卡与网桥,实现主机与仿真固件的网络互通,支持 Web 服务访问与漏洞验证。

  • 手动仿真门槛高

    自动完成架构识别、内核匹配、QEMU 参数配置,实现高度自动化的一键全系统仿真。

  • 动态分析难以开展

提供可交互的固件运行环境,支持进程查看、端口监听、服务调试与漏洞 PoC 验证。

相关论文:

https://github.com/firmadyne/firmadyne/blob/master/paper/paper.pdf

上图为firmadyne的目录结构

0x05

Firmadyne使用示例

firmadyne源码中给了我们一个使用方法的案例:example_analysis.sh

整体的核心流程大概就是

→ 先下载固件,然后→ extractor.py提取固件内容 → getArch.sh检测架构 → tar2db.py写入数据库 → makeImage.sh 创建仿真镜像 → inferNetwork.sh分析网络配置 → run.sh启动仿真

Firmadyne 构建了一套自动化固件仿真的标准化流程,为后续各类固件仿真工具的技术演进奠定了重要基础。然而,受不同厂商、不同设备固件差异性大的影响,其整体仿真成功率仍处于较低水平,这也催生了后续的FirmAE 项目。

0x06

FirmAE

FirmAE 是一个全自动化框架,用于模拟和漏洞分析。FirmAE 通过五种仲裁技术显著提升了模拟成功率(从 Firmadyne 的 16.28%提升至79.36%)。我们在来自前八大厂商的 1124 张无线路由器和 IP 摄像头固件镜像上测试了 FirmAE。

https://github.com/pr0v3rbs/FirmAE

 这里的「仲裁(arbitration)」本质是:FirmAE 针对固件仿真过程中出现的「冲突 / 异常 / 不确定性问题」,设计的「决策/ 协调 / 兜底机制」

 —— 简单说就是「当仿真卡住 / 失败时,FirmAE 会通过预设的规则 / 策略,裁决该用哪种方案解决问题、让仿真继续运行」

FirmAE安装方式:

克隆项目:

$ git clone --recursive https://github.com/pr0v3rbs/FirmAE

运行下载脚本下载所需的可执行文件

$ ./download.sh

运行安装脚本

$ ./install.sh

我们打开firmae.config 可以看到这里的五次仲裁的总开关。

 # 五次仲裁的总开关(对应 Boot/Net/NVRAM/Kernel/Etc 仲裁)  FIRMAE_BOOT=true # 启动仲裁:修复固件启动脚本、初始化流程  FIRMAE_NET=true # 网络仲裁:自动修复 IP/网关/DNS 配置  FIRMAE_NVRAM=true # NVRAM 仲裁:动态生成真实的 NVRAM 配置  FIRMAE_KERNEL=true # 内核仲裁:选择适配的内核版本(2.x/4.x)  FIRMAE_ETC=true # 文件系统仲裁:修复 /etc 目录权限、缺失文件/进程

以下是FirmAE的usage :

Usage: ./run.sh [mode]... [brand] [firmware|firmware_directory]mode: use one option at once      -r, --run     : run mode         - run emulation(no quit)      -c, --check   : check mode       - check network reachableand web access (quit)      -a, --analyze : analyze mode     - analyze vulnerability (quit)      -d, --debug   : debug mode       - debugging emulation(no quit)      -b, --boot    : boot debug mode  - kernel boot debugging usingQEMU (no quit)

通常我们会用-d来启动FirmAE仿真,在克隆项目时,FirmAE项目中自带了一个路由器的固件,我们就用它演示。

sudo ./run.sh -d auto firmwares/DIR815A1_FW103b01.bin

首次运行新固件速度可能会很慢,但是一旦模拟成功,web标记为true ,第二次运行就可以自动省略掉制作QEMU镜像和网络仲裁的步骤,直接启动模拟。

如图所示,这里最关键的信息是这一行返回了两个true

Starting emulation of firmware... 192.168.0.1 true true 4.103088107 23.504765645

第一个true表示可以ping通,第二个true表示第一次检测到Web可用。

后面两个数字 4.103088107 和  23.504765645分别是

首次 ping 通的时间(启动后 4.103088107 秒)首次 Web 可用的时间(启动后 23.504765645 秒)

在Debug模式成功完成仿真后。我们直接打开浏览器,输入仿真结果中提到的ip地址192.168.0.1即可看到该固件的管理页面。

除此之外,在终端,FirmAE会给我们一个debugger的选项。根据提示输入数字 2,即可进入调试命令行界面,在此可执行各类调试命令、查看系统日志。输入exit 命令可返回 Debugger 主界面;此外,你还能通过 GDB 工具对关键进程开展动态调试。

使用gdbserver attach进程后,就能使用gdb远程调试仿真里面的程序了,此时也可以直观地看到测试结果。

$ gdb-multiarch gdb> target remote 192.168.0.1:1337

0x07

展望

从 QEMU 奠定底层仿真基础Firmadyne 建立首个自动化固件仿真框架,到 FirmAE 成为大规模仿真的里程碑。再到 FlexEMU、Greenhouse 、FirmAgent等新型系统的涌现,固件仿真技术的每一步迭代,都是为了破解 IoT 设备分析中的实际难题。作为二进制安全厂商,我们将持续布局固件仿真技术,构建从逆向、漏洞挖掘到仿真验证的全链路能力以更深度的技术研究与更完整的安全方案,守护物联网终端与关键设备的底层安全。


二进制安全专家

了解更多产品信息,请联系我们

电话:028-67136496

官网:https://www.bit-sec.com/

地址:成都市高新区天府软件园D区5栋504


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:尺物科技 尺物科技 尺物科技《固件仿真技术初探:从原理到工具》

评论:0   参与:  0