一种基于变异策略的并行模糊测试调度方法及装置与流程

文档序号:18475206发布日期:2019-08-20 20:56阅读:617来源:国知局
一种基于变异策略的并行模糊测试调度方法及装置与流程

本发明涉及并行模糊测试领域的调度技术,主要是结合模糊测试中变异策略(mutatorstrategy)对目标程序的作用效果进行动态并行调度,提高并行模糊测试执行效率。



背景技术:

模糊测试作为一项重要的漏洞挖掘技术,由于其对程序源代码依赖程度低,从发现漏洞到复现漏洞容易等特点,被广泛的应用到了数据库应用程序、安全产品(如防火墙等)、操作系统、web应用、应用程序、网络设备(交换机等)等目标的漏洞挖掘过程中。例如,微软在将其产品推向市场之前大约有20%到25%的漏洞都是通过模糊测试发现的。但是,由于在模糊测试的黑盒特性,在生成测试用例过程中所使用到的变异方法是随机的,随机的变异方法容易产生冗余用例,从而严重的影响到了模糊测试的效率。因此,如何避免模糊测试应用过程中的冗余测试,提高模糊测试路径覆盖率和异常触发率便成为了安全领域研究人员研究热点。

模糊测试作为一种随机自动化测试技术需要消耗大量的计算资源,随着云计算应用的普及,各大厂商和机构均利用并行化方法提高模糊测试效率。如谷歌的并行化模糊测试系统clusterfuzz利用数百台虚拟机器进行并行测试;微软推出的projectspringfield项目利用基于云的并行系统为软件开发者提供软件安全检测服务。可见,并行模糊测试已成为工业界的通用测试方法,并行模糊测试方法能够有效缓解模糊测试随机性和盲目性导致的测试效率低等问题。但是现有的并行模糊测试方法由于缺少实例间协同机制,单纯的利用计算资源进行多实例并行方法不能有效缓解模糊测试的高冗余、低覆盖率等问题。

在现有的基于变异的模糊测试方法中,模糊测试器会对输入样本进行两个阶段的处理,第一阶段是对输入样本进行确定性的有序变异,即对样本完整的进行逐位翻转等有序变异,第二阶段是对输入样本进行随机变异,在随机变异阶段,模糊器随机选取一种变异策略对样本随机位置进行变异,并通过重复执行该过程实现对输入样本的变异。由于这种变异方法产生的输入用例具有很大的随机性,在多实例上对一个测试目标的模糊测试在一定程度上增加了模糊测试覆盖到更多程序路径以及触发更多异常的概率。但是直接以多实例并行的方法进行模糊测试规模化应用存在如下问题:

(1)由于模糊测试本身的随机性、盲目性的限制,在多实例上直接使用并行模糊测试会造成大量的冗余,不能充分提高并行模糊测试的效率。

(2)虽然随机变异阶段产生变异的位置不是确定的,但是针对不同的被测程序,可能会有不同的优势变异策略集合(优势变异策略是指应用其所产生的输入用例相对于其他变异策略来说可以触发更多的新路径),因此在多实例中直接使用传统的变异方式进行并行模糊测试难以充分发挥优势策略的变异优势,不能充分提高并行模糊测试的效率。

综合上述并行模糊测试和基于变异模糊测试方法的背景,为了提高并行模糊测试中的测试综合覆盖率和漏洞挖掘效果,本发明提出了一种基于变异策略并行的模糊测试调度方法及装置。



技术实现要素:

并行模糊测试可以利用大规模的计算资源作为测试实例并行的进行模糊测试,每个测试实例都可以对相同的被测程序进行模糊测试,大规模并行模糊测试可以有效的提高模糊测试的效率。但是如果在每个测试实例对相同的被测试程序都使用相同的变异策略集合随机进行组合应用来生成测试用例,容易出现大量的冗余,从而影响并行模糊测试的效率。因此如何在大规模的并行模糊测试的测试实例中优化变异策略的调度,以实现在限定时间内挖掘出尽可能多的安全漏洞是一个值得研究的问题。

为了克服现有并行模糊测试技术的不足,本发明提出了基于变异策略的并行模糊测试调度方法,利用确定性变异和基于优势变异策略的随机变异结合的方式,提高并行模糊测试的效率。

本发明的技术方案为:

一种基于变异策略的并行模糊测试调度方法,其步骤包括:

1)对模糊测试器中用于生成测试用例数据的变异策略进行静态分配,为并行的不同测试实例分配不同的变异策略;

2)各测试实例根据分配的变异策略生成测试样本对设定目标程序进行模糊测试过程中,收集不同变异策略对该目标程序作用时产生的异常数目和测试覆盖率信息;

