模糊测试(Fuzzing)教程
什么是模糊测试?
模糊测试 模糊测试是一种软件测试技术,将无效或随机数据(称为 FUZZ)放入软件系统中,以发现编码错误和安全漏洞。模糊测试的目的是使用自动或半自动技术插入数据,并测试系统是否存在各种异常,如系统崩溃或内置代码故障等。
模糊测试最初由威斯康星大学的 Barton Miller 于 1989 年开发。模糊测试或模糊测试是一种软件测试技术,它是一种 安全测试.
为什么要做模糊测试?
- 通常,模糊测试可以发现最严重的安全故障或缺陷。
- 模糊测试与以下方法结合使用时可获得更有效的结果 黑色 Box 测试、Beta 测试和其他调试方法。
- 模糊测试用于检查软件的漏洞。这是一种非常经济有效的测试技术。
- 模糊测试是黑盒测试技术之一。模糊测试是黑客用来查找系统漏洞的最常用方法之一。
如何进行模糊测试
模糊测试的步骤包括基本测试步骤-
步骤1) 识别目标系统
步骤2) 识别输入
步骤3) 生成模糊测试数据
步骤4) 使用模糊数据执行测试
步骤5) 监视系统行为
步骤6) 记录缺陷
模糊测试器示例
- 基于变异的模糊测试器 修改现有数据样本以创建新的测试数据。这是非常简单直接的方法,从有效的协议样本开始,然后不断破坏每个字节或文件。
- 基于生成的模糊测试器 根据模型的输入定义新数据。它根据规范从头开始生成输入。
- 基于协议的模糊测试器,最成功的模糊测试器必须对被测试的协议格式有详细的了解。理解取决于规范。它涉及将规范的数组写入工具,然后使用基于模型的测试生成技术检查规范并在数据内容、序列等中添加不规则性。这也称为语法测试、语法测试、稳健性测试等。模糊测试器可以从现有的测试用例中生成测试用例,或者它们可以使用有效或无效的输入。
基于协议的模糊测试有两个局限性:
- 在规范成熟之前,测试无法进行。
- 许多有用的协议都是已发布协议的扩展。如果模糊测试基于已发布的规范, 测试覆盖率 新协议的使用将受到限制。
最简单的模糊测试技术是将随机输入作为协议数据包或事件发送到软件。这种传递随机输入的技术对于发现许多应用程序和服务中的错误非常有用。还有其他技术可用,而且非常容易实现。要实现这些技术,我们只需要更改现有的输入。我们只需交换输入的位即可更改输入。
模糊测试检测到的错误类型
- 断言失败和内存泄漏 这种方法广泛应用于大型应用程序,其中的错误会影响内存的安全,这是一个严重的漏洞。
- 输入无效 在模糊测试中,模糊器用于生成无效输入,用于测试错误处理例程,这对于无法控制其输入的软件非常重要。简单的模糊测试可以称为自动化负面测试的一种方法。
- 正确性错误 模糊测试还可用于检测某些类型的“正确性”错误。例如损坏的数据库、糟糕的搜索结果等。
模糊测试工具
网络安全中使用的工具可广泛应用于模糊测试,例如 Burp Suite、Peach Fuzzer 等等。
- 桃子模糊器:Peach Fuzzer 比扫描器提供更强大、更安全的覆盖范围。其他测试工具只能搜索已知线程,而 Peach Fuzzer 则允许用户查找已知和未知线程。
- 尖峰代理:它是一款专业级工具,用于查找 Web 应用程序中的应用程序级漏洞。SPIKE Proxy 涵盖了基础知识,例如 SQL 注入和跨站点脚本,但它是完全开放的 Python 基础设施。 SPIKE Proxy 可用于 Linux 和 Windows.
- 圣甲虫:Webscarab 是用 Java 因此可移植到许多平台。为了分析应用程序,我们使用了 Webscarab 框架,该框架使用 HTTP 和 HTTPS 协议进行通信。例如: Webscarab 充当拦截代理,它允许操作员在服务器收到浏览器创建的请求之前对其进行审查和修改。并允许在浏览器收到服务器生成的响应之前对其进行审查和更新。这样,如果 Web Scarab 发现任何漏洞,它将列入已报告问题的列表中。
- OWASP WSFuzzer:WSFuzzer 是一个 GPL 程序,使用 Python。GPL 程序目前针对 Web 服务。在当前版本的 OWASPWSFuzzer 中,基于 HTTP SOAP 服务 是主要目标。
模糊测试的优点
- 模糊测试改进软件 安全测试.
- 模糊测试中发现的错误有时很严重,并且大多数时候被黑客利用,包括崩溃、内存泄漏、未处理的异常等。
- 如果由于时间和资源的限制,任何错误未能被测试人员注意到,那么这些错误也会在模糊测试中发现。
模糊测试的缺点
- 单独的模糊测试无法提供整体安全威胁或错误的完整情况。
- 模糊测试对于处理那些不会引起程序崩溃的安全威胁(比如某些病毒、蠕虫、木马等)的效果较差。
- 模糊测试只能检测简单的故障或威胁。
- 为了有效执行,它将需要大量时间。
- 使用随机输入设置边界值条件非常成问题,但现在使用基于用户输入的确定性算法,大多数测试人员可以解决这个问题。
总结
在软件工程中,模糊测试显示应用程序中存在错误。模糊测试不能保证完全检测到应用程序中的错误。但通过使用模糊测试技术,它可以确保应用程序的健壮性和安全性,因为这种技术有助于暴露大多数常见漏洞。