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

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

Info

Publication number
CN102622297A
CN102622297A CN2012100429535A CN201210042953A CN102622297A CN 102622297 A CN102622297 A CN 102622297A CN 2012100429535 A CN2012100429535 A CN 2012100429535A CN 201210042953 A CN201210042953 A CN 201210042953A CN 102622297 A CN102622297 A CN 102622297A
Authority
CN
China
Prior art keywords
data
type
derivative function
exception
length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2012100429535A
Other languages
English (en)
Inventor
贾春鹏
张炯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN2012100429535A priority Critical patent/CN102622297A/zh
Publication of CN102622297A publication Critical patent/CN102622297A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,该方法的主要步骤为:(1)com组件提取;(2)com组件分析;(3)构造测试用例;(4)测试用例的异常跟踪;(5)测试结果记录。相区别于传统fuzz技术中主要针对数据的类型特征构造大量等距的测试用例的方法,本发明针对每种类型数据所占空间的大小以及2进制数据特征,在减少测试用例数量的同时提高测试用例的有效覆盖度。从而提高对于com组件黑盒测试的效率和准确率。并依据新的生成用例的方法改善异常跟踪程序降低误报率,对com组件测试的必要性进行分析,使针对com组件fuzz更加高效易用。

Description

针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法
技术领域
本发明适用于网络安全领域,功能为com组件的漏洞的发掘和测试,其核心是一种新的针对com组件的黑盒测试生成测试用例的方法具体涉及一种针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法。
背景技术
网络安全问题一直是现今最重要的计算机问题之一,其中axtiveX控件的安全问题又是最重要的网络安全问题之一。诸如网上银行,网上购物等等网站都大量使用axtiveX控件,com技术是axtiveX技术的基础,一旦com组件出现漏洞,将对网络安全造成巨大的威胁。避免这些隐患,一方面需要以程序员的角度,开发时尽量避免留下漏洞,一方面也需要以黑客的角度,发掘已经写好的com组件中的漏洞,证明他的可利用性,并及时上报漏洞。
现在的测试工具诸如最著名的COMRaider,其核心都是对于不同导出函数的参数类型进行等距大范围的覆盖,其效率和准确率受到生成测试用例的方法的限制,往往测试结果需要大量的专业人员进行人工分析筛选,并且近些年漏洞很少依托与数据类型本身的特征,在生成大量无用的测试用例的同时,很多可能出现漏洞的异常数据无法被覆盖,综上,使用传统技术对com组件的测试不仅仅效率准确率存在问题,覆盖率也存在问题。使自动测试之后仍然需要十分大量的人工测试。
为了解决以上问题,就需要一种新的生成测试用例的方法和与之相适应的信息提取和漏洞跟踪的方法。
发明内容
本发明要解决的技术问题为:解决现有针对com组件的fuzz中生成测试用例效率低准确率低有效覆盖率低的特点。
本发明解决上述技术问题的技术方案为:针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,该方法步骤如下:
步骤(1)通过组册表HKEY_CLASSES_ROOT\TypeLib键,遍历所有已经注册的com组件的名称、版本、GUID、以及绝对地址。
步骤(2)提取每一个com组件的导出函数的信息,信息包括导出函数返回的类型,导出函数每一个参数的类型。根据测试用例的生成规则,筛选容易出现漏洞的com组件以及其容易出现漏洞的导出函数。
步骤(3)针对每一个导出函数的参数类型所占的空间以及最可能引发异常的2进制数据的数据特征,构造测试用例。
步骤(4)执行每一个测试用例,使用window系统提供的api针对测试用例构造方法和漏洞的利用难度跟踪并记录所有出现的有利用价值的异常。
步骤(5)记录测试结果信息。
所述的步骤(2)进一步包括:
(a1)针对组册的com组件,分析记录导出函数参数数据类型以及数据所占的空间大小;
(b1)针对数据类型以及数据类型的数据所占空间分析漏洞发生的可能性,并根据此结果筛选出易发现漏洞,发现的漏洞易利用的com组件,其中可能性的判断见功能(3)的叙述;
所述的步骤(3)进一步包括:
(a2)针对导出函数参数的数据类型的数据所占空间,确定生成用例所需要覆盖的异常数据的长度。其中用于记录实际信息的切长度固定的数据类型,生成原类型长度,和原类型长度增加1个半字,增加2个半字的三种长度的异常数据,对于指针句柄等数据类型的数据使用规则(d),对于字符串等不定长数据类型使用规则(e)。
(b2)对于异常数据长度等于原数据类型长度的异常数据,构造以半字为单位的2进制数据,使每半字覆盖0000 0000、1111 1111。对每个半字的情况进行组合,使整体测试用例覆盖所有容易引发异常的数据。
(c2)对于异常数据长度大于原数据类型长度的异常数据,减少原数据类型长度内的覆盖,使用全1,对于超出原数据类型长度部分依照(b)的规则并忽略全0进行用例构造。
(d2)对于指针句柄等类型数据32位内的部分,特殊的只构造0000 0000 0000 0000 00000000 0000 0000、1111 1111 1111 1111 1111 1111 1111 1111两种异常数据。
(e2)对于字符串等不定长数据类型,以半字为单位,长度以2的指数的增长速度,生成全0和全1的异常数据。达到用户指定的长度时停止。
(f2)针对用户指定的数据类型增加指定的测试用例,选择性的测试漏洞出现几率比较小的依托数据类型的特点的漏洞。
所述的步骤(4)进一步包括:
(a3)获得线程的EXCEPTION_DEBUG_INFO结构。
(b3)根据设定捕捉以下异常需要输出的异常:
EXCEPTION_ACCESS_VIOLATION存取越界,
EXCEPTION_FLT_STACK_CHECK浮点栈溢出,
EXCEPTION_ILLEGAL_INSTRUCTION执行非法指令,
EXCEPTION_INT_OVERFLOW整数溢出,
EXCEPTION_INVALID_DISPOSITION异常处理程序地址错误,
EXCEPTION_STACK_OVERFLOW线程的栈空间溢出;
(c3)捕捉异常发生时寄存器的状态。
本发明与传统技术相比的优点在于:
1、本发明相区别于传统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,该表1为本发明的对于32位数据构造的用例。观察数据数值以及同长度数据类型间差别对于测试用例没有任何作用,用例的构造完全依赖于计算机存储结构,计算机最小存取单位是半字,因此以半字为单位。这样的用例生成方案最大限度减少用例数量,避免了根据数据类型等距生成用例多产生的没有实际作用的用例。同时又更大程度的覆盖了溢出性漏洞。
表1
Figure BDA0000137849640000041
本发明的核心的测试用例生成方法如下:
针对导出函数参数的数据类型的数据所占空间,确定生成用例所需要覆盖的异常数据的长度。其中用于记录实际信息的切长度固定的数据类型,生成原类型长度,和原类型长度增加1个半字,增加2个半字的三种长度的异常数据,特殊处理指针句柄等数据类型的数据,特殊处理字符串等不定长数据类型的数据。
对于异常数据长度等于原数据类型长度的异常数据,构造以半字为单位的2进制数据,使每半字覆盖0000 0000、1111 1111。对每个半字的情况进行组合,使整体测试用例覆盖所有容易引发异常的数据。
对于异常数据长度大于原数据类型长度的异常数据,减少原数据类型长度内的覆盖,使用全1,对于超出原数据类型长度部分依照的以半字为单位的2进制数据,使每半字覆盖00000000、1111 1111,对每个半字的情况进行组合的规则,忽略超出原数据长度部分全0,进行用例构造。
对于指针句柄等类型数据32位内的部分,特殊的只构造0000 0000 0000 0000 0000 00000000 0000、1111 1111 1111 1111 1111 1111 1111 1111两种异常数据。超出原类型长度部分使用相同规则。
对于字符串等不定长数据类型,以半字为单位,长度以2的指数的增长速度,生成全0和全1的异常数据。达到用户指定的长度时停止。
对于用户指定的数据类型增加指定的测试用例,选择性的测试漏洞出现几率比较小的依托数据类型的特点的漏洞。
根据测试用例生成方案,相应改进com组件导出函数的分析与过滤和异常跟踪对于跟踪的异常的限定,即可完成针对com组件导出函数参数空间及2进制数据的fuzz工具
本发明在北京网络安全重点实验室已取代传统com组件测试工具,进行测试应用,效果良好。如表2所示,该表2为本发明与传统测试方法测试常见数据类型的对比,对于常见数据类型的测试,除字符串类型,本工具使用的用例生成方法对于传统的用例生成方法效果均有明显的提升。
表2
Figure BDA0000137849640000051
Figure BDA0000137849640000061
这样的黑盒测试测试用例的构造思路不仅仅局限于com组件的fuzz,这种抛弃数据类型本身而注重数据在计算机存储上的特点的测试用例构造方法在输入数据长度有限且分散的黑盒测试中均可以得到应用。

