阅读 241

模糊测试(Fuzzing)怎么操作?

模糊测试

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

威斯康星大学教授 Barton Miller 于 1989 年发明了模糊测试。模糊测试,通常称为模糊测试,是一种属于安全测试范围的软件测试。

模糊测试的目的是什么?

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

  • 当与黑盒测试、Beta 测试和其他调试技术结合使用时,模糊测试会产生更有效的结果。

  • 模糊测试是一种确定软件漏洞的技术。它是最具成本效益的测试方法之一。

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

模糊测试的步骤

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

  • 确定目标系统。

  • 确定输入

  • 生成模糊数据

  • 使用不明确的数据运行测试。

  • 密切关注系统的性能。

  • 保留缺陷日志。

模糊器示例

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

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

最成功的模糊器是 PROTOCOL-BASED-FUZZER,它对被测试的协议格式有广泛的了解。理解由规范决定。它需要将一系列规范输入到工具中,然后通过规范并使用基于模型的测试生成方法向数据内容、序列等添加不规则性。语法测试、语法测试、健壮性测试和其他术语用于描述此过程。Fuzzer 可以从头开始或从有效或无效的输入创建测试用例。

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

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

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

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

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

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

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

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

模糊测试工具

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

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

  • Spike Proxy - 它是一种专业级工具,可扫描 Web 应用程序以查找应用程序级缺陷。SPIKE 代理包括基础知识,例如 SQL 注入和跨站点脚本,但它构建在完全开放的 Python 架构上。SPIKE Proxy 是一个 Linux 和 Windows 应用程序。

  • Webscarab - 因为 Webscarab 是用 Java 开发的,所以它可以在各种系统上运行。Webscarab 框架用于分析使用 HTTP 和 HTTPS 协议进行通信的应用程序。例如,Webscarab 充当拦截代理,允许运算符在浏览器请求发送到服务器之前对其进行监控和更改。此外,在浏览器收到服务器创建的答案之前,可以对其进行查看和编辑。在这种方法中,如果 Web Scarab 发现了一个缺陷,它将被包含在报告的问题列表中。

  • OWASP WSFuzzer - WSFuzzer 是一个基于 Python 的 GPL 许可应用程序。目前,已通过 GPL 的软件针对的是 Web 服务。当前版本的 OWASPWSFuzzer 的主要目标是基于 HTTP 的 SOAP 服务。

模糊测试的缺点

模糊测试有许多缺点 -

  • 只有模糊测试才能让您全面了解安全威胁或缺陷。

  • 在处理不会导致软件崩溃的安全风险(例如病毒、蠕虫、特洛伊木马和其他类似威胁)时,模糊测试不太成功。

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

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

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

设置模糊器的困难

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

DeMott 表示,一方面,这些技术一直在变得更加用户友好。“另一方面,设置、监控、管理和分类出现的问题仍然需要丰富的经验、安全性和编码。”

根据 Knudsen 的说法,客户最困难的方面是为 fuzzer 设置数据模型,用作构建测试用例的模板。使用通用网络协议和文件格式的客户可以轻松使用现有模板,而不是花时间使用包含庞大测试套件数据库的商业产品创建自己的模板。

“假设您正在创建物联网设备,例如智能恒温器,”Knudsen 解释说。“它必须与某处的服务器连接,”作者说。因此,您可以重复使用许多当前的解决方案,因为人们可以使用已经定义好的网络协议。”

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

开发人员可以利用 Defensics 的软件开发工具包 (SDK) 来构建定制的数据模型,尽管与其他代模糊技术一样,创建它们需要时间。

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

将模糊测试纳入 DevOps 管道以及确保正确记录这些测试失败也很重要。如果测试失败而不记录导致问题的输入数据,开发人员将无法修复代码。

ClusterFuzz 是谷歌管理模糊基础设施和跟踪模糊器的工具,他performance.DeMott说:“我多年前最初想出了这个名字,但我的顾问坚持要改变它。”

GitLab 已经购买了 Peach Tech 和 Fuzzit,这两代模糊测试技术将被集成到公司的持续集成和持续交付 (CI/CD) 工作流程中。

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

GitLab 的目标是让开发人员更容易地将模糊测试包含在他们的开发过程中。

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

根据 DeSanto 的说法,“以前使用模糊测试的人必须是模糊测试的专家才能使用它。” “在 GitLab 中使用模糊测试的好处是我们知道你在做什么。您使用我们进行源代码管理和持续集成。我们可以扫描您的源代码并自动为您生成该规范,而不是告诉 [fuzzer],“这是我的 API 的结构”。您无需为了使用它而尝试理解该仪器。”

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

概括

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


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