一些值得学习的Fuzzer开源项目
之前GitHub
上有人整理过一个叫Awesome-Fuzzing
的资料,整理了关于Fuzzing
技术的电子书、视频、工具、教程以及用于练习的漏洞程序。整体上不错,但工具上还是不够全,有些不错且希望阅读代码学习的工具,发现未在其中,因此重新整理出下面这一份资源,其中有些还曾二次开发过,有些是还未来得及学习的,写出来权且当作学习计划。
AFL——支持源码插桩的代码覆盖引导的Fuzzer,绝对是fuzzer领域的一大里程碑,虽然它也支持基于QEMU的闭源程序,但效果不好,且容易出错,由它衍生出来非常多afl分支版本,借助它已经被挖出非常多的漏洞,但它的变异策略其实有待提高。
WinAFL——windows版本的afl,使用
DynamoRIO
去插桩闭源程序以获取代码覆盖率信息,同时支持硬件PT获取覆盖率信息,但PT获取覆盖率其实并没有插桩获取得全,但速度可能会快一些。AFLFast——加速版的AFL,Fuzzing速度确实会比原版快一些。
Vuzzer——支持闭源程序的覆盖引导Fuzzer,使用LibDFT的pin工具实现数据流追踪,结合动静态分析,以获取更多的代码路径,比如比较语句中的比较值,它会先作记录,再未来变异时使用。
PTfuzzer——Linux平台下的采用 Interl PT硬件支持的覆盖引导Fuzzer,所以它支持闭源程序。
afl-unicorn——采用Unicorn模拟指令的AFL,支持Linux闭源程序
pe-afl——通过静态插桩实现针对Windows闭源程序的覆盖引导的AFL Fuzzer,支持用户层应用和内核驱动
kAFL——支持QEMU虚拟机下的系统内核Fuzzing的AFL,适用于Linux、macOS与Windows
TriforceAFL——基于QEMU全系统模拟的AFL,借助系统仿真器实现分支信息跟踪,支持Linux内核Fuzzing
ClusterFuzzer——Google开源的可扩展的Fuzzing基础设施
LibFuzzer——进程内覆盖率引导的开源的fuzz引擎库,属于llvm的一部分,在各大主流开源库中,以及Google内部最经常用的安全测试工具
OSS-Fuzz——基于LibFuzzer的开源软件Fuzzer集合,实现docker下自动下载、编译安装及运行
honggfuzz——Google开发的基于软硬件的覆盖驱动型Fuzzer,单纯暴力Fuzz的效果也挺好的,支持多平台,包括Linux\macOS\Windows\Android
KernelFuzzer——跨平台内核Fuzzer框架,不开源策略,只在其paper中提及变异策略,需要自己实现,支持Windows、OSX和QNX系统,但只提供Windows编译脚本
OSXFuzzer——基于Kernel Fuzzer的macOS内核Fuzzer
PassiveFuzzFrameworkOSX——通过Hook实现被动式的OSX内核Fuzzer
https://github.com/SilverMoonSecurity/PassiveFuzzFrameworkOSX
Bochspwn——基于Boch插桩API实现Double Fetches内核漏洞的检测
Bochspwn-reloaded——基于Boch插桩API实现内核信息泄露的检测
syzkaller——基于覆盖率引导的Linux内核Fuzzer,需要基于其模板语法实现API调用模板,提供给syzkaller进行数据变异,也曾被移植到其它平台
dharma——基于语法模板生成的Fuzzer,由Mozilla开源的用于Fuzz Firefox JS引擎
domator——Project Zero团队开源的DOM Fuzzer,用python实现基于模板生成的Fuzzer
Fuzzilli——基于语法变异的JavaScript引擎Fuzzer,先通过语法模板生成测试用例,再生成中间语法进行变异,结合覆盖率引导以触发更多代码路径
Razzer——内核竞争条件漏洞Fuzzer
ViridianFuzzer——用于Fuzzing Hyper-V hypercalls的内核驱动,由MWRLabs公司出品
ChromeFuzzer——基于grinder语法生成器改装的Chrome浏览器Fuzzer
funfuzz——Mozilla开源的JS fuzzer工具集合,主要用于Fuzz SpiderMonkey