APP下载

一种高效率的主动式漏洞挖掘平台

2016-05-14聂黎生李欣李小红

现代电子技术 2016年9期

聂黎生 李欣 李小红

摘 要: 软件测试的漏洞发掘技术在快速扩展的互联网软件数量需求下,其存在效率低下,适应测试环境的能力不强以及对软件外部代码的跟踪能力弱等问题。在这种情形下,开发了一种主动式的多漏洞挖掘式数据平台(MLIIMP)。一方面,该平台能够主动触发软件测试系统在运行时的位置漏洞;另一方面,系统在引入路径搜索时还插入了新的函数模型,该模型的作用是保障符号传播性能的大幅提升。漏洞测试结果表明这种平台在进行漏洞挖掘方面的效率有较大优势。

关键词: 漏洞发掘; 挖掘效率; MLIIMP; 漏洞约束; 路径搜索

中图分类号: TN911?34; TP311 文献标识码: A 文章编号: 1004?373X(2016)09?0093?06

Abstract: Under the demands of fast extended Internet software quantity, the vulnerability mining technology for software testing has the disadvantages of low mining efficiency, poor tracking ability for the software′s external code and poor adaptation ability for test environment. For the above problems, the many loopholes initiative integrated mining platform (MLIIMP) was developed. The platform can initiatively trigger the position loophole when the software testing system is running. The new function model is inserted when the path search is introduced into the system, which can greatly improve the symbols propagation performance. The vulnerability test results show that the platform has a great advantage to improve the vulnerability mining efficiency.

Keywords: vulnerability mining; mining efficiency; MLIIMP; loophole constraint; path search

0 引 言

软件测试需求量在IT行业的快速发展势头下与日俱增,测试效率的保障和测试性能的提升也越来越受到使用者的关注。而对于软件测试本身来看,漏洞的发掘是其主要测试目标,行业内的从业者和学者专家对该相关技术进行了积极的研究 [1?2]。在众多的技术研究中,动态符号技术因其独特的优势,在漏洞发掘中处于研究的焦点之一。

动态符号技术相对发展较快,能够对被测对象的测试动态过程进行数据量化的记录,进而为后期分析漏洞挖掘过程及效果提供智力支撑和数据来源。相比于另一种静态的分析过程,动态符号的优势十分明显,分析结果更加精确可信 [3?5]。黑盒测试的方法曾经在代码测试技术上风靡一时,基于动态符号技术的软件测试具有更高的代码覆盖率,分析效果真实可信[6?7] 。而众多普通的单路径测试技术则只能发掘出该路径上的漏洞[8?9],而动态符号方式则完全打破了此种方式,其核心关键技术实现了多条测试路径的并行检测,以期达到发掘更多漏洞的效果 [10?11]。但新技术的出现依然伴随着很多缺陷,主要可以从以下几个角度来说明:一是触发挖掘的形式仍然是被动的,不能对多变的测试环境及时做出响应 [12];二是检测功能相对而言变得更窄的测试功能适用范围,对测试中需要的多种功能同时检测的需求一般不能直接满足;三是漏洞发掘的路径层面存在较多的不足之处;四是一旦出现外部码,测试环境与程序需求之间不能得到顺畅传输。

为了避免上述问题,本文对动态符号执行状态西阿德数据挖掘进行了新的开发和设计,形成了一个优化的多漏洞主动挖掘平台。该平台的特征是能够同时运行多条搜索信息路径,实现对软件的多维漏洞检测;其次其优势体现在主动式搜索漏洞数据,运行搜索方式发生了改变。以上两点均从软件内部的优势来说明,关键是当面对外部码需要检测的情形时,该平台还可以利用检测器手段对漏洞进行跨界检索分析,扩展范围较大。最后,本文针对路径搜索的方式进行了新的设计,用来避免相同路径的无效执行,提升了数据挖掘效率。

1 MLIIMP的设计与实现

本节主要展示MLIIMP(Many Loopholes Initiative Integrated Mining Platform)的代码设计过程,并将核心代码部分予以直接展示,没有采取伪代码形式,旨在方便研究人员直接借鉴使用。

1.1 主动式漏洞发掘

