Recent Papers/Blogs/Tools Related to Fuzzing

Curated list of classic fuzzing books, papers about fuzzing at information security top conferences over the years, commonly used fuzzing tools, and resources that can help us use fuzzer easily. → English

本项目收录了经典的 fuzzing 书籍、历年安全顶会上有关 fuzzing 的经典论文、常用的 fuzzing 工具、可以快速入手 fuzzing 工具的博客,如果你有更多资源,欢迎贡献。


Table of Contents

1 Books

  • The Fuzzing Book (2019):该书以原理+代码练习为基础,从 0 到 1 完成一个模糊测试框架,结合实际的练习,如果想编写自己的测试框架,可以参考本书。
  • Fuzzing for Software Security Testing and Quality Assurance (2018):本书将模糊测试的思想引入软件开发生命周期,事实上很多高效的 fuzzing 测试往往在开发阶段就已经考虑到,该书探讨了 fuzz 工具的发展,不仅包括一些新兴开源工具,也涵盖诸多商用的 fuzzer,如何为软件开发项目选择合适的 fuzzer 也是本书的主题之一。

2 Articles&Papers

本章收录安全顶会和一些期刊上的经典论文,大而全不是我们的目的,只是想选择其中一些技术价值比较高或者比较新颖的文章,方便后续的学习。

Others

  • The Art, Science, and Engineering of Fuzzing: A Survey (2019):韩国科学技术研究院学者提出的一个通用 fuzz 模型,包含很多 fuzz 相关概念,在介绍 fuzz 技术的基础上,有一个包含 60+ fuzz 工具的对比,如果想知道更多 fuzz 工具,也许可以从该表中找到。
  • Fuzzing: a survey (2018):清华大学相关机构发表在 Cybersecurity 上的一篇关于 fuzzing 技术的调查。尽管论文中有一些值得商榷的描述,但是该论文可以让我们大概了解 fuzzing 历史、原理以及技术分类。
  • Evaluating Fuzz Testing, 2018:美国马里兰大学学者在 CCS 2018 上的一篇论文,总结近些年 fuzzing 的发展,分析了安全顶会上提出的多个工具,涵盖了 fuzzing 完整的生命周期,是一篇不错的 survery。
  • Fuzzing: Art, Science, and Engineering, 2018:一个非常详尽的 survery,包括各个工具的对比,也涵盖了 fuzzing 的各个阶段。
  • Fuzzing: State of the art, 2018:国人发表在 IEEE Transactions on Reliability 上的论文,可以大概了解 fuzzing 思想,但是分析并不深入,相比上面两篇文章,有一定的差距。
  • Source-and-Fuzzing (2019): 一些阅读源码和 fuzzing 的经验,涵盖黑盒与白盒测试,一系列文章对 fuzz 的分析较为深入,值得一看。
  • Effective File Format Fuzzing – Thoughts, Techniques and Results (Blackhat Europe 2015):作者主要分享多年来对多个开源和商用软件的 fuzz 方法,包括 Adobe Reader、 Wireshark、 Hex-Rays IDA Pro 等软件。
  • CoLaFUZE: Coverage-Guided and Layout-Aware Fuzzing for Android Drivers (2021),南方电网数字电网研究院有限公司 的 Tianshi Mu 等人介绍了CoLaFUZE,一个覆盖率引导和布局感知的模糊工具,用于自动生成有效输入和探索驱动程序代码。用于模糊测试安卓驱动程序
  • Better Pay Attention Whilst Fuzzing (2022), 浙江大学 Shunkai Zhu 等人提出的 ATTuzz,用于解决现有 fuzzing 工具的两个局限性,缺乏对程序的全面分析和缺乏有效的变异策略。通过深度学习提高覆盖率。

NDSS

2024

2023

2022

2021

2020 ⤵

USENIX Security

2023

2022

2021

2020

2019 ⤵

IEEE S&P

2024

2023

2022

2021

2020

  • IJON: Exploring Deep State Spaces via Fuzzing, 2020: 通过改造 AFL 探测程序的空间状态,发现更多程序行为,并拿游戏”超级玛丽”来作演示。 作者对超级玛丽作了修改,使所有的键盘命令都可以从标准输入中读取,并且马里奥只能不停地向右跑,只要停下来就死掉,这个设计主要是为节省时间。
  • Krace: Data Race Fuzzing for Kernel File Systems, 2020:介绍了 KRACE,一个端到端的模糊框架,它将并发方面引入基于覆盖引导的文件系统 fuzzing 中。
  • Pangolin:Incremental Hybrid Fuzzing with Polyhedral Path Abstraction, 2020: 香港科技大学,混合 fuzing 结合了符号执行与模糊测试的优点,已经逐渐成为基于覆盖引导的 fuzzing 技术的重要发展方向之一。尽管在实现高覆盖率方面取得了巨大进展,但众所周知,混合模糊仍然存在效率问题。 将约束求解后对信息重用起来,是有可能实现 Constrained Mutation 和 Guided Constraint Solving,从而提升混合 fuzz 效率
  • RetroWrite: Statically Instrumenting COTS Binaries for Fuzzing and Sanitization, 2020:该团队开发了一种二进制重写工具 retrowrite 用于支持 AFL 和 ASAN,并证明它可以在保持精度的同时达到编译器级的性能。使用 retrowriter 重写用于覆盖引导的二进制文件在性能上与编译器检测的二进制文件相同,性能比基于 defaultQEMU 的检测高出 4.5 倍。该工具已开源:https://github.com/HexHive/retrowrite/,同时限制非常多,比如目标二进制只能是 x86_64 架构,必须包含符号表等。

