Fuzzing(模糊测试)是一种自动化软件测试技术,通过向程序输入大量随机或半随机的数据,以触发异常行为、崩溃或安全漏洞,从而发现潜在缺陷。
什么是 Fuzzing
Fuzzing 的核心思想是“用无效、意外或随机数据作为输入,观察系统是否出现异常”。它最早由威斯康星大学的 Barton Miller 教授于 1988 年提出,如今已成为软件安全测试和质量保障的重要手段。模糊测试特别适用于检测内存安全问题(如缓冲区溢出、空指针解引用)、逻辑错误以及协议实现中的边界条件缺陷。
Fuzzing 的类型
根据测试策略和对被测程序的了解程度,Fuzzing 主要分为以下几类:
- 黑盒 Fuzzing:不依赖程序内部结构,仅基于输入格式进行随机变异。
- 白盒 Fuzzing:利用程序源代码或二进制分析,结合符号执行等技术,智能生成能覆盖更多路径的测试用例。
- 灰盒 Fuzzing:介于两者之间,通常通过插桩(instrumentation)收集运行时反馈(如代码覆盖率),指导输入生成。代表工具如 AFL(American Fuzzy Lop)就属于此类。
Fuzzing 的优势与局限
优势
- 自动化程度高,可长时间运行发现深层 bug。
- 对内存安全漏洞敏感,常用于发现零日漏洞。
- 无需完整规格说明,适用于闭源或复杂系统。
局限
- 难以覆盖特定逻辑分支,尤其在缺乏反馈机制时。
- 可能产生大量重复或无效测试用例,效率受限。
- 对某些类型的问题(如业务逻辑错误)效果有限。
常见 Fuzzing 工具
目前业界广泛使用的模糊测试工具包括:
- AFL / AFL++:高效的灰盒模糊器,支持多种语言和平台。
- libFuzzer:集成于 LLVM 的进程内模糊器,适用于 C/C++ 项目。
- Honggfuzz:支持多平台、多模式的模糊测试框架。
- Syzkaller:专为操作系统内核(如 Linux)设计的模糊器。
这些工具已帮助发现数以万计的安全漏洞,成为现代软件开发生命周期中不可或缺的一环。





湘公网安备43019002001288号