在嵌入式研究行业内,漏洞发掘技术的被动模式由来已久,本文设计的MLIIMP首要便打破了常规的被动形式改为主动触发漏洞。主动触发的形式需要在测试过程中进行特定条件的设置,以条件运行来触发漏洞[13]。

为了实现对可变漏洞的深入全面发掘,MLIIMP引入了漏洞约束的概念,并将约束模型化。本平台中的约束并不具有随机生成的特征,其为固定的几种可选方式,相差较小。这种约束的设定是为了实现程序路径的直接漏洞检测,具体的代码格式如下:

由上述代码分析,若变量[x]能够满足约束要求[x!=2∧x<0∨x>3]时,代码中的语句6被触发漏洞。该漏洞触发的前提是具备普通约束条件[x!=2],如果约束具备则路径运行能实现[1→2→3→5→6],该运行路径上的约束漏洞条件是[x<0∨x>3],满足上述约束条件,漏洞不可避免的触发。

将漏洞发掘被动式改变为主动形式,需要利用MLIIMP实现实时监控。对程序运转测试过程进行控制,一旦出现可能的漏洞触发时,将约束条件引入到实测路径,并利用平台自带功能实现标记。这时的约束不同于常规约束,MLIIMP的自检测刚好能实现二者的区别划分和分类。对路径进行探究的过程中,约束条件没有被否定是因为该约束并不是表达分支小程序段,其功能发生了本质转变。

1.2 漏洞检测器

漏洞发掘的关键之一是漏洞检测器的个性化,本文所提MLIIMP能够实现众多类型开发,受文体所限,以下对其中四种作简要阐明。

1.2.1 数组越界检测器

数组越界检测器是对数组发生越界后的漏洞进行检测分析,仍以1.1节中的代码为例,语句6发生错误时便可以用该检测器测得。

数组越界检测的关键技术有三个方面的内容:一是实现符号索引跟踪,即是构建一个索引实现符号在变量与数组传播中的实施追踪和记录比对;二是检测器能够为数组实施操作识别;三是数组的界限需要进行常规的检测分析获得,分析包含识别、界限检测两步。

为了详细说明检测器的运行过程,将其运行划分为三个层面的步骤:一是实现路径追踪,主要通过监控符号传播的路径来实现;第二步,发现疑似符号时,主动查询当前数组的范围,对查询结果进行分析后获得数组的界限情况。利用得到的界限情况设定漏洞约束条件,并将约束导入其间跟踪继续运行。新的路径形成可以由以下公式进行计算获得:

在上述代码中,语句3和5的表达出现了逻辑性错误,3的直接规定是size被定义为符号整数。而同样的表达定义在语句5中重复出现,且这时的定义变为了无符号整数,这样前后矛盾的语句说明,将会直接出现内存分配层面的逻辑错误,触发系统运行漏洞。

函数参数错误检测器的基本运行步骤可以视作两个关键性流程:第一步是实现路径追踪,主要通过监控符号传播的路径来实现;紧接着,对待测函数执行插庄动作,使得待测函数一旦被调用则会自动触发函数参数错误的约束条件,主动触发漏洞约束。

1.3 函数模型

为了确保符号能够准确的执行下去,本平台中对众多的外部函数预设了实施模型,这样处理后的追踪效果明显提升,跟踪符号传播的任务更易实现。

MLIIMP函数模型常见于面向字符串的操作,这些内存操作方式多样,通常可划分为以下memcpy,memset,strcat,strncpy,strcpy等形式。为了更好地实现执行过程的再现,列举出新的函数实例来分析获得。进行符号化的动态执行时,函数程序一般在调用初始时不会出现符号化的直接特征,如strncpy(t,s,2)函数原始的缓冲目标区间表示为非符号的t,而源缓冲则用符号化的形式表现,如[i1]与[i2,]此时的源缓冲还能用[s]替代描述。函数模型的分析结果是,性质不是符号的[t]将会被执行为符号参数,这样的运行将会触发符号参数错误的漏洞。在外部函数调用时,MLIIMP的处理流程较繁琐,图1为处理流程详细步骤。

通过图1可以看出,测试时一旦应用到外部调用的情况,本平台将会首先获取外部函数对应功能的函数名称,获取方式由API形式得到。紧接着,函数模型会在该名称的指引搜索下被找到,若不存在对应函数的实体程序,将会触发该测试函数的对应功能,若存在,则会对外部程序函数体深入检测,进行路径的传输和追踪。

