法律状态公告日
法律状态信息
法律状态
2018-09-28
授权
授权
2016-06-22
实质审查的生效 IPC(主分类):G06F21/57 申请日:20151222
实质审查的生效
2016-05-25
公开
公开
技术领域
本发明涉及系统测试技术领域,尤其涉及一种ActiveX控件漏洞测试方法及 系统。
背景技术
在信息通信技术飞速发展的今天,信息系统不仅面临针对系统的漏洞攻击, 大量第三方软件的广泛应用使其面临的威胁具有更多可能性。ActiveX控件的数 据库访问、数据监视和图形绘制等功能为Web应用提供了丰富的交互性,其作 为浏览器扩展插件得到了广泛的应用。由于ActiveX控件自身构架特点与编程人 员的疏忽,容易产生漏洞。因此,有必要对ActiveX控件漏洞挖掘技术展开研究, 以及时发现并修复漏洞,从而避免安全事件。
模糊测试是一种自动化的漏洞挖掘技术,它使用大量半有效的数据作为输 入测试程序或控件的响应,尝试发现漏洞。模糊测试的优点在于无需获取测试 目标的源代码、原理简单、自动化程度高,故而在漏洞挖掘领域得到广泛的应 用。
模糊测试技术中,如何生成测试集是影响模糊测试效率的关键因素。已有 的模糊测试工具通常采用对正常输入进行随机修改的方法生成测试集。但这样 的测试集缺乏针对性,误报率高,很难触发ActiveX控件的安全漏洞,导致测试 效率低下。
发明内容
基于此,有必要提供一种测试效率高的ActiveX控件漏洞测试方法及系统。
一种ActiveX控件漏洞测试方法,包括步骤:
解析ActiveX控件,获取所述ActiveX控件的类型库信息,确定敏感关键字;
根据所述敏感关键字确定所述ActiveX控件中的敏感函数;
根据所述敏感函数的参数个数及所述类型库信息中的数据类型,确定半有 效测试集;
将所述半有效测试集作为初始测试集,将通过调试器监测测试集在ActiveX 控件中的执行情况而确定的所述测试集执行时的代码覆盖率作为适应度值,进 行测试集变换,确定最终测试集;
采用所述最终测试集对所述ActiveX控件进行测试,并生成漏洞报告。
上述ActiveX控件漏洞测试方法,解析ActiveX控件,获取所述ActiveX控 件的类型库信息,有针对性地确定敏感关键字;并且根据所述敏感关键字确定 所述ActiveX控件中的敏感函数;根据所述敏感函数的参数个数及所述类型库信 息中的数据类型,有针对性地确定半有效测试集;将所述半有效测试集作为初 始测试集,将通过调试器监测测试集在ActiveX控件中的执行情况而确定的所述 测试集执行时的代码覆盖率作为适应度值,进行测试集变换,确定最终测试集; 采用所述最终测试集对所述ActiveX控件进行有针对性地测试,并生成漏洞报 告。如此,得到的最终测试集具有针对性、误报率低,容易触发ActiveX控件的 安全漏洞,测试效率高。
一种ActiveX控件漏洞测试系统,包括:
敏感字确定模块,用于解析ActiveX控件,获取所述ActiveX控件的类型库 信息,确定敏感关键字;
敏感函数确定模块,用于根据所述敏感关键字确定所述ActiveX控件中的敏 感函数;
半有效集确定模块,用于根据所述敏感函数的参数个数及所述类型库信息 中的数据类型,确定半有效测试集;
最终集确定模块,用于将所述半有效测试集作为初始测试集,将通过调试 器监测测试集在ActiveX控件中的执行情况而确定的所述测试集执行时的代码 覆盖率作为适应度值,进行测试集变换,确定最终测试集;
漏洞测试模块,用于采用所述最终测试集对所述ActiveX控件进行测试,并 生成漏洞报告。
上述ActiveX控件漏洞测试系统,敏感字确定模块解析ActiveX控件,获取 所述ActiveX控件的类型库信息,有针对性地确定敏感关键字;并且敏感函数确 定模块根据所述敏感关键字确定所述ActiveX控件中的敏感函数;半有效集确定 模块根据所述敏感函数的参数个数及所述类型库信息中的数据类型,有针对性 地确定半有效测试集;最终集确定模块将所述半有效测试集作为初始测试集, 将通过调试器监测测试集在ActiveX控件中的执行情况而确定的所述测试集执 行时的代码覆盖率作为适应度值,进行测试集变换,确定最终测试集;漏洞测 试模块采用所述最终测试集对所述ActiveX控件进行有针对性地测试,并生成漏 洞报告。如此,得到的最终测试集具有针对性、误报率低,容易触发ActiveX控 件的安全漏洞,测试效率高。
附图说明
图1为一种实施方式的ActiveX控件漏洞测试方法的流程图;
图2为图1的一个步骤的具体流程图;
图3为图1的另一个步骤的具体流程图;
图4为一种实施方式的ActiveX控件漏洞测试系统的结构图;
图5为图4的一个模块的具体结构图;
图6为图4的另一个模块的具体结构图。
具体实施方式
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。 附图中给出了本发明的较佳的实施例。但是,本发明可以以许多不同的形式来 实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对 本发明的公开内容的理解更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术 领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术 语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的 术语“或/和”包括一个或多个相关的所列项目的任意的和所有的组合。
如图1所示,一种实施方式的ActiveX控件漏洞测试方法,包括步骤:
S110:解析ActiveX控件,获取所述ActiveX控件的类型库信息,确定敏感 关键字。
可通过模糊测试工具实现对ActiveX控件的解析,比如axfuzz、COMRaider、 AxMan和Dranzer等工具,从而可以获取到ActiveX控件的类型库信息。
根据类型库信息,可以确定敏感关键字。敏感关键字,是指容易出现漏洞 的敏感函数和属性所涉及的关键字,主要涉及网络操作、文件操作、命令操作 等,其具有针对性。漏洞主要包括不安全函数调用类漏洞和输入验证类漏洞, 输入验证类漏洞包括堆/栈的缓冲区溢出漏洞、整数溢出漏洞和格式化字符串漏 洞。敏感函数和属性主要包括内存拷贝函数、格式化字符串函数、文件读取函 数、用户输入函数、环境变量读取模块等。
在其中一个实施例中,敏感关键字包括:内存拷贝函数、格式化字符串函 数、文件读取函数、用户输入函数及环境变量读取函数的关键字。
S130:根据所述敏感关键字确定所述ActiveX控件中的敏感函数。
将敏感函数和属性中的敏感关键字进行分类,确定正则表达式;并将ActiveX 控件中的函数通过正则表达式进行匹配可以确定ActiveX控件中的敏感函数。
可以通过IDAPro等逆向工具来确定敏感函数。
在其中一个实施例中,确定正则表达式的规则如下:
M={“memcpy”、“bcpy”};
S={“scanf”、“printf”};
F={“open”、“write”、“read”};
E={“environment”}.
其中,M指内存操作,S指字符串操作,F指文件操作,E指环境变量操作。 选取部分ActiveX控件中能够匹配成功的函数作为敏感函数。
由于敏感关键字具有针对性,故根据敏感关键字确定的敏感函数也具有针 对性。
S150:根据所述敏感函数的参数个数及所述类型库信息中的数据类型,确 定半有效测试集。
根据类型库信息可以确定ActiveX控件中数据的数据类型。根据数据类型的 边界值可以构造半有效输入数据。具体地,首先,选取各种数据类型的边界值; 然后,以这些边界值为基数对它们进行加1、减1和乘以-1操作,从而得到半有效 输入数据。对于字符串长度的选取,采取特定长度内由短及长逐数增加、大长 度逐倍增加的策略,如,选取所有长度小于4096且长度为32的倍数的字符串, 以及长度大于4096且是4096倍数的字符串。
通过半有效输入数据及敏感函数的参数个数可以最终确定半有效测试集。
由于敏感函数具有针对性,故根据所述敏感函数的参数个数及所述类型库 信息中的数据类型,确定的半有效测试集也具有针对性。
S170:将所述半有效测试集作为初始测试集,将通过调试器监测测试集在 ActiveX控件中的执行情况而确定的所述测试集执行时的代码覆盖率作为适应 度值,进行测试集变换,确定最终测试集。
其中,测试集变换可以是随机指定测试集中各个参数对应的子元素的某一 位或某几位进行二进制反转。
在其中一个实施例中,将所述半有效测试集作为遗传算法的初始测试集, 将通过调试器监测测试集在ActiveX控件中的执行情况而确定的所述测试集执 行时的代码覆盖率作为遗传算法的适应度值,通过遗传算法对测试集进行变换, 并确定最终测试集。
在其中一个实施例中,首先,通过IDAPro等逆向工具分析所选取的敏感函 数的入口;然后,通过OllyDbg等调试器关联到ActiveX控件,在分析得到的敏感 函数的入口设置断点;最后,通过统计测试集触发的断点数量来确定代码覆盖 率。适应度函数F的值域为[0,1]。具体地,适应度函数F的计算公式如下:
其中,P表示测试集触发的断点数量;Psum表示ActiveX控件中设置的断点总 数。
在其中一个实施例中,根据ActiveX控件的接口复杂度和接口数量,可灵活 设置特定迭代次数或适应度要求值F’。在设置适应度要求值F’时,应遵循接口 越复杂越小的原则。具体地,适应度要求值F’的范围区间为[0.6,0.8]。
由于半有效测试集具有针对性,故将半有效测试集作为初始测试集,进行 变换最终得到的最终测试集具有针对性。
S190:采用所述最终测试集对所述ActiveX控件进行测试,并生成漏洞报 告。
漏洞报告中记录了测试结果。若测试结果为出现异常情况,漏洞报告还包 括异常信息,供测试人员开展进一步验证。异常情况包括但不限于内存访问错 误、字符串读写错误、路径无效等。异常信息包括异常情况发生时ActiveX控件 执行的上下文信;还可以包括执行的调用堆/栈。
由于最终测试集具有针对性,故采用所述最终测试集对所述ActiveX控件进 行的测试,具有误报率低,容易触发ActiveX控件的安全漏洞,测试效率高等特 点。
上述ActiveX控件漏洞测试方法,解析ActiveX控件,获取所述ActiveX控 件的类型库信息,有针对性地确定敏感关键字;并且根据所述敏感关键字确定 所述ActiveX控件中的敏感函数;根据所述敏感函数的参数个数及所述类型库信 息中的数据类型,有针对性地确定半有效测试集;将所述半有效测试集作为初 始测试集,将通过调试器监测测试集在ActiveX控件中的执行情况而确定的所述 测试集执行时的代码覆盖率作为适应度值,进行测试集变换,确定最终测试集; 采用所述最终测试集对所述ActiveX控件进行有针对性地测试,并生成漏洞报 告。如此,得到的最终测试集具有针对性、误报率低,容易触发ActiveX控件的 安全漏洞,测试效率高。
如图2所示,在其中一个实施例中,步骤S170,包括:
S171:将所述半有效测试集作为测试集,将通过调试器监测测试集在 ActiveX控件中的执行情况,确定所述测试集执行时的代码覆盖率。
S173:判断所述代码覆盖率是否符合适应度要求值,得到判断结果。
在其中一个实施例中,所述适应度要求值的范围区间为[0.6,0.8]。即,所 述代码覆盖率的范围为0.6~0.8。
S175:当判断结果为不符合要求时,对所述测试集进行变换,得到中间测 试集;并将所述中间测试集作为新的测试集,重复所述确定所述测试集执行时 的代码覆盖率及所述得到判断结果的步骤,直至所述判断结果为符合要求或重 复次数超过预设次数。
S177:当所述判断结果为符合要求或重复次数超过预设次数时,所述测试 集即为最终测试集。
如图3所示,在其中一个实施例中,所述半有效测试集包括若干元素,每 一元素为包括若干子元素的集合,步骤S150包括:
S151:根据所述类型库中数据类型的边界值分别进行加1、减1和乘以-1 的操作得到的值作为所述子元素。
S153:根据所述敏感函数的参数个数确定所述半有效测试集的各元素包含 的所述子元素的个数。
S155:通过所述子元素进行无序排列组合得到所述半有效测试集的元素。
在本实施例中,所述半有效测试集中的元素为一个集合,所述元素中的子 元素的个数为所述参数个数;所述元素中的子元素包括所述数据类型的边界值 分别进行加1、减1和乘以-1的操作所得到的值;所述半有效测试集中的元素为所 述元素中的各个子元素进行无序排列组合得到的集合。
当半有效测试集中的元素为一个只有一个子元素的集合时,可以将该半有 效测试集中的元素直接设置为一个子元素,而不需设置为一个集合。
在其中一个实施例中,当半有效测试集中的元素为一个子元素的个数大于3 的集合时,可以选择适应度值较大的三个参数对应的子元素进行无序排列组合, 而其它参数仅选择正常值,从而得到半有效测试集的元素。如此,可以节约资 源,避免测试过多的数据。
如图4所示,一种实施方式的ActiveX控件漏洞测试系统,包括:
敏感字确定模块110,用于解析ActiveX控件,获取所述ActiveX控件的类 型库信息,确定敏感关键字。
可通过模糊测试工具实现对ActiveX控件的解析,比如axfuzz、COMRaider、 AxMan和Dranzer等工具,从而可以获取到ActiveX控件的类型库信息。
根据类型库信息,可以确定敏感关键字。敏感关键字,是指容易出现漏洞 的敏感函数和属性所涉及的关键字,主要涉及网络操作、文件操作、命令操作 等,其具有针对性。漏洞主要包括不安全函数调用类漏洞和输入验证类漏洞, 输入验证类漏洞包括堆/栈的缓冲区溢出漏洞、整数溢出漏洞和格式化字符串漏 洞。敏感函数和属性主要包括内存拷贝函数、格式化字符串函数、文件读取函 数、用户输入函数、环境变量读取模块等。
在其中一个实施例中,敏感关键字包括:内存拷贝函数、格式化字符串函 数、文件读取函数、用户输入函数及环境变量读取函数的关键字。
敏感函数确定模块130,用于根据所述敏感关键字确定所述ActiveX控件中 的敏感函数。
将敏感函数和属性中的敏感关键字进行分类,确定正则表达式;并将ActiveX 控件中的函数通过正则表达式进行匹配可以确定ActiveX控件中的敏感函数。
可以通过IDAPro等逆向工具来确定敏感函数。
在其中一个实施例中,确定正则表达式的规则如下:
M={“memcpy”、“bcpy”};
S={“scanf”、“printf”};
F={“open”、“write”、“read”};
E={“environment”}.
其中,M指内存操作,S指字符串操作,F指文件操作,E指环境变量操作。 选取部分ActiveX控件中能够匹配成功的函数作为敏感函数。
由于敏感关键字具有针对性,故根据敏感关键字确定的敏感函数也具有针 对性。
半有效集确定模块150,用于根据所述敏感函数的参数个数及所述类型库信 息中的数据类型,确定半有效测试集。
根据类型库信息可以确定ActiveX控件中数据的数据类型。根据数据类型的 边界值可以构造半有效输入数据。具体地,首先,选取各种数据类型的边界值; 然后,以这些边界值为基数对它们进行加1、减1和乘以-1操作,从而得到半有效 输入数据。对于字符串长度的选取,采取特定长度内由短及长逐数增加、大长 度逐倍增加的策略,如,选取所有长度小于4096且长度为32的倍数的字符串, 以及长度大于4096且是4096倍数的字符串。
通过半有效输入数据及敏感函数的参数个数可以最终确定半有效测试集。
由于敏感函数具有针对性,故根据所述敏感函数的参数个数及所述类型库 信息中的数据类型,确定的半有效测试集也具有针对性。
最终集确定模块170,用于将所述半有效测试集作为初始测试集,将通过调 试器监测测试集在ActiveX控件中的执行情况而确定的所述测试集执行时的代 码覆盖率作为适应度值,进行测试集变换,确定最终测试集。
其中,测试集变换可以是随机指定测试集中各个参数对应的子元素的某一 位或某几位进行二进制反转。
在其中一个实施例中,将所述半有效测试集作为遗传算法的初始测试集, 将通过调试器监测测试集在ActiveX控件中的执行情况而确定的所述测试集执 行时的代码覆盖率作为遗传算法的适应度值,通过遗传算法对测试集进行变换, 并确定最终测试集。
在其中一个实施例中,首先,通过IDAPro等逆向工具分析所选取的敏感函 数的入口;然后,通过OllyDbg等调试器关联到ActiveX控件,在分析得到的敏感 函数的入口设置断点;最后,通过统计测试集触发的断点数量来确定代码覆盖 率。适应度函数F的值域为[0,1]。具体地,适应度函数F的计算公式如下:
其中,P表示测试集触发的断点数量;Psum表示ActiveX控件中设置的断点总 数。
在其中一个实施例中,根据ActiveX控件的接口复杂度和接口数量,可灵活 设置特定迭代次数或适应度要求值F’。在设置适应度要求值F’时,应遵循接口 越复杂越小的原则。具体地,适应度要求值F’的范围区间为[0.6,0.8]。
由于半有效测试集具有针对性,故将半有效测试集作为初始测试集,进行 变换最终得到的最终测试集具有针对性。
漏洞测试模块190,用于采用所述最终测试集对所述ActiveX控件进行测试, 并生成漏洞报告。
漏洞报告中记录了测试结果。若测试结果为出现异常情况,漏洞报告还包 括异常信息,供测试人员开展进一步验证。异常情况包括但不限于内存访问错 误、字符串读写错误、路径无效等。异常信息包括异常情况发生时ActiveX控件 执行的上下文信;还可以包括执行的调用堆/栈。
由于最终测试集具有针对性,故采用所述最终测试集对所述ActiveX控件进 行的测试,具有误报率低,容易触发ActiveX控件的安全漏洞,测试效率高等特 点。
上述ActiveX控件漏洞测试系统,敏感字确定模块110解析ActiveX控件, 获取所述ActiveX控件的类型库信息,有针对性地确定敏感关键字;并且敏感函 数确定模块130根据所述敏感关键字确定所述ActiveX控件中的敏感函数;半有 效集确定模块150根据所述敏感函数的参数个数及所述类型库信息中的数据类 型,有针对性地确定半有效测试集;最终集确定模块170将所述半有效测试集 作为初始测试集,将通过调试器监测测试集在ActiveX控件中的执行情况而确定 的所述测试集执行时的代码覆盖率作为适应度值,进行测试集变换,确定最终 测试集;漏洞测试模块190采用所述最终测试集对所述ActiveX控件进行有针对 性地测试,并生成漏洞报告。如此,得到的最终测试集具有针对性、误报率低, 容易触发ActiveX控件的安全漏洞,测试效率高。
如图5所示,在其中一个实施例中,最终集确定模块170,包括:
覆盖率确定单元171,用于将所述半有效测试集作为测试集,将通过调试器 监测测试集在ActiveX控件中的执行情况,确定所述测试集执行时的代码覆盖 率。
判断单元173,用于判断所述代码覆盖率是否符合适应度要求值,得到判断 结果。
在其中一个实施例中,所述适应度要求值的范围区间为[0.6,0.8]。即,所 述代码覆盖率的范围为0.6~0.8。
变换迭代单元175,用于当判断结果为不符合要求时,对所述测试集进行变 换,得到中间测试集;并将所述中间测试集作为新的测试集,重复重复调用所 述覆盖率确定单元及所述判断单元,直至所述判断结果为符合要求或重复次数 超过预设次数。
最终确定单元177,用于当所述判断结果为符合要求或重复次数超过预设次 数时,所述测试集即为最终测试集。
如图6所示,在其中一个实施例中,所述半有效测试集包括若干元素,每 一元素为包括若干子元素的集合,半有效集确定模块150包括:
子元素确定单元151,用于根据所述类型库中数据类型的边界值分别进行加 1、减1和乘以-1的操作得到的值作为所述子元素。
个数确定单元153,用于根据所述敏感函数的参数个数确定所述半有效测试 集的各元素包含的所述子元素的个数。
元素确定单元155,用于通过所述子元素进行无序排列组合得到所述半有效 测试集的元素。
在其中一个实施例中,所述半有效测试集中的元素为一个集合,所述元素 中的子元素的个数为所述参数个数;所述元素中的子元素包括所述数据类型的 边界值分别进行加1、减1和乘以-1的操作所得到的值;所述半有效测试集中的元 素为所述元素中的各个子元素进行无序排列组合得到的集合。
当半有效测试集中的元素为一个只有一个子元素的集合时,可以将该半有 效测试集中的元素直接设置为一个子元素,而不需设置为一个集合。
在其中一个实施例中,当半有效测试集中的元素为一个子元素的个数大于3 的集合时,可以选择适应度值较大的三个参数对应的子元素进行无序排列组合, 而其它参数仅选择正常值,从而得到半有效测试集的元素。如此,可以节约资 源,避免测试过多的数据。
以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但 并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的 普通技术人员来说,在不脱离本发明构思的前提下,还可以做出多个变形和改 进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权 利要求为准。
机译: 识别ActiveX控件分发站点,检测ActiveX控件中的安全漏洞并将其免疫的方法
机译: 查找和证明ActiveX控件和设备中的漏洞的方法以及识别ActiveX控件的方法
机译: 查找和证明ActiveX控件和设备中的漏洞的方法以及识别ActiveX控件的方法