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 引用原作者。

报告条目过时 建议修正翻译

一手来源

  1. https://www.usenix.org/conference/usenixsecurity21/presentation/zhou
  2. https://www.usenix.org/system/files/sec21-zhou.pdf
  3. https://arxiv.org/abs/2107.07759
  4. README.md GitHub · MCUSec/uEmu · 修订 c82fc0a
  5. LICENSE GitHub · MCUSec/uEmu · 修订 c82fc0a