Claims (4)

1.一种针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于:该方法的步骤如下:
步骤(1)通过组册表HKEY_CLASSES_ROOT\TypeLib键,遍历所有已经注册的com组件的名称、版本、GUID、以及绝对地址;
步骤(2)提取每一个com组件的导出函数的信息,信息包括导出函数返回的类型,导出函数每一个参数的类型;根据测试用例的生成规则,筛选容易出现漏洞的com组件以及其容易出现漏洞的导出函数;
步骤(3)针对每一个导出函数的参数类型所占的空间以及最可能引发异常的2进制数据的数据特征,构造测试用例;
步骤(4)执行每一个测试用例,使用window系统提供的api针对测试用例构造方法和漏洞的利用难度跟踪并记录所有出现的有利用价值的异常;
步骤(5)记录测试结果信息。
2.根据权利要求1的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于:所述的步骤(2)进一步包括:
(a1)针对组册的com组件,分析记录导出函数参数数据类型以及数据所占的空间大小;
(b1)针对数据类型以及数据类型的数据所占空间分析漏洞发生的可能性,并根据此结果筛选出易发现漏洞,发现的漏洞易利用的com组件。
3.根据权利要求1的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于:所述的步骤(3)进一步包括如下步骤:
(a2)针对导出函数参数的数据类型的数据所占空间,确定生成用例所需要覆盖的异常数据的长度,其中用于记录实际信息的切长度固定的数据类型,生成原类型长度,和原类型长度增加1个半字,增加2个半字的三种长度的异常数据,对于指针句柄等数据类型的数据使用规则(d),对于字符串等不定长数据类型使用规则(e);
(b2)对于异常数据长度等于原数据类型长度的异常数据,构造以半字为单位的2进制数据,使每半字覆盖0000 0000、1111 1111;对每个半字的情况进行组合,使整体测试用例覆盖所有容易引发异常的数据;
(c2)对于异常数据长度大于原数据类型长度的异常数据,减少原数据类型长度内的覆盖,使用全1,对于超出原数据类型长度部分依照(b)的规则并忽略全0进行用例构造;
(d2)对于指针句柄等类型数据32位内的部分,特殊的只构造0000 0000 0000 0000 00000000 0000 0000、1111 1111 1111 1111 1111 1111 1111 1111两种异常数据;
(e2)对于字符串等不定长数据类型,以半字为单位,长度以2的指数的增长速度,生成全0和全1的异常数据;达到用户指定的长度时停止;
(f2)针对用户指定的数据类型增加指定的测试用例,选择性的测试漏洞出现几率比较小的依托数据类型的特点的漏洞。
4.根据权利要求1的针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法,其特征在于:所述的步骤(4)进一步包括:
(a3)获得线程的EXCEPTION_DEBUG_INFO结构;
(b3)根据设定捕捉以下异常需要输出的异常:
EXCEPTION_ACCESS_VIOLATION存取越界,
EXCEPTION_FLT_STACK_CHECK浮点栈溢出,
EXCEPTION_ILLEGAL_INSTRUCTION执行非法指令,
EXCEPTION_INT_OVERFLOW整数溢出,
EXCEPTION_INVALID_DISPOSITION异常处理程序地址错误,
EXCEPTION_STACK_OVERFLOW线程的栈空间溢出;
(c3)捕捉异常发生时寄存器的状态。
CN2012100429535A 2012-02-23 2012-02-23 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法 Pending CN102622297A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2012100429535A CN102622297A (zh) 2012-02-23 2012-02-23 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2012100429535A CN102622297A (zh) 2012-02-23 2012-02-23 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法

