论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


本次分享的论文是COMPASS实验室发表的论文,被收录于2024的DAC。

论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


1.Motivation


模糊测试是一种有效且自动化地发现漏洞技术之一。作为模糊测试的一个重要变种,覆盖率导向模糊测试(CGF )已经在工业界和研究领域得到广泛应用。CGF 的关键在于监控每次程序执行并获取覆盖率信息。在许多情况下,程序仅提供二进制版本,因为开发人员不太可能发布其源代码。对于这种情况,代码覆盖率是通过动态二进制转换、静态二进制重写和硬件追踪进行收集的。硬件追踪可以直接在硬件层面收集覆盖率信息,因此对模糊测试提供了透明的支持。与动态二进制转换相比,硬件追踪引入的开销较小。此外,静态二进制重写的可行性受到严格限制。与静态二进制重写相比,硬件追踪更加实用,因为它不需要修改目标二进制文件。综上所述,硬件追踪是一种高效实用的收集代码覆盖率方法。

传统硬件追踪工具(如 Intel PT、ARM Coresight)通过设定想要追踪的起始地址和结束地址来指定跟踪范围。但是,这在模糊测试过程会产生大量、不必要的数据。基于源码的模糊测试可以通过静态分析比如基于支配者的插桩修建或者基于连续基本块的插桩修建来减少插桩指令的数量,以提高模糊测试的效率。此外,同时追踪控制流和数据流会让硬件追踪工具产生巨量数据,容易让跟踪缓冲区溢出。如果不追踪数据流的话,模糊测试里面的魔数问题会很难解决。基于源码的模糊测试利用数据流辅助(污点分析,符号执行,污点推断)来解决魔数问题。

总之,我们希望设计一个硬件平台,能够跟踪必要的基本块覆盖率和数据流,从而减少跟踪数据大小,以更好的辅助模糊测试。

list 1:模糊测试常见问题

论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


2.设计



论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzingfigure 1:Tatoo架构

如图所示,我们基于 lowRISC 和 PHMon 实现了我们的原型系统 Tatoo。我们在主处理器中增加了指令标记并使用协处理器作为跟踪组件。指令标记允许用户灵活的处理数据并在跟踪组件中指定不同的操作。当用户执行程序时,源寄存器中的标记和值会提交给跟踪组件。跟踪组件帮助模糊器收集覆盖率和数据流信息。

我们通过指令标记的方法,使得一些优化对仅提供二进制的模糊测试成为可能,这样可以使用一些静态优化的算法来减少插桩基本块的数量,进一步优化模糊测试的效率 。指令标记可以使我们更好的区分和过滤数据。我们可以通过指令来标记哪些基本块需要被跟踪。如果指令标记是 0,协处理器自动过滤,不追踪数据。此外,协处理器可以根据不同的标记,追踪覆盖率或者数据流。理论上也可以通过标记指令,改变原有程序控制流。通过异常处理让分支指令往和原本指令流不一样的地方跳,或者直接终止程序,这么做可以用 patching 的方法尝试解决 nest checksum 问题。

我们利用污点推断的方式,而不是污点分析的方法收集数据流,原因如下:污点分析很难处理隐式流;污点分析需要人工总结污点规则,需要分析每一条指令是否可能传递污点;污点分析的性能开销较大;相反,污点推断可以解决隐式流问题;并且不需要人工处理污点,性能更快,因为它只需要记录分支指令相关的数据。

Tatoo 的工作流程可以概括为以下几个主要步骤:

  1. 准备阶段:

    • ① 进行二进制的静态分析,找出需要标记的指令,并将它们写入标记文件。

    • ② 使用标记工具创建带有指令标记的程序。

    • ③ 配置可编程的协处理器,使用标签和指令类型来区分不同的事件,并为不同事件执行不同的动作。

    • 举个例子:

    • 1) Tag=0:协处理器过滤指令,因此指令不会进入队列。

    • 2) Tag=1 和跳转指令:协处理器更新 bitmap 并将其写入内存。Tatoo 采用 AFL-QEMU 的边编码算法为每条边生成伪随机 ID。

    • 3) Tag=1 和条件跳转指令:协处理器基于污点推断更新 bitmap 并记录数据流信息。更新数据流的方法类似于更新bitmap。

  2. 模糊测试阶段:

    • ④ 模糊测试进程启动时,内核为跟踪数据预留连续的物理内存。

    • ⑤ 模糊测试工具执行被模糊测试的标记程序。内核中的监控器决定哪个程序应该被监控。在进程上下文切换时,禁用启用协处理器。

    • ⑥ 当被监控的程序执行时,处理器将执行数据(包括标签和数据流信息)提交给协处理器。

    • ⑦ 协处理器收集相关信息,并将其写入内存。

    • ⑧ 模糊测试工具分析数据,并根据收集到的数据流信息调度和变异输入文件。

    • ⑨ 当模糊测试进程退出时,内核释放内存。



论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


 论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing


3.评估


Tatoo 部署在 Xilinx Kintex-7 FPGA KC705 评估板上。我们在真实世界的程序中选择了7个程序。

  1. 性能开销

    我们在另一台机器上运行AFL,为每个程序获取2000个种子,然后运行这些种子。我们统计每个种子的运行时间并取平均值。基线是原始程序的结果,标准化为1。我们发现Tatoo引入的总体性能开销约为5%至12%,AFL、PHMon和Tatoo的平均性能开销分别为60%、11.55%和8.7%。

  2. 吞吐率和覆盖率

    我们针对不同的模糊目标执行了7个二进制程序。Tatoo比AFL提高了约29.03%,比AFL_QEMU提高了769.88%,比PHMON提高了4.10%,这是因为插桩数量的优化。

    与AFL相比,Tatoo实现了比AFL高8.2%的边缘覆盖率(tiff2bw除外)。tiff2bw 的不理想性能是因为基于硬件追踪的模糊测试是伪随机的边编码算法。

  3. 面积开销

    Tatoo的硬件开销为34%。Tatoo在内存标记(15%)和硬件跟踪(18%)中引入了内存开销。

 论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing






原文始发于微信公众号(COMPASS Lab):论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing

版权声明:admin 发表于 2024年6月8日 下午2:23。
转载请注明:论文分享 Tatoo: A Flexible Hardware Platform for Binary-Only Fuzzing | CTF导航

相关文章