一种模糊测试的方法及装置与流程

文档序号:18108040发布日期:2019-07-06 11:48阅读:206来源:国知局
一种模糊测试的方法及装置与流程

本发明涉及计算机技术领域,具体涉及一种模糊测试的方法及装置。



背景技术:

模糊测试(fuzz testing,简称为“fuzzing”)是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃,断言失败,日志异常等,以发现可能的程序错误。

现有模糊测试技术每次都是使用海量数据进行测试,导致测试时针对性差,测试效率低下。



技术实现要素:

为了解决现有技术中模糊测试时针对性差,测试效率低下的问题,本发明实施例提供一种模糊测试的方法,可以使用已建立的测试数据与测试入口的类型的对应关系有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。本发明实施例还提供了相应的装置。

本发明第一方面提供一种模糊测试的方法,包括:

获取被测对象测试入口的类型;

从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型;

向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。

本发明第二方面提供一种模糊测试的装置,包括:

获取单元,用于获取被测对象测试入口的类型;

确定单元,用于从已建立的测试数据与测试入口的类型的对应关系中,确定所述获取单元获取的所述被测对象测试入口对应的测试数据的类型;

测试单元,用于向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。

本发明实施例采用从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型,向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试的方式,有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例中模糊测试的方法的一实施例示意图;

图2是本发明实施例中模糊测试的方法的另一实施例示意图;

图3是本发明实施例中模糊测试的方法的另一实施例示意图;

图4是本发明实施例中模糊测试的一示例示意图;

图5是本发明实施例中模糊测试的装置的一实施例示意图;

图6是本发明实施例中模糊测试的装置的另一实施例示意图;

图7是本发明实施例中模糊测试的装置的另一实施例示意图;

图8是本发明实施例中模糊测试的装置的另一实施例示意图;

图9是本发明实施例中模糊测试的装置的另一实施例示意图;

图10是本发明实施例中模糊测试的装置的另一实施例示意图。

具体实施方式

本发明实施例提供一种模糊测试的方法,可以使用已建立的测试数据与测试入口的类型的对应关系有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。本发明实施例还提供了相应的装置。以下分别进行详细说明。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参阅图1,本发明实施例提供的模糊测试的方法的一实施例包括:

101、获取被测对象测试入口的类型。

本发明实施例中被测对象为程序,测试入口的类型可以是程序中各个源文件的接口参数。

102、从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型。

本发明实施例中,测试数据与测试入口的类型的对应关系可以是通过的海量数据测试收集起来的。

103、向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。

本发明实施例中,采用从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型,向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试的方式,有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。

可选地,在上述图1对应的实施例的基础上,本发明实施例提供的模糊测试的方法的第一个可选实施例中,所述向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试时,所述方法还可以包括:

确定所述对应类型的测试数据所测试的所述被测对象中的代码行;

根据所测试的所述代码行的数量,计算所述对应类型的测试数据对所述被测对象的代码覆盖率,所述代码覆盖率用于评估所述对应类型的测试数据对所述被测对象的测试范围。

本发明实施例中,在模糊测试过程中,对应类型的测试数据在被测对象中可能执行其中的一行或多行代码,也可能不执行任何一行代码,如果不执行任何一行代码,则代码覆盖率为零,如果执行一行或多行代码,则可以根据所执行代码的行数和被测对象代码的总行数,计算出该测试数据对应的代码覆盖率。代码覆盖率可以量化的看出测试数据对被测对象的影响,可以从开始初始化测试时,就不断的计算各测试数据对被测对象的代码覆盖率,当连续的两个测试数据在测试时重复测试了相同的代码行时,对重复的代码行不进行记录,只记录有差异的代码行,这样就可以通过累加各测试数据的代码覆盖率来计算总的代码覆盖率。总的代码覆盖率可以反映出被测对象在模糊测试过程中被测试的程度,如果一个被测对象最后测试完的总的代码覆盖率达到95%,则可以说明该被测对象没被检测的盲区已经很少了,当然,如果总的代码覆盖可以达到100%,那么模糊测试就可以实现漏洞的完全检测了。

