基于条件与参数变异的第三方构件脆弱性测试方法

文档序号:6516321阅读:122来源:国知局
基于条件与参数变异的第三方构件脆弱性测试方法
【专利摘要】本发明提供了一种基于条件与参数变异的第三方构件脆弱性测试方法,包括:通过第三方构件的类型库分析构件接口,获得构件的类型信息;根据构件的描述和IDL,得到构件的安全需求规约;从需求规约中获得方法的前置条件和后置条件,对方法序列进行条件变异测试;需求中提取参数值约束、关系约束,对方法序列进行参数规约变异测试;根据步骤3和步骤4的测试结果,得到脆弱性测试报告。本发明对显式安全异常有一定的效果,可以检测构件的安全性,提高了测试的效率。
【专利说明】基于条件与参数变异的第三方构件脆弱性测试方法
【技术领域】
[0001]本发明属于第三方构件脆弱性测试【技术领域】,涉及一种基于条件与参数变异的第三方构件脆弱性测试方法。
【背景技术】
[0002]随着构件技术的发展,越来越多的商业软件厂商购买使用第三方构件,包括一些安全关键软件如医疗、银行等行业软件。近30年来的研究主要集中于构件的功能性测试,尽力发掘构件在开发和实现上的错误,而构件的脆弱性测试是当前构件发展中不容忽视的问题,尤其是第三方构件的脆弱性问题。第三方构件由于源代码不可知和高度独立性,使得白盒测试技术无法成功使用,这给第三方构件的脆弱性测试带来了困难和挑战。
[0003]脆弱性测试是指检测一切威胁计算机系统安全的构件缺陷,如违背安全需求、内存泄露、缓冲区溢出等,目前构件脆弱性测试主要有构件安全测试描述与安全评估、构件配置及封装安全性测试、利用形式化方法等,这些研究未提供测试算法或没有对方法进行实验验证。Fakhra等人提出了用于提高构件安全可测试性的安全需求说明规范,从资源分配、环境配置及方法调用等方面进行规范说明,但未涉及安全规范的测试方法。Bertolino等人提出一种构件集成测试的框架,框架中给被测试构件增加一个间谍模块,用于收集和比较构件运行时的状态及资源分配情况,如果相关运行状态或环境违反了安全需求说明,则可以断定其存在安全异常。M.Haddox等人提出对待测构件进行封装的封装测试方法,封装器中增加构件的输入和输出测试接口,结合构件需求说明进一步分析测试第三方构件。但Bertolino和M.Haddox的方法只在理论上进行了初步探索,其可行性没有进行比较有效的实验验证。

【发明内容】

