本发明涉及软件测试中的并行模糊测试调度技术,主要是利用执行反馈信息对并行模糊测试进行动态调度,其中反馈信息包括执行产生的黑盒信息与白盒信息。
背景技术:
模糊测试是一种重要的软件测试技术,主要利用自动或半自动生成随机数据输入到测试软件,并监测测试软件执行结果是否正常来发现软件中的安全漏洞。模糊测试具有实现简单,容易复现等优点。但是随机生成和变异样本的方式生成的输入数据随机性大,对测试软件的代码覆盖率、路径覆盖率等没有保证,另外生成的样本数量大,样本有效性低。因此,如何利用模糊测试在限定的时间内发现尽可能多的不同漏洞是一个重要的问题。
目前,针对模糊测试的上述问题有两种解决办法,一种是利用并行来提高模糊测试的执行效率和发现漏洞的能力,另外一种是利用执行的黑盒反馈信息来调整模糊测试的迭代执行调度,以提高测试的有效性。
并行模糊测试利用大量的并行计算资源并发进行模糊测试,能够大大提高测试的速度和效率。但是由于模糊测试的黑盒特性,生成测试样本的随机性大,随着并行规模的增大,测试的异常产生重复率高。并行模糊测试中如果没有合理的反馈调度机制就无法充分挖掘不同的代码段的漏洞,无法利用潜在计算资源实现最有效的漏洞挖掘。因此,在并行模糊测试框架中缺乏资源分配和任务调度机制来提高资源的利用率和软件测试效率,无法达到在限定时间内发现尽可能多的漏洞的目的。
目前存在的具有调度能力的模糊测试方法大多使用单纯的黑盒测试信息进行反馈调度的。主要方法是利用执行过程中对测试产生的不同异常的分布情况进行模糊测试的输入种子文件和测试参数的动态选取。该方法能够利用异常产生的概率动态调整输入样本的被选中概率,在一定程度上能够提高不同异常触发的概率。但是该方法仅仅利用异常分布的黑盒统计信息进行反馈,缺乏对测试的整体性的衡量。仅使用黑盒的统计数据并不能精确的对模糊测试漏洞挖掘效果进行衡量,不同的路径覆盖上产生的异常不被区分,例如模糊测试产生的异常概率相同的情况下,不同路径覆盖率的测试所取得的测试效果是不同的,我们应该针对模糊测试过程中的路径覆盖率等白盒信息进行更精确的调度优化。因此,单纯使用黑盒信息不 能够有效的调整调度算法,不能最大可能的提高在指定时间内产生的不同异常的数目。
因此,综合上述模糊测试以及并行模糊测试的背景,为了提高模糊测试的效率,充分发挥并行模糊测试中计算资源的计算潜力,达到在限定时间内挖掘出尽可能多的不同漏洞的目的,本发明提出了一种黑盒与白盒信息相结合的执行反馈驱动的并行模糊测试技术。
技术实现要素:
并行模糊测试系统可以利用大规模的计算资源作为测试节点并发的进行模糊测试,每个测试节点都可以执行针对特定软件的模糊测试任务,测试节点之间是相互独立的,因此每个节点的测试效率都与单个节点的测试相同。在并行测试系统中,大规模的并行测试节点同时进行多个测试软件以及相同测试软件之间不同输入种子文件的测试,能够大规模的提高模糊测试的效率。根据本发明的测试经验显示,单纯的并行模糊测试虽然具备较高的测试速度,但是并行节点之间会产生大量的重复的异常和漏洞,不具备动态调度的并行测试并不能够充分的发挥计算资源的潜力挖掘出更多的不同漏洞。同时,并行测试节点之间的测试结果对模糊测试的效果是具有衡量意义的,因此,如何利用大量的测试结果对并行测试进行反馈调度,以提高测试触发漏洞的质量和数量,以实现在限定时间内挖掘出尽可能多的安全漏洞仍然是一个值得研究的问题。因此,针对该问题本发明提出了黑盒与白盒信息相结合的执行反馈驱动的并行模糊测试技术。
本发明设计的执行反馈驱动的并行模糊测试系统的测试对象是一个或多个测试软件集合以及每个测试软件可以对应一个或多个输入种子文件集合,测试过程中的动态调度是针对测试软件以及测试软件的输入种子文件(用于样本的变异生成)进行的。每次调度是为一个测试节点的依次测试任务选取待测试的软件同时为该测试软件选取相应的输入种子文件,每次调度选取后测试节点针对该软件及对应的输入进行指定数目的迭代测试,测试完成后进入下一次的调度选取过程,直至整体测试任务完成。
执行反馈驱动的并行模糊测试是根据测试节点执行过程中的测试结果对整体测试任务中每个测试软件及输入种子文件对应的测试效果进行量化更新,使用调度算法对各个测试软件进行模糊测试的测试效果进行量化评估,选取最有可能产生新的漏洞的软件作为下一次的模糊测试对象;然后使用相同的方法为测试软件选取输入种子文件进行调度执行。图1是执行反馈驱动的并行模糊测试系统框架。
如图1所示,执行反馈驱动的并行模糊测试框架主要分为并行控制模块以及测试执行模块两个部分,可以分别简称为控制模块和测试模块。虚线框里面是测试模块,测试模块主要负责模糊测试的执行,由大量测试节点组成,每个测试节点都对软件执行模糊测试并监控测 试结果,包括测试过程中程序执行是否正常的监控以及测试的白盒信息的统计(如代码覆盖率、路径覆盖率等)。虚线框外面是控制模块,控制模块主要负责并行测试模块的调度和分配执行。测试模块执行结束后,根据测试的反馈信息(包括测试的软件,输入样本及参数,执行正常与否,执行白盒信息统计等)对测试软件当前模糊测试效果量化指标进行更新。控制模块的调度选择器根据调度算法进行下一次模糊测试的测试目标进行选取。
本发明在并行模糊测试框架的基础上添加了根据黑盒与白盒等执行反馈信息实现模糊测试过程中的动态调度和输入选取的功能,既能够保证模糊测试的并行执行效率,同时能够根据测试过程中的异常分布以及执行白盒统计信息等信息进行动态的选取调度,能够更有效的发现不同的安全漏洞。实现执行反馈驱动的并行模糊测试需要解决以下几个关键问题:
关键问题1:如何衡量模糊测试的效果
要利用执行反馈信息进行动态并行调度来提高模糊测试的效果,如何来衡量模糊测试的效果是需要首先解决的问题。模糊测试的执行是为了挖掘软件中的安全漏洞,所以本发明将在限定的时间内发现最多的软件漏洞作为并行模糊测试的最终目标。模糊测试的执行过程中会产生两种测试结果信息,一种是黑盒的信息,例如发现漏洞的数目以及漏洞发现的分布规律等,另外一种是白盒信息,该类测试信息需要在测试的执行过程种动态的获取,例如测试的代码覆盖率和路径覆盖率等。因此,如何利用测试执行产生的信息对模糊测试的执行进行反馈调度以保证在限定时间内发现尽可能多的不同漏洞是需要解决的问题。
模糊测试的执行效果的衡量需要从两个方面进行,首先是测试发现的漏洞的数目、漏洞发现的分布情况等,能够体现模糊测试从整体功能上发现漏洞的能力,例如模糊测试能够发现的漏洞数目越多,则表示测试效果越好;其次,模糊测试执行的对测试软件的覆盖情况,例如测试的代码覆盖率或路径覆盖率,覆盖率越高表示执行测试对软件的覆盖性越好,测试的覆盖率越高表示能够发现不同代码段的漏洞的概率越大,也反应了测试的全面性。两类执行信息都从不同的方面体现了模糊测试的执行效果,单纯的一个反馈信息不能够全面的体现测试的执行效果的好坏。因此,本发明选取了黑盒与白盒两类信息相结合的执行反馈信息作为对当前测试执行效果的衡量指标。
关键问题2:如何利用执行反馈信息进行动态并行模糊测试调度
并行模糊测试系统框架中具备大规模的计算资源作为测试节点进行软件测试,不同测试节点可以并发的进行模糊测试,能够大大提高测试的效率。本发明使用的并行模糊测试系统框架支持一个或多个测试软件及相同测试软件的一个或多个不同输入种子样本文件的并行执行,因此,如何在测试执行过程中利用执行过程中的黑盒和白盒等反馈信息进行并行模糊测试的动态调度,实现对并行测试过程中一种或多种测试软件同时运行情况下,整个并行测试 系统能够测试发现最多的不同漏洞,同时针对每个测试软件也能够挖掘出尽可能多的不同漏洞,是一个需要解决的关键问题。本发明将对问题1中选取的执行反馈信息分别建立量化模型,同时根据量化后的指标建立调度模型,利用调度模型对每次测试任务进行动态的调度执行,以取得最有效的模糊测试效果。
本发明提出的执行反馈信息驱动的并行模糊测试动态调度技术具有以下优点和有益效果:
(1)针对所有的并行模糊测试框架都可以扩展该调度方法,利用程序的执行反馈信息优化模糊测试执行过程,因此,该方法具有普遍适用性;
(2)该方法利用执行的黑盒反馈信息与测试过程中的白盒信息相结合进行动态调度,能够在保证低开销的情况下尽可能的挖掘更多的漏洞,提高模糊测试的测试效果;
(3)该方法利用黑盒与白盒信息相结合来进行并行模糊测试的调度,实现过程能够自定义黑盒与白盒信息的影响比例,同时能够包含只利用黑盒或者白盒信息进行调度的情况,因此,该方法具备良好的兼容性;
(4)该方法利用执行反馈信息进行动态并行模糊测试调度,其中的反馈信息可以使用多种方式,例如代码覆盖率、路径覆盖率等,具体实施过程可以根据执行软件及测试需求的不同进行自主选取和调整,具有灵活扩展性。
附图说明
图1是执行反馈驱动的并行模糊测试框架图。
图2是单节点模糊测试执行流程示例图。
图3是并行模糊测试调度流程图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。
本发明执行反馈驱动的并行模糊测试动态调度技术,具体的实施分为以下几个步骤:
步骤1.执行反馈信息的选择
要实现执行反馈驱动的并行模糊测试的动态调度,首先需要选取合适的反馈信息对调度进行动态的调整。执行的反馈信息需要体现模糊测试的执行效率和测试产生漏洞的有效性,根据测试的经验显示,模糊测试产生的异常的分布情况,即模糊测试的测试软件所测试产生的安全漏洞的数目和分布等黑盒信息以及测试的覆盖率信息等白盒信息能够体现模糊测试的 具体执行效率。因此,本发明采用黑盒与白盒信息相结合的方式进行动态调度算法的设计。
例如,本发明可以采用异常产生的分布情况作为该测试软件或测试输入种子文件等的执行产生漏洞的能力和软件漏洞的产生概率的衡量指标;另外,可以使用路径覆盖率信息作为测试到目前为止对整个测试软件的测试覆盖率信息和对应输入种子文件的测试覆盖率信息,该信息能够体现目前模糊测试对整体测试的覆盖率。因此,采用模糊测试对测试软件的测试覆盖率及不同异常产生的分布作为模糊测试效率及发现安全漏洞能力的衡量指标。本发明可以使用(#program,#bug,#program_coverage)三元组表示测试软件,测试软件的不同异常信息,测试软件的路径覆盖率;或者使用(#program,#seed,#seed_bug,#seed_coverage)四元组表示测试软件,测试软件的输入种子文件,当前输入种子文件的模糊测试的不同异常分布信息,输入种子文件的测试覆盖率信息。
实际实现过程中可以使用上述示例的方式进行执行反馈信息选取和量化。
步骤2.执行过程中的反馈信息的获取
经过步骤1中对反馈信息的选取,我们需要实现执行过程中动态的获取执行信息,并进行动态的统计分析。由步骤1可知,我们需要在测试过程种对测试软件的黑盒信息进行统计,同时需要动态的获取测试过程中的白盒信息。同时,针对每款测试软件的输入种子文件集合中的种子文件的黑盒以及白盒信息进行动态统计。
对于测试过程中的黑盒信息,可以直接根据测试程序的执行结果进行统计分析。对于测试过程中的白盒信息的统计,我们需要在模糊测试执行过程中使用插桩工具进行动态插桩,在程序执行过程中动态获取模糊测试样本执行过程中的白盒信息(如执行过程经过的程序内部路径等),然后与程序的静态统计信息相比较,获取需要的覆盖率等白盒信息。具体来说,例如,我们要获取程序测试中的路径覆盖率信息,可以通过编写插桩程序实现对程序执行过程中经过的路径进行插桩统计,最后将测试过程中经过的路径与程序的静态整体路径信息相比较,可以获取程序的测试过程中的路径的覆盖情况。
以测试发现异常分布作为黑盒信息,测试的覆盖率作为白盒信息为例,测试模块执行模糊测试并动态获取执行反馈信息的执行流程如图2所示。
测试主要流程描述如下:
(1)模糊测试节点根据输入的种子样本文件和参数生成大量的测试样本;
(2)模糊测试工具使用测试软件对选取的测试样本进行测试执行,同时加载对测试执行正常与否的监控程序以及动态插桩工具对程序的执行状态及测试情况进行监控;
(3)该测试样本文件执行结束后获取该测试的执行状态以及执行白盒统计信息;
(4)首先将统计信息与程序的静态白盒信息相比较,获取当前测试输入种子样本的覆盖 率信息,并更新整个测试软件的覆盖率信息,得到测试软件以及对应测试输入样本文件的覆盖率信息,流程图中用#program_coverage和#seed_coverage表示;
(5)判断程序的执行结束状态,如果是正常结束,则选取下一个测试样本进行测试;否则,更新测试软件以及对应输入种子文件的异常统计信息;
(6)判断是否有未测试样本,如果有则继续选取测试样本,执行(2);否则退出该测试流程。
步骤3.反馈信息的衡量标准及动态调度模型设计
根据步骤1和2的描述,我们使用黑盒与白盒两类反馈信息作为模糊测试执行效果的衡量标准进行并行调度的设计。黑盒信息用于衡量模糊测试对漏洞的整体发现能力,白盒信息用于衡量模糊测试的整体覆盖情况,即对测试软件的测试的全面性。下面将两个指标的衡量方法以及调度模型进行具体的设计和描述:
(1)模糊测试发现漏洞能力的衡量
对模糊测试发现漏洞能力的衡量,可以使用发现漏洞的速率(rate)来描述,例如可以使用平均单位时间发现漏洞的个数、平均每单位测试样本数发现漏洞的数目、单位时间新增漏洞的数目等来衡量模糊测试发现漏洞的能力。例如,采用单位测试样本数目发现漏洞数目来衡量模糊测试发现漏洞能力的情况,我们利用公式来计算单位测试样本触发不同异常的能力,其中#unique_crash表示测试所产生的不同异常的数目,#test_case_num表示已测试样本的数目。对于测试软件和输入种子文件的产生异常能力都使用该方式进行衡量。使用速率来衡量模糊测试发现漏洞能力,rate越大表示模糊测试发现漏洞能力越强,即在限定测试数目或时间的情况下发现不同漏洞的概率越大。
(2)模糊测试的测试覆盖率衡量
现在通用的模糊测试方法中存在覆盖率低的问题,覆盖率低会导致在某些测试中难以到达的软件漏洞难以被发现。因此,我们在测试过程中使用白盒的覆盖率作为反馈信息对整个测试的调度进行优化,目的是达到尽可能的覆盖代码中更多的区域。实际使用过程中可以使用测试的代码覆盖率、路径覆盖率等覆盖信息进行衡量,在调度算法的设计中也可以考虑使用新增代码覆盖率、新增路径覆盖率等信息来衡量最新测试的覆盖和进展情况,指标的选取可以根据测试的目的和需求进行设定和调整。下面我们以总体路径覆盖率为例进行衡量指标设计的介绍,包括测试软件以及测试软件的输入种子文件的覆盖率计算方法的介绍。
首先,为了计算测试软件的测试覆盖率,我们首先要计算当前测试软件的所有输入种子文件的测试覆盖率情况。我们针对输入种子文件的路径覆盖率(coverageseed)计算方法如下:
其中,#tested_path表示测试软件的输入种子文件的已经测试到的路径信息,#program_static_path表示测试软件的静态的所有路径信息,所以coverageseed表示当前输入种子文件已经测试的样本对测试软件的路径覆盖率。
然后,根据测试软件的所有输入种子文件的路径覆盖率信息,计算测试软件已测的路径覆盖率。我们使用coverageprogram表示测试软件的路径覆盖率,计算方法如下:
其中,seedSet表示输入种子文件的集合,表示该软件的所有输入种子文件的路径覆盖的并集,#program_static_path表示测试软件的静态路径集合,coverageprogram表示测试软件已测得的路径覆盖率。
(3)模糊测试动态调度建模
模糊测试的动态调度模型需要综合考虑测试执行过程中的黑盒与白盒信息进行综合的调度,根据选取的测试执行反馈信息的量化数据进行建模。
因为我们的调度模型的选取会考虑多个方面的因素建立,而不同的影响因素量化数据之间可能存在数量级的差距等,因此,首先要将不同的反馈量化指标数据进行归一化处理,将所有的反馈数据映射为0到1之间的数据,方便进行不同反馈信息之间影响因子的确立。反馈信息归一化处理后,要对每个反馈信息确定其对模糊测试执行效果的影响,包括影响因素与执行效果的关系的确立以及其对整体调度的影响因子的确定。然后将建立起模糊测试调度与所有反馈信息之间的关系模型。下面以选取黑盒的漏洞发现效率rate与白盒信息覆盖率coverage为例子进行调度模型的建立。
首先,我们将两个衡量指标进行归一化处理,将所有的rate和coverage都映射为0到1之间的数据。然后,设定衡量指标与模糊测试效果之间的关系,我们选取的发现漏洞的速率越覆盖率都与模糊测试的效果成正比例关系,发现漏洞发现速率越大模糊测试效果越好,测试覆盖率越高,测试效果越好,因此被调度算法选中的概率应该越大。在此,我们分别将两个影响因子设置为α和β,一个分值来表示当前测试软件或输入种子文件被选中的概率大小,例如我们使用score=α*rate+β*coverage表示其分值,其中score越大被选中的概率越大。可以根据测试的需求调整α和β的值,其中可以设置某个值为0,则相当于不考虑某个 因素对测试的影响,例如当α为0时,则只考虑白盒信息进行并行模糊测试的调度,当β为0时,则只使用黑盒信息对并行模糊测试进行调度。
步骤4.根据反馈信息进行并行调度
经过前面的步骤设计我们完成了整个并行模糊测试流程中的执行反馈信息的选取,测试中执行信息的动态获取,以及反馈信息对动态调度模型的设计。最后,我们描述执行反馈信息驱动的并行模糊测试的动态调度的实现流程。并行模糊测试框架中的控制模块负责对整个并行测试的执行进行整体的调度,以保证计算资源的计算潜力得到充分发挥,同时能够达到最好的漏洞挖掘效果,即能够在限定时间内挖掘出尽可能多的不同漏洞。
针对本发明设计的执行反馈驱动的并行模糊测试调度框架,在每次并行模糊测试调度之前利用调度选择算法进行调度选取最有可能挖掘出有效漏洞的测试软件及输入种子样本文件进行测试。图3是控制模块负责调度选取的测试软件和输入种子文件的流程图。如该图所示,并行模糊测试的调度主要分以下几个步骤:
(1)从输入集合中选取待测试软件,选取使用步骤3中描述的标准进行,测试执行时所有测试软件的分数都为1,被选中的概率相同。
(2)在选定测试软件的基础上,选取该测试软件的输入种子样本文件,用于测试样例的生成。测试输入种子文件的选取利用步骤3中的衡量标准采用同(1)相同的方式进行选取。
(3)将选定的测试软件及输入种子文件作为测试输入进行测试,并监控测试的执行过程和执行结果,测试执行完成后更新测试软件和种子文件的异常分布及测试覆盖率信息。
(4)判断是否达到设定测试时间或数目限制,如果是则退出测试,执行结束;否则继续执行(1)进行选取和测试。
其它实施方式:
本发明主要对并行模糊测试的调度进行设计,调度过程中的反馈信息选取和调度模型的建立都不局限于本发明实施例中的具体描述。本发明描述的实施例主要是使用异常产生的速率和测试路径覆盖率两个方面的指标进行调度的描述的,在具体的实施过程中可以对调度模型中的反馈信息进行调整和自定义。同时,调度模型的建立也不局限于实施例中的描述,可以建立更加丰富或简洁的调度模型指导调度执行。
(1)模糊测试发现漏洞能力的衡量
模糊测试的执行效率的衡量方式不局限于本发明实施例中具体描述和使用的技术方案,可以采用其他的方式进行定量或定性的衡量。例如,可以对发现漏洞能力进行定性方式衡量, 根据测试漏洞发现的数目等设定发现漏洞能力的等级等方法来衡量。
(2)模糊测试的覆盖率衡量
测试覆盖率可以根据测试需求进行设计和获取,例如测试的覆盖率信息还可以使用循环覆盖、参数值覆盖、函式覆盖等其他的方式进行描述,在使用过程中技术人员可以根据测试的需求进行自定义的方式来获取反馈信息和建立衡量标准。
(3)模糊测试动态调度建模
调度算法的具体定义和实现方式也不局限于本发明实施例中的描述,本实施例中采用异常产生速率和路径覆盖率两个因素对调度进行指导,在实施中还可以使用多种不同的覆盖率指标混合的方式进行综合衡量,例如可以综合考虑路径覆盖率和参数值覆盖等因素建立更加细致的调度模型。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。