2020 · 会议论文

RetroWrite:为模糊测试与内存检测静态插桩商用现成二进制

RetroWrite: Statically Instrumenting COTS Binaries for Fuzzing and Sanitization

RetroWrite 通过生成可重汇编的汇编代码,对 64 位位置无关的 Linux 二进制进行静态改写,从而像在编译时一样插入插桩代码。它不依赖启发式规则,而是依据二进制自身的元数据进行符号化:控制流操作数、位置无关代码必须使用的 PC 相对寻址以及数据重定位均被转换为汇编标签,从而区分引用与标量。作者在此基础上实现了 AFL 覆盖率插桩和仅针对二进制的 AddressSanitizer。他们报告其模糊测试吞吐量与编译器插桩相当,比 AFL 的 QEMU 模式快 4.5 倍,并在 LAVA-M 上发现更多缺陷;在 SPEC CPU2006 上,二进制 ASan 比 Valgrind memcheck 快 3 倍,并在作者的评测中多检测出 80% 的缺陷,其检测覆盖率测试采用 Juliet 内存破坏用例。

研究范围与局限

该方法依赖位置无关代码;论文的实现面向 Linux x86-64,并借助符号表确定函数起点与大小,因此去除符号的二进制需要由其他工具提供函数边界。由于未对 DWARF 栈展开信息进行符号化,它无法安全改写含异常处理的 C++ 二进制,也不处理混淆或对抗性二进制。二进制 ASan 对栈只按栈帧粒度插桩,也不在全局变量周围添加红区,因此会遗漏部分编译器 ASan 能发现的溢出,且仍慢于编译器 ASan。这些结果基于 2019—2020 年的工具版本和作者的基准。仓库中后来加入的 aarch64 改写器在另一篇学位论文中描述,采用不同的算法,论文中的 x86-64 结果不适用于它。

与本合集的关联

补充基于可重汇编汇编代码的静态二进制改写研究:重建符号化的汇编代码,从而在没有源码的情况下插入新代码,与合集中的反编译及二进制恢复研究互补。

发表与复核详情

发表载体
IEEE S&P 2020
发表状态
会议论文
出版/提交日期
2020 年 5 月
日期依据
IEEE 提交的 Crossref 元数据及 IEEE Xplore 记录只给出出版日期 2020 年 5 月。Xplore 另记载该文于 2020 年 7 月 30 日收录,本条目不据 5 月 18—21 日的研讨会日期推定具体日期。
DOI
10.1109/SP40000.2020.00009

Crossref 给出四位作者顺序、页码 1497–1511 及 2020 年 5 月;IEEE Xplore 的实时页面返回机器人验证,因此通过 Wayback Machine 存档阅读,其页码与月份相同,并记载 2020 年 7 月 30 日收录。HexHive 托管的 15 页 PDF 与仓库 README 所链接的 nebelwelt.net 副本逐字节相同;该副本没有 IEEE 页码,作为作者托管副本使用。论文给出 github.com/HexHive/retrowrite,并称其结果可借助仓库的 Docker 镜像复现。在所审阅的 2025-04-26 提交中,仓库包含 MIT LICENSE 文件,但 GitHub 未识别出许可证;README 列出 Python 3.6 以及 pyelftools 与 capstone。其功能表将去除符号的二进制、非 PIE 二进制与 C++ 标为 x64 改写器尚不支持,并为 aarch64 版本指向另一篇学位论文。该仓库已收录在自动扫描索引中,并通过 code_url 与本条目关联。本次未安装或运行任何内容。

来源复核于

本合集仅做来源复核,未重新运行论文实验。请通过原始论文或 BibTeX 引用原作者。

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

一手来源

  1. https://ieeexplore.ieee.org/document/9152762
  2. https://api.crossref.org/works/10.1109/SP40000.2020.00009
  3. https://web.archive.org/web/20220803033228/https://ieeexplore.ieee.org/document/9152762
  4. https://hexhive.epfl.ch/publications/files/20Oakland.pdf
  5. https://nebelwelt.net/publications/files/20Oakland.pdf
  6. README.md GitHub · HexHive/retrowrite · 修订 3b1e366
  7. LICENSE GitHub · HexHive/retrowrite · 修订 3b1e366