极速模糊测试工具Shin GRR:重新定义二进制程序漏洞挖掘

84 阅读2分钟

Shin GRR:让模糊测试再次提速

Fear GRR

我们曾提及GRR——这是我们用于模糊测试程序二进制文件的高速全系统模拟器。该项目专为DARPA网络大挑战(CGC)开发,现以开源项目形式发布!

漏洞从不畏惧缓慢的模糊测试器,因此GRR通过独特创新的设计实现了令人惊叹的高速运行。

技术架构

动态二进制翻译

GRR在64位地址空间内通过动态二进制翻译(DBT)模拟x86二进制文件。作为64位程序,GRR可比原程序使用更多硬件寄存器和内存,这使得无需复杂寄存器重调度或内存重映射逻辑即可轻松实现完美隔离。

高性能代码缓存

传统DBT每次执行都重新翻译相同程序,而GRR通过磁盘缓存避免重复翻译。在模糊测试活动中,所有代码都是"热代码",GRR会对缓存代码进行生命周期优化。

自适应代码版本控制

GRR采用逐基本块翻译策略,使用"版本号"(基于可执行内存内容的Merkle哈希)索引缓存块。当可执行页面内容修改时,哈希值失效并触发重新翻译。

系统级优化

  • 通过程序快照跳过读取输入字节前的无关设置代码
  • 通过模拟系统调用和内存内I/O操作避免内核往返
  • 支持Radamsa等可插拔输入变异器和代码覆盖率度量

实战演示

GRR在处理包含六个通过IPC通信二进制文件的CGC挑战时,成功在第三个二进制文件中检测到崩溃。演示突出两大特性:

  1. 可输出被翻译二进制文件执行的系统调用轨迹
  2. 可输出每个执行基本块入口的寄存器状态
  3. 当最大基本块大小设置为单指令时,可提供指令级寄存器轨迹

开源贡献

GRR现已开源并采用宽松许可证,欢迎开发者参与贡献。这款精悍的漏洞挖掘机器将持续推动模糊测试技术的发展。


原文发布于2016年11月2日,涉及darpa、fuzzing、manticore等技术领域