ic_ee

什么是 Fuzzing(模糊测试)?

Fuzzing 是一种质量保证技术,用于检测软件、操作系统或网络中的编码错误和安全漏洞。它的工作原理是通过提供大量随机输入来尝试使系统崩溃或触发错误。如果发现漏洞,模糊测试平台(也称为模糊器)可以帮助确定根本原因。hostgator美国虚拟主机商分享什么是 Fuzzing(模糊测试)?

模糊测试系统非常擅长发现某些类型的漏洞,包括缓冲区溢出、拒绝服务(DoS)、跨站点脚本和代码注入。但是,它们在处理会导致崩溃或可见错误的静默安全威胁(例如间谍软件、蠕虫、特洛伊木马和rootkit )方面效率较低。

虽然模糊测试是一种简单的技术,但它具有成本效益且易于扩展。它通常可以发现在创建和调试软件程序时被忽视的严重缺陷。但是,它并没有提供软件产品的安全性、质量或有效性的完整图景。因此,它通常与黑盒测试、beta 测试和单元测试等其他技术结合使用。

模糊测试的类型

应用程序模糊测试

这种模糊测试方法测试 UI 功能,例如按钮、表单中的输入字段或命令行程序中的选项。它同样可以用于测试 API 命令。它通过以异常高的频率访问功能、提供无效内容(例如输入字段中的文本过多)以及尝试各种随机输入来工作。推荐阅读:《什么是网络安全网?它对今天的企业意味着什么?》

什么是 Fuzzing(模糊测试)?

协议模糊测试

诸如超文本传输​​协议 (HTTP) 之类的协议用于通过 Web 交换数据。当通过给定协议发送不良内容时,协议模糊测试用于测试服务器的行为。主要目的是防止协议请求被误解为命令并在服务器上执行。

文件格式模糊测试

文件格式模糊测试会创建一个损坏的文件并将其呈现给目标软件进行处理。这与已安装的软件和接受文件作为输入的 Web 应用程序有关。文件通常采用标准格式,例如 .jpg、.docx 或 .xml。fuzzer 可以通过提供与预期格式不匹配或包含意外内容的文件来测试应用程序。文件格式模糊测试的高级版本可以测试特定文件格式的功能,例如图像或视频压缩方法。

模糊安全工具

生成式模糊器

生成式模糊器可以是任何东西,从完全随机的数据到轻微操纵的数据。例如,在对 HTTP 流量进行模糊测试时,可以对整个数据包进行模糊测试,这意味着它可能无法到达目的地。或者,生成式模糊器可以将数据包分解为其单独的组件,并尝试分别对每个组件进行模糊测试,从而保持数据包的结构完整。这允许在保留 TCP/IP 和 HTTP 标头的同时测试无效的数据包内容。

突变模糊器

基于突变的模糊器采用一组有效输入并对它们执行突变以触发被测软件中的错误或崩溃。以下是突变技术的一些示例:

最低有效位 (LSB) 翻转— 更改每个二进制整数末尾的位。

混淆 HTTP 请求- 将随机值附加到每个 HTTP 标头值。这对于发现漏洞非常有效,并实现了高代码覆盖率,因为输入与原始有效输入足够相似。

模板——使用有效的数据结构或格式来增加目标系统接受模糊输入的机会。这可以通过确保输入格式正确来减少模糊测试的时间和资源。

进化模糊器

进化模糊测试基于遗传编程的使用,旨在收敛到会导致错误的输入。遗传算法使用变异、交叉和选择的概念来寻找复杂问题的解决方案。

在模糊测试中,遗传算法可用于生成一组连续的测试用例。测试用例生成基于模糊测试框架和从模糊测试目标收到的响应。第一组测试用例是使用生成或变异方法创建的,随后的测试用例是使用遗传进展创建的:

每个测试用例都使用各种指标进行评分,这些指标表明它在导致错误方面的成功程度。

得分最低的测试用例被删除。

对剩余的每个测试用例进行小的更改。

最后,算法结合得分高的测试用例,找到得分更高的测试用例。此过程还用于补充丢弃的测试用例并尝试找到更成功的候选者。

模糊测试最佳实践

您可以通过以下几种方法来评估 fuzzing 解决方案的有效性。推荐阅读:《服务器租用时有哪些漏洞会导致服务器被攻击?》

提高测试速度

模糊测试的一个关键指标现在是每秒可以运行的测试用例数量。您可以在给定时间范围内运行的测试用例越多,您发现崩溃或错误的可能性就越大。更快的模糊测试还可以将模糊测试集成到自动化测试过程中。

您可以做很多事情来加速您的测试用例,例如使生成或变异例程更有效、并行化测试用例、减少超时以及在无头模式(没有用户界面)下运行程序。如果您自己托管模糊测试,您也可以在更强大的硬件上运行它。

减少测试用例

由于模糊测试会随机更改输入,因此测试用例通常包含实际上不会触发错误的变化或突变。减少测试用例意味着将测试用例缩小到可能导致错误或崩溃的最小更改集。

这种减少可以手动完成,但也可以通过模糊解决方案自动完成。当发生崩溃时,fuzzer 可以多次重新运行测试用例。每次触发错误时,它可以逐步减少对输入的更改(与基本有效输入相比),直到达到触发错误所需的最小更改。这简化了分析并有助于准确了解输入的哪一部分与错误或崩溃有关。

跟踪代码覆盖率

代码覆盖率衡量模糊器执行了多少软件代码。这个概念是覆盖范围越广,模糊器测试程序的范围就越广。有很多方法可以衡量代码覆盖率,包括行、代码块、分支和代码路径。

测量模糊测试的代码覆盖率可能很困难,并且可能需要二进制检测来跟踪每个模糊请求期间正在运行的代码。

代码覆盖率并不是模糊测试的完美衡量标准,因为大部分应用程序代码即使执行也不会导致错误。尽管如此,某种形式的代码覆盖率测量可以深入了解模糊器在您的程序中实际触发的内容,并启用对模糊器活动的微调。推荐相关阅读:《2022年需要关注的十大网络安全趋势》