多少次模糊测试就足够了?

信息安全 应用安全 自动化测试 模糊测试
2021-08-16 12:56:51

Fuzzing 是一种方便、相对低成本的方法来检测某些类型的漏洞,尤其是在 C/C++ 代码中。

我的问题:多少模糊测试就足够了?是否有任何标准或最佳实践?

示例:Microsoft 的 SDL 要求对解析基于文件的输入的安全敏感代码应用模糊测试。SDL 需要至少 500,000 次模糊测试迭代,以及至少 250,000 次“干净”迭代。这里有一个引用。 任何发现安全漏洞的模糊迭代都会将“干净”迭代的计数重置为零。)SDL 还要求对所有网络数据进行至少 100,000 次迭代的模糊测试。这里是引文。

有谁知道其他指南或其他组织使用的标准?

1个回答

我没有给你的数字,也没有具体的指导方针,但我认为需要指出但在这些链接中没有充分强调的一个重要问题是代码覆盖率。

从代码路径的角度来看,如果它们都是相似的,那么运行大量的模糊迭代是没有意义的。
也就是说,“dumb fuzzing”可能会生成许多不同的输入(文件/网络/RPC/其他),它们看起来完全不同,但对代码都有相同的影响,导致程序采用相同的代码路径。显然,这不是很有效。

微软还开发了实现“智能模糊测试”的内部工具(我知道 FuzzGuru)。(参见几年前讨论它的这个谈话)。这使 MS 能够以更少的迭代次数(当然是非正式的)运行更有效的模糊测试——仅仅是因为它们可以确保每次迭代的代码覆盖率更高。

在任何情况下,结合代码覆盖工具进行模糊测试(无论是“智能”还是“愚蠢”)都很重要,以确保您从模糊测试工作中获得适当的价值。