一些值得学习的Fuzzer开源项目

之前GitHub上有人整理过一个叫Awesome-Fuzzing的资料,整理了关于Fuzzing技术的电子书、视频、工具、教程以及用于练习的漏洞程序。整体上不错,但工具上还是不够全,有些不错且希望阅读代码学习的工具,发现未在其中,因此重新整理出下面这一份资源,其中有些还曾二次开发过,有些是还未来得及学习的,写出来权且当作学习计划。

  1. AFL——支持源码插桩的代码覆盖引导的Fuzzer,绝对是fuzzer领域的一大里程碑,虽然它也支持基于QEMU的闭源程序,但效果不好,且容易出错,由它衍生出来非常多afl分支版本,借助它已经被挖出非常多的漏洞,但它的变异策略其实有待提高。

    http://lcamtuf.coredump.cx/afl/

  2. WinAFL——windows版本的afl,使用DynamoRIO去插桩闭源程序以获取代码覆盖率信息,同时支持硬件PT获取覆盖率信息,但PT获取覆盖率其实并没有插桩获取得全,但速度可能会快一些。

    https://github.com/googleprojectzero/winafl

  3. AFLFast——加速版的AFL,Fuzzing速度确实会比原版快一些。

    https://github.com/mboehme/aflfast

  4. Vuzzer——支持闭源程序的覆盖引导Fuzzer,使用LibDFT的pin工具实现数据流追踪,结合动静态分析,以获取更多的代码路径,比如比较语句中的比较值,它会先作记录,再未来变异时使用。

    https://github.com/vusec/vuzzer

  5. PTfuzzer——Linux平台下的采用 Interl PT硬件支持的覆盖引导Fuzzer,所以它支持闭源程序。

    https://github.com/hunter-ht-2018/ptfuzzer

  6. afl-unicorn——采用Unicorn模拟指令的AFL,支持Linux闭源程序

    https://github.com/tigerpuma/Afl_unicorn

  7. pe-afl——通过静态插桩实现针对Windows闭源程序的覆盖引导的AFL Fuzzer,支持用户层应用和内核驱动

    https://github.com/wmliang/pe-afl

  8. kAFL——支持QEMU虚拟机下的系统内核Fuzzing的AFL,适用于Linux、macOS与Windows

    https://github.com/RUB-SysSec/kAFL/

  9. TriforceAFL——基于QEMU全系统模拟的AFL,借助系统仿真器实现分支信息跟踪,支持Linux内核Fuzzing

    https://github.com/nccgroup/TriforceAFL

  10. ClusterFuzzer——Google开源的可扩展的Fuzzing基础设施

    https://github.com/google/clusterfuzz

  11. LibFuzzer——进程内覆盖率引导的开源的fuzz引擎库,属于llvm的一部分,在各大主流开源库中,以及Google内部最经常用的安全测试工具

    https://llvm.org/docs/LibFuzzer.html

  12. OSS-Fuzz——基于LibFuzzer的开源软件Fuzzer集合,实现docker下自动下载、编译安装及运行

    https://github.com/google/oss-fuzz

  13. honggfuzz——Google开发的基于软硬件的覆盖驱动型Fuzzer,单纯暴力Fuzz的效果也挺好的,支持多平台,包括Linux\macOS\Windows\Android

    https://github.com/google/honggfuzz

  14. KernelFuzzer——跨平台内核Fuzzer框架,不开源策略,只在其paper中提及变异策略,需要自己实现,支持Windows、OSX和QNX系统,但只提供Windows编译脚本

    https://github.com/mwrlabs/KernelFuzzer

  15. OSXFuzzer——基于Kernel Fuzzer的macOS内核Fuzzer

    https://github.com/mwrlabs/OSXFuzz.git

  16. PassiveFuzzFrameworkOSX——通过Hook实现被动式的OSX内核Fuzzer

    https://github.com/SilverMoonSecurity/PassiveFuzzFrameworkOSX

  17. Bochspwn——基于Boch插桩API实现Double Fetches内核漏洞的检测

    https://github.com/googleprojectzero/bochspwn

  18. Bochspwn-reloaded——基于Boch插桩API实现内核信息泄露的检测

    https://github.com/googleprojectzero/bochspwn-reloaded

  19. syzkaller——基于覆盖率引导的Linux内核Fuzzer,需要基于其模板语法实现API调用模板,提供给syzkaller进行数据变异,也曾被移植到其它平台

    https://github.com/google/syzkaller

  20. dharma——基于语法模板生成的Fuzzer,由Mozilla开源的用于Fuzz Firefox JS引擎

    https://github.com/MozillaSecurity/dharma

  21. domator——Project Zero团队开源的DOM Fuzzer,用python实现基于模板生成的Fuzzer

    https://github.com/googleprojectzero/domato

  22. Fuzzilli——基于语法变异的JavaScript引擎Fuzzer,先通过语法模板生成测试用例,再生成中间语法进行变异,结合覆盖率引导以触发更多代码路径

    https://github.com/googleprojectzero/fuzzilli

  23. Razzer——内核竞争条件漏洞Fuzzer

    https://github.com/compsec-snu/razzer

  24. ViridianFuzzer——用于Fuzzing Hyper-V hypercalls的内核驱动,由MWRLabs公司出品

    https://github.com/mwrlabs/ViridianFuzzer

  25. ChromeFuzzer——基于grinder语法生成器改装的Chrome浏览器Fuzzer

    https://github.com/demi6od/ChromeFuzzer

  26. funfuzz——Mozilla开源的JS fuzzer工具集合,主要用于Fuzz SpiderMonkey

    https://github.com/MozillaSecurity/funfuzz