模糊测试方法研究
正文
随着业界对软件安全问题关注度的不断提升, 漏洞挖掘也逐渐成为相关领域重点研究的内容。漏洞挖掘技术是指对未知漏洞的探索, 通过综合应用各种技术和工具, 尽可能地找出软件中潜在的漏洞。传统的漏洞挖掘技术 (静态分析技术、动态分析技术) 耗时费力, 又难以对每一个软件进行全方位的漏洞扫描, 更重要的是即使经过严格测试的软件, 在投入运行后还是会发现有漏洞存在, 这促使了对一种更为有效的漏洞挖掘方法的研究。模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型,它能够在一项产品投入市场使用之前对潜在的安全漏洞进行分析和挖掘。本文围绕模糊测试技术的基本理论,从模糊测试执行过程、模糊测试数据生成的方法和模糊测试的应用等方面对模糊测试进行介绍。
模糊测试是一种基于缺陷注入的自动化软件测试技术,它使用大量半有效的数据作为应用程序的输入,以程序是否出现异常或错误作为标志,来发现应用程序中可能存在的安全漏洞。所谓半有效的数据是指对应用程序来说,测试用例的必要标识部分和大部分数据是有效的, 但同时该数据的其他部分是无效或者漏洞攻击的。因为的数据会被待测程序认为这是一个有效的数据,这样应用程序就有可能发生错误,从而导致应用程序的崩溃或者触发相应的安全漏洞。模糊测试是一个自动或半自动的过程,这个过程包括反复操纵目标软件并为其提供处理数据。
模糊测试(fuzz testing)和渗透测试(penetration test)都是属于安全测试的方法,它们既有联系也有区别。渗透测试一般是模拟黑客恶意入侵的方式对产品进行测试,对测试者的执行力要求很高,成本高,难以被大规模应用。而模糊测试通过向应用提供非预期的输入并监控输出中的异常来发现软件中缺陷,整个执行过程依靠工具进行自动化或半自动化测试。模糊测试技术具有自动化程度高、可用性好、误报率低, 对目标程序源码没有依赖等优点。
模糊测试执行过程主要包含几个基本阶段:
(1)识别测试目标
确定明确的测试目标,才能决定使用的模糊测试工具或方法。比如需要选择应用包含的特定文件或者库作为测试目标,需要把注意力放在多个应用程序之间共享的那些二进制代码上。因为如果这些共享的二进制代码中存在安全漏洞,将会有非常多的用户受到影响,因而风险也更大。
(2)识别输入
大部分可被利用的安全漏洞都是由于应用没有对用户的输入进行校验或是进行必要的非法输入处理。是否能找到所有的输入向量(Input vector)是模糊测试能否成功的关键。寻找输入向量的原则是:从客户端向目标应用发送的任何东西,包括头(Headers)、文件名(File Name)、环境变量(Environment variables),注册表键(Registry keys),以及其他信息,都可能是潜在的模糊测试变量。
(3)生成模糊测试数据
大多数模糊测试的方法是通过向目标系统不断输入可以诱发软件缺陷的测试数据,因此测试数据的生成是模糊测试非常关键的环节,主要依赖测试目标系统的特点和数据格式进行生成。
(4)执行模糊测试数据
自动化地向被测的系统发送数据包、打开文件、或是执行被测应用的过程。这个阶段一般与生成测试数据并行进行。
(5)监视异常
监控异常和错误是模糊测试中重要但经常容易被忽略的步骤。模糊测试需要根据被测应用和所决定采用的模糊测试类型来设置各种形式的监视。
(6)判定发现的漏洞是否可被利用
在模糊测试中发现了一个错误,需要判定这个被发现的错误是否是一个可被利用的安全漏洞。这种判定过程既可以由模糊测试的执行者来进行,也可以交给安全测试专家来进行。
模糊测试技术的应用十分广泛, 可以测试的对象种类繁多, 比如环境变量和参数、 Web 应用程序、文件格式、网络协议、Web 浏览器和物联网系统等方面。
环境变量和参数的模糊测试属于本地化的模糊测试, 其测试对象是命令行参数和环境变量。该测试方法是一种最简单的模糊测试,即对命令行参数或环境变量进行恶意注入,注入成功后有可能导致程序崩溃。最常用的环境变量和参数的模糊测试工具是iFuzz,它曾成功地发现IRIX, HP-UX, QNX, MacOS X和AIX 等系统的漏洞。
Web 应用程序容易受到各多类型的漏洞攻击, 如拒绝服务、跨站点编写脚本、 SQL 注入和弱访问控制等。在对 Web 应用程序进行模糊测试时要特别关注遵循 HTTP 协议规范的测试数据包。 Wfuzz是一款强大开源的Web Fuzz测试工具,它通过审计参数、登录认证、Get/Post爆破等方式,挖掘Web应用程序的安全漏洞。
文件格式的模糊测试的测试对象包括Web 浏览器、邮件服务器、 office 办公组件及媒体播放器等。文件格式模糊测试的目标是发现应用程序在解析特定文件格式时出现的漏洞。在对文件格式进行模糊测试时,待测软件常会被很多种类型的漏洞攻击,包括 DoS、整数处理问题、简单的栈/堆溢出、逻辑错误及格式化字符串等。全球著名的安全公司Verisign iDefense开发了基于Windows平台文件格式模糊测试工具FileFuzz和基于 UNIX 操作系统上文件格式模糊测试工具SPIKEfile,它们分别实现了基于变异的文件格式模糊测试和基于生成的文件格式模糊测试。
网络协议的模糊测试可能是最广泛被利用的模糊测试类别,目前存在很多不同的方法来实现对网络协议的模糊测试。网络协议的模糊测试如此之流行是因为它能够发现很多高风险漏洞。其测试对象包括邮件服务器、数据库服务器、远程访问服务、多媒体服务器和备份服务器等。由芬兰Oulu大学研发、并获得微软资金支持的模糊测试工具PROTOS,发现了SNMP、SIP、LDAP等协议中的安全漏洞。
Web 浏览器容易受到多种类型的漏洞攻击, 包括 DoS、缓冲区溢出、远程命令执行、绕过跨越限制、绕过安全区和地址栏欺骗等。对 Web 浏览器进行模糊测试,常用方法包括刷新HTML页、加载WEB页和目标单浏览器对象。Mangleme是一款发现WEB 浏览器中HTML解析缺陷的模糊测试工具。Verisign iDefense公司开发的模糊测试工具COMRaider,实现对Web浏览器ActiveX控件进行模糊测试。
国内企业匡恩网络针对物联网系统研发出模糊测试工具,针对物联网协议、物联网设备和物联网软件系统进行测试,已经发现了西门子、施耐德、艾默生、力控等多个不同厂商多款不同型号的DCS、PLC和上位机组态软件的数十个漏洞。
表1列举了著名的开源模糊测试工具,其中SPIKE被商业和政府机构用于测试网络协议,Sulley和Peach用于文件格式和网络协议的测试。
表1.开源模糊测试工具
表1.开源模糊测试工具
工具名称工具语言特点
SPIKEC广泛使用,支持多类型的模糊测试,但不支持Windows系统操作
SulleyPython优秀的崩溃报告,提供自动虚拟化技术
Peach
Python扩展性强、运行速度快,最新版C#还没完成开发,部分功能需自定义扩展
微软提出“云端模糊测试即服务”的理念
早在2002 年微软赞助模糊测试工具套件—PROTOS 测试套件的研究,并把模糊测试应用在Windows内核、Office和IE等产品的测试中。微软于2005 年宣布在可信计算安全开发生命周期中将模糊测试作为安全漏洞挖掘的重要技术支持。据微软的报告,Windows 7发现的安全漏洞约1/3是通过模糊测试技术发现的。2016年,微软提出“云端模糊测试即服务”的理念,推出 Project Springfield项目,提供基于Azure云的模糊测试工具Springfield,该工具结合模糊测试和AI工具检测软件中的安全隐患。
Google 开放模糊测试服务OSS-Fuzz
Google开源能够针对开源软件进行持续模糊测试的OSS-Fuzz。OSS-Fuzz利用可更新的模糊测试技术与可拓展的分布式结合,为大规模的分布式模糊测试执行提供环境。在该工具开源后五个月里,这款工具在开源项目中嗅探出了超过 1000 多个 bug,其中包括 264 个潜在的安全漏洞。Google 表示,OSS-Fuzz 已经在几个关键开源项目中找到了多个安全漏洞,并提交开源项目组修改。
分析
1、模糊测试的优点
与传统漏洞挖掘方法相比, 模糊测试技术有其无法比拟的优势。模糊测试的测试目标是二进制可执行代码, 比基于源代码的白盒测试适用范围更广;模糊测试是动态实际执行的,不存在静态分析技术中存在的大量误报问题;模糊测试的原理简单,没有大量的理论推导和公式计算,不存在符号执行技术中的路径状态爆炸问题;模糊测试自动化程度高,不需要逆向工程中大量的人工参与。模糊测试技术的优点使它成为一种应用范围广泛的漏洞挖掘技术。
2、模糊测试的局限性
(1) 对访问控制漏洞无能为力,因为模糊测试系统无法理解程序的逻辑,所以如一些违反权限控制的安全漏洞难以发现。
(2) 受制于糟糕的设计逻辑。糟糕的设计逻辑并不会导致程序崩溃,而模糊测试发现漏洞一个主要依据是监控目标系统的异常和错误信息,因此模糊测试难以发现这类漏洞。
(3) 无法识别多点触发漏洞,当前的模糊测试技术往往只能挖掘出由单个因素引起的漏洞,而对于需要多条件才能触发的漏洞却无能为力。
建议
1、目前,Web应用中存在大量拒绝服务(Dos)、跨站脚本(XSS)、SQL注入(SQL injection)等漏洞,Web应用模糊测试不仅可以发现Web应用本身的漏洞,还可以发现Web服务器和数据库服务器的漏洞。建议通过模糊测试的方法和工具,对Web应用进行漏洞挖掘。
2、Android在手机的市场上占有率很高,通过模糊测试不但可以发现钓鱼欺诈、拒绝服务和权限提升等Android的常见漏洞,而且可以对App的稳定性进行分析验证。建议通过模糊测试的方法和工具,对App的Android版进行漏洞挖掘。
3、随着智能手机、可穿戴设备、活动追踪器、无线网络、智能汽车、智能家居等终端设备和网络设备的迅速发展和普及利用,针对物联网设备的网络攻击事件比例呈上升趋势,攻击者利用物联网设备漏洞可入侵设备,获取设备控制权,通过控制大量物联网设备,黑客可以发起分布式拒绝服务网络攻击(DDoS)。建议利用模糊测试,对物联网的网络协议和设备进行漏洞挖掘。
4、随着业务发展和技术升级需要,会引入一些开源软件或者免费软件,而据Google的报告,开源软件或者免费软件的安全漏洞还是非常多,建议通过模糊测试的方法和工具,在引入开源软件或者免费软件的过程,做安全风险评估。
5、针对业务特点和系统特征,构造模糊测试数据知识库,提升模糊测试数据的针对性,通过人工智能优化模糊测试数据生成和自动化执行过程,构建模糊测试平台,提供安全测试的服务给分行或者行外客户使用。