模糊测试
本文约需 2 分钟阅读
模糊测试 (Fuzzing) 是一种安全测试方法,通过向软件自动输入大量随机或半随机数据,发现引发崩溃或异常行为的输入模式。在 Google 的 OSS-Fuzz 项目中,通过对开源软件进行持续模糊测试已发现 10,000 多个漏洞,截至 2025 年已有 1,000 多个项目参与其中。
现场使用案例
“在更新图像处理库之前,我们用 AFL++ 进行了 48 小时的模糊测试。发现了 3 个会在 JPEG 解析器中引发堆缓冲区溢出的输入模式,并在发布前完成了修复。”
模糊测试流程
准备种子输入 (正常的测试数据)
模糊器随机变异输入 (位翻转、插入、删除)
将变异后的输入投入目标程序
反馈覆盖率信息 (发现新的代码路径)
记录并分类崩溃、挂起和异常行为
模糊测试的种类
模糊测试大致分为三种。黑盒模糊测试是在不了解程序内部结构的情况下生成随机输入的最简单方法。白盒模糊测试通过分析源代码来生成使代码覆盖率最大化的输入。灰盒模糊测试通过反馈运行时的覆盖率信息来演化输入,AFL (American Fuzzy Lop) 和 libFuzzer 为代表。与渗透测试相结合,可以实现更全面的漏洞发现。模糊测试入门书 (Amazon)可供系统性学习。
实务中的应用
模糊测试对处理外部输入的代码尤为有效,例如解析器 (JSON、XML、图像格式)、网络协议处理、文件输入输出等。将模糊测试集成到 CI/CD 流水线中持续执行的「持续模糊测试 (Continuous Fuzzing)」是近年的趋势,与安全编码相结合可提高开发阶段的漏洞检出率。请用强随机密码保护模糊测试环境和 CI/CD 系统的访问权限,防止测试结果被篡改。安全测试相关书籍 (Amazon)也很有参考价值。
这篇文章对您有帮助吗?