应用安全
覆盖率引导模糊测试
别称: 灰盒模糊测试, 反馈驱动模糊测试
定义
通过插桩目标程序、测量代码覆盖率,并演化能够触达新路径的输入,从而显著提升缺陷发现效率的模糊测试技术。
覆盖率引导模糊测试通过编译期插桩或动态二进制翻译对目标程序进行插桩,在运行候选输入时收集分支或基本块覆盖信息。能带来新覆盖的输入会被保留并继续变异,通过进化算法使语料库逐渐覆盖更难触达的代码。AFL 开创、AFL++、libFuzzer 与 Honggfuzz 等不断改进的反馈循环,在真实软件上比纯随机 fuzz 高出数量级的效率。Google OSS-Fuzz 等项目即基于此持续运行,已在开源项目中发现数万个缺陷。
示例
- 用 AFL++ 插桩编译一个 C 语言解析器,然后用 afl-fuzz 不断扩展覆盖率驱动的语料库。
- libFuzzer 通过 SanitizerCoverage 演化输入,对一个 Rust crate 进行模糊测试。