安全客 03月28日
简化部署AFL++:一个覆盖率引导的模糊测试工具【2025年网络安全最全三部资料】
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了AFL++模糊测试工具,这是一款强大的软件漏洞检测工具。文章首先介绍了AFL++的安装方法,包括源代码编译、官方镜像和包管理器安装。随后,详细阐述了AFL++的几种常用模式,包括LLVM、Qemu、Unicorn和Frida模式,并分析了它们各自的特点和适用场景。此外,文章还通过崩溃测试案例,展示了AFL++在发现软件漏洞方面的强大能力。最后,文章分享了关于如何使用AFL++进行模糊测试的实践经验和建议,帮助读者更好地理解和应用这款工具。

🌱 AFL++提供了多种安装方式,包括源代码编译、官方镜像和包管理器安装。推荐使用官方镜像,因为它提供了实时更新且环境完整的版本,但镜像体积较大。

💡 LLVM模式通过编译器插桩,在程序运行时收集执行信息。QEMU模式则无需源代码,通过动态二进制翻译实现模糊测试,支持跨平台。

🦄 Unicorn模式仅模拟CPU指令执行,适用于简单二进制程序或高性能场景。Frida模式基于动态插桩,适用于闭源程序,如移动端应用。

💥 QEMU和Unicorn模式主要区别在于模拟范围和性能:QEMU模拟整个操作系统环境,而Unicorn仅模拟CPU指令执行。QEMU和Frida模式的区别在于测试目标和应用场景:QEMU适用于完整的二进制文件或系统,Frida适用于闭源程序或特定代码片段。

🚨 崩溃测试案例展示了AFL++在发现漏洞方面的能力。通过禁用栈保护等安全机制,可以更容易地触发缓冲区溢出等问题,从而进行漏洞分析。

​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线上云指导。

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

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AFL++ 模糊测试 漏洞检测 QEMU Unicorn
相关文章