可选地,在上述模糊测试的第一个可选实施例的基础上,本发明实施例提供的模糊测试的方法的第二个可选实施例中,所述方法还可以包括:

建立所述对应类型的测试数据与被测对象的入口类型、所述代码行的行号与所述代码覆盖率之间的对应关系;

将建立的所述对应关系添加到测试数据库中。

本发明实施例中,在模糊测试的过程中,同时再不断的建立测试数据与被测对象的入口类型、所述代码行的行号与所述代码覆盖率之间的对应关系,将新建的该对应关系添加到测试数据库中,可以为后面的被测对象提供更多的参考,从而进一步提升后面被测对象的测试效率。

可选地,在上述图1对应的模糊测试的实施例、第一个可选实施例或第二个可选实施例的基础上,本发明实施例提供的模糊测试的方法的第三个可选实施例中,所述确定所述被测对象测试入口对应的测试数据的类型之后,所述方法还可以包括:

根据所述对应的测试数据的类型,使用测试数据规则库中的规则,生成所述对应类型的测试数据。

本发明实施例中,考虑到模糊测试需要的测试数据具有海量、不确定性等特点,将这些数据的生成规则总结出来,形成多个生成规则,构建测试数据规则库,在需要测试数据时,根据测试数据的类型即可以从测试数据规则库中获取相应的规则,通过对生成规则的排列组合方式,生成需要的测试数据。

测试数据生成规则库中的规则可以包括:分隔符:各种分隔符的汇总,例如,\r,\n,,=,>,<等,随机数:包括各种长度的随机数,二进制数据量:各种二进制数据流的组合,字符型,包括ascii、unicode在内的各种字符型数据,bit类型,byte类型,float类型等。

可选地,在上述模糊测试的第一个可选实施例或第二个可选实施例的基础上,本发明实施例提供的模糊测试的方法的第四个可选实施例中,所述获取被测对象测试入口的类型之前,所述方法还可以包括:

对所述被测对象中的代码行添加标记,所述标记用于统计所述对应类型的测试数据是否执行该行代码;

所述确定所述对应类型的测试数据所测试的所述被测对象中的代码行,可以包括:

根据所述标记的变化确定所述对应类型的测试数据所测试的代码行。

本发明实施例中,可以通过插桩的方式对被测对象进行预处理,也就是对被测对象的代码行添加标记,通常在代码行的起始位置和结束位置分别添加标记,这样,就可以通过起始位置和结束位置标记的变化来确定测试数据是否执行该行代码。

参阅图2,本发明实施例提供的模糊测试的另一实施例包括:

如图2所示,模糊测试的过程包括测试数据生成、测试执行、覆盖率计算、覆盖率变化判断、结果收集等环节。

测试数据的生成和执行,是整个模糊测试运行的起点,通过海量测试数据的执行达到覆盖被测对象中更多代码的目的。

在测试执行的过程中,结合源代码和覆盖率工具进行覆盖率计算。

从模糊测试系统的角度来看,如图3所示,可以包括:测试数据生成与执行管理模块1、覆盖率计算分析管理模块2和基线库管理模块3,以及被测对象4。

测试数据生成与执行管理模块1可包括:测试数据生成器11和测试数据执行器12。

测试数据生成器11用于根据测试数据的类型即可以从测试数据规则库中获取相应的规则,通过对生成规则的排列组合方式,生成需要的测试数据。

测试数据生成规则库中的规则可以包括:分隔符:各种分隔符的汇总,例如,\r,\n,,=,>,<等,随机数:包括各种长度的随机数,二进制数据量:各种二进制数据流的组合,字符型,包括ascii、unicode在内的各种字符型数据,bit类型, byte类型,float类型等。

同时,测试数据生成规则是可以动态扩充的,可以不断的完善。

