8.3 改进你的 Fuzzer

虽然我们已经创建了一个 fuzzer,而且只要能够给它提供足够多的时间,它就能找出一 些 bug。但是在通往强大的路还很长很长。

8.3.1 Code Coverage

Code coverage 是一个度量,通过统计测试目标程序的过程中,执行了函数。Fuzzing 专家 Charlie Miller 通过经验证明,寻找到的 bug 数量和 Code coverage 的增长成正比。那 我们怎么证明呢!最简单的方法就是,在你 fuzz 目标程序的时候,使用调试器在目标进程 上的说有函数上设置断点,然后使用不同的测试案例去 fuzz 目标进程,根据找到 bug 和击 中的函数数量,你就会知道自己的 fuzz 的效率。还有更多的使用 Code coverage 的复杂的例 子,你可以将它们的技术加入你的 file fuzzer。

8.3.2 Automated Static Analysis

通 过 对 二 进 制 文 件 进 行 Automated Static Analysis( 自 动 化 的 静 态 分 析 ) , 能 够 帮 助 bughunter 更高效的找出目标代码的弱点。跟踪容易出错的函数(例如 strcpy),并且监视函 数的执行过程,会有很好的效果。还有很多别的优点,比如跟踪内部的内存拷贝操作,忽略 不必要的错误处理代码,等等。对目标将程序了解的越多,找出 bug 的机会就越大。

将这些功能加入我们创建的 fuzzer,会很大的提高我们今后的工作效率。在我们设计 fuzzer 的时候扩展性是非常重要的,在以后不断的功能扩张中,你会感谢今天花在前端设计 上的时间,是多么的值得。接下来让我们看看一个基于 Python 的 fuzzing 框架(Pedram Amini, Aaron Portnoy of TippingPoint)。之后我们会深入介绍我的一个 fuzzer 作品 ioctlizer,用于 查找使用了 I/O 控制代码的 Windows 驱动中的漏洞。