2019 ⤵

ACM CCS

2023

2022 ⤵

3 Tools

这里收录常见并且实用的工具,多数工具经过笔者实践,具有一定的普适性。也有一些优秀但是很久没有维护更新,并且适用场景非常有限的工具,未包含在其中。

变异器

  • Radamsa :Radamsa 是用于健壮性测试的测试用例生成器。通过读取有效数据的样本文件并从中生成令人感兴趣的不同输出来工作。
  • zzuf :一个 fuzzer 的输入程序,作为一个优秀的开源项目,已经有不少国外的大型项目引入 zzuf,作为各种畸形数据的生成。

二进制

  • afl-unicorn: Fuzzing The ‘Unfuzzable’ BattelleShmooCon 2018 上发布的一个工具,已经有大佬将演讲视频添加中文字幕并上传到 B 站上。该工具 弥补了 afl 的不足,可以对任意二进制代码片段进行 fuzz,作为一个完全使用黑盒进行 fuzz 的工具,afl-unicorn 也保留了 afl 原有的代码覆盖率统计,根据反馈对种子进行变异,从而提高代码覆盖。
  • Intriguer: Field-Level Constraint Solving for Hybrid Fuzzing:韩国延世大学发布在安全顶会 CCS 2019 上的一篇关于 fuzzer 性能改进的文章。该团队提出了一个基于 AFL,名为 Intriguer 的新型混合 fuzzer。通过污点分析和指令跟踪,经过笔者实践,该工具能够覆盖更深层次的代码路径。但是同时也存在 bug,会在 /tmp 目录下生成大量冗余文件。
  • Unicorefuzz: On the Viability of Emulation for Kernelspace Fuzzing :柏林工业大学学者发表在安全顶会 USENIX Security ‘19 上的一篇关于 fuzzing 内核的文章。相对于 syzkaller, unicorefuzz 配置更加简单,能够 fuzz 路径较深的一些函数。
  • libFuzzer :谷歌开发的一个基于覆盖引导的 fuzzer,主要针对库提供的接口进行 fuzzing。
  • Honggfuzz:同样是谷歌开发的一个类似于 afl 的工具,只是 honggfuzz 基于反馈驱动,多线程和多进程,fuzz 速度相比于 afl 有一个质的飞跃。
  • syzkaller:优秀的内核 fuzz 工具,可以针对各种驱动接口进行 fuzzing。
  • frida-fuzzer: Frida-Fuzzer 是一款针对 API 的内存模糊测试框架,该工具的设计和开发灵感来源于 afl/afl++,Frida-Fuzzer 的当前版本支持在 GNU/Linux x86_64 和 Android x86——64 平台上运行。
  • winafl:afl 的一个分支项目,将 afl 用于Windows 平台。
  • trinity:Linux system call fuzzer,对于 Linux 系统调用的模糊测试工具。
  • NtCall64:Windows NT x64 syscall fuzzer,基于 NtCall 的 Windows 系统调用模糊测试工具。
  • kDriver-Fuzzer:基于 ioctlbf 框架编写的驱动漏洞挖掘工具 kDriver Fuzzer,驱动 fuzzer
  • fuzzball:FuzzBALL是基于 BitBlaze Vine 库的x86(和少许ARM)二进制代码的符号执行工具

API/协议

  • Sulley/Boofuzz:Sulley 是一个模糊测试框架。主要用于协议的 fuzz,如今已经不再维护。 Boofuzz 是古老的 Sulley 模糊测试框架的分支和后续版本。除了大量错误修复外,boofuzz 扩展更多新特性。
  • fuzzowski:基于 boofuzz 的网络协议模糊测试工具,基于 sulley 的数据变异。
  • Peach:Peach 是 Michael 团队开发的一个模糊测试框架,最初为开源软件,后续部分核心测试套商用发布。Peach 专注于文件格式的 fuzz,同时针对各种协议的 fuzz 也十分友好。
  • Defensics: Defensics 是一个基于变异的 fuzzing 商用工具,简单而强大,广泛支持各种协议,具有成熟的测试套,也具有较强扩展性,用户可以通过模板创建属于自己的测试套。
  • bsSTORM商用工具,覆盖完整的软件生命周期,看上去更擅长协议 fuzz。
  • API-fuzzer:使用常见的渗透测试技术和已知漏洞对一些网络 API 请求进行 fuzz。
  • domato :googleprojectzero 开发的一个专门用于浏览器的黑盒 fuzz 工具,用法简单,通过让浏览器访问生成各种随机的前端页面,观察浏览器的状态。

固件

4 Blogs

如果不想看这么多理论知识,只是想快速将工具运用于实际项目中,直接参考以下博客,即可对各种 fuzzing 工具快速入门。

AFL

boofuzz

libfuzzer

Peach

内核 fuzz

其他



Contribute

如果你看到了认为比较好的有关模糊测试的资源,欢迎贡献本项目!请阅读贡献指南

License

知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。