Publications (1)

Publication Number Publication Date
CN102622297A true CN102622297A (zh) 2012-08-01

Family

ID=46562224

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012100429535A Pending CN102622297A (zh) 2012-02-23 2012-02-23 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法

Country Status (1)

Country Link
CN (1) CN102622297A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294102A (zh) * 2015-05-20 2017-01-04 腾讯科技(深圳)有限公司 应用程序的测试方法、客户端、服务器及系统
CN110162479A (zh) * 2019-05-29 2019-08-23 Oppo广东移动通信有限公司 异常应用检测方法、装置及终端设备
CN112783765A (zh) * 2021-01-13 2021-05-11 北京轩宇信息技术有限公司 一种适用于指针的单元测试用例生成方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040260516A1 (en) * 2003-06-18 2004-12-23 Microsoft Corporation Method and system for supporting negative testing in combinatorial test case generators
CN101859274A (zh) * 2009-04-07 2010-10-13 西门子(中国)有限公司 一种进行模糊测试的方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040260516A1 (en) * 2003-06-18 2004-12-23 Microsoft Corporation Method and system for supporting negative testing in combinatorial test case generators
CN101859274A (zh) * 2009-04-07 2010-10-13 西门子(中国)有限公司 一种进行模糊测试的方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吴毓书等: "基于Fuzzing的ActiveX控件漏洞发掘技术", 《计算机应用》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294102A (zh) * 2015-05-20 2017-01-04 腾讯科技(深圳)有限公司 应用程序的测试方法、客户端、服务器及系统
CN106294102B (zh) * 2015-05-20 2021-04-09 腾讯科技(深圳)有限公司 应用程序的测试方法、客户端、服务器及系统
CN110162479A (zh) * 2019-05-29 2019-08-23 Oppo广东移动通信有限公司 异常应用检测方法、装置及终端设备
CN112783765A (zh) * 2021-01-13 2021-05-11 北京轩宇信息技术有限公司 一种适用于指针的单元测试用例生成方法及装置
CN112783765B (zh) * 2021-01-13 2024-02-09 北京轩宇信息技术有限公司 一种适用于指针的单元测试用例生成方法及装置

