Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

fuzzing-tutorial

fuzzing 从入门到进阶,这里收录了经典的 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 等软件。

NDSS

USENIX Security

IEEE S&P

ACM CCS

  • 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 效果。

3 Tools

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

变异器

  • 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)二进制代码的符号执行工具

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

其他

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors