针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法

文档序号:6359532阅读:597来源:国知局
专利名称:针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法
技术领域
本发明适用于网络安全领域,功能为com组件的漏洞的发掘和测试,其核心是一种新的针对com组件的黑盒测试生成测试用例的方法具体涉及一种针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法。
背景技术
网络安全问题一直是现今最重要的计算机问题之一,其中axtiveX控件的安全问题又是最重要的网络安全问题之一。诸如网上银行,网上购物等等网站都大量使用axtiveX控件,com技术是axtiveX技术的基础,一旦com组件出现漏洞,将对网络安全造成巨大的威胁。避免这些隐患,一方面需要以程序员的角度,开发时尽量避免留下漏洞,一方面也需要以黑客的角度,发掘已经写好的com组件中的漏洞,证明他的可利用性,并及时上报漏洞。现在的测试工具诸如最著名的COMRaider,其核心都是对于不同导出函数的参数类型进行等距大范围的覆盖,其效率和准确率受到生成测试用例的方法的限制,往往测试结果需要大量的专业人员进行人工分析筛选,并且近些年漏洞很少依托与数据类型本身的特征,在生成大量无用的测试用例的同时,很多可能出现漏洞的异常数据无法被覆盖,综上,使用传统技术对com组件的测试不仅仅效率准确率存在问题,覆盖率也存在问题。使自动测试之后仍然需要十分大量的人工测试。为了解决以上问题,就需要一种新的生成测试用例的方法和与之相适应的信息提取和漏洞跟踪的方法。

发明内容
本发明要解决的技术问题为解决现有针对com组件的fuzz中生成测试用例效率低准确率低有效覆盖率低的特点。本发明解决上述技术问题的技术方案为针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,该方法步骤如下步骤(I)通过组册表HKEY_CLASSES_R00T\TypeLib键,遍历所有已经注册的com组件的名称、版本、⑶ID、以及绝对地址。步骤(2)提取每一个com组件的导出函数的信息,信息包括导出函数返回的类型,导出函数每一个参数的类型。根据测试用例的生成规则,筛选容易出现漏洞的com组件以及其容易出现漏洞的导出函数。步骤(3)针对每一个导出函数的参数类型所占的空间以及最可能引发异常的2进制数据的数据特征,构造测试用例。步骤(4)执行每一个测试用例,使用window系统提供的api针对测试用例构造方法和漏洞的利用难度跟踪并记录所有出现的有利用价值的异常。步骤(5)记录测试结果信息。
所述的步骤(2)进一步包括(al)针对组册的com组件,分析记录导出函数参数数据类型以及数据所占的空间大小;(bl)针对数据类型以及数据类型的数据所占空间分析漏洞发生的可能性,并根据此结果筛选出易发现漏洞,发现的漏洞易利用的com组件,其中可能性的判断见功能(3)的叙述;所述的步骤(3)进一步包括

(a2)针对导出函数参数的数据类型的数据所占空间,确定生成用例所需要覆盖的异常数据的长度。其中用于记录实际信息的切长度固定的数据类型,生成原类型长度,和原类型长度增加I个半字,增加2个半字的三种长度的异常数据,对于指针句柄等数据类型的数据使用规则(d),对于字符串等不定长数据类型使用规则(e)。(b2)对于异常数据长度等于原数据类型长度的异常数据,构造以半字为单位的2进制数据,使每半字覆盖0000 0000,1111 1111。对每个半字的情况进行组合,使整体测试用例覆盖所有容易引发异常的数据。(c2)对于异常数据长度大于原数据类型长度的异常数据,减少原数据类型长度内的覆盖,使用全1,对于超出原数据类型长度部分依照(b)的规则并忽略全O进行用例构造。(d2)对于指针句柄等类型数据32位内的部分,特殊的只构造0000 0000 00000000 00000000 0000 0000,1111 1111 1111 1111 1111 1111 1111 1111 两种异常数据。(e2)对于字符串等不定长数据类型,以半字为单位,长度以2的指数的增长速度,生成全O和全I的异常数据。达到用户指定的长度时停止。(f2)针对用户指定的数据类型增加指定的测试用例,选择性的测试漏洞出现几率比较小的依托数据类型的特点的漏洞。所述的步骤(4)进一步包括(a3)获得线程的 EXCEPTI0N_DEBUG_INF0 结构。(b3)根据设定捕捉以下异常需要输出的异常EXCEPT 10N_ACCESS_VIOLATION 存取越界,EXCEPT I ON_FLT_STACK_CHECK 浮点栈溢出,EXCEPT 10N_I LLEGAL_I NSTRUCTI ON 执行非法指令,EXCEPT 10N_I NT_0VERFL0ff 整数溢出,EXCEPTI0N_INVALID_DISP0SITI0N 异常处理程序地址错误,EXCEPTI0N_STACK_0VERFL0W 线程的栈空间溢出;(c3)捕捉异常发生时寄存器的状态。本发明与传统技术相比的优点在于I、本发明相区别于传统fuzz技术中主要针对数据的类型特征构造大量等距的测试用例的方法,本发明针对每种类型数据所占空间的大小以及2进制数据特征,在减少测试用例数量的同时提高测试用例的有效覆盖度。从而提高对于com组件黑盒测试的效率和准确率。2、本发明依据新的生成用例的方法改善异常跟踪程序降低误报率,对com组件测试的必要性进行分析,使针对com组件fuzz更加高效易用。
具体实施方式

