05月30, 2019

what is fuzzing?

是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。

完全手动测试即渗透测试penetration test,模拟黑客恶意进入系统,查找漏洞,对分析人员能力依赖性强,成本高,难以大规模测试。

想完全自动化也是不可能的,同一套测试用例不可能在不修改的情况下,完全进行黑盒测试,这时候就引入了模糊测试fuzz testing。

例如,测试一个Xserver的运行在Unix上的程序,客户端和Xserver之间使用TCP/IP协议进行通信,找出漏洞。

#1. 根据通信协议的格式和定义,用模板方式,通过限定半随机生成大量符合格式的测试数据;

#2. 从客户端发送给服务端,输入;

#3. 观察被测系统的状态,是否能正常响应,响应是否正确;

#4. 根据被测系统状态,判断是否存在安全隐患。 通过日志等资料分析问题,并报告异常

有几个问题:

#1. 提高测试用例的通过率,让测试更有效 例如配置,有效数据,故意错误数据,随机数据,这三者的组合。

#2. 实现文件,协议格式自动化分析。

#3. 引入并行和分布式技术,有效减少测试时间。

#4. 基于知识构造测试用例,提高数据的针对性。 比如有一个数据库存储大量已知攻击模式,在构造测试用例时,从该数据库随机调用一些测试。 如用户名和密码字典,脚本后门程序,数据库注入攻击。

#5. 提高代码的覆盖率 重大缺陷之一,通过引入遗传算法达到代码覆盖率。 集成代码覆盖率计算工具,实时监测代码覆盖情况。

#6. 对更对平台的支持 各种手机系统,工业嵌入式系统,IoT设备。

#7. 生成测试用例过程中,引入人工智能算法,具有学习能力,从而发现更多逻辑漏洞。 重大缺陷之二,不能准确定位漏洞。 动态二进制插装提高监视器精度来客服这个问题。

随机坏数据,做fuzz攻击一个程序,然后观察哪里遭到了破坏。 它的输入不是符合逻辑的,尽可能多的杂乱数据投入程序中。

存储记录,稍后重现该问题。 一定要将所有生成的随机测试用例单独地命名并保存下来,这样就能够重现这个过程中检测到的任何故障。

1)识别测试目标

比如需要选择应用包含的特定文件或者库作为测试目标,需要把注意力放在多个应用程序之间共享的那些二进制代码上。因为如果这些共享的二进制代码中存在安全漏洞,将会有非常多的用户受到影响。

2)识别输入

输入向量(Input vector):从客户端向目标应用发送的任何东西,包括头(Headers)、文件名(File Name)、环境变量(Environment variables),注册表键(Registry keys),以及其他信息,都可能是潜在的模糊测试变量 3)生成模糊测试数据

4)执行模糊测试数据

自动化地向被测的系统发送数据包、打开文件、或是执行被测应用的过程

5)监视异常

有可能需要配合其他监视工具

6)判定发现的漏洞是否可被利用

将数据以 XML 形式存储是一种避免数据损坏的好方法。 为使程序更加安全,可以用 DTD 和/或模式来验证文档。 由模糊测试导致的许多故障都是内存分配错误及缓冲器溢出的结果。用一种安全的垃圾收集语言(在如 Java 或 managed C# 等虚拟机上执行的)来编写应用程序避免了许多潜在问题。即使用 C 或 C++ 来编写代码,还是需要使用一个可靠的垃圾收集库。

一定要用合法的 XML 字符替换数据,而不要用随机字节

最常用的环境变量和参数的模糊测试工具是iFuzz,曾成功地发现IRIX, HP-UX, QNX, MacOS X和AIX 等系统的漏洞。

Web 应用程序容易受到各多类型的漏洞攻击, 如拒绝服务、跨站点编写脚本、 SQL 注入和弱访问控制等。在对 Web 应用程序进行模糊测试时要特别关注遵循 HTTP 协议规范的测试数据包。 Wfuzz是一款强大开源的Web Fuzz测试工具,它通过审计参数、登录认证、Get/Post爆破等方式,挖掘Web应用程序的安全漏洞。

文件格式模糊测试的目标是发现应用程序在解析特定文件格式时出现的漏洞。在对文件格式进行模糊测试时,待测软件常会被很多种类型的漏洞攻击,包括 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控件进行模糊测试。 SPIKEC广泛使用,支持多类型的模糊测试,但不支持Windows系统操作

SulleyPython优秀的崩溃报告,提供自动虚拟化技术

Peach

Python扩展性强、运行速度快,最新版C#还没完成开发,部分功能需自定义扩展

微软赞助模糊测试工具套件—PROTOS 测试套件的研究,并把模糊测试应用在Windows内核、Office和IE等产品的测试中。微软于2005 年宣布在可信计算安全开发生命周期中将模糊测试作为安全漏洞挖掘的重要技术支持。据微软的报告,Windows 7发现的安全漏洞约1/3是通过模糊测试技术发现的。2016年,微软提出“云端模糊测试即服务”的理念,推出 Project Springfield项目,提供基于Azure云的模糊测试工具Springfield,该工具结合模糊测试和AI工具检测软件中的安全隐患

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、针对业务特点和系统特征,构造模糊测试数据知识库,提升模糊测试数据的针对性,通过人工智能优化模糊测试数据生成和自动化执行过程,构建模糊测试平台,提供安全测试的服务给分行或者行外客户使用。

本文链接:https://harry.ren/post/fuzzing.html

-- EOF --

Comments