fuzzing-tutorial
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.
https://github.com/secnotes/fuzzing-tutorial
Last synced: 1 day ago
JSON representation
-
Other
- The Art, Science, and Engineering of Fuzzing: A Survey, 2019
- Evaluating Fuzz Testing, 2018
- Source-and-Fuzzing, 2019 - 一些阅读源码和 Fuzzing 的经验,涵盖黑盒与白盒测试,一系列文章对 Fuzz 的分析较为深入,值得一看。
- Fuzzing: Art, Science, and Engineering, 2018
- Fuzzing: a survey, 2018 - 发表在 [*Cybersecurity*](https://cybersecurity.springeropen.com/) 上的一篇关于 Fuzzing 技术的调查。尽管论文中有一些值得商榷的描述,但是该论文可以让我们大概了解 Fuzzing 历史、原理以及技术分类。
- Fuzzing: State of the art, 2018 - 发表在 [IEEE Transactions on Reliability](https://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=24) 上的论文,可以大概了解 Fuzzing 思想,但是分析并不深入,相比上面两篇文章,有一定的差距。
- Effective File Format Fuzzing – Thoughts, Techniques and Results, 2015 - Blackhat Europe 2015 的演讲,作者主要分享多年来对多个开源和商用软件的 Fuzz 方法,包括 Adobe Reader、 Wireshark、 Hex-Rays IDA Pro 等软件。
- CoLaFUZE: Coverage-Guided and Layout-Aware Fuzzing for Android Drivers, 2021 - 一个覆盖率引导和布局感知的模糊工具,用于自动生成有效输入和探索驱动程序代码。用于 Fuzz 测试**安卓驱动程序**。
- Better Pay Attention Whilst Fuzzing, 2022 - 用于解决现有 Fuzzing 工具的两个局限性,缺乏对程序的全面分析和缺乏有效的变异策略。通过深度学习提高覆盖率。
-
NDSS
-
2023
- DARWIN: Survival of the Fittest Fuzzing Mutators, 2023 - 来自于上海交通大学的文章,改进优化 AFL 变异算法,通过实验证明比原生 AFL 多出 66% 的安全漏洞,[已开源](https://github.com/TUDA-SSL/DARWIN),很好奇为啥叫 DARWIN 的软件或者工具这么多🐶。
- FUZZILLI: Fuzzing for JavaScript JIT Compiler Vulnerabilities, 2023 - 谷歌Project Zero安全团队开发的针对 Javascript JIT 引擎进行 Fuzzing 的工具。[已开源](https://github.com/googleprojectzero/fuzzilli)。
- No Grammar, No Problem: Towards Fuzzing the Linux Kernel without System-Call Descriptions, 2023 - 不用像 Syzkaller 那样编写复杂的系统调用描述,即可对内核进行 Fuzzing 的工具。[FuzzNG 已开源](https://github.com/BUseclab/FuzzNG)。
- LOKI: State-Aware Fuzzing Framework for the Implementation of Blockchain Consensus Protocols, 2023 - 针对区块链共识协议实现模糊测试的方法,来自清华大学,未见开源。
- OBSan: An Out-Of-Bound Sanitizer to Harden DNN Executables, 2023 - 针对深度神经网络相关程序的 Fuzz 测试,请注意,并不是将神经网络应用在 Fuzzing 中,而是针对神经网络相关应用进行 Fuzzing,[已开源](https://github.com/yanzuochen/obsan)。
- Assessing the Impact of Interface Vulnerabilities in Compartmentalized Software, 2023 - 针对上下文隔离的 API 接口(CIV,这是作者定义的一个概念,主要是指沙箱等隔离环境,应用划分、隔离后,应用的不同部分之间在交互时的控制和数据依赖关系,会在 interface 引入新的漏洞)进行 Fuzzing 的方案。Github 文档描述非常详细,[已开源](https://github.com/confFuzz/confFuzz),当前作者已针对 Okular/ImageMagick/Apache/exif 等诸多软件进行了 Fuzz 测试。
- No Grammar, No Problem: Towards Fuzzing the Linux Kernel without System-Call Descriptions, 2023 - 不用像 Syzkaller 那样编写复杂的系统调用描述,即可对内核进行 Fuzzing 的工具。[FuzzNG 已开源](https://github.com/BUseclab/FuzzNG)。
- DARWIN: Survival of the Fittest Fuzzing Mutators, 2023 - 改进优化 AFL 变异算法,通过实验证明比原生 AFL 多出 66% 的安全漏洞,[已开源](https://github.com/TUDA-SSL/DARWIN),很好奇为啥叫 DARWIN 的软件或者工具这么多🐶。
- LOKI: State-Aware Fuzzing Framework for the Implementation of Blockchain Consensus Protocols, 2023 - 针对区块链共识协议实现 Fuzz 测试的方法,未见开源。
- FuzzILLI: Fuzzing for JavaScript JIT Compiler Vulnerabilities, 2023 - 谷歌Project Zero安全团队开发的针对 Javascript JIT 引擎进行 Fuzzing 的工具。[已开源](https://github.com/googleprojectzero/Fuzzilli)。
-
2022
- MobFuzz: Adaptive Multi-objective Optimization in Gray-box Fuzzing, 2022 - 一种用于多目标优化 (MOO) 的灰盒模糊器,称为 MobFuzz。
- EMS: History-Driven Mutation for Coverage-based Fuzzing, 2022 - 一种新颖的变异方案,通过分析历史测试用例,发现一些已经尝试过的用例仍有可能触发新的独特路径。提出了一种轻量级、高效的 Probabilistic Byte Orientation Model(PBOM)模型,基于此提出了一个新的历史驱动的变异框架 EMS,发现了多个新的 CVE。
- datAFLow: Towards a Data-Flow-Guided Fuzzer, 2022 - DATAFLOW,这是一个由轻量级数据流分析驱动的灰盒 Fuzz 工具。
- Context-Sensitive and Directional Concurrency Fuzzing for Data-Race Detection, 2022 - 一个名为 CONZZER 的新型并发 Fuzz 测试框架,以有效地探索线程交错并检测难以发现的**数据竞争**。
- Semantic-Informed Driver Fuzzing Without Both the Hardware Devices and the Emulators, 2022 - 提出了一种无设备驱动程序 Fuzz 测试系统 DR .Fuzz,它不需要硬件设备对驱动程序进行 Fuzzing。DR .Fuzz 的核心是一种**语义通知机制**,它有效地生成输入以正确构造相关数据结构,以在驱动初始化时通过“验证链”,从而实现后续的无设备驱动程序 Fuzz 测试。
- FirmWire: Transparent Dynamic Analysis for Cellular Baseband Firmware, 2022 - [FirmWire](https://github.com/FirmWire/FirmWire),是一个支持三星和联发科的全系统**基带**固件分析平台。它支持对基带固件映像进行 Fuzz 测试、模拟和调试。
-
2024
- DeepGo: Predictive Directed Greybox Fuzzing, 2024 - 一种名为 DeepGo 的预测式定向性灰盒 Fuzzing 方法,通过结合历史和预测信息,利用深度神经网络和强化学习引导模糊测试达到目标路径,优化测试效率。作者来自国防科技大学计算机学院。
- EnclaveFuzz: Finding Vulnerabilities in SGX Applications, 2024 - Fuzz 对象是使用了因特尔 SGX 技术的软件,[已开源](https://github.com/vul337/EnclaveFuzz),文章来自中国科学院信息工程研究所的 Liheng Chen。
- ReqsMiner: Automated Discovery of CDN Forwarding Request Inconsistencies and DoS Attacks with Grammar-based Fuzzing, 2024 - 针对 CDN 请求不一致的 Fuzz 工具,[已开源](https://github.com/Konano/ReqsMiner),工作来自清华大学张超团队。
- Large Language Model guided Protocol Fuzzing, 2024 - 研究人员开发了一款以大模型为指导的协议 Fuzz,通过 AI 训练 RFC 文档包含的协议规范,[ChatAFL 已开源](https://github.com/ChatAFLndss/ChatAFL),文章来自新加坡国立大学的 Ruijie Meng。
- Predictive Context-sensitive Fuzzing, 2024 - 一种**新颖的统计覆盖率**的思路。目前大多数 Fuzz 工具都是通过边(edge)作为覆盖引导,edge coverage 是函数的控制流,只考虑代码执行而忽略内部程序状态。本文使用程序分析领域的上下文敏感(context-sensitivity)作为覆盖率统计,结合 calling-context 和 edge coverage,[已开源](https://github.com/eurecom-s3/predictive-cs-fuzzing),文章来自罗马大学的 Pietro Borrello。
- MOCK: Optimizing Kernel Fuzzing Mutation with Context-aware Dependency, 2024 - 通过捕获系统调用的状态关系,优化 Linux syscall 模糊测试效率。针对 Linux 内核的 Fuzz 工具,[待开源](https://github.com/m0ck1ng/mock),文章来自浙江大学 Jiacheng Xu。
- ShapFuzz: Efficient Fuzzing via Shapley-Guided Byte Selection, 2024 - 一种指导字节变异的新颖方案,优化变异算法,[已开源](https://github.com/ShapFuzz/ShapFuzz),在 AFL++ 基础之上增加了一个新的 `-w` 命令选项,来自清华大学网络与信息安全实验室。
- DeepGo: Predictive Directed Greybox Fuzzing, 2024 - 一种名为 DeepGo 的预测式定向性灰盒 Fuzzing 方法,通过结合历史和预测信息,利用深度神经网络和强化学习引导 Fuzz 测试达到目标路径,优化测试效率。
- EnclaveFuzz: Finding Vulnerabilities in SGX Applications, 2024 - Fuzz 对象是使用了因特尔 SGX 技术的软件,[已开源](https://github.com/vul337/EnclaveFuzz)。
- Large Language Model guided Protocol Fuzzing, 2024 - 研究人员开发了一款以大模型为指导的协议 Fuzz,通过 AI 训练 RFC 文档包含的协议规范,[ChatAFL 已开源](https://github.com/ChatAFLndss/ChatAFL)。
- MOCK: Optimizing Kernel Fuzzing Mutation with Context-aware Dependency, 2024 - 通过捕获系统调用的状态关系,优化 Linux syscall Fuzz 测试效率。针对 Linux 内核的 Fuzz 工具,[待开源](https://github.com/m0ck1ng/mock)。
- Predictive Context-sensitive Fuzzing, 2024 - 一种**新颖的统计覆盖率**的思路。目前大多数 Fuzz 工具都是通过边(edge)作为覆盖引导,edge coverage 是函数的控制流,只考虑代码执行而忽略内部程序状态。本文使用程序分析领域的上下文敏感(context-sensitivity)作为覆盖率统计,结合 calling-context 和 edge coverage,[已开源](https://github.com/eurecom-s3/predictive-cs-Fuzzing)。
- ReqsMiner: Automated Discovery of CDN Forwarding Request Inconsistencies and DoS Attacks with Grammar-based Fuzzing, 2024 - 针对 CDN 请求不一致的 Fuzz 工具,[已开源](https://github.com/Konano/ReqsMiner)。
- ShapFuzz: Efficient Fuzzing via Shapley-Guided Byte Selection, 2024 - 一种指导字节变异的新颖方案,优化变异算法,[已开源](https://github.com/ShapFuzz/ShapFuzz),在 AFL++ 基础之上增加了一个新的 `-w` 命令选项。
-
2021
- Favocado: Fuzzing the Binding Code of JavaScript Engines Using Semantically Correct Test Cases, 2021
- WINNIE : Fuzzing Windows Applications with Harness Synthesis and Fast Cloning, 2021 - gatech/winnie) 系统,包含两个组件:可从二进制文件中自动合成工具的生成器,以及一个高效的 Windows forkserver。 对比工具: WinAFL 。
- PGFUZZ: Policy-Guided Fuzzing for Robotic Vehicles, 2021
- Reinforcement Learning-based Hierarchical Seed Scheduling for Greybox Fuzzing, 2021
- Reinforcement Learning-based Hierarchical Seed Scheduling for Greybox Fuzzing, 2021 - 通过引入多级覆盖和设计了基于强化学习的分层调度器,保留更多有价值的种子。即更加细粒度衡量代码覆盖率和更加合理的种子调度策略。
- Favocado: Fuzzing the Binding Code of JavaScript Engines Using Semantically Correct Test Cases, 2021 - 对 **JS 引擎**中绑定层代码进行 Fuzzing 的工具:[Favocado](https://github.com/favocado/Favocado)。作者在对在4个不同的JavaScript运行时系统Fuzz时,发现了61个新的bug,其中33个是安全漏洞,13个已经被CVE收录。
- WINNIE : Fuzzing Windows Applications with Harness Synthesis and Fast Cloning, 2021 - gatech/winnie) 系统,包含两个组件:可从二进制文件中自动合成工具的生成器,以及一个高效的 Windows forkserver。 对比工具: WinAFL 。
- PGFuzz: Policy-Guided Fuzzing for Robotic Vehicles, 2021
-
2020 ⤵
- HFL: Hybrid Fuzzing on the Linux Kernel, 2020 - 新兴混合 Fuzz 工具。据作者所属,HFL 代码覆盖率分别比 Moonshine 和 Syzkaller 高出15%和26%,并发现 20+ 个内核漏洞。该工具好像没有开源。
- Not All Coverage Measurements Are Equal: Fuzzing by Coverage Accounting for Input Prioritization, 2020 - 一种新的模糊输入优化方案,发现了 20+ 0 day 漏洞,名为 [TortoiseFuzz](https://github.com/TortoiseFuzz/TortoiseFuzz)。
- PeriScope: An Effective Probing and Fuzzing Framework for the Hardware-OS Boundary, 2019 - 名为 PeriScope 的 Fuzz 工具,主要针对内核与硬件的边界部分,该工具好像没有开源。
- INSTRIM: Lightweight Instrumentation for Coverage-guided Fuzzing, 2018 - 学术研究,探讨了覆盖导向模糊的轻量级检测方法。
- HotFuzz: Discovering Algorithmic Denial-of-Service Vulnerabilities Through Guided Micro-Fuzzing, 2020 - 这是一个用于自动发现 Java 库中 AC (算法复杂性)漏洞框架 。
-
2025
- Automatic Library Fuzzing through API Relation Evolvement, 2025 - 通过 API 列表的组合调用进行测试。为了解决隐式API调用规范的问题提出了**关系学习阶段**,即通过更改 API 调用顺序观察执行状态的变化来推断API 关系。作者来自香港大学。
- Blackbox Fuzzing of Distributed Systems with Multi-Dimensional Inputs and Symmetry-Based Feedback Pruning, 2025 - 第一个用于分布式系统的覆盖引导 Fuzzer,[DistFuzz 已开源](https://github.com/zouyonghao/DistFuzz),作者来自北京航空航天大学。
- FUZZUER: Enabling Fuzzing of UEFI Interfaces on EDK-2, 2025 - FUZZUER,这是一种用于 EDK-2(一种典型且广泛使用的 UEFI 实现)上 UEFI 接口的覆盖引导模糊测试技术,暂未见开源,作者来自普渡大学。
- ICSQuartz: Scan Cycle-Aware and Vendor-Agnostic Fuzzing for Industrial Control Systems, 2025 - 首个原生支持IEC 61131-3结构化文本(ST,一种标准化可编程逻辑控制器编程语言)的模糊测试工具,[ISCQuartz](https://github.com/momalab/ICSQuartz) 已开源,作者来自纽约大学阿布扎比分校。
- MALintent: Coverage Guided Intent Fuzzing Framework for Android, 2025 - MALintent 是第一个对已编译的闭源 Android 应用程序应用灰盒模糊测试的 **Intent Fuzz** 工具,[已开源](https://github.com/sslab-gatech/MALintent)。MALintent 首先使用静态分析找到应用 Intent 相关组件,然后使用 Java Virtual Machine Tools Interface (JVMTI) 实现二进制插桩。实际上我们也有开发过类似的 Intent Fuzz,但是并没有使用覆盖反馈技术。因此,这里的插桩技术值得学习。作者来自佐治亚理工学院。
- Moneta: Ex-Vivo GPU Driver Fuzzing by Recalling In-Vivo Execution States, 2025 - 一个针对 GPU 的 Fuzz 方案,不需要物理设备,Moneta 未见开源,作者来自延世大学。
- DUMPLING: Fine-grained Differential JavaScript Engine Fuzzing, 2025 - 一个针对 V8 引擎的 JS Fuzzer。传统 JS Fuzzer 是对输入进行插桩,而 DUMPLING 直接对 JS 引擎插桩,粒度精细,[已开源](https://github.com/two-heart/dumpling-artifact-evaluation)。作者来自[洛桑联邦理工学院](http://www.baidu.com/link?url=Of8YlLI4kY82aXoBJ3qXHZIW4XzCtb69cuF4oCHoomcvVav1tM4xRjBM9zloiyew7ZVnF6QkeGcck-0SRwfmyPaTkZ2v9hz9xzURBTgFqHAgHStcP6HrkE4ued3xfskRNH56uzxZKsur9nJyeVU6pZuVxgPz1JX_4uWCNUHwxtC)。
- QMSan: Efficiently Detecting Uninitialized Memory Errors During Fuzzing, 2025 - 使用 QEMU 实现的专门针对未初始化内存漏洞的 Fuzzer,[QMSan](https://github.com/heinzeen/qmsan) 已开源,作者来自罗马第一大学。
- TWINFUZZ: Differential Testing of Video Hardware Acceleration Stacks, 2025 - 一种基于通过间接代理目标对硬件加速视频解码堆栈进行差异化测试的线束设计和测试技术。工具原型 [twinfuzz](https://github.com/CISPA-SysSec/twinfuzz) 已开源。作者来自CISPA 亥姆霍兹信息安全中心。
- Truman: Constructing Device Behavior Models from OS Drivers to Fuzz Virtual Devices, 2025 - 一个针对 QEMU 虚拟化设备进行 Fuzz 的工具,详细[中文解读](https://zhuanlan.zhihu.com/p/1892291730214199900),作者来自清华大学。
- QMSan: Efficiently Detecting Uninitialized Memory Errors During Fuzzing, 2025 - 使用 QEMU 实现的专门针对未初始化内存漏洞的 Fuzzer,[QMSan](https://github.com/heinzeen/qmsan) 已开源。
- TWINFuzz: Differential Testing of Video Hardware Acceleration Stacks, 2025 - 一种基于通过间接代理目标对硬件加速视频解码堆栈进行差异化测试的线束设计和测试技术。工具原型 [twinFuzz](https://github.com/CISPA-SysSec/twinFuzz) 已开源。
- Truman: Constructing Device Behavior Models from OS Drivers to Fuzz Virtual Devices, 2025 - 一个针对 QEMU 虚拟化设备进行 Fuzz 的工具,详细[中文解读](https://zhuanlan.zhihu.com/p/1892291730214199900)。
- FuzzUER: Enabling Fuzzing of UEFI Interfaces on EDK-2, 2025 - FuzzUER,这是一种用于 EDK-2(一种典型且广泛使用的 UEFI 实现)上 UEFI 接口的覆盖引导 Fuzz 测试技术,暂未见开源。
- ICSQuartz: Scan Cycle-Aware and Vendor-Agnostic Fuzzing for Industrial Control Systems, 2025 - 首个原生支持IEC 61131-3结构化文本(ST,一种标准化可编程逻辑控制器编程语言)的 Fuzz 测试工具,[ISCQuartz](https://github.com/momalab/ICSQuartz) 已开源。
- MALintent: Coverage Guided Intent Fuzzing Framework for Android, 2025 - MALintent 是第一个对已编译的闭源 Android 应用程序应用灰盒 Fuzz 测试的 **Intent Fuzz** 工具,[已开源](https://github.com/sslab-gatech/MALintent)。MALintent 首先使用静态分析找到应用 Intent 相关组件,然后使用 Java Virtual Machine Tools Interface (JVMTI) 实现二进制插桩。实际上我们也有开发过类似的 Intent Fuzz,但是并没有使用覆盖反馈技术。因此,这里的插桩技术值得学习。
- Automatic Library Fuzzing through API Relation Evolvement, 2025 - 通过 API 列表的组合调用进行测试。为了解决隐式API调用规范的问题提出了**关系学习阶段**,即通过更改 API 调用顺序观察执行状态的变化来推断API 关系。
- Blackbox Fuzzing of Distributed Systems with Multi-Dimensional Inputs and Symmetry-Based Feedback Pruning, 2025 - 第一个用于分布式系统的覆盖引导 Fuzzer,[DistFuzz 已开源](https://github.com/zouyonghao/DistFuzz)。
- DUMPLING: Fine-grained Differential JavaScript Engine Fuzzing, 2025 - 一个针对 V8 引擎的 JS Fuzzer。传统 JS Fuzzer 是对输入进行插桩,而 DUMPLING 直接对 JS 引擎插桩,粒度精细,[已开源](https://github.com/two-heart/dumpling-artifact-evaluation)。
- Moneta: Ex-Vivo GPU Driver Fuzzing by Recalling In-Vivo Execution States, 2025 - 一个针对 GPU 的 Fuzz 方案,不需要物理设备,Moneta 未见开源。
-
-
Books
- The Fuzzing Book
- The Fuzzing Book, 2019 - 该书以原理+代码练习为基础,从 0 到 1 完成一个 Fuzz 测试框架,结合实际的练习,如果想编写自己的测试框架,可以参考本书。
- Fuzzing for Software Security Testing and Quality Assurance, 2018 - 本书将 Fuzz 测试的思想引入软件开发生命周期,事实上很多高效的 Fuzzing 测试往往在开发阶段就已经考虑到,该书探讨了 Fuzz 工具的发展,不仅包括一些新兴开源工具,也涵盖诸多商用的 Fuzzer,如何为软件开发项目选择合适的 Fuzzer 也是本书的主题之一。
-
2 Articles&Papers