1.4 优化路径搜索方法

MLIIMP的优化路径较多,搜索的方式也很多,多对多的开发形式可以有效避免资源浪费和搜索不彻底的情形发生。本搜索路径优化的基本原理是:第一,否定漏洞的约束条件;第二,若路径指令多或者函数的优先级较高时,将会在路径执行中获得优先运行的权限。下面将详细描述路径搜索算法,即Expand Execution函数,Symbolic Execution 函数以及Score函数。

上述语句14实现了对模式是否存在的判定,进而在第15条语句中进行调动的直接说明。如果指令需要数据进行预设,此时的函数调用功能由input Symbolization调用和测试,进一步实现参数的符号化表达。符号化成功后的指令如果在传输中需要调用,则采用symPropagation函数的相关功能实现。

此外,对于上述代码中所示的Score函数。该执行函数的一个关键特点是设定了depth,且将初始化数值设为0 ,该处理方式旨在避免求解的重复进行,一旦关键函数在前述某个环节已经进行过求解运算,则在调用时会优先考虑计算结果,并直接应用。即便不能直接应用,也可以只进行增量化计算,确保节约运行时长,提升效率。

同样地,其转化功能也包含在程序体中,本例从语句6开始实施,对应的将各编号种类进行处理,编号表示为[i。]语句7执行条件跳转,语句8判断是否需要跳转。判断方法是:若数值与其符号之间相关则出现depth累加计算。运行到语句13时,测试已经获得了漏洞出现的类型和特征数值,并利用语句14计算分值和各分值的权重(这个权重由漏洞的严重程度确定)。最终的分数在语句16中获得,并对应输出。

2 实验与分析

本节主要介绍对平台效果的实验性检验,实验结果和分析如下详述。

2.1 MS06?001漏洞测试

常用于图像存储格式的WMF(Windows Meta File)形式被引入到MS06?001漏洞测试中。漏洞测试的格式具备较多的数据结构类型,其中WMFRECORD的结构特征对GDI格式的函数是否调用发挥了决定性作用。该结构的后8位数据常视作索引数值大小。第9位字节存储的数值表示了字节数量。程序会自动执行0x90开始的全部代码。可见为了触发该约束条件下的漏洞,需要将第9字节处设定为制定的代码值,即为0x16。只有在该种设定下才可以实现漏洞的触发,具体过程如图2所示。

黑盒测试技术不容易触发MS06?001的漏洞,原因如下:考虑到该漏洞触发的直接约束条件,首先第5个字节是0x26的触发几率为[1256,]同样的,第9个字节是0x16的触发几率是[1256;]这些海量测试后的几率显示该技术同时满足以上两个条件的前提下,出现漏洞触发的几率仅仅为[165 536。]这个数值只是理论计算的结果,实践中考虑到硬件以及实际运行情况,这种漏洞触发的几率往往比[165 536]还要低得多。

与传统算法相比,以上MLIIMP在实测时消耗了较短的检测时间,在较少的实验资源前提下即实现了MS06?001漏洞的成功触发。实验结果显示DEEPTH数值是906,表明约束量约为906个,同时在该约束量影响下,执行的指令条数为1 763 456条,实现了14 581个字节的符号化需求和数值输入。本次实验用MLIIMP测试372例实验案例。一共实现触发次数为47次,触发时的运行平均深度为72。这个平均深度表明漏洞MS06?001多发生在浅路径之上。

2.2 CVE?2010?0188漏洞测试

与MS06?001漏洞测试不同,CVE?2010?0188漏洞的影响范围更广,程度更深,版本涉及面更广。如Adobe Reader,Adobe Acrobat等均易受到漏洞侵袭。以上两款软件极易因文本漏洞而受到攻击,本质上说,PDF的格式特征决定了其复杂的后台程序容易存在未知文本漏洞,且随着每一次的升级和变化均可能造成新漏洞的扩大。利用漏洞进行文本攻击,可以通过攻击者以诱导形式进行远程的控制,实现文本攻击的恶意目的。

