简化部署AFL++:一个覆盖率引导的模糊测试工具【2025年网络安全最全三部资料】

阅读量44992

发布时间 : 2025-03-28 17:05:06

​1. 环境安装

 

1.1 源代码编译

源码地址:git clone GitHub – AFLplusplus/AFLplusplus: The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

1.2 官方镜像: aflplusplus/aflplusplus

1.3 包管理器安装: apt install afl++

解析:源代码编译在线下载大文件数据包,不够稳定;包管理其安装 afl++ 只是一个基础包,无法进行模糊测试,仍需安装其它依赖包;

推荐官方镜像安装:实时更新,环境完整,但是镜像较大,5.31GB大小。

2. 常用几种模式

 

2.1 LLVM 模式(插桩模式)

2.1.1 测试过程输出及结果

首先使用AFL++ 的编译器 afl-clang-fast 进行编译,编译时插入额外的代码,用于在程序运行时收集执行信息。

 

 

输出结果:

 

2.1.2 测试程序

 

输入种子

 

2.2 Qemu 模式

QEMU 模式是一种用于模糊测试未插桩的二进制文件的技术。它允许用户在没有源代码或无法使用 AFL 的插桩编译器的情况下,对二进制程序进行模糊测试。QEMU 是一个开源的虚拟化工具,能够模拟不同的硬件架构,并提供对二进制文件的动态分析。

使用 gcc 编译二进制文件,模拟无源码二进制文件进行模糊测试。测试程序如上 2.1.1

 

 

(1) QEMU 模式的作用

无需源代码:

AFL++ 通常需要目标程序在编译时进行插桩(instrumentation),以跟踪代码覆盖率。

如果没有源代码,AFL++ 的 QEMU 模式可以通过动态二进制翻译(Dynamic Binary Translation)对二进制文件进行插桩。

跨平台支持:

QEMU 模式支持对不同架构(如 ARM、MIPS)的二进制文件进行模糊测试。

动态插桩:

QEMU 模式会在运行时动态插桩,记录代码覆盖率信息,帮助 AFL++ 生成更有效的测试用例。

(2) QEMU 模式的工作原理

二进制翻译:

QEMU 将目标二进制文件的指令翻译为宿主机的指令,并在翻译过程中插入插桩代码。

覆盖率跟踪:

插桩代码会记录目标程序的执行路径(如基本块、分支等)。

反馈机制:

AFL++ 利用覆盖率信息生成新的测试用例,优先探索未覆盖的代码路径。

2.3 Unicorn 模式

Unicorn 模式适用于简单的二进制程序或需要高性能的模糊测试场景。只模拟 CPU 指令执行(不涉及硬件或操作系统)

官方测试案例:

测试程序地址:https://github.com/AFLplusplus/AFLplusplus/tree/stable/unicorn_mode/samples/python_simple

 

测试输出结果:

 

 

脚本文件解析:

 

2.4 Frida 模式

是一种基于动态插桩的模糊测试模式,它利用 Frida 工具对目标程序进行插桩,从而实现对闭源程序的模糊测试。Frida 模式特别适合测试没有源代码的程序(如移动端应用、桌面端应用等 JavaScript、Android 应用、加密保护或反调试的程序)。

官方文档介绍截图如下:

 

2.4.1 测试结果

 

2.4.2 测试程序

目标程序:target_binary.c

 

加载驱动程序:frida_script.js

 

2.5 区别

QEMU 和 Unicorn 模式

主要区别

(1) 模拟范围:QEMU 模式模拟整个操作系统环境,模拟硬件(CPU、内存、IO 等)跨架构支持:几乎支持所有 CPU 架构(x86、ARM、MIPS 等)而 Unicorn 模式只模拟 CPU 指令执行仅模拟(不涉及硬件或操作系统)。

(2) 性能:Unicorn 模式通常比 QEMU 模式更快,因为它不模拟操作系统环境。

(3) 适用场景:QEMU 模式适用于需要模拟操作系统环境的复杂程序,而 Unicorn 模式适用于简单的二进制程序或需要高性能的模糊测试场景。

QEMU 和 Frida 模式

主要区别

选择 QEMU 模式

  1. (1) 需要对完整的二进制文件或系统进行模糊测试。

(2) 目标程序是跨架构的(如 ARM、MIPS)。

(3) 需要支持多种架构。

选择 Frida 模式

(1) 需要对闭源程序或特定代码片段进行测试。

(2) 目标程序运行在支持 Frida 的环境中(如 Android、iOS、Windows)。

(3) 需要动态插桩和细粒度调试。

2.6 崩溃测试案例

2.6.1 测试结果

测试时间:2 days 21 hrs 36 min

 

2.6.2 测试程序

1. vulnerable_program.c

 

2. 编译

 

·-fno-stack-protector:禁用栈保护机制,使缓冲区溢出更容易触发。

·-z execstack:禁用栈不可执行保护,使栈上的代码可以执行(仅用于测试目的)

 

3. 准备输入目录

创建一个输入目录,并在其中放置一些初始测试用例。例如:

 

4. 检查崩溃记录

 

5. 分析崩溃记录

 

 

2.6.3 编译器

例子:

(1) gcc 编译:启用了栈保护机制,当检测到栈溢出时,程序会立即终止并输出错误信息。

(2) afl-clang-fast 编译:可能禁用了某些安全机制,以便更好地进行模糊测试,因此程序可能不会立即终止,或者不会输出栈溢出错误。

这两种编译方式的不同行为是由于它们的目标不同:gcc 更注重程序的稳定性和安全性,而 afl-clang-fast 更注重发现程序中的潜在漏洞。

 

 

 

中科固源专注于通讯协议安全与模糊测试,提供Wisdom系列工具和Swift系列工具,帮助企业构建全面的网络安全防护体系。了解更多产品与解决方案。加入我们,开启你的高效代码创新之旅!

 

①扫描二维码或添加微信,获取1V1线上云指导。

②解锁免费高效的开源级开发工具,还有更多专属权益等你来拿。

③关注我们,在评论区留言“我要学习资料”,即可免费获得独家学习资料包,包括详细使用教程、应用案例分析及相关技术文档。

本文由中科固源原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/305945

安全KER - 有思想的安全新媒体

分享到:微信
+10赞
收藏
中科固源
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66