下面对本发明进一步说明如下近些年所公布的漏洞表明,com组件漏洞的种类虽然很多,但主要形式是通过利用编写程序时不严谨不规范的部分,输入异常数据,使EIP读入非法地址,从而获得程序的控制权。传统的针对com组件的fuzz技术,分析每一个导出函数的参数数据类型,并对可以测试的数据类经进行等距的测试用例覆盖诸如整形,如果设置的间隔是1000那么生成的用例就是0、1000、2000、3000、4000……,32位机整形需要4294968组数据,这样的生成方式不仅不能覆盖异常数据长度大于原始数据类型长度导致的对运行栈下一项非法的覆盖的情况,而且1000对应的计算机运行栈的存储0000 0011 1110 1000和2000对应的计算机运行栈的存储0000 0111 1101 0000作为异常数据没有本质区别。而使用针对com组件导出函数参数空间及2进制数据的测试用例生成方法,只需要19组用例。用例的选取见表1,该表I为本发明的对于32位数据构造的用例。观察数据数值以及同长度数据类型间差别对于测试用例没有任何作用,用例的构造完全依赖于计算机存储结构,计算机最小存取单位是半字,因此以半字为单位。这样的用例生成方案最大限度减少用例数量,避免了根据数据类型等距生成用例多产生的没有实际作用的用例。同时又更大程度的覆盖了溢出性漏洞。表I
权利要求
1.一种针对corn组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于该方法的步骤如下 步骤(I)通过组册表HKEY_CLASSES_ROOT\TypeLib键,遍历所有已经注册的com组件的名称、版本、⑶ID、以及绝对地址; 步骤(2)提取每一个com组件的导出函数的信息,信息包括导出函数返回的类型,导出函数每一个参数的类型;根据测试用例的生成规 则,筛选容易出现漏洞的com组件以及其容易出现漏洞的导出函数; 步骤(3)针对每一个导出函数的参数类型所占的空间以及最可能引发异常的2进制数据的数据特征,构造测试用例; 步骤(4)执行每一个测试用例,使用window系统提供的api针对测试用例构造方法和漏洞的利用难度跟踪并记录所有出现的有利用价值的异常; 步骤(5)记录测试结果信息。
2.根据权利要求I的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于所述的步骤(2)进一步包括 (al)针对组册的com组件,分析记录导出函数参数数据类型以及数据所占的空间大小; (bl)针对数据类型以及数据类型的数据所占空间分析漏洞发生的可能性,并根据此结果筛选出易发现漏洞,发现的漏洞易利用的com组件。
3.根据权利要求I的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于所述的步骤(3)进一步包括如下步骤 (a2)针对导出函数参数的数据类型的数据所占空间,确定生成用例所需要覆盖的异常数据的长度,其中用于记录实际信息的切长度固定的数据类型,生成原类型长度,和原类型长度增加I个半字,增加2个半字的三种长度的异常数据,对于指针句柄等数据类型的数据使用规则(d),对于字符串等不定长数据类型使用规则(e); (b2)对于异常数据长度等于原数据类型长度的异常数据,构造以半字为单位的2进制数据,使每半字覆盖0000 0000、1111 1111 ;对每个半字的情况进行组合,使整体测试用例覆盖所有容易引发异常的数据; (c2)对于异常数据长度大于原数据类型长度的异常数据,减少原数据类型长度内的覆盖,使用全1,对于超出原数据类型长度部分依照(b)的规则并忽略全O进行用例构造;(d2)对于指针句柄等类型数据32位内的部分,特殊的只构造0000 0000 0000 0000000000000000 0000,1111 1111 1111 1111 1111 1111 1111 1111 两种异常数据; (e2)对于字符串等不定长数据类型,以半字为单位,长度以2的指数的增长速度,生成全O和全I的异常数据;达到用户指定的长度时停止; (f2)针对用户指定的数据类型增加指定的测试用例,选择性的测试漏洞出现几率比较小的依托数据类型的特点的漏洞。
4.根据权利要求I的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于所述的步骤(4)进一步包括 (a3)获得线程的 EXCEPTION_DEBUG_INFO 结构; (b3)根据设定捕捉以下异常需要输出的异常EXCEPT I ON_ACCESS_V IOLATI ON 存取越界,EXCEPT I ON_FLT_STACK_CHECK 浮点栈溢出,EXCEPT 10N_I LLEGAL_I NSTRUCTI ON 执行非法指令,EXCEPT 10N_I NT_0VERFL0ff 整数溢出, EXCEPTION_INVALID_DISPOSITION异常处理程序地址错误,EXCEPT 10N_STACK_0VERFL0ff 线程的栈空间溢出;(c3)捕捉异常发生时寄存器的状态。
全文摘要
本发明提供一种针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,该方法的主要步骤为(1)com组件提取;(2)com组件分析;(3)构造测试用例;(4)测试用例的异常跟踪;(5)测试结果记录。相区别于传统fuzz技术中主要针对数据的类型特征构造大量等距的测试用例的方法,本发明针对每种类型数据所占空间的大小以及2进制数据特征,在减少测试用例数量的同时提高测试用例的有效覆盖度。从而提高对于com组件黑盒测试的效率和准确率。并依据新的生成用例的方法改善异常跟踪程序降低误报率,对com组件测试的必要性进行分析,使针对com组件fuzz更加高效易用。
文档编号G06F11/36GK102622297SQ20121004295
公开日2012年8月1日 申请日期2012年2月23日 优先权日2012年2月23日
发明者张炯, 贾春鹏 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1