3)根据各变异策略对应的异常数目和测试覆盖率信息,计算各变异策略对该目标程序的优势权重;

4)根据变异策略的优势权重建立并行调度模型,动态优化并行模糊测试调度方案。

进一步的,计算变异策略的优势权重的方法为:

21)基于测试实例i所分配的变异策略i对初始输入种子测试用例进行变异,生成多个待测试样本;

22)执行该目标程序并使用插桩工具对该目标程序进行插桩;

23)调度测试实例对步骤11)中生成的测试样本进行逐一的测试并对该目标程序进行实时监控,以获取程序异常数mbug;

24)对该目标程序运行过程中插桩获取的信息进行统计,更新该目标程序的测试覆盖率信息ccov;

25)判断步骤24)中收集到的测试覆盖率信息是否覆盖到了该目标程序的新路径,如果是则记录该测试样本为有效测试用例;

26)分别统计所有测试样本对应的程序异常数和测试覆盖率信息,并进行归一化处理,得到该变异策略i的归一化异常率crashmutator和归一化测试覆盖率coveragemutator;

27)根据该变异策略i的异常率crashmutator和测试覆盖率coveragemutator计算该变异策略i的优势权重。

进一步的,使用公式scoremutator=α*crashmutator+β*coveragemutator计算出每个变异策略对应的优势权重scoremutator;其中,α、β表示两个因素的影响系数,α、β取值在0至1之间,且α+β=1。

进一步的,根据变异策略优势权重建立并行调度模型,动态优化并行模糊测试调度方案的方法为:

41)选取优势权重靠前的k个变异策略作为该目标程序的优势变异策略,记为mrk;然后更新每个测试实例上采用的变异策略集合;其中,测试实例i初始静态分配的变异策略集合为mri,更新后的变异策略集合mri’=mriumrk,每个变异策略被调度到的概率为scorem表示测试实例i中变异策略m的优势权重,表示测试实例i中所有变异策略mri’的优势权重之和;

42)测试实例i基于变异策略集合mri’生成该目标程序的测试样本,对该目标程序进行测试;

43)测试实例i运行时间t后,将保留的有效测试用例发送给其他测试用例;并接收其他测试实例发送过来的有效测试用例;其中,测试实例i生成的测试样本a对该目标程序进行测试的测试覆盖率信息覆盖到了该目标程序的新路径,则该测试样本a为有效测试用例;

44)测试实例i将其他实例同步过来的有效测试用例作为种子用例继续进行生成该目标程序的测试样本,对该目标程序进行测试。

进一步的,采用四元组(目标程序,变异策略,异常数,路径覆盖率)记录变异策略对应的异常数目和测试覆盖率信息。

一种基于变异策略的并行模糊测试调度装置,其特征在于,包括静态分配模块、信息采集模块、优势权重计算模块、优化调度模块和多个测试实例;其中,

静态分配模块,用于对模糊测试器中用于生成测试用例数据的变异策略进行静态分配,为并行的不同测试实例分配不同的变异策略;

测试实例,用于根据分配的变异策略生成测试样本对设定目标程序进行模糊测试;

信息采集模块,用于收集模糊测试过程中,不同变异策略对该目标程序作用时产生的异常数目和测试覆盖率信息;

优势权重计算模块,用于根据各变异策略对应的异常数目和测试覆盖率信息,计算各变异策略对该目标程序的优势权重;

优化调度模块,用于根据变异策略的优势权重建立并行调度模型,动态优化并行模糊测试调度方案。

本发明设计的基于变异策略调度方法的测试对象是一个测试软件,测试软件可以对应一个或者多个输入种子集合和变异策略的集合,测试过程中的动态调度是针对模糊测试器所包含的变异策略进行的。每次调度是为一个测试实例的测试软件选取优势变异策略,每次调度过后会将优势变异策略加入到其他测试实例中,然后针对该待测试软件以及对应的输入进行指定数目的迭代测试,测试完成后进行下一轮的调度过程,直到整个测试任务的完成。

本发明在并行模糊测试的基础上利用测试过程的执行信息进行反馈指导变异策略的调度,在保证并行模糊测试执行效率的基础上,同时能够动态的调整各个实例上所使用的变异策略集合,更加有效的发现不同的安全漏洞。实现基于变异策略的并行模糊测试调度方法需要解决以下几个关键问题:

关键问题1:如何选取优势变异策略