[0004]基于现有技术中第三方构件的测试方法中并没有考虑到结合构件需求说明和参数等信息,从来带来了测试的不准确性和完整性,因此本发明提出一种基于条件与参数变异的第三方构件脆弱性测试方法,解决了上述问题。
[0005]本发明提供了一种基于条件与参数变异的第三方构件脆弱性测试方法,包括:
[0006]步骤I通过第三方构件的类型库分析构件接口,获得构件的类型信息;
[0007]步骤2根据构件的描述和IDL,得到构件的安全需求规约;
[0008]步骤3从需求规约中获得方法的前置条件和后置条件,对方法序列进行条件变异测试;
[0009]步骤4需求中提取参数值约束、关系约束,对方法序列进行参数规约变异测试;
[0010]步骤5根据步骤3和步骤4的测试结果,得到脆弱性测试报告。
[0011]第一方面,上述步骤3具体包括:
[0012]依次检测方法序列中的每个方法,若方法存在前置条件,根据基于约束方程组的测试用例生成算法,生成合法的测试数据,若合法的测试数据出现异常或违背后置条件,则所述第三方构件存在安全漏洞;
[0013]根据前置条件变异算法,生成前置条件变异体,并根据变异的前置条件和基于约束方程组的测试用例生成算法,生成违反前置条件的测试用例,如果方法正确运行且结果与预期不同,则说明所述第三方构件中的判断存在漏洞,将测试用例、方法信息和变异的条件记录到条件变异测试报告;
[0014]若方法不存在前置条件,用边界值和随机测试方法获取测试用例,结合后置条件判断方法是否正确,如果违背后置条件,将测试用例和后置条件记录到条件变异测试报告。
[0015]第二方面,上述步骤4具体包括:
[0016]依次检测方法序列中的每个方法,并且从安全需求规约中获取方法参数相关的值约束和关系约束,若方法存在参数,根据基于参数约束的测试用例生成算法,生产测试用例。
[0017]将测试用例依次带入方法中,运行方法;
[0018]若实际结果与期望值不同,将方法信息、参数信息和用例写入到参数变异测试报告中;
[0019]得到参数变异测试报告。
[0020]第三方面,上述前置条件变异算法包括:
[0021]将方法的前置条件化成析取范式,即表示成若干个子项的析取,每个子项是若干个关系式的合取;
[0022]对第一个子项调用子项变异方法得到第一个子项的所有变异体集;
[0023]对第二个子项调用子项变异方法得到第二个子项的变异体集;
[0024]依次遍历两个变异体集,若分别存在变异式s和t,s和t不包含互斥的关系表达式,则将s与t相与并入到集合T中。
[0025]第四方面,上述基于参数约束的测试用例生成算法具体包括:对方法的每个参数调用单参数变异值集函数,对单个参数作用相关的所有变异算子,参数规约变异的算子根据类型进行定义,得到变异值集;若参数是数值类型,从其值集中删除不满足值约束的变异值,否则删除满足值约束的变异值;若参数个数为一个,返回变异值集作为最终的测试用例集;若参数个数为两个,进行配对组合分析生成测试用例集;若参数超过三个,进行三因素组合覆盖生成测试用例集;将上述两种情形生成的用例集排除满足参数间关系约束的用例,即得到最终的测试用例集。
[0026]本发明有益的效果是:1.条件变异利用提出的基于约束方程组的测试用例生成算法生成满足前置条件的测试用例,并提出前置条件变异算法,生成前置条件的若干个变异体,结合基于约束方程组的测试用例生成算法生成违背前置条件的测试数据,并通过条件变异漏洞检测算法进行漏洞检测。
[0027]2.参数变异方法利用基于参数约束的测试用例生成算法根据参数的类型作用相关的所有算子生成测试数据,通过组合覆盖缩小测试集,筛选出违背参数间关系约束的测试用例,并结合安全漏洞检测算法从参数角度检测构件的安全性。
[0028]3.基于条件和参数变异策略有完备的安全需求说明(它不仅包括记录了构件方法和属性,还包括方法前置条件、后置条件、参数相关的约束);安全测试方法框架被定义和描述;条件变异算法和参数变异算法被提出生成变异方法序列;漏洞检测算法被提出检测构件是否安全;实验结果表明本发明的方法对显式安全异常有一定的效果,可以检测构件的安全性,提高了测试的效率。
【专利附图】

