# DICE：面向动态固件分析的 DMA 输入通道自动仿真

> DICE 为既不模拟外设也不模拟 DMA 控制器的微控制器固件仿真器增加 DMA 输入仿真。它监视固件向内存映射 DMA 控制器区域写入的源与目的传输指针对，并根据固件随后的访问推断传输方向。当固件读取外设到 RAM 的目的缓冲区时，DICE 以分析器提供的输入（如模糊测试数据）作答，并以保守方式扩展缓冲区边界。原型修改了 P2IM（ARM Cortex-M）与一款 PIC32 仿真器（MIPS M4K/M-Class）所用的 QEMU 分支。在覆盖 5 家厂商 9 种 DMA 控制器的 83 个示例固件上，作者报告检测出 37 个输入通道中的 33 个且无误报，为 22 个缓冲区中的 21 个提供了正确输入，平均开销为 3.4%。对 7 个真实固件进行 48 小时模糊测试，发现 5 个此前未知的缺陷。

- 作者：Alejandro Mera; Bo Feng; Long Lu; Engin Kirda
- 原标题：DICE: Automatic Emulation of DMA Input Channels for Dynamic Firmware Analysis
- 发表载体：IEEE S&P 2021
- 发表状态：会议论文
- 出版／提交日期：2021 年 5 月
- 日期依据：出版方提交的 Crossref 元数据记录印刷出版时间为 2021 年 5 月，即 5 月 24 日至 27 日研讨会所在月份。无法自动访问 IEEE Xplore，本条目不记录具体出版日。
- arXiv 首次提交：2020 年 7 月 3 日
- arXiv：2007.01502
- 已复核的 arXiv 版本：v3
- DOI：10.1109/SP40001.2021.00018
- 来源复核于：2026-10-27
- 收录于：2026-11-03
- 原始论文：<https://ieeexplore.ieee.org/document/9519398>
- PDF：<https://arxiv.org/pdf/2007.01502v3>
- 代码：<https://github.com/RiS3-Lab/DICE-DMA-Emulation/tree/2b3b8c8b722abdbd7ff9e35fc7b02914fddf75df>
- BibTeX：<https://awesomerea.org/papers/citations/paper-dice.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-dice/>
- 记录 JSON：<https://awesomerea.org/papers/paper-dice/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-dice/index.md)

## 研究范围与局限

仅仿真 DMA 输入通道；它不模拟外设行为、不恢复外设语义，也不构建精确的设备复刻，所提供的输入是分析器数据而非真实外设流量。它假定传输描述符写入 DMA 控制器寄存器，因此不支持存放在 RAM 中的描述符。仅需目的地址的配置（如 nRF52832 EasyDMA 等两种控制器型号）也无法识别，占 52 个流配置中的 7 个。缓冲区大小为启发式估计。真实标签来自数据手册与固件检查，结果仅覆盖作者的 83 个示例固件及 7 个模糊测试固件。缺陷是在七个模糊测试固件中的两个里、借助简单的内存检测器发现的。PIC32 原型只能运行其他外设可由简单默认寄存器处理器应付的固件。

## 与本合集的关联

补充面向固件重托管的 DMA 输入通道仿真研究，与本合集中侧重 MMIO 建模及模糊测试的微控制器重托管研究互补。

## 发表与复核说明

Crossref 确认四位作者顺序、2021 年 IEEE S&P 会议论文集、第 1938–1954 页及 DOI；IEEE Xplore 拒绝自动访问。所审阅的 2021-01-15 arXiv v3（v1 为 2020-07-03）载有期刊引用“42nd IEEE Symposium on Security and Privacy, S&P 2021”，并链接代码仓库。所审阅的 master 快照 2b3b8c8b 推送于 2023-10-14。其 LICENSE 规定除另有说明外 DICE 采用 Apache-2.0；AFL 及 P2IM 对 AFL 的修改为 Apache-2.0，QEMU、P2IM 对 QEMU 的修改、PIC32 扩展以及 P2IM 本身为 GPL-2.0；GitHub 未识别出单一 SPDX 许可证。p2im 与 mips-emulator 目录为子模块，分别固定在 RiS3-Lab/p2im 0a4870b4 与 sergev/qemu a2e0277d。README 仅支持 Ubuntu 16.04 或 18.04，并说明 20.04 上存在问题。DICE 以 QEMU 补丁形式应用，仓库还提供预编译 QEMU 二进制，以及评估用固件二进制、源码和脚本；其中收录的厂商示例固件保留各自条款。

## 一手来源

1. <https://ieeexplore.ieee.org/document/9519398>
2. <https://api.crossref.org/works/10.1109/SP40001.2021.00018>
3. <https://arxiv.org/abs/2007.01502>
4. <https://arxiv.org/pdf/2007.01502v3>
5. <https://github.com/RiS3-Lab/DICE-DMA-Emulation/blob/2b3b8c8b722abdbd7ff9e35fc7b02914fddf75df/README.md>
6. <https://github.com/RiS3-Lab/DICE-DMA-Emulation/blob/2b3b8c8b722abdbd7ff9e35fc7b02914fddf75df/LICENSE>
7. <https://github.com/RiS3-Lab/DICE-DMA-Emulation/blob/2b3b8c8b722abdbd7ff9e35fc7b02914fddf75df/.gitmodules>

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