TIFF文件格式是文本攻击的直接载体,分析其解析过程可以获得前述两大漏洞的存在具有相似的地方,除开属性有所差异外,二者为同源条件下的不同漏洞表现形式。其实质是记录了当前12个字节的目录项数据以及详细的数据结构。

标牌信息为0x150,具体的长度为数值2,类型表达为short。相关的偏移信息用符号Dot Range[1]或者Dot Range[0]表示。以上均处于TIFF的核心地位中。如果出现了新的长度,则这种情况必将导致异常运行,漏洞触发的可能性增加。有意识的对长度值进行限制,另一方面由组织编写植入了恶意代码形式,这些将会使得Libtiff的缓冲区发生明显的数据溢出,恶意代码运行将不受限制。

对于以上特点,本平台MLIIMP将被动触发的约束条件获取后,主动导入约束边界,将漏洞发掘的过程变为主动监测。本次测试工作耗时超过12 h,最终测试获得的漏洞案例分别为第93,107。以上两次测试分别触发了Adobe Reader 9.3,Adobe Acrobat 9.3两个不同阅读器的漏洞约束。海量测试数据在acrobe和reader两者上的成功测试用例数分别高达923以及854个。测试过程的输入符号化总量分别达到97 899以及95 367个。测试后的平均路径深度结果是12 151和11 936。

本文中对MLIIMP的测试表明(具体如表1所示),其实现正常检测效果的时间较短,内嵌的文本测试算法相对优化,配合MLIIMP独特的多路径搜索功能以及主动的约束条件引入,以上均是该数据挖掘平台的优势所在,对所有测试用例的测试速度效果提升明显。

3 结 论

本文基于动态符号的漏洞发掘技术实现了具有新特征的MLIIMP测试平台。该系统已经成功实现四类漏洞的检测和判定,总体说来,MLIIMP的优势主要有:漏洞检测器种类多,发掘方式由被动变为主动,路径搜索变得更加多样化且精准率提升,另外,其采用的函数模型提供了对外部程序追踪的基础。详细阐述为,MLIIMP并不直接否定约束,而是主动设置漏洞约束并引入到路径搜索的过程,同时为了节约搜索时间,本次开发还设置了避免重复搜索的功能函数,提升了漏洞测试效率,大大减少了测试时长。

虽然以上开发结果显示本系统效果优良,但对于因为长度设定后引发的数据缓冲区溢出测试不明显,所以针对该漏洞的开发是本平台需要改进的方向。

参考文献

[1] SUN H, ZENG Q K. Research on integer?based vulnerabilities: security model, detecting methods and real?world cases [J]. Journal of software, 2015, 26(2): 413?426.

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

[3] 赵跃华,阚俊杰.基于符号执行的测试数据生成方法的研究与设计[J].计算机应用与软件,2014,31(2):303?306.

[4] 赵刚,宋健豪.基于系统调用时间特征的异常行为智能检测系统[J].计算机应用与软件,2015,32(4):309?313.

[5] CSALLNER C, SMARAGDAKIS Y. Check ′n′ crash: combi?ning static checking and testing [C]// Proceedings of the 27th International Conference on Software Engineering. USA: ACM, 2005: 422?431.

[6] 刘春玲,雷海红.黑盒测试用例设计方法研究[J].现代电子技术,2012,35(20):46?48.

[7] TAHAT L H, VAYSBURG B, KOREL B, et al. Requirement?based automated black?box test generation [C]// Proceedings of 2001 25th Annual International Computer Software and Applications Conference. Chicago: IEEE, 2001: 489?495.

[8] NETHERCOTE N, SEWARD J. Valgrind: a framework for heavyweight dynamic binary instrumentation [C]// Proceedings of 2007 ACM SIGPLAN Conference on Programming Language Design and Implementation. USA: ACM, 2007: 89?100.

[9] 朱丽,李汪彪,苏伟达,等.基于路径覆盖的嵌入式软件动态测试研究[J].现代电子技术,2013,36(6):63?65.

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

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

[12] GODEFROID P, LEVIN M, MOLNAR D. Automated whitebox fuzz testing [R]. US: Microsoft, 2006.

[13] GODEFROID P, LEVIN M Y, MOLNAR D. Active property checking [C]// Proceedings of the 7th ACM International Conference on Embedded Software. USA: ACM, 2007: 207?216.