模糊测试教程(什么是模糊测试、类型、工具、示例)


模糊测试

模糊测试,通常称为 fuzzing,是一种软件测试方法,它涉及将不正确或随机数据(FUZZ)注入软件系统,以查找编码错误和安全漏洞。模糊测试涉及使用自动化或半自动化方法引入数据,并评估系统是否存在各种异常情况,例如系统崩溃或内置代码故障等。

威斯康星大学教授巴顿·米勒于 1989 年发明了模糊测试。模糊测试,通常称为 fuzzing,是一种软件测试类型,属于安全测试的范畴。

模糊测试的目的是什么?

  • 模糊测试通常会发现最严重的安全性缺陷或漏洞。

  • 模糊测试与黑盒测试、Beta 测试和其他调试技术相结合,可以产生更有效的结果。

  • 模糊测试是一种确定软件漏洞的技术。它是最经济高效的测试方法之一。

  • 模糊测试是黑盒测试技术之一。它是黑客用来识别系统漏洞的最常见方法之一。

模糊测试步骤

模糊测试过程包含基本测试阶段。

  • 确定要测试的系统。
  • 确定输入
  • 生成模糊数据
  • 使用模糊数据运行测试。
  • 监控系统的性能。
  • 保留缺陷日志。

模糊测试器的示例

基于变异的模糊测试器是修改现有数据样本以生成新的测试数据的模糊测试器。这是最基本和最简单的技术;它从可接受的协议样本开始,并继续修改每个字节或文件。

基于生成的模糊测试器根据模型的输入生成新的数据。它从头开始,根据需求生成输入。

最成功的模糊测试器是基于协议的模糊测试器,它对正在测试的协议格式有广泛的了解。理解程度由规范决定。它涉及将规范的数组输入到工具中,然后使用基于模型的测试生成方法遍历规范并在数据内容、序列等中添加不规则性。此过程称为语法测试、语法测试、健壮性测试等。模糊测试器可以从头开始创建测试用例,也可以从有效或无效的输入创建测试用例。

基于协议的模糊测试有两个主要缺点

  • 在规范完成之前,测试将无法进行。

  • 许多重要的协议是已发布协议的扩展。如果模糊测试基于公共规范,则新协议的测试覆盖范围将受到限制。

  • 向软件发送随机输入,无论是作为协议数据包还是事件,是最简单的模糊测试方法。这种使用随机输入来识别各种应用程序和服务中漏洞的方法非常有效。还有其他方法可用,它们非常易于使用。我们只需要修改现有的输入即可应用这些方法。我们可以简单地通过交换位来更改输入。

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

模糊测试可以检测到的两种类型的漏洞是断言失败和内存泄漏。这种方法通常用于大型系统,其中缺陷会影响内存安全,这是一个严重缺陷。

  • 无效输入 - 在模糊测试中,模糊测试器用于生成不正确的输入来测试错误处理算法,这对于无法控制其输入的软件至关重要。简单模糊测试是一种自动化负面测试的技术。

  • 正确性错误 - 模糊测试还可以检测某些类型的“正确性”问题。例如,数据库损坏、搜索结果不完整等。

模糊测试工具

Burp Suite、Peach Fuzzer 等在线安全工具可广泛用于模糊测试。

  • Peach Fuzzer - 在覆盖范围和安全性方面,Peach Fuzzer 优于扫描程序。与只能识别已知线程的其他测试工具不同,Peach Fuzzer 可以发现已知和未知的线程。

  • 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 服务。

模糊测试的缺点

模糊测试有一些缺点 -

  • 只有模糊测试才能全面了解安全威胁或漏洞。

  • 在处理不会导致软件崩溃的安全风险(例如病毒、蠕虫、特洛伊木马等类似威胁)时,模糊测试的效果较差。

  • 模糊测试只能发现轻微的缺陷或危险。

  • 它需要大量时间才能正常运行。

  • 使用随机输入设置边界值条件很困难,但现在大多数测试都能够通过使用基于用户输入的确定性算法来应对这一挑战。

设置模糊测试器的困难

限制开发人员更广泛地使用模糊测试的一个因素是设置模糊测试器所需的时间。

DeMott 表示,一方面,这些技术正变得越来越用户友好。“另一方面,设置、监控、管理和分类出现的故障仍然需要大量的经验、安全性和编码知识。”

Knudsen 的公司生产一个生成式模糊测试器,他表示,对于客户来说,最难的部分是为模糊测试器制定数据模型,以便模糊测试器将其用作构建测试用例的模板。使用常见网络协议和文件格式的客户可以轻松使用现有的模板,而不是花费时间使用商业产品(其中包含大量测试套件数据库)创建自己的模板。

“假设您正在创建物联网设备,例如智能恒温器,”Knudsen 解释道。“它必须连接到某个地方的服务器。”因此,您可以重用很多现有的解决方案,因为已经定义了人们可以使用的网络协议。”

但是,大多数应用程序仍然需要定制代码,这些代码必须在这些旧协议之上使用新的数据模型进行测试。

开发人员可以使用 Defensics 的软件开发工具包 (SDK) 来构建定制数据模型,但与其他生成式模糊测试技术一样,创建这些模型需要时间。

过去,使用模糊测试的人必须是该领域的专家。

将模糊测试集成到 DevOps 管道中也很重要,并确保正确记录这些测试失败。如果测试失败但没有记录导致问题的输入数据,开发人员将无法修复代码。

ClusterFuzz 是 Google 用于管理模糊测试基础设施和跟踪模糊测试器性能的工具。DeMott 说:“我最初在很多年前想出了这个名字,但我的顾问坚持要更改它。”

GitLab已收购Peach Tech和Fuzzit,这两款面向不同开发阶段的模糊测试技术将集成到该公司的持续集成和持续交付(CI/CD)工作流程中。

DeSanto表示:“我们认为存在一个空白”,暗指GitLab之前提供的安全测试工具,包括SAST和DAST。如今,我们的安全团队使用GitLab Secure作为其主要测试工具,以检查我们应用程序的安全性和可靠性。

GitLab的目标是让开发人员更容易将模糊测试纳入他们的开发流程。

想要使用其中一个模糊测试器的开发人员可以通过在管理CI/CD流程的YAML脚本中添加一行代码来实现。

根据DeSanto的说法,“以前使用模糊测试的人必须是模糊测试专家才能使用它。”“使用GitLab进行模糊测试的好处在于,我们知道你在做什么。你使用我们进行源代码管理和持续集成。我们无需你手动输入‘这是我的API的结构’,而是可以扫描你的源代码并自动为你生成该规范。你无需尝试理解该工具的机制即可使用它。”

如果更多模糊测试技术更容易地融入开发人员的流程,模糊测试可能会成为测试环境中更常见和更有效的组成部分。

摘要

模糊测试是一种软件工程类型,用于识别应用程序中是否存在缺陷。模糊测试不能保证检测到程序中的所有缺陷。但是,采用模糊测试方法可以保证应用程序的弹性和安全性,因为它有助于发现大多数常见缺陷。

更新于: 2021年10月30日

2K+ 阅读量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告