【附图说明】
[0029]图1是关系运算符引用错误算子RRF示意图;
[0030]图2是本发明实施例的基于条件与参数变异的第三方构件脆弱性测试方法流程图;
[0031]图3是本发明实施例的参数规约变异算子的描述和示例示意图;
[0032]图4a本发明实施例的构件详细信息表;
[0033]图4b本发明实施例的实验结果表;
[0034]图4c本发明实施例的实验结果比较表;
[0035]图5a本发明实施例的利用参数变异方法进行实验的信息表;
[0036]图5b本发明实施例的利用参数变异方法进行实验的结果表;
[0037]图6是参数变异和Fuzz测试方法和边界值的实验结果比较示意图。
【具体实施方式】
[0038]下面结合附图和实施例对本发明作进一步说明,应指出的是,所描述的实施例仅旨在便于对本发明的理解,而对其不起任何限定作用。
[0039]本发明的目的针对第三方构件显示异常的特点,提供一种基于第三方构件方法的前置条件、后置条件和参数规约变异的脆弱性测试方法,有效地检测第三方构件的显示异常,提供了完善的脆弱性测试框架和变异算法,并且进行了充分的实验,证明了方法的可行性和有效性。
[0040]首先,定义本发明实施例所涉及到的几个概念定义如下,
[0041]定义I前置条件的特征为方法被调用前必须满足的一系列约束条件;
[0042]定义2后置条件的特征为当方法调用结束后应该满足的条件,后置条件在方法运行结束后判断执行操作的正确性。
[0043]方法的前置条件、后置条件可由方法的返回值、方法的输出、参数、环境变量结合关系运算符、算数运算符、布尔运算符等表示成的布尔表达式;
[0044]定义3 条件变异算子 RRF (Relational Operator Reference Fault Operator)将单个简单的关系表达式的关系符转变为相反的符号,如图1所示。
[0045]定义4值约束的特征为构件方法参数存在数值约束,如一个方法参数index表示数组的索引index≤O。
[0046]定义5参数间的关系约束的特征是一个方法中的参数之间也可能存在约束,参数间的约束表达式用来模拟程序中容易发生错误或遗漏的判断布尔表达式,如判别三角形类别的方法,a, b, c为三角形的三边,该方法易漏判断的是非三角形的判断,参数间的约束式为:a+b>c&&a+c>b&&b+c>a。
[0047]定义6方法序列:构件方法可行的执行序列,方法序列可由构件的迁移树和基路径测试算法生成方法序列,或者采用数据挖掘技术提取出执行序列。
[0048]定义7前置条件的DNF形式:方法前置条件是由若干个关系式和布尔运算符表示的。在布尔逻辑中,一个布尔公式可以表示成等价的析取范式DNF(Disjunctive NormalForm),析取范式指一个布尔公式是若干个单元的析取,每个单元是若干个文字的合取。采用布尔逻辑中析取范式的定义,方法的前置条件可以表示成析取范式,前置条件是若干个子项的析取,每个子项是若干个关系表达式的合取,将每个关系表达式视为布尔逻辑中的一个文字,所有前置条件的形式为Εχρ11&&Εχρ12...&&Expls|...| Expml&&Expm2...MExpmt, Expij为一个关系式。
[0049]定义8约束方程组:根据定义5描述的析取范式的前置条件,将Expl IMExp12...&&ExpIs |...| ExpmI&&Expm2...MExpmt 转化为 m 个约束方程组
[0050]
【权利要求】
1.一种基于条件与参数变异的第三方构件脆弱性测试方法,其特征在于,包括: 步骤I通过第三方构件的类型库分析构件接口,获得构件的类型信息; 步骤2根据构件的描述和IDL,得到构件的安全需求规约; 步骤3从需求规约中获得方法的前置条件和后置条件,对方法序列进行条件变异测试; 步骤4需求中提取参数值约束、关系约束,对方法序列进行参数规约变异测试; 步骤5根据步骤3和步骤4的测试结果,得到脆弱性测试报告。
2.如权利要求1所述方法,其特征在于,所述步骤3具体包括: 依次检测方法序列中的每个方法,若方法存在前置条件,根据基于约束方程组的测试用例生成算法,生成合法的测试数据,若合法的测试数据出现异常或违背后置条件,则所述第三方构件存在安全漏洞; 根据前置条件变异算法,生成前置条件变异体,并根据变异的前置条件和基于约束方程组的测试用例生成算法,生成违反前置条件的测试用例,如果方法正确运行且结果与预期不同,则说明所述第三方构件中的判断存在漏洞,将测试用例、方法信息和变异的条件记录到条件变异测试报告; 若方法不存在前置条件,用边界值和随机测试方法获取测试用例,结合后置条件判断方法是否正确,如果违背后置条件,将测试用例和后置条件记录到条件变异测试报告。
3.如权利要求1所述方法,其特征在于,所述步骤4具体包括: 依次检测方法序列中的每个方法,并且从安全需求规约中获取方法参数相关的值约束和关系约束,若方法存在参数,根据基于参数约束的测试用例生成算法,生产测试用例。将测试用例依次带入方法中,运行方法; 若实际结果与期望值不同,将方法信息、参数信息和用例写入到参数变异测试报告中; 得到参数变异测试报告。
4.如权利要求2所述方法,其特征在于,所述前置条件变异算法包括: 将方法的前置条件化成析取范式,即表示成若干个子项的析取,每个子项是若干个关系式的合取; 对第一个子项调用子项变异方法得到第一个子项的所有变异体集; 对第二个子项调用子项变异方法得到第二个子项的变异体集; 依次遍历两个变异体集,若分别存在变异式s和t,s和t不包含互斥的关系表达式,则将S与t相与并入到集合T中。
5.如权利要求3所述方法,其特征在于,所述基于参数约束的测试用例生成算法具体包括:对方法的每个参数调用单参数变异值集函数,对单个参数作用相关的所有变异算子,参数规约变异的算子根据类型进行定义,得到变异值集;若参数是数值类型,从其值集中删除不满足值约束的变异值,否则删除满足值约束的变异值;若参数个数为一个,返回变异值集作为最终的测试用例集;若参数个数为两个,进行配对组合分析生成测试用例集;若参数超过三个,进行三因素组合覆盖生成测试用例集;将上述两种情形生成的用例集排除满足参数间关系约束的用例,即得到最终的测试用例集。
【文档编号】G06F11/36GK103617114SQ201310501450
【公开日】2014年3月5日 申请日期:2013年10月23日 优先权日:2013年10月23日
【发明者】陈锦富, 陈加梅, 詹永照, 杨鹤标, 苏晨飞 申请人:江苏大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1