基线库管理模块3可以看成是一种特殊的测试数据生成规则库。只是它与特殊的被测系统绑定,随着该系统的变化而更新。

测试数据执行器12用于在测试数据生成之后,根据被测对象4的协议或者接口,进行测试数据的注入,该执行器集中管理各种被测对象协议的解析和数据包的封装,是测试数据进入被测对象的必经之路。

覆盖率计算分析管理模块2包括源代码处理器21、覆盖率计算器22和覆盖率分析器23。

源代码处理器21用于在测试执行之前,对被测对象源代码进行插桩。根据被测对象使用的编程语言的不同,插桩的过程会有不同,例如C++的gcc编译器,通过makefile编译选项的修改进行插桩。

覆盖率计算器22用于在测试执行过程中,对每一个测试数据执行的代码覆盖率文件进行收集,然后计算代码覆盖率。根据被测对象使用的编程语言的不同,收集过程会有不同,例如C++的gcov工具。通过生成的gcov文件进行代码覆盖行的判断和代码覆盖率数据的收集和计算。

覆盖率分析器23

覆盖率分析器结合被测对象源代码和覆盖率计算器 22 的代码覆盖率数据文件,进行该测试数据对源代码影响范围的评估。具体流程如下:

获取代码源文件

获取该条测试数据生成的覆盖率文件,例如图4。其中的标注区域的数字表示该行代码被执行的次数。”-”表示该行未被覆盖。

对比顺次执行的两个测试数据A、B产生的覆盖率文件的差异。如果某行代码被执行次数从无到有,则表明B测试数据的执行覆盖了该代码行。如果某行代码被执行次数本来不为0,结果增加了次数。那么,表明A、B两个用例对该代码行均进行了覆盖。

基线库管理模块3包括基线库31。

基线库31主要是对覆盖率计算分析管理模块2中的结果进行保存。例如一个http接口A的某个参数B,对应的测试数据执行过后,覆盖了源文件M的第N 行代码,使整个测试过程总的代码覆盖率提高了Q%。那么存储的该条基线为以下5元组:(A,B,M,N,Q%)。

基线库建立之后,当下次再遇到A接口的B参数类型的测试入口的时候,先直接调用基线库的数据进行测试而不需要再进行测试数据的构造。

通过测试数据对代码覆盖率变化的快速感知,建立测试数据与代码行之间的关联关系,并存储为该被测对象的基线库,达到沉淀模糊测试有效测试数据的目的。

参阅图5,本发明实施例提供的模糊测试的装置50的一实施例包括:

获取单元501,用于获取被测对象测试入口的类型;

确定单元502,用于从已建立的测试数据与测试入口的类型的对应关系中,确定所述获取单元501获取的所述被测对象测试入口对应的测试数据的类型;

测试单元503,用于向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。

本发明实施例中,获取单元501获取被测对象测试入口的类型,确定单元 502从已建立的测试数据与测试入口的类型的对应关系中,确定所述获取单元 501获取的所述被测对象测试入口对应的测试数据的类型;测试单元503向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。与现有技术无法针对性测试,测试效率低下相比,本发明实施例提供的模糊测试的方法,可以采用从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型,向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试的方式,有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。

可选地,在上述图5对应的实施例的基础上,参阅图6,本发明实施例提供的模糊测试的装置50的第一个可选实施例中,所述装置50还包括计算单元504,

所述确定单元502,还用于在所述测试单元对所述被测对象进行模糊测试时,确定所述对应类型的测试数据所测试的所述被测对象中的代码行;

所述计算单元504,用于根据所述确定单元502确定的所测试的所述代码行的数量,计算所述对应类型的测试数据对所述被测对象的代码覆盖率,所述代码覆盖率用于评估所述对应类型的测试数据对所述被测对象的测试范围。

可选地,在上述图6对应的实施例的基础上,参阅图7,本发明实施例提供的模糊测试的装置50的第二个可选实施例中,所述装置50还包括建立单元505 和添加单元506,

