什么是模糊测试?

什么是模糊测试

简介:什么是模糊测试?

2014年,中国黑客 入侵社区卫生系统,美国一家营利性连锁医院,并窃取了 4.5 万患者的数据。 黑客利用了一个名为 Heartbleed 的漏洞,该漏洞是在黑客入侵前几个月在 OpenSSL 加密库中发现的。

Heartbleed 是一类攻击向量的示例,它允许攻击者通过发送格式错误的请求来访问目标,请求的有效性足以通过初步检查。 虽然从事应用程序不同部分工作的专业人员尽最大努力确保其安全性,但不可能想到所有可能破坏应用程序或使其在开发过程中易受攻击的极端情况。

这就是“模糊测试”的用武之地。

什么是模糊攻击?

模糊测试、模糊测试或模糊攻击是一种自动化软件测试技术,用于将随机、意外或无效数据(称为模糊测试)提供给程序。 监视程序是否存在异常或意外行为,例如缓冲区溢出、崩溃、内存泄漏、线程挂起和读/写访问冲突。 然后使用模糊测试工具或模糊器来发现异常行为的原因。

模糊测试基于这样的假设,即所有系统都包含等待被发现的错误,并且可以给予足够的时间和资源来这样做。 大多数系统都有很好的解析器或输入验证防止 网络罪犯 从利用程序中的任何假设错误。 然而,正如我们上面提到的,在开发过程中覆盖所有极端情况是很困难的。

模糊器用于接受结构化输入或具有某种信任边界的程序。 例如,接受 PDF 文件的程序将进行一些验证以确保文件具有 .pdf 扩展名和解析器来处理 PDF 文件。

一个有效的模糊器可以生成足够有效的输入来越过这些边界,但又足够无效以在程序的更深处导致意外行为。 这很重要,因为如果不造成进一步的伤害,仅仅能够通过验证并不意味着什么。

Fuzzer 发现的攻击向量与 SQL 注入、跨站点脚本、缓冲区溢出和拒绝服务攻击非常相似,包括此类攻击。 所有这些攻击都是将意外、无效或随机数据输入系统的结果。 

 

模糊器的类型

模糊器可以根据一些特征进行分类:

  1. 攻击目标
  2. 模糊创建方法
  3. 输入结构的认识
  4. 程序结构意识

1.攻击目标

此分类基于模糊器用于测试的平台类型。 模糊器通常与网络协议和软件应用程序一起使用。 每个平台都有其接收的特定类型的输入,因此需要不同类型的模糊器。

例如,在处理应用程序时,所有模糊测试都发生在应用程序的各种输入通道上,例如用户界面、命令行终端、表单/文本输入和文件上传。 所以模糊器生成的所有输入都必须匹配这些通道。

处理通信协议的模糊器必须处理数据包。 针对该平台的模糊器可以生成伪造的数据包,甚至可以充当代理来修改拦截的数据包并重放它们。

2. 模糊创建方法

模糊器也可以根据它们如何创建用于模糊测试的数据进行分类。 从历史上看,模糊器通过从头开始生成随机数据来创建模糊。 这就是这项技术的发起人Barton Miller教授最初的做法。 这种类型的模糊器称为 基于生成的模糊器.

然而,虽然理论上可以生成绕过信任边界的数据,但这样做需要花费大量时间和资源。 因此这种方法通常用于输入结构简单的系统。

这个问题的解决方案是改变已知有效的数据以生成足够有效以通过信任边界但又无效到足以引起问题的数据。 一个很好的例子是 DNS 模糊器 它获取一个域名,然后生成一个大的域名列表,以检测针对指定域所有者的潜在恶意域。

这种方法比以前的方法更聪明,并且显着缩小了可能的排列。 使用这种方法的模糊器被称为 基于突变的模糊器

还有第三种最近的方法,它利用遗传算法来收敛于根除漏洞所需的最佳模糊数据。 它的工作原理是不断完善其模糊测试数据,同时考虑将每个测试数据输入程序时的性能。 

从数据池中删除性能最差的数据集,而对最好的数据集进行变异和/或组合。 然后使用新一代数据再次进行模糊测试。 这些模糊器被称为 基于进化突变的模糊器。

3.输入结构的认识

这种分类基于模糊器是否知道并主动使用程序的输入结构来生成模糊数据。 一个 愚蠢的模糊器 (不知道程序输入结构的模糊器)以随机方式生成模糊。 这可能包括基于生成和基于突变的模糊器。 


如果为模糊器提供了程序的输入模型,则模糊器可以尝试生成或改变数据,使其与提供的输入模型相匹配。 这种方法进一步减少了生成无效数据所花费的资源量。 这样的模糊器称为 智能模糊器.

4. 程序结构意识

模糊器也可以根据他们是否知道他们正在模糊测试的程序的内部工作原理来分类,并使用这种意识来帮助模糊数据生成。 当模糊器用于在不了解其内部结构的情况下测试程序时,它被称为黑盒测试。 

黑盒测试期间生成的模糊数据通常是随机的,除非模糊器是基于进化突变的模糊器,它通过监视其模糊测试的效果并使用它来“学习” 信息 完善其模糊数据集。

另一方面,白盒测试使用程序内部结构的模型来生成模糊数据。 这种方法可以让模糊器到达程序中的关键位置并对其进行测试。 

流行的模糊测试工具

有很多模糊 工具 在那里被渗透测试人员使用。 一些最受欢迎的是:

模糊测试的局限性

虽然模糊测试是一种非常有用的笔测试技术,但它并非没有缺点。 其中一些是:

  • 运行需要相当长的时间。
  • 在程序的黑盒测试期间发现的崩溃和其他意外行为可能很难分析或调试,即使不是不可能的。
  • 为基于突变的智能模糊器创建突变模板可能非常耗时。 有时,由于输入模型是专有的或未知的,它甚至可能是不可能的。

 

尽管如此,对于任何想在坏人之前发现错误的人来说,它都是一个非常有用和必要的工具。

结论

模糊测试是一种强大的笔测试技术,可用于发现软件中的漏洞。 有许多不同类型的模糊器,并且一直在开发新的模糊器。 虽然模糊测试是一种非常有用的工具,但它也有其局限性。 例如,fuzzer 只能找到这么多的漏洞,而且它们可能非常耗费资源。 但是,如果您想亲自尝试这种神奇的技术,我们有 您可以在我们的平台上使用的免费 DNS Fuzzer API。 

你还在等什么? 

今天开始模糊测试!