2021 · 会议论文
基于无效性引导知识推断的自动化固件仿真
Automatic Firmware Emulation through Invalidity-guided Knowledge Inference
µEmu 将未知外设寄存器表示为符号,对固件映像进行符号执行,从而在没有真实硬件或人工编写外设模型的情况下仿真 ARM Cortex-M 微控制器固件。无效性引导的探索会检测意外死循环等无效状态,并把执行引向有效路径;所选响应按单个外设访问点缓存在分层知识库中,规则从简单存储到基于程序计数器和调用上下文的匹配。动态分析阶段由知识库响应外设读取,集成的改造版 AFL 模糊测试器则提供数据寄存器输入。原型在 S2E 2.0 基础上增加了 Cortex-M 支持。
研究范围与局限
面向 ARM Cortex-M 固件;仓库将 DMA 及其他架构列为尚未支持、征求帮助的事项。响应只需通过固件自身的检查,而不必复现真实外设的取值,因此仿真成功不能证明与硬件等价。无效性检查可能漏掉未处理的错误路径,数据寄存器可能被错误分类(以芯片手册得出的真实标签衡量,43 个中漏掉 3 个),计数器为具体值但依赖符号的长循环也可能检测不到。在 P2IM 的 66 个单元测试上,正式论文报告无需人工协助即通过 63 个(95%),为每个失败样本添加一个无效程序点后全部通过。在 21 个真实固件样本中,6 个需要用户定义一个无效点,3 个需要人工补充一个数据寄存器。覆盖率沿用 P2IM 的做法,以 QEMU 翻译块数对比 IDA 统计的基本块数。
与本合集的关联
补充借助符号执行推断外设行为、用于重托管微控制器固件的方法,与本目录中替换硬件抽象层和建模 MMIO 的方法互补。
发表与复核详情
- 发表载体
- USENIX Security 2021
- 发表状态
- 会议论文
- 出版/提交日期
- 2021 年 8 月
- 日期依据
- USENIX 论文页面的 BibTeX 将第 30 届 USENIX Security 研讨会论文集的出版时间列为 2021 年 8 月。本条目保留月份精度,不以会议日期代替具体出版日;2021 年 7 月的 arXiv 日期属于扩展版。
- arXiv 首次提交
- 2021 年 7 月 16 日
- arXiv
- 2107.07759
- 已复核的 arXiv 版本
- v2
USENIX 论文页面的 BibTeX 确认了四位作者的顺序、论文集名称、页码 2007–2024 以及 2021 年 8 月。正式 PDF 的脚注指向作者在 arXiv 上的扩展版,标题带有“(Extended Version)”后缀(v1 为 2021-07-16,v2 为 2021-07-27),本条目将其记为 arXiv 标识;未找到出版方 DOI。论文页面摘要称单元测试通过率为 93%,正式论文与 arXiv 摘要则为 95%;本条目以正式论文为准。MCUSec/uEmu 快照 c82fc0a(2023-11-20)的许可条款不一:附加插件采用 S2E 2.0 的 Cyberhaven Research License(仅限非商业用途),AFL 修改部分采用 Apache-2.0,QEMU 采用 GPL-2.0,其他 S2E 库分别采用 LGPL-2.1、BSD/MIT 或 NCSA 许可;GitHub 显示为 NOASSERTION。README 支持 Ubuntu 18.04 或 20.04(64 位)或 Vagrant 虚拟机,通过 repo 清单获取源码,在四核机器上构建约需一小时;单元测试与真实固件配置放在独立仓库中,并使用 IDA 脚本统计基本块以计算覆盖率。本次未获取固件、构建程序或运行实验。
来源复核于
本合集仅做来源复核,未重新运行论文实验。请通过原始论文或 BibTeX 引用原作者。
一手来源
- https://www.usenix.org/conference/usenixsecurity21/presentation/zhou
- https://www.usenix.org/system/files/sec21-zhou.pdf
- https://arxiv.org/abs/2107.07759
- README.md GitHub · MCUSec/uEmu · 修订 c82fc0a
- LICENSE GitHub · MCUSec/uEmu · 修订 c82fc0a