在 GitHub 上加星Star1.1k 个星标

2020 · 会议论文

HALucinator:通过抽象层仿真实现固件重托管

HALucinator: Firmware Re-hosting Through Abstraction Layer Emulation

HALucinator 识别单体 ARM Cortex-M 固件中的硬件抽象库函数,并用人工编写的 Python 处理函数和外设模型替换它们,从而重托管固件。LibMatch 定位库接口;QEMU/Avatar2 实现支持交互式输入输出,与论文关联的 HAL-fuzz 变体则使用 AFL-Unicorn 进行模糊测试。

研究范围与局限

LibMatch 需要可获取的硬件抽象层或库,以及足够相似的编译环境;编译器差异与内联会限制匹配效果。重托管还需要 QEMU 支持的架构、固件内存布局、拦截地址及人工编写的处理函数和模型。未建模的直接硬件访问可能在读取时返回零、在写入时被忽略;简化的时序与外设行为不能证明硬件等价。作者的重托管与模糊测试演示不代表普遍覆盖所有固件、完整重建设备或恢复原始源代码。

与本合集的关联

展示如何通过二进制库识别与显式环境模型,重建分析已有固件所需的嵌入式执行环境,并明确其抽象边界。

发表与复核详情

发表载体
USENIX Security 2020
发表状态
会议论文
出版/提交日期
2020 年 8 月
日期依据
USENIX 官方论文集引用信息给出 2020 年 8 月。保留月份精度,不把会议举办日期当作具体出版日。

核查的是 USENIX 正式论文,页码 1201–1218;不推定 DOI 或 arXiv 标识。论文链接的 embedded-sec/halucinator 仓库采用 GPLv3,独立的 ucsb-seclab/hal-fuzz 实现采用 Apache-2.0,两者许可不可混同。原始 README 记载了仅经有限测试的 Ubuntu 16.04/18.04 与 Python 3 环境,依赖 Avatar2、QEMU 和 GDB,并另行指向较新项目。复现需要固件镜像、兼容的 HAL/SDK 输入及配置;厂商固件、依赖项和 SDK 的使用权需分别处理。HAL-fuzz 使用简化处理函数和确定性计时器,不保证与真实时钟等价。

来源复核于

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。

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

综述中的讨论

一手来源

  1. https://www.usenix.org/conference/usenixsecurity20/presentation/clements
  2. https://www.usenix.org/system/files/sec20-clements.pdf
  3. README.md GitHub · embedded-sec/halucinator · 修订 fa85a1d
  4. LICENSE GitHub · embedded-sec/halucinator · 修订 fa85a1d
  5. dependencies.md GitHub · embedded-sec/halucinator · 修订 fa85a1d
  6. Developing.md GitHub · embedded-sec/halucinator · 修订 fa85a1d
  7. doc/tutorial/0_Preqs.md GitHub · embedded-sec/halucinator · 修订 fa85a1d
  8. doc/tutorial/1_HALucinator_overview.md GitHub · embedded-sec/halucinator · 修订 fa85a1d
  9. install_deps.sh GitHub · embedded-sec/halucinator · 修订 fa85a1d
  10. LICENSE GitHub · ucsb-seclab/hal-fuzz · 修订 1446408
  11. README.md GitHub · ucsb-seclab/hal-fuzz · 修订 1446408
  12. requirements.txt GitHub · ucsb-seclab/hal-fuzz · 修订 1446408
↑↓ 移动↵ 打开⌘↵ 新标签页