模糊测试教程

什么是模糊测试?

模糊测试或模糊化是一种软件测试技术,通过将称为 FUZZ 的无效或随机数据输入软件系统,以发现编码错误和安全漏洞。模糊测试的目的是使用自动化或半自动化技术插入数据,并测试系统是否存在各种异常,例如系统崩溃或内置代码失败等。

模糊测试最初由 Barton Miller 于 1989 年在威斯康星大学开发。模糊测试或模糊化是一种软件测试技术,属于安全测试的一种。

Fuzz Testing

为什么进行模糊测试?

  • 通常,模糊测试能发现最严重的安全故障或缺陷。
  • 模糊测试与黑盒测试、Beta 测试和其他调试方法结合使用时,效果更佳。
  • 模糊测试用于检查软件的漏洞。它是一种非常经济高效的测试技术。
  • 模糊测试是黑盒测试技术之一。模糊化是黑客用来发现系统漏洞最常用的方法之一。

如何进行模糊测试

模糊测试的步骤包括基本的测试步骤:

步骤 1) 识别目标系统

步骤 2) 识别输入

步骤 3) 生成模糊数据

步骤 4) 使用模糊数据执行测试

步骤 5) 监控系统行为

步骤 6) 记录缺陷

模糊器示例

  • 基于变异的模糊器通过更改现有数据样本来创建新的测试数据。这是一种非常简单直接的方法,它从有效的协议样本开始,并不断篡改每个字节或文件。
  • 基于生成的模糊器根据模型输入定义新数据。它根据规范从头开始生成输入。
  • 基于协议的模糊器,最成功的模糊器是对正在测试的协议格式有详细的了解。理解取决于规范。它涉及将规范数组写入工具,然后使用基于模型的测试生成技术遍历规范并在数据内容、序列等方面添加不规则性。这也称为语法测试、语法测试、鲁棒性测试等。模糊器可以从现有测试用例生成测试用例,也可以使用有效或无效的输入。

基于协议的模糊测试存在两个限制:

  1. 在规范成熟之前,测试无法进行。
  2. 许多有用的协议是已发布协议的扩展。如果模糊测试基于已发布的规范,则新协议的测试覆盖率将受到限制。

最简单的模糊测试技术是将随机输入作为协议包或事件发送到软件。这种传递随机输入的技术在许多应用程序和服务中发现错误非常有效。还有其他技术可用,并且非常容易实现。要实现这些技术,我们只需更改现有输入。我们可以通过交换输入位来更改输入。

模糊测试检测到的错误类型

  • 断言失败和内存泄漏这种方法广泛用于大型应用程序,其中错误会影响内存的安全性,这是一种严重漏洞。
  • 无效输入在模糊测试中,模糊器用于生成无效输入,该输入用于测试错误处理例程,这对于不控制其输入的软件很重要。简单的模糊测试可以看作是一种自动化负面测试的方法。
  • 正确性错误模糊测试也可用于检测某些类型的“正确性”错误。例如,损坏的数据库、糟糕的搜索结果等。

模糊测试工具

用于网络安全的工具可以广泛用于模糊测试,例如 Burp Suite、Peach Fuzzer 等。

  • Peach Fuzzer:Peach Fuzzer 提供了比扫描器更强大的鲁棒性和安全覆盖。其他测试工具只能搜索已知线程,而 Peach Fuzzer 使S用户能够找到已知和未知线程。
  • Spike Proxy:它是一款专业级工具,用于查找 Web 应用程序中的应用程序级别漏洞。SPIKE Proxy 涵盖了基础知识,例如SQL注入和跨站点脚本,但它是一个完全开放的Python基础设施。SPIKE Proxy 适用于Linux和 Windows。
  • Webscarab:Webscarab 用 Java 编写,因此可移植到许多平台。Webscarab 框架用于分析使用 HTTP 和 HTTPS 协议通信的应用程序。例如:Webscarab 充当拦截代理,允许操作员在服务器接收之前审查和修改浏览器创建的请求。并允许在浏览器接收之前审查和更新服务器生成的响应。通过这种方式,如果 Webscarab 发现任何漏洞,它将列出报告的问题。
  • OWASP WSFuzzer:WSFuzzer 是一个用 Python 编写的 GPL 许可程序。GPL 许可程序目前以 Web 服务为目标。在当前版本的 OWASPWSFuzzer 中,基于 HTTP 的 SOAP 服务是主要目标。

模糊测试的优点

  • 模糊测试提高了软件安全测试的效率。
  • 模糊测试发现的错误有时很严重,而且大多被黑客利用,包括崩溃、内存泄漏、未处理的异常等。
  • 如果由于时间和资源的限制,测试人员未能发现任何错误,这些错误也会在模糊测试中被发现。

模糊测试的缺点

  • 模糊测试单独无法提供整体安全威胁或错误的完整情况。
  • 模糊测试对于处理不会导致程序崩溃的安全威胁(例如某些病毒、蠕虫、特洛伊木马等)效果不佳。
  • 模糊测试只能检测简单的故障或威胁。
  • 为了有效执行,它将需要大量时间。
  • 使用随机输入设置边界值条件非常麻烦,但现在大多数测试人员都使用基于用户输入的确定性算法解决了这个问题。

摘要

在软件工程中,模糊测试显示了应用程序中存在错误。模糊测试不能保证完全检测应用程序中的错误。但是,通过使用模糊技术,它可以确保应用程序的健壮性和安全性,因为此技术有助于暴露大多数常见漏洞。