Similar Documents

Publication Publication Date Title
CN101329638B (zh) 程序代码的并行性的分析方法和系统
CN102651062B (zh) 基于虚拟机架构的恶意行为跟踪系统和方法
CN109933984B (zh) 一种最佳聚类结果筛选方法、装置和电子设备
CN107315779A (zh) 日志分析方法和系统
CN113364753B (zh) 反爬虫方法、装置、电子设备及计算机可读存储介质
CN103198243B (zh) 一种识别山寨应用程序的方法和装置
CN104063450A (zh) 热点信息分析方法及设备
CN105653949B (zh) 一种恶意程序检测方法及装置
CN104364768A (zh) 确定运行时间仪表控制的状态
CN104364771A (zh) 修改来自较小特权状态的运行时间仪表控制
CN101853200A (zh) 一种高效动态软件漏洞挖掘方法
CN103455758A (zh) 恶意网站的识别方法及装置
CN101251799B (zh) 管理实现的方法和装置
CN104766015A (zh) 一种基于函数调用的缓冲区溢出漏洞动态检测方法
CN202736027U (zh) 等保测评中操作系统安全的自动测评系统
CN108920140A (zh) 一种前后端统一校验方法
CN107526970A (zh) 基于动态二进制平台检测运行时程序漏洞的方法
CN102622297A (zh) 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法
US20160378626A1 (en) Efficiency of cycle-reproducible debug processes in a multi-core environment
CN102681932B (zh) 一种检测软件异常输入处理正确性的方法
Ren et al. Scstudio: a secure and efficient integrated development environment for smart contracts
CN103235757B (zh) 基于自动化造数对输入域测试对象进行测试的装置和方法
CN101937395B (zh) 一种用于漏洞检测的检测对象程序特征提取方法
Zhu et al. Making smart contract classification easier and more effective
US9171168B2 (en) Determine anomalies in web application code based on authorization checks

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20120801