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 工具的博客,如果你有更多资源,欢迎贡献。
- The Fuzzing Book (2019):该书以原理+代码练习为基础,从 0 到 1 完成一个模糊测试框架,结合实际的练习,如果想编写自己的测试框架,可以参考本书。
- Fuzzing for Software Security Testing and Quality Assurance (2018):本书将模糊测试的思想引入软件开发生命周期,事实上很多高效的 fuzzing 测试往往在开发阶段就已经考虑到,该书探讨了 fuzz 工具的发展,不仅包括一些新兴开源工具,也涵盖诸多商用的 fuzzer,如何为软件开发项目选择合适的 fuzzer 也是本书的主题之一。
本章收录安全顶会和一些期刊上的经典论文,大而全不是我们的目的,只是想选择其中一些技术价值比较高或者比较新颖的文章,方便后续的学习。
- 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 工具的两个局限性,缺乏对程序的全面分析和缺乏有效的变异策略。通过深度学习提高覆盖率。
- Semantic-Informed Driver Fuzzing Without Both the Hardware Devices and the Emulators (2022): 西安交通大学 ,赵文佳 等人提出了一种无设备驱动程序模糊测试系统 DR .FUZZ,它不需要硬件设备对驱动程序进行 Fuzzing。DR .FUZZ 的核心是一种语义通知机制,它有效地生成输入以正确构造相关数据结构,以在驱动初始化时通过“验证链”,从而实现后续的无设备驱动程序模糊测试。
- MobFuzz: Adaptive Multi-objective Optimization in Gray-box Fuzzing (2022) : 国防科技大学 提出了一种用于多目标优化 (MOO) 的灰盒模糊器,称为 MobFuzz。
- FirmWire: Transparent Dynamic Analysis for Cellular Baseband Firmware (2022) : 美国佛罗里达大学开发的工具 FirmWire,是一个支持三星和联发科的全系统基带固件分析平台。它支持对基带固件映像进行模糊测试、模拟和调试。
- EMS: History-Driven Mutation for Coverage-based Fuzzing (2022): 浙江大学吕晨阳 提出的一种新颖的变异方案,通过分析历史测试用例,发现一些已经尝试过的用例仍有可能触发新的独特路径。提出了一种轻量级、高效的 Probabilistic Byte Orientation Model(PBOM)模型,基于此提出了一个新的历史驱动的变异框架 EMS,发现了多个新的 CVE。
- Context-Sensitive and Directional Concurrency Fuzzing for Data-Race Detection (2022) : 清华大学相关团队 开发了一个名为 CONZZER 的新型并发模糊测试框架,以有效地探索线程交错并检测难以发现的数据竞争。
- datAFLow: Towards a Data-Flow-Guided Fuzzer (2022): 澳大利亚国立大学 开发的 DATAFLOW,这是一个由轻量级数据流分析驱动的灰盒模糊器。
- Favocado: Fuzzing the Binding Code of JavaScript Engines Using Semantically Correct Test Cases, 2021:美国亚利桑那州立大学师生提出一种对 JS 引擎中绑定层代码进行 fuzzing 的工具:Favocado。作者在对在4个不同的JavaScript运行时系统fuzz时,发现了61个新的bug,其中33个是安全漏洞,13个已经被CVE收录。
- WINNIE : Fuzzing Windows Applications with Harness Synthesis and Fast Cloning, 2021: 利用合成和快速克隆对 Windows 应用程序进行模糊测试 , 佐治亚理工学院 的作者构建了一个端到端 WINNIE 系统,包含两个组件:可从二进制文件中自动合成工具的生成器,以及一个高效的 Windows forkserver。 对比工具: WinAFL 。
- PGFUZZ: Policy-Guided Fuzzing for Robotic Vehicles, 2021:普度大学 Hyungsub Kim 等人设计的一个针对机器车辆( Robotic vehicles, RVs)fuzzing 工具,即 PGFUZZ,应用场景较为有限。
- Reinforcement Learning-based Hierarchical Seed Scheduling for Greybox Fuzzing, 2021: 加州大学河滨分校 华人团队通过引入多级覆盖和设计了基于强化学习的分层调度器,保留更多有价值的种子。即更加细粒度衡量代码覆盖率和更加合理的种子调度策略。
- HFL: Hybrid Fuzzing on the Linux Kernel (2020):美国俄勒冈州立大学提出的一个新兴混合 fuzz 工具。据作者所属,HFL 代码覆盖率分别比 Moonshine 和 Syzkaller 高出15%和26%,并发现 20+ 个内核漏洞。该工具好像没有开源。
- HotFuzz: Discovering Algorithmic Denial-of-Service Vulnerabilities Through Guided Micro-Fuzzing (2020):美国波士顿大学开发的 HotFuzz,这是一个用于自动发现 Java 库中 AC (算法复杂性)漏洞框架 。
- Not All Coverage Measurements Are Equal: Fuzzing by Coverage Accounting for Input Prioritization (2020):中科院软件所开发的 TortoiseFuzz ,设计了一种新的模糊输入优化方案,发现了 20+ 0 day 漏洞。
- PeriScope: An Effective Probing and Fuzzing Framework for the Hardware-OS Boundary (2019):加州大学研发的一个名为 PeriScope 的 fuzz 工具,主要针对内核与硬件的边界部分,该工具好像没有开源。
- INSTRIM: Lightweight Instrumentation for Coverage-guided Fuzzing (2018):台湾大学,学术研究,探讨了覆盖导向模糊的轻量级检测方法。
- [IOTFUZZER: Discovering Memory Corruptions in IoT Through App-based Fuzzing](### 固件) (2018):见固件章节。
- What You Corrupt Is Not What You Crash: Challenges in Fuzzing Embedded Devices:嵌入式固件 fuzzing 的一些难点,固件的 fuzz 往往得不到反馈,该论文基于Avatar 和 PANDA 设计了六种不同启发式算法,提高嵌入式系统 fuzz 效率。
- Enhancing Memory Error Detection for Large-Scale Applications and Fuzz Testing (2018):韩国科学技术研究院对内存错误检测算法的研究。
- DELTA: A Security Assessment Framework for Software-Defined Networks (2017):韩国科学技术研究院对 SDN 设计的安全评估框架。
- SyzScope: Revealing High-Risk Security Impacts of Fuzzer-Exposed Bugs inLinux kernel, 2022: 加利福尼亚大学河滨分校 Xiaochen Zou 等人开发了 SyzScope,用于评估内核 bug 的影响等级。
- Constraint-guided Directed Greybox Fuzzing, 2021:首尔国立大学学者提出了约束引导的定向灰盒模糊测试( constraint-guided DGF ), 满足一系列约束而不仅仅是到达目标点,将约束定义为目标点和数据条件的组合,并按指定顺序驱动种子满足约束。
- UNIFUZZ: A Holistic and Pragmatic Metrics-Driven Platform for Evaluating Fuzzers, 2021:浙江大学提出一个指标驱动的 fuzzer 评估平台, 设计和开发了 UNIFUZZ,这是一个开源和指标驱动的平台,用于以全面和定量的方式评估模糊器。具体而言,UNIFUZZ 迄今为止已经整合了 35 个可用的模糊器、20 个真实世界程序的基准和六类性能指标,没有发现工具开源地址。
- Nyx: Greybox Hypervisor Fuzzing using Fast Snapshots and Affine Types, 2021:德国波鸿鲁尔大学设计并实现了 RUB-SysSec/Nyx,用于在云端虚拟机管理程序进行 fuzzing,这是一种高度优化、覆盖引导的虚拟机管理程序模糊器。
- Breaking Through Binaries: Compiler-quality Instrumentation for Better Binary-only Fuzzing, 2021: 弗吉尼亚理工大学 Stefan Nagy 等人研究实现了编译器级别的纯黑盒二进制 fuzzing 工具,即 ZAFL,一个将编译器 fuzzing 属性移植到二进制的工具。
- The Use of Likely Invariants as Feedback for Fuzzers, 2021: 法国通信系统工程师学校与研究中心 提出了一种新的反馈机制,通过考虑程序变量和常量之间的关系来增加代码覆盖率。在名为 eurecom-s3/invscov 的原型中实现了该技术,该原型基于 LLVM 以及 AFL++。
- Analysis of DTLS Implementations Using Protocol State Fuzzing (2020):瑞典乌普萨拉大学 对 DTLS 实现的首次全面分析,提出的 TLS-Attacker 是一个用于分析TLS实现的开源框架。
- EcoFuzz: Adaptive Energy-Saving Greybox Fuzzing as a Variant of the Adversarial Multi-Armed Bandit (2020): EcoFuzz 是国防科技大学师生开发的基于 AFL 的自适应节能灰盒模糊器。 基于AFL 的基础上,开发了独特的自适应调度算法以及基于概率的搜索策略,根据结果,EcoFuzz 可以减少 AFL 32%的用例,从而达到 AFL 214%的路径覆盖率。
- FANS: Fuzzing Android Native System Services via Automated Interface Analysis (2020):清华大学张超团队联合 360 提出了一种基于自动生成的模糊测试解决方案 FANS,以查找 Android 系统原生服务中的漏洞,作者刘保证开发的 Native Service Fuzz 工具 fans 开源连接,能够根据源码自动推测 Native Service 的接口和入参,进行 fuzzing,工具的限制是需要 AOSP 的编译环境。
- Fuzzing Error Handling Code using Context-Sensitive Software Fault Injection (2020): 清华大学蒋祖明和白佳举提出了一个名为 FIFUZZ 的新模糊测试框架,检测异常处理。FIFUZZ 的核心是上下文相关的软件故障注入(SFI)方法,该方法可以有效地覆盖不同调用上下文中的错误处理代码,以查找隐藏在具有复杂上下文的错误处理代码中的深层错误。
- FuzzGen: Automatic Fuzzer Generation, 2020: Kyriakos Ispoglou 等人提出的对库接口进行分析的工具。 这是一种用于在给定环境中自动合成复杂库的模糊器的工具。FuzzGen 利用整个系统分析来推断库的接口,并专门为该库合成模糊器。FuzzGen 不需要人工干预,可以应用于各种库。此外,生成的模糊器利用LibFuzzer 来实现更好的代码覆盖率并暴露库深处的错误。
- GREYONE: Data Flow Sensitive Fuzzing, 2020:清华大学张超团队提出的另外一个一种数据流敏感的模糊解决方案 GREYONE。思想可观,由于并没有开源,落地比较困难。
- Fuzzification: Anti-Fuzzing Techniques, 2019: 佐治亚理工学院 学者提出的一个对抗 fuzzing 的手段,主要是防止安全人员对自己的产品进行 fuzzing,这个视角比较新颖,值得一看。
- AntiFuzz: Impeding Fuzzing Audits of Binary Executables, 2019:同样是一个对抗 fuzzing 的方案,只不过引入了 不同的技术保护二进制可执行文件,防止被 fuzzing。
- MoonShine: Optimizing OS Fuzzer Seed Selection with Trace Distillation, 2018:哥伦比亚大学团队开发的 MoonShine,这是一种新颖的策略,可从真实程序的系统调用中提取 fuzz 种子。作为对 Syzkaller 的扩展, MoonShin 能够将 Syzkaller 的 Linux 内核代码覆盖率平均提高 13%。
- QSYM : A Practical Concolic Execution Engine Tailored for Hybrid Fuzzing, 2018:佐治亚理工学院 学者设计了一种快速的,称为 QSYM 的 Conolic 执行引擎,支持混合 fuzzing。
- OSS-Fuzz - Google's continuous fuzzing service for open source software, 2017:谷歌的 OSS-Fuzz 框架,没什么好说的,主要是帮助开发人员在开发阶段引入的框架,继承多个 fuzz 工具。
- kAFL: Hardware-Assisted Feedback Fuzzing for OS Kernels, 2017:对于内核的 fuzzing,崩溃往往会导致系统重启,内核中的任意一个错误都可能带来深远影响。 波鸿鲁尔大学的谢尔盖·舒米舒等人提出的独立于操作系统和硬件辅助的方式解决了覆盖指导的内核模糊问题:利用虚拟机管理程序和英特尔的 Processor Trace(PT)技术。
- BEACON: Directed Grey-Box Fuzzing with Provable Path Pruning, 2022:香港科技大学 Heqing Huang 等人实现的一种称之为 BEACON 的定向模糊测试。这是基于 LLVM 灰盒 Fuzzer,需要将输入源代码编译为 LLVM 位代码,进行静态分析。分析后插桩,LLVM 位代码被编译为可执行二进制文件,可以与各种模糊引擎集成。未见开源。
- DiFuzzRTL: Differential Fuzz Testing to Find CPU Bugs, 2021:韩国首尔大学,DifuzzRTL,一种专门发现 CPU RTL 漏洞的 fuzz 工具,已开源。
- StochFuzz: Sound and Cost-effective Fuzzing of Stripped Binaries by Incremental and Stochastic Rewriting, 2021: 普渡大学及中国人民大学的华人团队开发了一种新的 fuzz 技术,被称为 incremental and stochastic rewriting ,优于 afl-unicorn,利用更低的开销,提高了黑盒二进制 fuzzing 的效率,相关工具已开源:ZhangZhuoSJTU/StochFuzz。
- NtFuzz: Enabling Type-Aware Kernel Fuzzing on Windows with Static Binary Analysis, 2021: 韩国科学技术院 (KAIST) Jaeseung Cho 等人提出的一个静态二进制分析器,可以自动推断出 Windows 系统调用,该分析器被整合到 SoftSec-KAIST/NTFuzz,一个 Windows 系统调用 fuzzing 框架,首次将静态二进制分析技术与 Windows 内核的 fuzzing 技术相结合。
- Diane: Identifying Fuzzing Triggers in Apps to Generate Under-constrained Inputs for IoT Devices, 2021: 加州大学圣巴巴拉分校 Nilo Redini 等人通过使用网络流量和控制目标物联网设备的应用程序的混合分析来解决输入生成问题 ,工具名为 ucsb-seclab/diane,已开源, 与 IoTFuzzer 较为相似,弥补了 IoTFuzzer 的一些缺点。
- One Engine to Fuzz 'em All: Generic Language Processor Testing with Semantic Validation, 2021: 佐治亚理工学院 Yongheng Chen 等人提出了一个通用 fuzzing 框架(s3team/Polyglot ),目的是为了探索不同编程语言的处理器而生成高质量的模糊测试用例,实现各个语言之间的通用性和适用性。 相比于当前最先进的通用型 fuzz:包括基于变异的 fuzzer AFL 以及混合型 fuzzer QSYM 和基于语法的 fuzzer Nautilus 能够更有效地生成高质量的测试用例。
- 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 架构,必须包含符号表等。
- Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing, 2019: 弗吉尼亚理工大学 ,创建了一个基于静态二进制工具或 Dyninst 的实现,称为 UnTracer ,该工具能够降低 fuzzing 开销,从而提高速度。
- Fuzzing File Systems via Two-Dimensional Input Space Exploration, 2019: 本文的作者佐治亚理工学院的许文及作者所在的研究组,长期从事二进制相关研究。 本工作实现了一个基于反馈进化的 fuzzer——JANUS,通用文件系统 fuzzer,可以高效的探索文件系统的两个维度的输入空间。
- NEUZZ: Efficient Fuzzing with Neural Program Smoothing, 2019: 哥伦比亚大学落地项目,利用神经网络来模拟程序的分支行为。 neuzz 通过有策略地修改现有 seeds 的一些 bytes 以期来产生 interesting seeds 从而能触发未执行过的 edge。而这个策略要借助神经网络才能得以具体实施。
- Razzer: Finding Kernel Race Bugs through Fuzzing, 2019:韩国科学技术院 (KAIST) DR Jeong 设计并提出了针对内核中的数据竞争类型漏洞的模糊测试(fuzzing)工具 Razzer 。 Razzer 的两阶段模糊测试基于Syzkaller。确定性调度程序是使用 QEMU / KVM 实现的。
- Angora: Efficient Fuzzing by Principled Search, 2018:上海交通大学 peng chen 等人开发的 Angora,主要目标是提高分支覆盖率,不使用符号执行的方法来解决路径约束 。 该工具目前活跃度较高,一直处于稳定更新中。
- CollAFL: Path Sensitive Fuzzing, 2018:清华大学张超团队对AFL中的 coverage inaccuracy 和 seed 选择策略做了改进,改进后的工具称为 CollAFL。
- T-Fuzz: fuzzing by program transformation, 2018: Purdue University 的 Peng Hui 等人研发的 T-fuzz 通过去掉 santiy check 来提高覆盖率。T-fuzz 利用覆盖率来引导产生输入。当不能访问到新的路径时,T-fuzz会去掉 check,以保证 fuzz 能继续进行,发现新的路径和 bug。
- Skyfire: Data-Driven Seed Generation for Fuzzing, 2017: 针对处理高度结构化输入的程序(比如解析XML的引擎程序),本文提出了一种种子生成方法,通过大量样本训练带概率的上下文有关文法,通过训练好的文法,自动生成符合程序输入要求的种子,用于后续的Fuzz。
- Favocado: Fuzzing the Binding Code of JavaScript Engines Using Semantically Correct Test Cases, 2021:美国亚利桑那州立大学师生提出一种对 JS 引擎中绑定层代码进行 fuzzing 的工具:Favocado。作者在对在4个不同的JavaScript运行时系统fuzz时,发现了61个新的bug,其中33个是安全漏洞,13个已经被CVE收录。
- WINNIE : Fuzzing Windows Applications with Harness Synthesis and Fast Cloning, 2021: 利用合成和快速克隆对 Windows 应用程序进行模糊测试 , 佐治亚理工学院 的作者构建了一个端到端 WINNIE 系统,包含两个组件:可从二进制文件中自动合成工具的生成器,以及一个高效的 Windows forkserver。 对比工具: WinAFL 。
- PGFUZZ: Policy-Guided Fuzzing for Robotic Vehicles, 2021:普度大学 Hyungsub Kim 等人设计的一个针对机器车辆( Robotic vehicles, RVs)fuzzing 工具,即 PGFUZZ,应用场景较为有限。
- Reinforcement Learning-based Hierarchical Seed Scheduling for Greybox Fuzzing, 2021: 加州大学河滨分校 华人团队通过引入多级覆盖和设计了基于强化学习的分层调度器,保留更多有价值的种子。即更加细粒度衡量代码覆盖率和更加合理的种子调度策略。
- DIFUZE: Interface Aware Fuzzing for Kernel Drivers, 2017 : 圣塔芭芭拉大学的 Jake Corina 等提出的一个 seed 生成方案。通过优化种子生成,同样也可以达到提高 fuzzing 效率的效果。经过验证,DIFUZE 相较于现有的 fuzzer 在 ioctl() 接口上,确实存在着明显的优势。这也是显然的,DIFUZE 相较于其他的工具在 fuzzing这样一个需要超大信息量的接口上提供了足够的信息,支撑它挖掘出大于其他工具几个数量级的信息量。
- Learning to Fuzz from Symbolic Execution with Application to Smart Contracts, 2019:苏黎世联邦理工学院 Jingxuan He 等人提出了一种从符号执行中学习 fuzzer 的新方法,将其应用于智能合约中。
- Matryoshka: fuzzing deeply nested branches, 2019: 字节跳动人工智能实验室,灰盒fuzz近年来取得了令人瞩目的进展,从基于启发式的随机变异进化到求解单个分支约束。但是,它们很难解决包含深度嵌套条件语句的路径约束。作者开发了一个工具 Matryoshka1 实现深层次嵌套路径的覆盖。
- Hawkeye: Towards a Desired Directed Grey-box Fuzzer, 2018:新加坡南洋理工大学,Hawkeye 是一个定向模糊测试技术,本文提出 4 个定向型 fuzzer 的特性并进行改进:考虑所有到达目标点的路径,不管长短;平衡静态分析的开销和实用性;合理分配能量;适应性变异策略。
- IMF: Inferred Model-based Fuzzer, 2017:现有的内核模糊技术涉及将随机输入值输入到内核 API 函数中。然而,这样一个简单方法并没有揭示内核代码深处潜在的 bug,作者提出 IMF 模型,利用API函数调用之间的推断依赖模型来发现内核的深层缺陷。
- SemFuzz: Semantics-based Automatic Generation of Proof-of-Concept Exploits, 2017: 印第安纳大学伯明顿分校华人研发的 SemFuzz,这是一种利用漏洞相关文本(如 CVE 报告和 Linux git 日志)来指导 PoC 攻击自动生成的新技术。
- Directed Greybox Fuzzing, 2017: 2017 年 Bohme 提出了 DGF 的概念,并且完成了名为 AFLGo 的工具,即定向模糊测试。
- SlowFuzz: Automated Domain-Independent Detection of Algorithmic Complexity Vulnerabilities, 2017:主要讲述 fuzzing 中正则表达式带来的问题,并实现了相应的改进算法。
- DIFUZE: Interface Aware Fuzzing for Kernel Drivers, 2017: 圣塔芭芭拉大学的 Jake Corina 设计并完成了针对用户态与内核驱动关键接口 ioctl() 的 fuzzing 工具 DIFUZE, DIFUZE 首先对内核代码进行静态分析,完成interface 的 recovery,获取 interface 的关键信息,并基于这些有效的信息去生成更加合理的 fuzzing 输入,得到一个更好的 fuzzing 效果。
这里收录常见并且实用的工具,多数工具经过笔者实践,具有一定的普适性。也有一些优秀但是很久没有维护更新,并且适用场景非常有限的工具,未包含在其中。
- Radamsa :Radamsa 是用于健壮性测试的测试用例生成器。通过读取有效数据的样本文件并从中生成令人感兴趣的不同输出来工作。
- zzuf :一个 fuzzer 的输入程序,作为一个优秀的开源项目,已经有不少国外的大型项目引入 zzuf,作为各种畸形数据的生成。
- afl-unicorn: Fuzzing The 'Unfuzzable' : Battelle 在 ShmooCon 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)二进制代码的符号执行工具
- 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 工具,用法简单,通过让浏览器访问生成各种随机的前端页面,观察浏览器的状态。
- IOTFUZZER: Discovering Memory Corruptions in IoT Through App-based Fuzzing:香港大学 Jiongyi Chen 发表在 NDSS 2018 上的一篇关于固件 fuzzing 的文章,作者借助 IoT 设备的移动端 App 设计了一个黑盒模糊测试工具 IOTFuzzer 分析 IoT 设备上的内存错误漏洞。通过测试了 17 个不同的 IoT 设备,最终发现 15 个内存错误漏洞,其中包括了 8 个未知的漏洞。
- FIRM-AFL: High-Throughput Greybox Fuzzing of IoT Firmware via Augmented Process Emulation:由中科院信工所 Yaowen Zheng 发表在 USENIX Security '19 , FIRM-AFL 是第一个用于物联网固件的高质量灰盒模糊器,此工具的劣势在于只能 fuzz Firmadyne 能够正常模拟的固件。
- FIRMCORN: Vulnerability-Oriented Fuzzing of IoT Firmware via Optimized Virtual Execution:发表在 IEEE Access 2020 年的期刊上,作为基于优化虚拟执行的 IoT 固件模糊测试框架 FIRMCORN,作者声称是首次面向 IoT 固件的模糊测试框架。
如果不想看这么多理论知识,只是想快速将工具运用于实际项目中,直接参考以下博客,即可对各种 fuzzing 工具快速入门。
AFL
- AFL漏洞挖掘技术漫谈(一):用AFL开始你的第一次Fuzzing
- AFL漏洞挖掘技术漫谈(二):Fuzz结果分析和代码覆盖率
- 深入分析 afl / qemu-mode(qemu模式) / afl-unicorn 编译及安装存在的问题以及相应的解决方案
- AFL二三事——源码分析(上篇)
- AFL二三事——源码分析(下篇)
boofuzz
libfuzzer
Peach
内核 fuzz
- 内核漏洞挖掘技术系列(1)——trinity
- 内核漏洞挖掘技术系列(2)——bochspwn
- 内核漏洞挖掘技术系列(3)——bochspwn-reloaded(1)
- 内核漏洞挖掘技术系列(3)——bochspwn-reloaded(2)
- 内核漏洞挖掘技术系列(4)——syzkaller(1) - syzkaller源码分析系列文章
- Syzkaller入门知识总结 - syzkaller 入门
- 从0开始Fuzzing之旅: 使用Syzkaller进行Linux驱动漏洞挖掘 - Android 模拟器内核
- 从0到1开始使用syzkaller进行Linux内核漏洞挖掘 - Linux 内核
- Fuzzing a Pixel 3a Kernel with Syzkaller - Android 手机
其他
- 基于 Unicorn 和 LibFuzzer 的模拟执行 fuzzing (2019): 银河实验室对基于 unicorn 的模拟执行 fuzzing 技术进行了研究。在上次研究的基础上,进一步整合解决了部分问题,初步实现了基于 Unicorn 和 LibFuzzer 的模拟执行fuzzing 工具:uniFuzzer
如果你看到了认为比较好的有关模糊测试的资源,欢迎贡献本项目!请阅读贡献指南。
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。