探索未知边界:Driller - 强大的模糊测试与符号执行工具
1、项目介绍
Driller是一款基于AFL(Automated Fuzzing Framework)并集成angr的开源模糊测试工具。其设计灵感源于学术论文《Driller: Augmenting Black-Box Fuzzing Through Selective Symbolic Execution》。Driller在AFL的基础上,利用angr作为符号执行引擎,帮助发现和解决AFL在探索路径时遇到的难题,从而有效地挖掘软件中的安全漏洞。
2、项目技术分析
Driller的核心在于它的“卡住”启发式算法。当AFL的“pending_favs”属性(表示潜在有趣路径的数量)降为零时,即认为AFL进入停滞状态,此时Driller会介入。Driller将未被追踪的输入传递给angr,寻找AFL无法满足的基本块转换,并合成新的输入。这些新输入随后会被返回给AFL,进行进一步的变异和路径探索。
此外,该项目提供三种操作模式:
- 在单一机器上运行AFL和Driller的脚本。
- 监控进程观察fuzzer_stats文件,适时调用Driller。
- 利用Celery任务调度器分配多台机器上的工作,一部分用于模糊测试,另一部分用于符号执行。
3、项目及技术应用场景
Driller在实际中表现出色,尤其是在DARPA的Cyber Grand Challenge(CGC)中,Shellphish团队使用它来协助查找可利用的错误。对于需要深入测试复杂二进制代码或执行路径的应用场景,如系统软件、嵌入式设备固件等,Driller都是一个极具价值的工具。
4、项目特点
- 智能结合:将AFL的模糊测试能力与angr的符号执行相结合,克服了纯模糊测试的局限性。
- 灵活模式:支持多种运行模式,适应不同规模的环境和需求。
- 实战验证:在CGC中的成功应用证明了其实战效果。
- 广泛兼容:虽然主要针对DECREE二进制格式,但对其他格式也有一部分支持,尽管可能会遇到一些兼容问题。
- 易于使用:提供了简单的Python API,方便开发人员快速集成和扩展。
例如,下面这段代码展示了如何使用Driller从一个初始测试用例出发,找到新的有效测试用例:
import driller
d = driller.Driller("./CADET_00001", # 二进制目标文件路径
"racecar", # 初始测试用例
"\xff" * 65535 # 没有发现转换的AFL位图
)
new_inputs = d.drill()
依赖项包括Mechaphish的Fuzzer和Tracer组件,以及Redis用于同步测试案例。
总的来说,Driller是一个强大的、创新的工具,能够帮助开发者和安全研究人员深入探索软件的潜在缺陷,是提高软件安全性不可或缺的一部分。如果你正在寻求提升你的模糊测试能力,那么不妨尝试一下Driller,开启你的安全之旅吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