所述建立单元505,用于建立所述对应类型的测试数据与被测对象的入口类型、所述确定单元502确定的代码行的行号与所述计算单元计算的所述代码覆盖率之间的对应关系;

所述添加单元506,用于将所述建立单元505建立的所述对应关系添加到测试数据库中。

可选地,在上述图5对应的实施例的基础上,参阅图8,本发明实施例提供的模糊测试的装置50的第三个可选实施例中,所述装置50还包括生成单元507,

所述生成单元507,用于根据所述确定单元502确定的所述对应的测试数据的类型,使用测试数据规则库中的规则,生成所述对应类型的测试数据。

实际上,在图6或图7对应的实施例的基础上,也可以包括生成单元507,本处不一一罗列。

可选地,在上述图6对应的实施例的基础上,参阅图9,本发明实施例提供的模糊测试的装置50的第四个可选实施例中,所述装置50还包括处理单元508,

所述处理单元508,用于对所述被测对象中的代码行添加标记,所述标记用于统计所述对应类型的测试数据是否执行该行代码;

所述确定单元502,用于根据所述处理单元508添加的标记的变化确定所述对应类型的测试数据所测试的代码行。

实际上,在图7对应的实施例的基础上,也可以包括处理单元508,本处不一一罗列。

图10是本发明实施例提供的模糊测试的装置50的结构示意图。模糊测试的装置50包括处理器510、存储器550和输入/输出I/O设备530,存储器550可以包括只读存储器和随机存取存储器,并向处理器510提供操作指令和数据。存储器550的一部分还可以包括非易失性随机存取存储器(NVRAM)。

在一些实施方式中,存储器550存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:

在本发明实施例中,通过调用存储器550存储的操作指令(该操作指令可存储在操作系统中),

获取被测对象测试入口的类型;

从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型;

向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试。

本发明实施例采用从已建立的测试数据与测试入口的类型的对应关系中,确定所述被测对象测试入口对应的测试数据的类型,向所述被测对象测试入口注入对应类型的测试数据,对所述被测对象进行模糊测试的方式,有针对性的进行模糊测试,从而提高了测试的针对性和测试效率。

处理器510控制模糊测试的装置50的操作,处理器510还可以称为CPU (Central Processing Unit,中央处理单元)。存储器550可以包括只读存储器和随机存取存储器,并向处理器510提供指令和数据。存储器550的一部分还可以包括非易失性随机存取存储器(NVRAM)。具体的应用中模糊测试的装置50 的各个组件通过总线系统520耦合在一起,其中总线系统520除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统520。

上述本发明实施例揭示的方法可以应用于处理器510中,或者由处理器510 实现。处理器510可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器510中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器510可以是通用处理器、数字信号处理器 (DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器550,处理器510读取存储器550中的信息,结合其硬件完成上述方法的步骤。

可选地,处理器510还用于:

确定所述对应类型的测试数据所测试的所述被测对象中的代码行;

根据所测试的所述代码行的数量,计算所述对应类型的测试数据对所述被测对象的代码覆盖率,所述代码覆盖率用于评估所述对应类型的测试数据对所述被测对象的测试范围。

可选地,处理器510还用于:

建立所述对应类型的测试数据与被测对象的入口类型、所述代码行的行号与所述代码覆盖率之间的对应关系;

将建立的所述对应关系添加到测试数据库中。

可选地,处理器510还用于:

根据所述对应的测试数据的类型,使用测试数据规则库中的规则,生成所述对应类型的测试数据。

可选地,处理器510还用于:

对所述被测对象中的代码行添加标记,所述标记用于统计所述对应类型的测试数据是否执行该行代码;

根据所述标记的变化确定所述对应类型的测试数据所测试的代码行。

图10对应的实施例或任一可选实施例中可以参阅图1至图4部分的相关描述进行理解,本处不做过多赘述。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。

以上对本发明实施例所提供的模糊测试的方法以及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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