修改 AFL 以包含一个新变量供 Fuzzer 在种子选择中考虑

问题描述

我正在了解 AFL 如何实施其种子选择。据我了解,afl-fuzz.c一个名为 has_new_bits函数,它返回值以确定输入的结果是否创建了新路径、新边,或者它是否不是我们正在考虑的有趣分支。所以我的问题是,鉴于我能够插入一些允许我插入变量(例如计数器)的代码行,我可以插入其他代码行以在给定分支中增加它,我该如何修改AFL 能够检测到这一点吗?

解决方法

在 AFL++ 中,您可以直接使用 __afl_coverage_interesting 影响覆盖位图。例如,您可以使用计数器的值计算 val 参数(但请注意 val 是 u8)。

另一种方法是使用 FuzzFactory,这是 AFL 的修改版本,允许用户定义自定义覆盖率指标。在他们的 paper 中,作者讨论了 FuzzFactory 可以使用的一种可能的覆盖率指标,即有效性。有了有效性,模糊器会选择更多概率的有效输入。您可以绕过它并制作一个 FuzzFactory 版本,专注于触发不安全代码的输入而不是有效输入。