多漏洞主动式集成挖掘平台

2018-01-18 09:13崔鹏宇
数字技术与应用 2018年9期

崔鹏宇

摘要:本文探讨了处于动态符号执行架构下的漏洞挖掘技术,研究分析了多漏洞主动式集成挖掘平台。

关键词:漏洞发掘;挖掘效率;MLIIMP

中图分类号:TP393.08 文献标识码:A 文章编号:1007-9416(2018)09-0197-01

随着越来越多的软件开发项目的进行,软件测试也越来越受到关注。其中,漏洞发掘作为软件测试的主要目的之一,不少专家对其相关技术展开了积极的研究工作[1-2]。动态符号执行技术因在漏洞发掘方面具有非常突出的优势,使其成了关键技术。因动态符号执行将对被测试程序执行,能够获得其具体运行时产生的数据,所以相对于静态分析技术来说,具有更高的准确性。与过去的黑盒测试技术对比来说,这一个技术具有相对较高的代码覆盖率,正因如此,其可以将更多的漏洞发掘出[3]。为了克服不足之处,笔者首先探讨了处于动态符号执行架构下的漏洞挖掘技术,然后开发出相应的多漏洞主动式集成挖掘平台,MLIIMP结合了动态符号执行方法以及主动式挖掘技术的优势,并采用先进的路径搜索方法,对软件测试的漏洞检测准确性起到了非常大的作用。

1 MLIIMP的设计与实现

1.1 主动式漏洞发掘

长期以来,业界通常使用被动式的漏洞发掘技术方法,而MLIIMP则为一种主动式的技术。所谓主动式漏洞发掘,即测试用例并未将漏洞触发,然而在具体执行的时候,利用某特定的技术产生了约束,之后对这一个约束进行求解,形成新测试用例,从而将漏洞触发。为对路径可变漏洞进行发掘,该系统提出了漏洞约束,相对于一般的约束来说,其在形式上并不存在很大的差异,然而它的功能并非探索其他的程序路径,而是将当前路径上存在的漏洞检测出来。具体见图1所示。

当x符合约束时,在这种情况下能够确保触发语句6的漏洞,在这里属于普通约束,如果满足这一条件,就能够确保路径被执行,而为漏洞约束,如果满足这一条件,就能够确保这一个路径上的漏洞被触发。为了达到主动式漏洞发掘的目标,MLIIMP监控了被测试程序,当那些存在形成漏洞可能性的指令被执行时,则主动将漏洞约束注入到路径条件中,在此基础上对其加以标记,通过这种方式来对普通与漏洞约束进行有效区分。探究路径过程中,并没有对漏洞约束实施否定,这是由于其并非用来表示程序分支的。

1.2 漏洞检测器

作为一个漏洞发掘系统,MLIIMP能够实现若干种漏洞的发掘。我们开发的MLIIMP系统能够实现以下四种漏洞发掘,接下来笔者将简要阐明各种类型。

(1)数组越界检测器。其作用是对数组越界错误进行检测,比如图1之中语句6的漏洞。其主要涉及到三项关键技术:首先为符号索引跟踪,也就是对符号自其他变量向数组传播进行跟踪的索引,其次为数组操作识别,最后为数组界限检测,也就是对数组的合法区域进行检测。

具体来说,其运行流程如下所示:首先是对符号传播进行跟踪,当发现符号作为索引来访问数组的时候,即会对当前栈帧范围进行查询,通过这种方式得到数组界限,并且形成违反条件的漏洞约束,同时在当前的路径条件中将其注入。具体来说,所形成的新路径条件可通过下面的公式描述:

(1)

式中,pc和pc'分别是指新、老的路径条件,e指符号索引的符号表达式,代表注入的漏洞约束,与依次指数组的上、下界。因此,满足新的路径条件必将触发数组越界错误。

(2)除0错误检测器。其主要作用是对除0错误漏洞进行发掘,其具体的流程如下所示:首先对符号传播进行跟踪,当符号作为除数时,形成相应的漏洞约束,之后在路径条件中将其注入,接下来对新路径条件进行求解,利用这种方式得到能够触发除0错误的测试用例。具体来说,所得到的新路径条件可通过下面的公式描述:

(2)

式中,与两者依次是指新、旧路径条件,e表示的含义与上文相同。这样我们就能够得知,当满足时,必然会将除0错误触发。

1.3 优化路径搜索

MLIIMP开发出优化的路径搜索方法,其一方面避免了对相同路径的重复执行,另一方面还可以提高发掘速度。这一个方法的基本工作原理如下所示:首先,在路径探索过程中,仅仅将普通约束否定,原因是漏洞约束的作用不是表示程序分支的。其次,先执行关键函数与指令多的路径,原因是其数目越多,表明这一个路径里面就越有可能有漏洞。

2 实验与分析

MS06-001漏洞为Windows Meta File(WMF)文件格式的,一般情况下,WMF文件往往是在图像存储中使用的。其格式中具有1个WMFHEAD头与许多WMFRECORD数据结构。后者决定着调用什么GDI函数,其函数成员的低8位当做索引。当索引值是0x26时,在这种情况下,将会调用Escape函数,其还能够对SetAbortProc函数进行调用。由于WMFRECORD中的第9个字节代表输入结构的字节数,这样在对WMFRECORD结构进行解析过程中,所有从首个0x90起的代码均得到执行。因此,为能够将MS06-001漏洞触发,一定要将WMFRECORD的第9个字节设定成0x16,具体可以通过下面的图形进行描述。

黑盒测试技术觸发MS06-001的难度非常大,由于这一个漏洞触发的条件有两个,分别为:(1)WMFRECORD的第5个字节是0x26,通过这种方法所形成的测试用例之中,仅仅1/256的能够符合该条件。(2)WMFRECORD的第9个字节是0x16,通过这种方法满足该要求的可能性同样仅仅为1/256。因此,该技术触发的可能性仅仅为1/65536。但在具体的实践中,因会受到其他条件的制约,该技术触发MS06-001的可能性比上面的数值小得多。

与传统算法相比,MLIIMP在消耗相对偏少的资源与时间的情况下触发MS06-001漏洞。通过验证可以看出,路径条件的deepth平均是906,这就说明存在的约束数目为906个,平均执行为1763456条指令数,符号化了14581个字节的输入。MLIIMP总计形成测试用例372个,其中47个能够将MS06-001漏洞触发,这47个所形成的路径条件的深度平均是72。从中发现,MS06-001处在相对较浅的程序路径上。所需要的测试时间总共是234分钟。

3 结语

本文主要是探讨了动态符号执行架构下的漏洞自动化发掘技术,设计并实现新的MLIIMP系统。到现在为止,这一个系统能够发掘四种漏洞。其存在几方面优势:多种漏洞检测器、主动式漏洞发掘、优化路径搜索方法。但是,考虑到这一系统对于那些因长度造成的缓冲区溢出的漏洞发掘不支持,这也是下一步优化研究的方向。

参考文献

[1]黄晖,陆余良,夏阳.基于动态符号执行的二进制程序缺陷发现系统[J].计算机应用研究,2013,(9):2810-2812.

[2]邵巳航,苏亭,顾斌,等.基于过程间动态符号执行的C语言测试框架[J].计算机工程与设计,2014,(8):2746-2751.

[3]邢玉凤.二进制代码的漏洞挖掘技术研究[J].计算机测量与控制,2014,(12):4111-4114.