使用 AFL++ 执行模糊测试
概述
AFL++ 是 American Fuzzy Lop(AFL)的社区维护分支,为编译后的二进制文件提供覆盖率引导模糊测试。它在编译时或通过 QEMU/Unicorn 模式(用于纯二进制模糊测试)对目标进行插桩,然后对输入语料库进行变异以发现新的代码路径。AFL++ 包含高级调度算法(MOpt、rare)、自定义变异器、用于输入到状态比较求解的 CMPLOG,以及用于高吞吐量模糊测试的持久模式。
前置条件
- 已安装 AFL++(
apt install afl++或从源码构建) - 目标二进制文件的源代码(用于编译时插桩)或使用 QEMU 模式进行纯二进制测试
- 目标格式的有效输入初始种子语料库
- 已配置
/proc/sys/kernel/core_pattern的 Linux 系统
操作步骤
- 使用
afl-cc或afl-clang-fast对目标二进制文件进行插桩 - 准备包含最小有效输入的种子语料库目录
- 使用
afl-cmin最小化语料库以删除冗余种子 - 使用适当参数运行
afl-fuzz(-i 输入目录 -o 输出目录) - 通过 afl-whatsup 和 UI 统计信息监控模糊测试进度
- 使用
afl-tmin最小化和 CASR/GDB 分析对崩溃进行分类 - 报告唯一崩溃及其复现步骤
预期输出
+++ 发现结果 +++
唯一崩溃: 12
唯一挂起: 3
最近崩溃: 00:02:15 前
+++ 覆盖率 +++
映射密度: 4.23% / 8.41%
发现路径: 1847
执行速度: 2145/秒