写点什么

Fuzzing(模糊测试) 的前世今生(下)

作者:云起无垠
  • 2022-12-02
    北京
  • 本文字数:2431 字

    阅读完需:约 8 分钟


在《Fuzzing(模糊测试)的前世今生(上)》和《Fuzzing(模糊测试)的前世今生(中)》我们讲解了模糊测试技术的由来、技术原理和底层算法,本篇我们为大家简述一下模糊测试的实践应用,让大家对它有更深的了解。模糊测试技术的应用十分广泛,可不同场景中对各种对象进行模糊测试,常见的测试对象包括扩源代码、二进制文件、环境变量和参数、Web 应用程序、文件格式、网络协议、Web 浏览器和内存数据等。

  • 源代码或二进制文件的模糊测试

灰盒 Fuzzing 在源代码测试领域有着广泛的应用。通常,它会在程序编译阶段对被测程序进行插桩。灰盒 Fuzzing 程序依据插桩后得到的反馈数据(如目标程序执行了新的执行流单元)来判断哪些变异的种子为优秀的种子。这类判定逻辑将用于指导遗传变异算法,从而可以引导测试种子向更优异的方向进行持续变异,而无需人工建模。总而言之,基于遗传变异和反馈激励的算法可以自动指导与优化测试流程,自动探索程序代码空间,并在发现漏洞时给用户提供详细的问题定位与漏洞复现功能。

图 1 灰盒模糊测试基本架构

  • 环境变量和参数的模糊测试

环境变量和参数的模糊测试属于本地化的模糊测试,尽管这种测试方法是一种最简单的模糊测试,但也能发现很多远程测试所发现不了的漏洞, 对环境变量和参数进行模糊测试对增强本地私有程度很有帮助。显而易见,其测试对象是命令行参数和环境变量。由于环境变量和命令行参数都是很简单的 ASCII 字符串,所以可以由用户很方便的提供。 

在实际应用中也可以对待测程序实施一些基本的手工测试,以排除已知的漏洞。其基本思想十分简单,即如果在一个命令行参数或环境变量中进行恶意注入,那么当该值被接收以后, 就有可能使程序崩溃。最常用的环境变量和参数的模糊测试工具是 iFuzz。它包含一个能自动处理不同二进制目标代码的引擎,同时 iFuzz 具有 C 语言触发器功能, 能简化显示再次出现的错误, 其最重要的特点是可以不经修改的运行在所有 UNIX 或类 UNIX 系统上。在实际应用上,iFuzz 曾成功地发现 IRIX,HP-UX, QNX, MacOS X 和 AIX 等系统的漏洞。

  • Web 应用程序的模糊测试

Web 应用程序容易受到各多类型的漏洞攻击,如拒绝服务、跨站点编写脚本、SQL 注入和弱访问控制等。针对 Web 应用程序的模糊测试是一种特殊形式的网络协议模糊测试。在对 Web 应用程序进行模糊测试时要特别关注遵循 HTTP 协议规范的测试数据包。常用的工具有 WebFuzz,它是一个开源应用程序,提供了可以被进一步创建的基础架构, 工具开发人员可以在这个架构的基础上添加新的功能以适应不同的应用需求。

  • 文件格式的模糊测试

文件格式的模糊测试的测试对象包括 Web 浏览器、邮件服务器、office 办公组件及媒体播放器等。文件格式模糊测试的目标是发现应用程序在解析特定文件格式时出现的漏洞。文件格式模糊测试的方法与其他模糊测试不同,因为这种测试是在一台主机上完整执行的。在对文件格式进行模糊测试时,可以发现多种安全缺陷,包括 DoS、整数处理问题、简单的栈/堆溢出、逻辑错误及格式化字符串等。

  • 网络协议的模糊测试

网络协议的模糊测试可能是最广泛被利用的模糊测试类别,目前存在很多不同的方法来实现对网络协议的模糊测试。网络协议的模糊测试如此之流行是因为它能够发现很多高风险漏洞。其测试对象包括邮件服务器、数据库服务器、远程访问服务、多媒体服务器和备份服务器等。网络协议的模糊测试要求构造的测试数据包能识别目标 socket, 通过变异或生成的方法构造包含畸形数据的数据包,然后将这些数据包传递给待测软件, 并监视待测软件以发现漏洞。网络协议的模糊测试模型如下图所示。图中的模糊测试工具和被测对象分别是测试中的两个端点,即客户端和服务端的模式, 模糊工具充当客户端, 用来测试服务端的漏洞。模糊工具中的监控模块用来对被测对象的行为进行实时的跟踪、收集并分析,以判断在测试过程中是否发生异常。

图 2  网络协议模糊测试模型图

  • Web 浏览器的模糊测试

一直以来,Web 浏览器的漏洞挖掘都备受安全从业者的关注,主要原因是因为攻击者可以利用 Web 浏览器漏洞进行钓鱼攻击、身份窃取并创建大量被恶意代码感染的计算机网络。严重的浏览器漏洞甚至可以使到成千上万的用户受到伤害。

Web 浏览器容易受到多种类型的漏洞攻击,包括 DoS、缓冲区溢出、远程命令执行、绕过跨越限制、绕过安全区和地址栏欺骗等。随着 Web 浏览器功能的不断增加,其所容易受到的攻击种类也将越来越多。不过,所有的应用程序都在某个具体的环境中运行,每个程序在作为一个进程被操作系统启动时,都有自己独立的命令行参数和环境变量,大量的程序本身往往假设命令行参数和环境变量是合法的而直接使用。因此,对命令行参数和环境变量进行模糊测试很有必要。

  • 内存数据的模糊测试

内存数据的模糊测试是在 2003 年的 BlackHat Federal 和 BlackHat USA 安全会议上首次被提出的。从本质上来说,其目标是将模糊测试技术从大家熟悉的 CS 模型, 转换到只面向内存目标的模型中。在测试过程中,测试人员不再关注一个特定的文件格式或协议格式, 而是将关注的对象从数据传输转换到目标软件底层负责解析数据输入的函数或是单个汇编指令。与网络协议的模糊测试相比较,内存数据的模糊测试具有几个方面的优势。

(1) 内存数据的模糊测试只关注待测软件的内存底层代码,不用解析待测软件的通信协议。 

(2) 在发送测试数据包时不需要通过网络,而是直接注入到待测软件中去,不存在时延问题。 

(3) 当被测协议使用加密/压缩算法,或有对接收的数据进行校验的确认代码时, 能够记录下解密和校验等在某一时间点上的内存快照, 而不用花费大量时间来对所有过程进行测试。

现如今模糊测试技术已广泛应用于工业互联网、智能车企、能源等众多行业!如云起无垠的无垠协议模糊测试系统可以针对智能车企的蓝牙、WiFi 等协议进行安全检测,协议覆盖广,检测粒度细;无垠代码模糊测试系统针对源码安全检测,依托遗传变异算法、覆盖引导等技术,融合自身引擎创新,可以对目标程序进行更精准的安全测试。

模糊测试是目前最有效和最高效的漏洞发现解决方案,更多关于此技术的内容会在后面跟大家一一分享。


发布于: 刚刚阅读数: 7
用户头像

云起无垠

关注

还未添加个人签名 2022-10-14 加入

还未添加个人简介

评论

发布
暂无评论
Fuzzing(模糊测试)的前世今生(下)_云起无垠_InfoQ写作社区