模糊测试
模糊测试(Fuzz Testing,简称Fuzzing)是一种将无效或随机的数据(称为FUZZ)放入软件系统以发现编码错误和安全漏洞的软件测试技术。模糊测试的目的是使用自动或半自动技术插入数据,并测试系统的各种异常,如系统崩溃或内置代码故障等。
模糊测试最初是由威斯康星大学的巴顿·米勒于1989年开发的。模糊测试是安全测试的一种。
为什么要做模糊测试?
- 通常,模糊测试找出最严重的安全故障或缺陷。
- 当与黑盒测试、Beta测试和其他调试方法一起使用时,模糊测试会提供更有效的结果。
- 模糊测试用于检查软件的脆弱性。这是非常划算的测试技术。
- 模糊测试是黑盒测试技术之一。模糊测试是黑客用来发现系统漏洞的最常用的方法之一。
如何进行模糊测试
模糊测试的步骤包括基本测试步骤-
步骤1) 识别目标系统
步骤2) 确定输入
步骤3) 生成模糊化数据
步骤4) 使用模糊数据执行测试
步骤5) 监控系统行为
步骤6) 记录缺陷
模糊器的示例
-
基于突变的模糊器改变现有数据样本以创建新的测试数据。这是一种非常简单和直接的方法,从有效的协议样本开始,不断破坏每个字节或文件。
-
基于生成的模糊器根据模型的输入定义新数据。它开始根据规范从头开始生成输入。
-
基于协议的模糊,最成功的模糊是对被测试的协议格式有详细的了解。涉及到编写模糊测试的数组,可以从现有的规范模糊器生成测试用例,也可以使用有效或无效的输入。
基于协议的模糊有两个限制:
- 在规范成熟之前,测试无法进行。
- 许多有用的协议都是已发布协议的扩展。如果模糊测试基于已发布的规范,则新协议的测试覆盖范围将受到限制。
模糊技术最简单的形式是将随机输入作为协议数据包或事件发送到软件。我们只需互换输入的位就可以改变输入。
模糊测试检测到的错误类型
-
断言失败和内存泄漏此方法广泛用于缺陷影响内存安全的大型应用程序,是一个严重的漏洞。
-
无效输入
在模糊测试中,模糊器用于生成用于测试错误处理例程的无效输入,对于不控制其输入的软件很重要。简单的模糊可以被认为是自动化否定测试的一种方式。
- 正确性错误
模糊还可以用来检测某些类型的“正确性”错误。例如损坏的数据库、糟糕的搜索结果等。
模糊测试工具
Web安全中使用的工具可以广泛应用于模糊测试,如Burp Suite、Peach Fuzzer等。
- Peach Fuzzer
Peach Fuzzer比扫描仪提供更强大和更安全的覆盖范围。其他测试工具只能搜索已知的线程,而Peach Fuzzer使用户能够找到已知和未知的线程。
- Spike Proxy
Spike Proxy 是一个专业级工具,用于查找Web应用程序中的应用程序级漏洞。SPEKE代理涵盖了SQL注入和跨站点脚本等基础知识,但它是完全开放的Python基础设施。SPEKE代理可用于Linux和Windows。
- Webscarab
Webcarab是用Java编写的,因此可以移植到许多平台上。对于应用程序的分析,使用了WebScarab框架,使用HTTP和HTTPS协议进行通信。
例:Webscarab作为拦截代理运行,它允许操作员在服务器接收到浏览器创建的求之前对其进行检查和修改。这样,如果网络圣甲虫发现任何漏洞,它会将报告的问题列在列表中。
- OWASP WSFuzzer
WSFuzzer是用Python编写的GPL程序。在当前版本的OWASPWSFuzzer中,基于HTTP的SOAP服务是主要目标。
模糊测试的优势
- 模糊测试改进了软件安全性测试。
- FUZZING中发现的错误有时很严重,大部分时间被黑客使用,包括崩溃、内存泄漏、未处理的异常等。
- 如果由于时间和资源的限制,测试人员没有注意到任何bug,那么在Fuzz测试中也会发现这些bug。
模糊测试的缺点
- 仅靠模糊测试不能提供整体安全威胁或错误的完整情况。
- 对于不会导致程序崩溃的安全威胁,例如某些病毒、蠕虫、特洛伊木马等,模糊测试的效率较低。
- 模糊测试只能检测到简单的故障或威胁。
- 要有效地执行,需要相当长的时间。
- 设置随机输入的边值条件是非常困难的,但是现在大多数测试器使用基于用户输入的确定性算法来解决这个问题。
总结:
在软件工程中,模糊测试显示应用程序中存在错误。但是通过使用Fuzz技术,确保了应用程序的健壮性和安全性,因为该技术有助于暴露大多数常见的漏洞。