要基于优势变异策略实现并行模糊测试变异策略调度方法来提高模糊测试的效果,如何来选取优势变异策略是需要首先考虑的问题。而要解决该问题,首先要考虑用什么样的标准来衡量某一个变异策略的测试效果。模糊测试是为了更好的发现待测试软件中的漏洞,而要发现软件中更多的漏洞首先要覆盖到程序的更多路径。因此,模糊测试执行效果的衡量需要从两个方面进行,首先是程序产生的异常数量,能够体现模糊测试发现漏洞的能力;其次是模糊测试执行过程能够覆盖到的程序路径数量,覆盖到的程序路径越多,发现程序漏洞的概率越大,从而体现出模糊测试的执行效果更优。这两类反馈信息从不同的方面体现了模糊测试的执行效果,因此本发明选取测试过程中产生的异常数量和覆盖率信息作为衡量变异策略测试效果的指标。

在选定变异策略的衡量指标的前提下,在调度执行的过程中我们选取测试效果最好的变异策略作为针对该目标软件的优势变异策略。

关键问题2:如何在各个测试实例上完成变异策略的动态调度

在大规模并行模糊测试系统中,不同的测试实例并发的进行模糊测试,而在选取出优势变异策略的前提下如何在各个实例上分配优势变异策略以提高并行模糊测试的效果就成为了一个需要解决的关键问题。本发明将对问题1中选取的优势变异策略建立调度模型,利用调度模型对每次测试任务进行动态的调度执行,以取得更优的并行模糊测试效果。

本发明提出的基于变异策略的模糊测试并行调度方法具有以下优点和有益效果:

(1)该方法可以扩展到所有的大规模的基于变异的模糊测试并行系统中,利用优势变异策略来优化不同目标程序的并行模糊测试执行效果,因此,本方法具有普遍适用性。

(2)该方法使用程序异常和覆盖率的反馈信息来选取优势变异策略,这样做可以在低开销的情况下尽可能的提高并行模糊测试的效用。

(3)该方法可以在各个测试实例中动态的实现变异策略的调度和调整,具体的实施过程可以根据被测试软件和测试需求的不同进行自主的调度模型定制和扩展,具有可扩展性和较高的灵活性。

附图说明

图1是基于优势变异策略并行的模糊测试调度方法的实施步骤图。

图2是变异策略的优势权重的计算流程图。

图3是基于变异策略的并行模糊测试动态调度方案图。

图4是采用本发明的并行调度方案和默认并行调度方案的实验结果对比。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。

本发明基于优势变异策略的并行模糊测试的调度方法,具体的实施分成如图1的4个步骤,具体描述如下:

步骤1:变异策略的静态分配,实现变异策略的并行化应用

本发明对模糊测试器中用于生成测试用例数据的变异策略实现了选取控制,通过对变异策略进行静态分配,在并行模糊测试的不同测试实例中使用不同的变异策略进行测试用例生成,本步骤的变异策略静态分配针对所有的随机变异策略进行,每个测试实例采用一种变异策略进行测试用例生成和测试,该步骤完成并行模糊测试中变异策略的初始化调度。

例如,针对一个包含10种变异策略的模糊测试器进行测试,10种变异策略的集合表示为mr,测试过程分别使用10个测试实例,每个测试实例采用一种变异策略mri进行测试用例生成和测试。

步骤2:选择适当的动态反馈信息,衡量各测试实例的模糊测试效果

要实现基于优势变异策略的并行模糊测试调度方法,首先需要选取适合的反馈信息对调度进行动态的调整。执行反馈信息需要体现模糊测试的执行效率和测试产生漏洞的有效性。根据经验显示,模糊测试产生的被测试程序的异常数量和模糊测试所覆盖到的被测试程序的路径可以体现模糊测试的具体执行效率。在具体选取过程中,本发明以测试过程中产生的异常数量来衡量模糊测试过程发现漏洞的能力;另外,使用被测试软件的路径覆盖率作为模糊测试执行过程中衡量覆盖到的被测试程序路径的指标,从而体现模糊测试过程整体的覆盖率信息。因此,本发明采用异常数量和路径覆盖率这两个指标作为反馈信息指导基于变异策略的并行调度方法。

例如,本发明在各测试实例根据分配的变异策略生成测试样本对设定目标程序进行模糊测试过程中,收集模糊测试器的不同变异策略对目标程序作用时产生的异常数目、测试覆盖率信息,并表示为(#program,#mutator,#bug,#coverage)四元组信息。

步骤3:获取执行过程中的步骤2所描述的反馈信息,计算变异策略针对目标程序的优势权重

经过步骤2中对反馈信息的选择,在并行模糊测试过程中定期的动态获取每一个测试实例的(目标程序,变异策略,异常数,路径覆盖率)的四元组所表示的反馈信息,并完成汇总统计。由该四元组可知,我们需要在测试过程中收集某变异策略对应的测试实例中的异常数和路径覆盖率这两项数据。异常数获取需要对被测试程序进行实时的监控,并实现对每一次被测程序崩溃的记录(例如,在实际测试过程中,通过编写监控程序在程序执行过程中对程序状态和输出结果进行动态监控获取异常信息和数量)。程序执行过程中的覆盖率信息,可以通过使用插桩工具在被测试程序编译时候或者运行时刻进行插桩来完成,并在执行过程中获取到插桩信息并统计分析。

其中要计算变异策略的优势权重的执行流程如图2所示,具体描述如下:

(1)基于每个测试实例所分配的变异策略对初始输入种子测试用例进行变异,从而生成大量的待测试样本,当达到迭代次数n或者生成测试样本的限定时间t时进行(2)。

(2)执行目标程序并使用插桩工具对被测试程序进行插桩,便于后续获取执行过程中的程序路径覆盖率信息。

(3)调度测试实例对(1)中生成的测试样本进行逐一的测试,在对样本进行输入测试的同时启动监控程序,对被测试软件进行实时的监控,以获取程序异常数mbug。

(4)对程序运行过程中插桩获取的信息进行统计,更新目标软件的测试覆盖率信息ccov。

(5)判断(4)中收集到的覆盖率信息是否覆盖到了程序的新路径,如果是则记录该测试用例为有效测试用例。

(6)分别统计所有测试实例对应的程序异常和覆盖率信息,并进行归一化处理,分别用0至1之间的数据表示每个测试实例对应变异策略的异常率和测试覆盖率,分别表示为crashmutator和coveragemutator。

经过以上步骤,并行模糊测试系统获取到了各个测试实例上的变异策略对应的反馈信息,根据(6)统计的信息,计算各个实例对应的变异策略的权重,权重越大表示该变异策略对于被测试软件来说是优势变异策略。我们使用scoremutator=α*crashmutator+β*coveragemutator公式计算出每个变异策略对应的权重分值。其中crashmutator表示该变异策略的测试实例上程序异常率,其取值在0和1之间;coveragemutator表示该变异策略的测试实例中生成的测试用例对被测试程序的覆盖率,取值在0-1之间;其中α、β表示两个因素的影响系数,其中α、β取值在0至1之间,且α+β=1,两个系数的取值可以根据需求与侧重进行设置,例如对于异常数和目标软件覆盖率两者同样关注的情况可以将其分别设置为0.5。

步骤4:根据变异策略优势权重建立并行调度模型,动态优化并行模糊测试调度方案

基于步骤3对各个变异策略的权重计算,本发明对优势变异策略的选取使用topk的方法,对于权重评分前k个的变异策略标记为针对被测试软件的优势变异策略,表示为mrk。然后,根据步骤3中优势策略权重计算结果增加测试实例上采用优势变异策略的比例,选取优势的变异策略对各个测试实例采取的变异策略进行优化调度,增加优势策略应用比例的模型不受本发明所列具体方法的限制。

此外,为了提高并行模糊测试调度过程中生成测试用例的深度和广度,拟采用基于时间片的有效样本(其中有效测试样本是指能够新增对目标软件的测试覆盖率的测试样本,在步骤3测试中标记)同步的方法实现不同变异策略的交叉作用。

具体的动态调度优化方案示例如下:

(1)更新每个测试实例上采用的变异策略集合,针对测试实例i,初始静态分配的变异策略集合为mri,更新后mri’=mriumrk,其中在测试实例i中每个变异策略被调度到的概率为其中scorem表示测试实例i中变异策略m的优势权重,表示测试实例i中所有变异策略mri’的优势权重之和;scorem表示测试实例i中变异策略m的优势权重。

(2)各个测试实例基于(1)中的变异策略集合进行输入测试用例数据变异,并生成测试用例进行测试。

(3)各测试实例运行时间t后,将各个测试实例中保留的有效测试用例发送给其他测试实例。

(4)每个测试实例将其他实例同步过来的有效测试用例作为输入种子用例继续进行变异和测试用例生成。

最后,我们通过对比使用本发明的基于变异策略调度方案和采用默认调度方案的原始afl这两种方案的实验结果,来验证该发明方法的有效性。在整个实验中,两种方案都是在17个并行测试实例上对c语言的xml程序库libxml2的xmllint进行模糊测试,其中方案1采用本发明的基于变异策略的调度机制,方案2采用默认的并行调度机制,测试对比如图4所示。通过图4可以看出,相同的实验环境且并行规模相同的条件下,采用基于变异策略并行的调度机制的并行模糊测试产生的路径覆盖率明显高于默认的调度方案所产生的路径覆盖率。因此,基于优势变异策略并行的模糊测试的调度机制可以有效的提高并行模糊测试的综合测试效用。

尽管为说明目的公开了本发明的具体内容、实施算法以及附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1