CN101859274B - 一种进行模糊测试的方法及系统 - Google Patents
一种进行模糊测试的方法及系统 Download PDFInfo
- Publication number
- CN101859274B CN101859274B CN 200910131170 CN200910131170A CN101859274B CN 101859274 B CN101859274 B CN 101859274B CN 200910131170 CN200910131170 CN 200910131170 CN 200910131170 A CN200910131170 A CN 200910131170A CN 101859274 B CN101859274 B CN 101859274B
- Authority
- CN
- China
- Prior art keywords
- test case
- test
- fitness
- module
- software program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明公开了一种进行模糊测试的方法,该方法首先选择一组初始测试用例作为第一代群体,将该第一代群体作为当前群体;然后采用当前群体中的测试用例对被测软件程序进行测试,并根据得到的测试结果对测试用例进行淘汰,再根据当前群体中未被淘汰的测试用例产生下一代群体,此时,若结束条件满足,则结束测试,若结束条件没有满足,则以得到的下一代群体作为当前群体继续循环进行上述测试,直至结束条件满足。本发明还公开了一种进行模糊测试的系统。应用本发明能够提高被测软件程序的安全性。
Description
技术领域
本发明涉及软件测试技术领域,特别涉及一种进行模糊测试的方法及系统。
背景技术
软件(包括:应用程序、协议等)的安全性测试实际上是在软件输入空间中的一种探测。软件的输入空间由该软件的所有可能的输入、或所有可能的输入的组合构成。以下将软件的每一个可能的输入称为一个输入点。穷举是验证软件行为正确性的一种最直接的方法,然而,穷举对大部分案例来说不具备可操作性,因为通常情况下,软件程序的输入空间非常巨大。相比于穷举的方法来说,模糊测试(Fuzz Testing)是一种更具可行性的黑盒测试方法。
模糊测试是一种软件测试技术,该技术构造一些随机或半随机的数据(称为fuzz)作为被测试软件程序的输入,并观察被测试软件程序的工作状况。模糊测试是检查程序容错性的一种重要的测试手段。如果被测软件程序出错(例如:崩溃了或导致内置的断言验证代码为假),就表明检测出了缺陷。用于产生fuzz数据的程序称为模糊测试器(Fuzzers),模糊测试器是进行渗透测试或其它测试的有效工具。
作为一种黑盒测试工具,模糊测试通常用于大型软件开发项目。模糊测试被认为能够提高软件的安全性,这是因为:模糊测试总是能检测出一些测试人员未能发现的缺陷,这些缺陷往往会被软件测试工程师所忽略。目前,最常用的模糊测试是基于字符的,基于字符的模糊测试提供随机数据流(从文件或其它数据流中提供,例如:从套接字中提供)作为被测软件程序的输入,基于字符的模糊测试正广泛应用于协议或网络服务器的安全性测试。
模糊测试的优势在于:进行测试的成本相对较低、且完全可以自动实现;并且,模糊测试经常能找出比较严重、且可被利用的缺陷(bug),这些bug可被攻击者加以利用。模糊测试的主要问题在于:它大部分时候只能找出一些很简单的缺陷。这是因为:现有模糊测试器大都比较简单、不具备智能性,它们通常都是基于预先定义的模式,并依靠一些杂乱无章的输入去试图找出被测软件程序中新的缺陷,它不具备任何从以往的测试中学习可以帮助它选择出更好的测试用例的能力。
美国专利号为US5805795-A1,发明名称为“用于产生包含计算机程序产品最佳测试用例集的计算机程序产品测试的方法和计算机程序产品,以及选择SAME的方法”的专利中公开了一种方法,该方法包括:1)识别程序执行过程中所获取到的程序块;2)执行遗传算法(GA:Genetic Algorithm)以确定一个测试用例集,该算法能够在最短的时间内获取到最多的被识别的块,并为每一个测试子集确定一个适应度,然后检验测试子集是否包含在另一个表达中从而计算一个新的适应度,直至获取到所有测试用例的适应度。该方法需要获取被测软件程序的源代码,显然,它已经不是一种黑盒测试方案。
http://www.chinaecnet.com/sjyy/sj004632.asp上登载了一篇题为“黑盒测试中遗传算法的应用”的文章。该文章中描述了一种采用遗传算法为测试输入划分等价类,以加速黑盒测试速度的方法。该方法旨在提高测试的功能与效率,并不涉及任何与安全性测试相关的技术内容。
http://www.blackhat.com/presentations/bh-usa-06/BH-US-06Embleton.pdf上登载了一篇题为“sidewinder-一种恶意输入技术的进化向导系统”的文章。该文章描述了一种类似于上述美国专利号为US5805795-A1的专利申请的技术,该技术采用遗传算法作为启发式方法来充当模糊测试的向导。遗传算法的适应度也基于代码覆盖,例如:具有大的代码覆盖率的有用的输入可以达到前所未有的控制流程图区域(CFG:Control FlowGraph)。该技术与美国专利号为US5805795-A1的技术的唯一不同之处在于:该技术无需获取源代码,取而代之的是使用交互式反汇编(IDA)的插件软件微分分析(SDA),对软件进行反编译,并构造相应的控制流程图。但是,对于大部分案例而言,根据软件构造其准确的控制流程图不具备可操作性,而没有控制流程图就无法使用代码覆盖率对遗传算法的适应度进行计算。
由上述可见,尽管相对于完全预先定义的测试用例来说,模糊测试通过随机化处理能够找出一些被忽略的安全缺陷,但是,模糊测试仍然是一种基于预先定义的测试规则的测试,因此,模糊测试仍然过于简单,无法用于在输入空间进行启发式的探测,因而无法保证被测软件程序的安全性。
发明内容
有鉴于此,本发明的主要目的在于提供一种进行模糊测试的方法,以提高被测软件程序的安全性。
本发明的另一个目的在于提供一种进行模糊测试的系统,以提高被测软件程序的安全性。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种进行模糊测试的方法,包括:
A、选择一组初始测试用例作为第一代群体,将所述第一代群体作为当前群体;
B、采用当前群体中的测试用例对被测软件程序进行测试,得到测试结果;
C、根据所述测试结果和当前群体中的测试用例的探测度计算当前群体中每一个测试用例的适应度,根据所述适应度对测试用例进行淘汰;其中,所述探测度为s/S,s表示一个测试用例所覆盖的输入点的数量,S表示输入空间中包含的输入点的数量;
D、根据当前群体中未被淘汰的测试用例和其适应度产生下一代群体;
E、判断是否满足结束条件,若没有满足,则以D操作所产生的下一代群体作为当前群体,重复B~D的操作,若满足,则结束本方法流程。
所述测试结果可以包括:错误响应、正确响应、没有响应或被测软件程序崩溃。
进一步地,该方法可以包括:预先设置增长因子、降低因子和探测度门限;所述增长因子、降低因子、探测度门限和适应度的取值范围均为大于等于0、且小于等于1的实数;
所述C操作中根据所述测试结果和当前群体中的测试用例的探测度计算当前群体中每一个测试用例的适应度可以包括:
如果测试用例导致的测试结果为被测软件程序崩溃,则将所述测试用例的适应度置为1;
如果测试用例导致的测试结果为正确响应,则使所述测试用例的适应度增加所述增长因子对应的值;
如果测试用例导致的测试结果为错误响应或没有响应,则使所述测试用例的适应度减小所述降低因子对应的值;
如果测试用例的探测度小于等于所述探测度门限,则令所述测试用例的适应度等于其自身的(1一所述测试用例的探测度)倍;
如果测试用例的探测度大于所述探测度门限,则令所述测试用例的适应度等于其自身的(1+所述测试用例的探测度)倍。
进一步地,该方法可以包括:预先设置淘汰门限;
所述C操作中根据所述适应度对测试用例进行淘汰可以包括:将适应度低于所述淘汰门限的测试用例淘汰。
该方法还可以进一步预先设置淘汰率;
所述C操作中根据所述适应度对测试用例进行淘汰可以包括:根据所述预先设置的淘汰率,以测试用例的适应度越高,淘汰该测试用例的概率越低的方式进行淘汰。
较佳地,所述预先设置淘汰率可以为:按照d=en-N进行设置;
其中:d表示淘汰率;
n为当前群体的大小;
N为群体大小的统计平均值。
较佳地,所述D操作可以包括:
D1、将当前群体中未被淘汰的测试用例映射为基因编码;
D2、根据当前群体中每个测试用例的适应度及其对应的基因编码进行繁衍,得到下一代测试用例的基因编码;
D3、将所述得到的下一代测试用例的基因编码映射为对应的测试用例。
所述结束条件可以包括:导致被测软件程序崩溃的测试用例达到预先设置的数量、或对输入空间的测试覆盖率达到预先设置的比例。
一种进行模糊测试的系统,包括:测试模块、被测软件程序、监视模块、加载模块、遗传算法模块、存储模块和判断模块,其中:
所述存储模块,用于存储包含初始测试用例的第一代群体;
所述测试模块,用于从所述存储模块获取测试用例,并向所述被测软件程序发送所述测试用例;
所述监视模块,用于监视所述被测软件程序以确定所述被测软件程序是否崩溃,在所述被测软件程序崩溃时,通知所述加载模块和所述遗传算法模块;
所述加载模块,用于在收到来自所述监视模块的通知时,重新启动所述被测软件程序;
所述遗传算法模块,用于在收到来自所述监视模块的通知时,将导致所述被测软件程序崩溃的测试用例存储于所述存储模块;并用于获取被测软件程序对测试用例的响应,根据所述响应和测试用例的探测度计算测试用例的适应度,根据所述适应度对测试用例进行淘汰,根据未被淘汰的测试用例和其适应度繁衍下一代群体,将所述下一代群体存储于所述存储模块;其中,所述探测度为s/S,s表示一个测试用例所覆盖的输入点的数量,S表示输入空间中包含的输入点的数量;
所述判断模块,用于判断是否满足结束条件,在没有满足时,将所述下一代群体作为当前群体,通知测试模块继续从所述存储模块获取测试用例进行测试,在满足时,通知测试模块结束测试。
较佳地,所述被测软件程序,还可以用于在收到来自测试模块的测试用例后,向所述测试模块反馈相应的响应;
所述测试模块,还可以用于将来自所述被测软件程序的响应发送给所述遗传算法模块,并存储于所述存储模块;
所述遗传算法模块,还可以用于从所述测试模块接收被测软件程序对测试用例的响应。
进一步地,所述遗传算法模块中可以包括:适应度单元、进化单元和映射单元;
所述适应度单元,用于根据被测软件程序对测试用例的响应和测试用例的探测度计算所述测试用例的适应度,并根据所述适应度对测试用例进行淘汰;
所述映射单元,用于从存储模块获取当前群体中未被淘汰的测试用例,将所述未被淘汰的测试用例映射为基因编码提供给所述进化单元;
所述进化单元,用于根据所述映射单元提供的测试用例的基因编码、以及测试用例的适应度进行繁衍,得到下一代测试用例的基因编码,将所得到的下一代测试用例的基因编码发送给所述映射单元;
所述映射单元,还用于将来自所述进化单元的下一代测试用例的基因编码映射为对应的测试用例,将所述映射得到的测试用例存储于所述存储模块。
较佳地,所述适应度单元,可以用于:
在测试用例导致的测试结果为被测软件程序崩溃时,将所述测试用例的适应度置为1;
在测试用例导致的测试结果为正确响应时,使所述测试用例的适应度增加预设的增长因子对应的值;
在测试用例导致的测试结果为错误响应或没有响应时,使所述测试用例的适应度减小预设的降低因子对应的值;
在测试用例的探测度小于等于所述探测度门限时,令所述测试用例的适应度等于其自身的(1-所述测试用例的探测度)倍;
在测试用例的探测度大于所述探测度门限时,令所述测试用例的适应度等于其自身的(1+所述测试用例的探测度)倍。
所述适应度单元,还可以用于根据预先设置的淘汰门限,将适应度低于所述淘汰门限的测试用例淘汰,或者,根据预先设置的淘汰率,以测试用例的适应度越高,淘汰该测试用例的概率越低的方式淘汰测试用例。
所述判断模块,可以用于判断导致被测软件程序崩溃的测试用例是否达到预先设置的数量,在达到预先设置的数量时,判定结束条件满足,否则,判定结束条件满足。
所述判断模块,可以用于判断测试用例对输入空间的测试覆盖率是否达到预先设置的比例,在达到预先设置的比例时,判定结束条件满足,否则,判定结束条件没有满足。
由上述技术方案可见,本发明采用遗传算法作为模糊测试进行输入空间探测的向导,为模糊测试引入了自演化机制,使得模糊测试能够在输入空间执行更为智能的探测,并能够采取更具启发式的方式找出被测软件程序中的安全缺陷,从而使软件开发人员能够排除被测软件程序中的这些安全缺陷,提高被测软件程序的安全性。本发明所提供的模糊测试是一种全自动的黑盒测试,无需获知被测软件程序的任何源代码信息。
附图说明
下面将通过参照附图详细描述本发明的示例性实施例,使本领域的普通技术人员更清楚本发明的上述及其他特征和优点,附图中:
图1为本发明进行模糊测试的方法的流程示意图;
图2为本发明进行模糊测试的系统的组成结构示意图;
图3示出了本发明基于遗传算法的进化的模糊测试系统的组成结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明的主要思想是:采用遗传算法作为模糊测试进行输入空间探测的向导,为模糊测试引入自演化机制,以使模糊测试能够在输入空间执行更为智能的探测,并采取更具启发式的方式找出被测软件程序的安全缺陷。本发明所提供的模糊测试是一种全自动的黑盒测试,无需获知被测软件程序的任何源代码信息。
遗传算法是一种模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法以一个群体中的所有个体为对象,利用随机化技术对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。作为一种全局优化搜索算法,遗传算法以其简单通用、鲁棒性强、适于并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,并逐渐成为重要的智能算法之一。
下面对遗传算法涉及的术语进行简要说明:
显型(Phenotype):也可称为基因型个体(individuals),一定数量的个体组成了群体(population),群体中个体的数量叫做群体大小。
基因型(Genotype):基因用于表示个体的特征。例如有一个串S=1011,该串S称为个体,则其中的1,0,1,1这4个元素分别称为基因。
适应度(Fitness):各个个体对环境的适应程度称为适应度。
传统的遗传算法主要包括以下步骤:
第1步:编码。在进行搜索之前,先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的输入点。
第2步:生成初始群体。通常采用随机的方式,产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成一个群体。遗传算法以这N个串结构数据作为初始点开始迭代。
第3步:适应度评估检测。本步骤中,采用适应度函数评估个体或解的优劣性。面对不同的问题,适应度函数的定义方式也不同,可以根据实际应用的需要定义相应的适应度函数。
第4步:繁衍下一代。基于每一个个体的适应度,采取选择、杂交或突变的方式产生下一代。
如果新的一代包含一个解,能产生一个充分接近或等于期望答案的输出,那么问题得以解决。如果情况并非如此,新的一代将重复它们父母所进行的繁衍过程,一代一代进化下去,直至达到期望的解为止。
本发明提供的进行模糊测试的技术方案可以用于对独立的软件、协议、网络设备等进行测试。以下,将本发明进行模糊测试的对像统称为被测软件程序。
图1为本发明进行模糊测试的方法的流程示意图。参见图1,该方法包括:
步骤110:选择一组初始测试用例作为第一代群体,将第一代群体作为当前群体进行后续处理。
本步骤中,可以随机选择一些测试用例或根据被测软件程序所属技术领域的经验预先定义一些测试用例作为第一代群体。
步骤120:采用当前群体中的测试用例对被测软件程序进行测试,得到测试结果。
在进行测试的过程中,需要获取被测软件程序的响应与状态,并进行记录,以用于后续计算测试用例的适应度。例如:如果被测软件程序崩溃了,可以将导致该崩溃的测试用例作为一个成功的样本记录下来。
测试结果,也就是被测软件程序的响应与状态可以包括:错误响应、正确响应、没有响应、被测软件程序崩溃等。
步骤130:根据步骤120得到的测试结果对测试用例进行淘汰。
本步骤中,可以首先计算每一个测试用例的适应度,然后根据得到的适应度对测试用例进行淘汰。
本发明中,引入探测度的概念。由于一个测试用例可以覆盖一组输入点,因此,该组中输入点的数目越大,该测试用例的探测度越高。举例而言:假设一个输入空间集的势为S,例如:包含S个不同的输入点,那么,如果一个测试用例可以覆盖s个不同的输入点,则该测试用例的探测度为s/S。
基于测试用例的适应度,一些适应度低的测试用例将被淘汰(也就是从群体中被移除)。在实际应用中,可以制定多种淘汰策略,以下介绍两种。
第一种淘汰策略:如果某一测试用例的适应度低于预设的淘汰门限D,则将该测试用例淘汰。
第二种淘汰策略:以测试用例的适应度越高,淘汰该测试用例的概率越低的方式确定应该如何进行淘汰。
对于每一代群体,可以根据该代群体中所包含测试用例的总数确定该代测试用例的淘汰率。
步骤140:根据当前群体中未被淘汰的测试用例产生下一代群体。
为便于对测试用例进行繁衍、杂交和突变等遗传操作以得到下一代测试用例,本步骤中的操作可以分为如下所示S1~S3三步进行:
S1:将当前群体中未被淘汰的测试用例映射为基因编码。这里,映射的方法包括但不限于:直接将未被淘汰的测试用例编码成二进制基因编码、将测试用例中重要的部分编码成“0”、“1”序列、或将诸如“如果…,则…”之类的测试规则编码成二进制序列,等等。
S2:根据当前群体中每个测试用例的适应度及其对应的基因编码进行繁衍,得到下一代测试用例的基因编码。
本步骤中,可以采用繁衍、杂交和突变的遗传操作繁衍下一代。具体包括以下三个方面:
1)根据当前群体中存活(也可称为“适应”)的测试用例的适应度繁殖下一代群体中的测试用例。测试用例的适应度越高,繁殖的下一代测试用例数量越多。
2)对于所繁殖的下一代测试用例,使其两两进行基因编码的部分交换,即:对所繁殖的下一代测试用例进行杂交。
3)对于所繁殖的下一代测试用例以及杂交得到的测试用例,根据预先设置的概率方法随机选择其基因编码中的部分进行突变。
S3:将S2得到的下一代测试用例的基因编码映射为对应的测试用例,如此,将得到用于进行安全性测试的下一代测试用例,从而构成下一代群体。
步骤150:判断是否满足结束条件,若没有满足,则以步骤140所产生的下一代群体作为当前群体,重复步骤120~步骤140的操作,若满足,则结束本方法流程。
本发明将重复上述步骤120~步骤140的操作,直至满足结束条件。这里,结束条件可以是:所找到的安全缺陷达到一定数量(也就是导致被测软件程序崩溃的测试用例达到一定数量)、对输入空间的测试覆盖率达到一定比例,等等。
由于被测软件程序的安全缺陷在上述步骤120中被记录下来,因此,可以非常容易地对所记录的安全缺陷进行再现和验证,从而帮助软件开发人员消除被测软件程序的安全漏洞,进而提高被测软件程序的安全性。
本发明提供的基于遗传算法的进化模糊测试方法可以用于测试独立的输入,也可用于测试输入序列。例如:本方法不仅可以测试协议的单个报文,也可以根据协议栈的配置以报文序列进行测试。
本发明采用在模糊测试中引入遗传算法的方式,提供了一种新的用于找出被测软件程序的安全性缺陷的黑盒模糊测试启发式进化解决方案。本发明所提供的方案可以显著地弥补传统模糊测试方案的缺点(传统模糊测试方案过于简单,不具备任何智能性),找出被测软件程序中更多的安全漏洞,从而降低被测软件程序的漏洞,由于被测软件程序的安全漏洞可被攻击者挖掘出来,因此,本发明提高了被测软件程序的安全性。
对应于上述本发明进行模糊测试的方法,本发明还提供了一种进行模糊测试的系统,下面进行详细说明。
图2为本发明进行模糊测试的系统的组成结构示意图。参见图2,该系统包括:测试模块210、被测软件程序220、监视模块230、加载模块240、遗传算法模块250、存储模块260和判断模块270,其中:
存储模块260,用于存储包含初始测试用例的第一代群体;
测试模块210,用于从存储模块260获取测试用例,并向被测软件程序220发送该测试用例;
监视模块230,用于监视被测软件程序220以确定被测软件程序220是否崩溃,在该被测软件程序220崩溃时,通知加载模块240和遗传算法模块250;
加载模块240,用于在收到来自监视模块230的通知时,重新启动被测软件程序220;
遗传算法模块250,用于在收到来自监视模块230的通知时,将导致被测软件程序220崩溃的测试用例存储于存储模块260;并用于获取被测软件程序220对测试用例的响应,根据该响应繁衍下一代群体,将繁衍得到的下一代群体存储于存储模块260;
判断模块270,用于判断是否满足结束条件,在没有满足时,将该下一代群体作为当前群体,通知测试模块210继续从存储模块260获取测试用例进行测试,在满足时,通知测试模块210结束测试。
图2所示系统中,被测软件程序220,还可以用于在收到来自测试模块210的测试用例后,向测试模块210反馈相应的响应;
测试模块210,可以将来自被测软件程序220的响应发送给遗传算法模块250,并存储于存储模块260;
相应地,遗传算法模块250还可以用于从测试模块210接收被测软件程序220对测试用例的响应。
较佳地,图2所示遗传算法模块250中可以进一步包括:适应度单元251、进化单元252和映射单元253;其中:
适应度单元251,用于根据被测软件程序220对测试用例的响应计算该测试用例的适应度,并根据计算得到的适应度对测试用例进行淘汰;
映射单元253,用于从存储模块260获取当前群体中未被淘汰的测试用例,将未被淘汰的测试用例映射为基因编码提供给进化单元252;
进化单元252,用于根据映射单元253提供的测试用例的基因编码、以及测试用例的适应度进行繁衍,得到下一代测试用例的基因编码,将所得到的下一代测试用例的基因编码发送给映射单元253;
映射单元253,还用于将来自进化单元252的下一代测试用例的基因编码映射为对应的测试用例,并将映射得到的测试用例存储于存储模块260。
在计算测试用例的适应度时,图2所示适应度单元251,用于:
在测试用例导致的测试结果为被测软件程序崩溃时,将该测试用例的适应度置为1;
在测试用例导致的测试结果为正确响应时,使该测试用例的适应度增加预设的增长因子对应的值;
在测试用例导致的测试结果为错误响应或没有响应时,使该测试用例的适应度减小预设的降低因子对应的值;
在测试用例的探测度小于等于所述探测度门限时,令该测试用例的适应度等于其自身的(1-所述测试用例的探测度)倍;
在测试用例的探测度大于所述探测度门限时,令该测试用例的适应度等于其自身的(1+所述测试用例的探测度)倍。
图2所示适应度单元251,还可以用于根据预先设置的淘汰门限,将适应度低于所述淘汰门限的测试用例淘汰,或者,根据预先设置的淘汰率,以测试用例的适应度越高,淘汰该测试用例的概率越低的方式淘汰测试用例。
图2所示系统中的判断模块270,可以用于判断导致被测软件程序崩溃的测试用例是否达到预先设置的数量,在达到预先设置的数量时,判定结束条件满足,否则,判定结束条件满足。
或者,图2所示系统中的判断模块270,也可以用于判断测试用例对输入空间的测试覆盖率是否达到预先设置的比例,在达到预先设置的比例时,判定结束条件满足,否则,判定结束条件没有满足。
以上对本发明进行模糊测试的方法及系统进行了详细说明,下面通过一个详细示例对本发明技术方案的具体实施方式进一步详细说明。
本示例中,将本发明基于遗传算法的进化的模糊测试技术应用于网络协议的安全性测试,例如:用于TCP/IP、HTTP、IEC 61850等网络协议的安全性测试,以找出使目标协议服务器崩溃的安全缺陷。图3示出了本发明基于遗传算法的进化的模糊测试系统的组成结构示意图。参见图3,该系统中包括:测试机310、目标协议服务器320、监视器330、加载器340、遗传算法组件350和数据库360。其中:
目标协议服务器相当于本发明图2所示系统中的被测软件程序220,该目标协议服务器中运行着被测网络协议。
测试机310相当于本发明图2所示系统中的测试模块210。测试机310运行测试用例向目标协议服务器320发出特定的测试报文,并从目标协议服务器320接收相应的响应。可以用多种著名的模糊测试工具充当本示例中测试机310的角色,例如:PROTOS、SPIKE等。当然,在实际应用中,可能需要对这些模糊测试工具进行必要的改进,以使该模糊测试工具能够与本示例中的其他组件进行合作。
监视器330相当于本发明图2所示系统中的监视模块230。监视器330用于监视目标协议服务器320以确定目标协议服务器320是否崩溃。例如:监视器330可以是一个客户端进程,该客户端进程运行着被测网络协议,并持续向目标协议服务器320发送请求以确定目标协议服务器320是否依然在运行或是否运行正常。
加载器340相当于本发明图2所示系统中的加载模块240。本示例中,加载器340与目标协议服务器320运行在同一物理设备中,用于在目标协议服务器320被特定的测试报文导致崩溃之后自动地重启该目标协议服务器320。
遗传算法组件350相当于本发明图2所示系统中的遗传算法模块250。该遗传算法组件350中包括适应度模块351、进化模块352和映射模块353。其中,适应度模块351相当于图2所示系统中的适应度单元251,进化模块352相当于图2所示系统中的进化单元252,映射模块353相当于图2所示系统中的映射单元253。映射模块353用于实现显型(测试报文)与基因型(基因编码)之间的映射;适应度模块351用于计算测试用例的适应度;进化模块352用于对测试用例进行繁衍、杂交和突变。
数据库360相当于图2所示系统中的存储模块260。数据库360用于存储测试用例以及测试相关的数据,例如:测试报文的原始格式等。
本示例中,模糊测试的工作原理如下:
(1)在开始模糊测试之前,需要根据可用的计算机及网络资源选定每一代群组中测试用例数的平均值N,并且,将N个不同的初始测试用例(测试报文或测试报文序列)的适应度的初值设置为f。这里,初始测试用例可以根据以往的测试经验或采用随机选择的方式进行确定。为了提高本发明进化模糊测试机制的效率,可以对多种选择测试用例的方法加以结合使用,从而综合各方法的优势。
(2)作为进化的模糊测试工具的传输者,测试机310的主要任务在于向目标协议服务器320发送测试报文或测试报文序列,并从目标协议服务器320接收相应的响应。目标协议服务器320的响应可以包括:用于进行进一步交互的响应消息、错误消息或完全没有响应等。在没有响应的情况下,有可能只是目标协议服务器320的错误处理机制丢弃了期望之外的输入报文,也有可能是目标协议服务器320已崩溃。因此,监视器330需要通过持续向目标协议服务器320发送请求报文,并观察是否收到来自目标协议服务器320的对应的响应的方式来监视目标协议服务器320的存活状态。如果目标协议服务器320崩溃了,则通知数据库360记录导致该崩溃的测试用例,以用于测试完成之后的再现和报告。为实施自动化的模糊测试,监视器330还需要通知加载器340重启已崩溃的目标协议服务器320,以继续进行测试。
(3)测试用例的当前适应度f是一个处于[0,1]区间的实数,该f的值可以按照式(1)进行确定:
(1)式中,f0为该测试用例的适应度的当前值。r∈[0,1],r是在测试用例可以从目标协议服务器320得到正确响应时,对相应测试用例的适应度进行增长的增长因子。e∈[0,1],e是在目标协议服务器320能够通过反馈错误响应或采取丢弃的方式正确地处理测试用例时,对相应测试用例的适应度进行减小的降低因子。s/S是测试用例的探测度,例如:可以采用该测试用例能
够表征的一类报文的数量作为该测试用例的探测度。t∈[0,1]是由用户预先设置的探测度门限。
本示例中,实际的群体大小没有固定,N只是一个统计平均值。淘汰率按照式(2)进行定义:
d=en-N (2)
(2)式中,n为测试用例群体的实际大小。因此,n比N越大,淘汰率越高,反之亦然。采用淘汰率进行淘汰的情况下,测试用例的淘汰概率为:(1-f)×d。在淘汰率确定的情况下,测试用例的适应度越低,其被淘汰的可能性越高。
(4)本步骤中,将每一个存活下来的测试用例编码成基因编码。本实施例中,测试用例可以是单个的报文,也可以是报文序列。单个的报文只能测试与目标协议服务器320之间的一次交互,而报文序列(例如:一个简单的协议栈)可以测试与目标协议服务器320之间的多次交互。由于协议报文通常比较复杂,并且包含许多不同的字段,这些字段有着其各自的含义,因此,难以直接将报文编码成基因编码。为此,本实施例将整个报文按照其原始格式存入数据库360中,只有当报文中的某个字段非常重要或者需要进行进化模糊测试时,才将其映射为基因编码。报文中的字段可以表示为如下所示四元组:
T=(p,g,l,e)
其中:p表示报文ID,g表示字段的序号,l表示该字段的长度,e是一个用于表示该字段的取值的表达式。例如:<10表示该字段的值应当小于10。该四元组非常易于编码成‘0/1’序列。以下将该四元组称为字段四元组。由单个报文组成的测试用例的基因型将被表示为该报文的字段四元组序列。如果测试用例为包含多个报文的报文序列,测试机310与目标协议服务器320之间的交互可以采用IF…THEN…的模式表示成如下所示的规则:
IF(T1′,T2′,...)THEN(T1,T2,...)
其中,T1′,T2′,...为接收自目标协议服务器320的报文的字段四元组,T1,T2,...是对应于该接收自目标协议服务器320的报文的响应报文的字段四元组。采用上述IF…THEN…规则,使得测试用例中用于与目标协议服务器320进行交互的报文序列也可以将基因编码((T1′,T2′,...),(T1,T2,...))用作基因型,从而将报文序列编码成‘0/1’序列。
(5)对于每一个存活下来的测试用例,执行遗传算法操作。
繁衍:根据测试用例的适应度进行繁衍。测试用例的适应度越高,该测试用例繁衍的下一代越多。如果测试用例由报文序列组成,并且在上述第(2)步中该测试用例从目标协议服务器320获得了正常的响应,那么,将产生一个新的IF…THEN…规则,并附加在该测试用例的基因编码之后。该新的IF…THEN…规则中的IF部分产生自目标协议服务器320的响应报文,THEN部分可以随机产生或部分参考协议规范产生。
杂交:随机选择两个测试用例,互换彼此的部分基因编码。由于报文的字段之间有时存在一些相关连性,随意地互换报文的字段基因编码可能引发不一致问题,因此,可能需要对经互换之后得到的测试用例进行有效性检查,必要时,可能需要选择测试用例中的其他部分基因编码进行随机互换。如果测试用例由报文序列组成,那么,为了保证之前与目标协议服务器之间已经成功的交互结果,杂交只有可能在最后一个IF…THEN…规则的THEN部分进行。例如:在最后一个(T1,T2,...)中进行。
突变:对于所产生的下一代中的每一个测试用例,随机选择一个测试用例,并改变其部分基因编码。这里,可能也需要对经改变之后得到的测试用例进行有效性检查,必要时,可能需要选择测试用例中的其他部分基因编码进行突变。
(6)将第(5)步得到的基因型映射为显型。例如:根据基因编码的字段四元组,对存储在数据库中的原始报文的对应字段,并产生与原始报文不同的新的测试用例报文或测试用例报文序列。
(7)以步骤(6)的结果重复上述(2)~(6)直至满足结束条件。结束条件可以是:导致目标协议服务器崩溃的测试用例达到一定数量,等等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种进行模糊测试的方法,包括:
A、选择一组初始测试用例作为第一代群体,将所述第一代群体作为当前群体;
B、采用当前群体中的测试用例对被测软件程序进行测试,得到测试结果;
C、根据所述测试结果和当前群体中的测试用例的探测度计算当前群体中每一个测试用例的适应度,根据所述适应度对测试用例进行淘汰;其中,所述探测度为s/S,s表示一个测试用例所覆盖的输入点的数量,S表示输入空间中包含的输入点的数量;
D、根据当前群体中未被淘汰的测试用例产生下一代群体,包括:
D1、将当前群体中未被淘汰的测试用例映射为基因编码;
D2、根据当前群体中每个测试用例的适应度及其对应的基因编码进行繁衍,得到下一代测试用例的基因编码;
D3、将所述得到的下一代测试用例的基因编码映射为对应的测试用例,从而构成下一代群体;
E、判断是否满足结束条件,若没有满足,则以D操作所产生的下一代群体作为当前群体,重复B~D的操作,若满足,则结束本方法流程。
2.根据权利要求1所述的方法,其特征在于:
所述测试结果包括:错误响应、正确响应、没有响应或被测软件程序崩溃。
3.根据权利要求2所述的方法,其特征在于,该方法进一步包括:预先设置增长因子、降低因子和探测度门限;所述增长因子、降低因子、探测度门限和适应度的取值范围均为大于等于0、且小于等于1的实数;
所述C操作中根据所述测试结果和当前群体中的测试用例的探测度计算当前群体中每一个测试用例的适应度包括:
如果测试用例导致的测试结果为被测软件程序崩溃,则将所述测试用例的适应度置为1;
如果测试用例导致的测试结果为正确响应,则使所述测试用例的适应度增加所述增长因子对应的值;
如果测试用例导致的测试结果为错误响应或没有响应,则使所述测试用例的适应度减小所述降低因子对应的值;
如果测试用例的探测度小于等于所述探测度门限,则令所述测试用例的适应度等于其自身的(1-所述测试用例的探测度)倍;
如果测试用例的探测度大于所述探测度门限,则令所述测试用例的适应度等于其自身的(1+所述测试用例的探测度)倍。
4.根据权利要求1所述的方法,其特征在于,该方法进一步包括:预先设置淘汰门限;
所述C操作中根据所述适应度对测试用例进行淘汰包括:将适应度低于所述淘汰门限的测试用例淘汰。
5.根据权利要求1所述的方法,其特征在于,该方法进一步包括:预先设置淘汰率;
所述C操作中根据所述适应度对测试用例进行淘汰包括:根据所述预先设置的淘汰率,以测试用例的适应度越高,淘汰该测试用例的概率越低的方式进行淘汰。
6.根据权利要求5所述的方法,其特征在于,所述预先设置淘汰率为:按照d=en-N进行设置;
其中:d表示淘汰率;
n为当前群体的大小;
N为群体大小的统计平均值。
7.根据权利要求2至6任一项所述的方法,其特征在于:
所述结束条件包括:导致被测软件程序崩溃的测试用例达到预先设置的数量、或对输入空间的测试覆盖率达到预先设置的比例。
8.一种进行模糊测试的系统,包括:测试模块(210)、被测软件程序(220)、监视模块(230)、加载模块(240)、遗传算法模块(250)、存储模块(260)和判断模块(270),其中:
所述存储模块(260),用于存储包含初始测试用例的第一代群体;
所述测试模块(210),用于从所述存储模块(260)获取测试用例,并向所述被测软件程序(220)发送所述测试用例;
所述监视模块(230),用于监视所述被测软件程序(220)以确定所述被测软件程序(220)是否崩溃,在所述被测软件程序(220)崩溃时,通知所述加载模块(240)和所述遗传算法模块(250);
所述加载模块(240),用于在收到来自所述监视模块(230)的通知时,重新启动所述被测软件程序(220);
所述遗传算法模块(250),用于在收到来自所述监视模块(230)的通知时,将导致所述被测软件程序(220)崩溃的测试用例存储于所述存储模块(260);并用于获取被测软件程序(220)对测试用例的响应,根据所述响应和测试用例的探测度计算测试用例的适应度,根据所述适应度对测试用例进行淘汰,将当前群体中未被淘汰的测试用例映射为基因编码;根据当前群体中每个测试用例的适应度及其对应的基因编码进行繁衍,得到下一代测试用例的基因编码;将所述得到的下一代测试用例的基因编码映射为对应的测试用例,从而构成下一代群体,将所述下一代群体存储于所述存储模块(260);其中,所述探测度为s/S,s表示一个测试用例所覆盖的输入点的数量,S表示输入空间中包含的输入点的数量;
所述判断模块(270),用于判断是否满足结束条件,在没有满足时,将所述下一代群体作为当前群体,通知测试模块(210)继续从所述存储模块(260)获取测试用例进行测试,在满足时,通知测试模块(210)结束测试。
9.根据权利要求8所述的系统,其特征在于:
所述被测软件程序(220),还用于在收到来自测试模块(210)的测试用例后,向所述测试模块(210)反馈相应的响应;
所述测试模块(210),还用于将来自所述被测软件程序(220)的响应发送给所述遗传算法模块(250),并存储于所述存储模块(260);
所述遗传算法模块(250),还用于从所述测试模块(210)接收被测软件程序(220)对测试用例的响应。
10.根据权利要求8或9所述的系统,其特征在于,所述遗传算法模块(250)中进一步包括:适应度单元(251)、进化单元(252)和映射单元(253);
所述适应度单元(251),用于根据被测软件程序(220)对测试用例的响应和测试用例的探测度计算所述测试用例的适应度,并根据所述适应度对测试用例进行淘汰;
所述映射单元(253),用于从存储模块(260)获取当前群体中未被淘汰的测试用例,将所述未被淘汰的测试用例映射为基因编码提供给所述进化单元(252);
所述进化单元(252),用于根据所述映射单元(253)提供的测试用例的基因编码、以及测试用例的适应度进行繁衍,得到下一代测试用例的基因编码,将所得到的下一代测试用例的基因编码发送给所述映射单元(253);
所述映射单元(253),还用于将来自所述进化单元(252)的下一代测试用例的基因编码映射为对应的测试用例,将所述映射得到的测试用例存储于所述存储模块(260)。
11.根据权利要求10所述的系统,其特征在于,所述适应度单元(251),用于:
在测试用例导致的测试结果为被测软件程序(220)崩溃时,将所述测试用例的适应度置为1;
在测试用例导致的测试结果为正确响应时,使所述测试用例的适应度增加预设的增长因子对应的值;
在测试用例导致的测试结果为错误响应或没有响应时,使所述测试用例的适应度减小预设的降低因子对应的值;
在测试用例的探测度小于等于所述探测度门限时,令所述测试用例的适应度等于其自身的(1-所述测试用例的探测度)倍;
在测试用例的探测度大于所述探测度门限时,令所述测试用例的适应度等于其自身的(1+所述测试用例的探测度)倍。
12.根据权利要求10所述的系统,其特征在于:
所述适应度单元(251),还用于根据预先设置的淘汰门限,将适应度低于所述淘汰门限的测试用例淘汰,或者,根据预先设置的淘汰率,以测试用例的适应度越高,淘汰该测试用例的概率越低的方式淘汰测试用例。
13.根据权利要求8或9所述的系统,其特征在于:
所述判断模块(270),用于判断导致被测软件程序(220)崩溃的测试用例是否达到预先设置的数量,在达到预先设置的数量时,判定结束条件满足,否则,判定结束条件满足。
14.根据权利要求8或9所述的系统,其特征在于:
所述判断模块(270),用于判断测试用例对输入空间的测试覆盖率是否达到预先设置的比例,在达到预先设置的比例时,判定结束条件满足,否则,判定结束条件没有满足。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910131170 CN101859274B (zh) | 2009-04-07 | 2009-04-07 | 一种进行模糊测试的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910131170 CN101859274B (zh) | 2009-04-07 | 2009-04-07 | 一种进行模糊测试的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101859274A CN101859274A (zh) | 2010-10-13 |
CN101859274B true CN101859274B (zh) | 2013-06-05 |
Family
ID=42945193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910131170 Active CN101859274B (zh) | 2009-04-07 | 2009-04-07 | 一种进行模糊测试的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101859274B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102624574B (zh) * | 2011-01-27 | 2015-07-01 | 西门子公司 | 一种对协议实现进行安全测试的方法及装置 |
CN103036730B (zh) * | 2011-09-29 | 2015-09-23 | 西门子公司 | 一种对协议实现进行安全测试的方法及装置 |
CN103136098B (zh) * | 2011-11-30 | 2016-03-23 | 西门子公司 | 模糊测试的方法、装置和系统 |
CN102622297A (zh) * | 2012-02-23 | 2012-08-01 | 北京航空航天大学 | 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法 |
CN104573523B (zh) * | 2013-10-24 | 2018-06-12 | 深圳市腾讯计算机系统有限公司 | 文件漏洞挖掘的实现方法和装置 |
CN105868095B (zh) * | 2015-01-22 | 2018-11-13 | 阿里巴巴集团控股有限公司 | 生成测试数据的方法及设备 |
CN106155901B (zh) * | 2015-04-21 | 2019-04-16 | 中国科学院信息工程研究所 | 黑盒与白盒相结合的执行反馈驱动的并行模糊测试方法 |
CN106649075A (zh) * | 2015-10-30 | 2017-05-10 | 西门子公司 | 模糊测试方法和装置 |
CN105391729A (zh) * | 2015-11-30 | 2016-03-09 | 中国航天科工集团第二研究院七〇六所 | 基于模糊测试的web漏洞自动挖掘方法 |
CN107844413A (zh) * | 2016-09-21 | 2018-03-27 | 阿里巴巴集团控股有限公司 | 一种测试方法和装置 |
CN108073499B (zh) * | 2016-11-10 | 2020-09-29 | 腾讯科技(深圳)有限公司 | 应用程序的测试方法及装置 |
US10606732B2 (en) | 2018-02-27 | 2020-03-31 | International Business Machines Corporation | Hybrid genetic concolic co-verification of hardware and software |
US10649887B2 (en) | 2018-02-27 | 2020-05-12 | International Business Machines Corporation | Co-verification of hardware and software |
CN108763055B (zh) * | 2018-04-19 | 2020-08-25 | 北京航空航天大学 | 一种基于表观遗传的测试用例约束控制技术的构建方法 |
CN110633201B (zh) * | 2018-07-10 | 2020-06-02 | 清华大学 | 针对程序的集成模糊测试方法及装置 |
CN109597767B (zh) * | 2018-12-19 | 2021-11-12 | 中国人民解放军国防科技大学 | 一种基于遗传变异的模糊测试用例生成方法及系统 |
CN109871332A (zh) * | 2019-03-05 | 2019-06-11 | 南方电网科学研究院有限责任公司 | 多功能电表通信协议测试用例的生成方法、装置及设备 |
CN110647752B (zh) * | 2019-09-26 | 2023-05-16 | 信联科技(南京)有限公司 | 一种基于遗传算法的模糊测试平台 |
CN111830928B (zh) * | 2020-06-08 | 2021-07-30 | 杭州电子科技大学 | 一种工业控制设备固件的模糊测试方法 |
CN113806202B (zh) * | 2020-06-11 | 2024-01-26 | 北京威努特技术有限公司 | 一种漏洞挖掘方法、装置及计算机设备 |
CN112653693A (zh) * | 2020-12-21 | 2021-04-13 | 哈尔滨工大天创电子有限公司 | 一种工控协议分析方法、装置、终端设备及可读存储介质 |
CN115225551B (zh) * | 2022-07-14 | 2024-03-29 | 北京邮电大学 | 一种模糊测试方法、装置、设备及存储介质 |
CN115550069B (zh) * | 2022-11-29 | 2023-05-09 | 国网电动汽车服务(天津)有限公司 | 一种电动汽车智能充电系统及其安全防护方法 |
CN115617700B (zh) * | 2022-12-19 | 2023-04-07 | 华东交通大学 | 基于关系分析的测试用例设计、生成方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1503136A (zh) * | 2002-11-21 | 2004-06-09 | 深圳市中兴通讯股份有限公司 | 一种嵌入式软件测试方法 |
WO2005055051A2 (en) * | 2003-12-04 | 2005-06-16 | International Business Machines Corporation | Determining the possibility of adverse effects arising from a code change |
CN1746861A (zh) * | 2004-09-09 | 2006-03-15 | 北京航空航天大学 | 软件动态聚类测试方法 |
-
2009
- 2009-04-07 CN CN 200910131170 patent/CN101859274B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1503136A (zh) * | 2002-11-21 | 2004-06-09 | 深圳市中兴通讯股份有限公司 | 一种嵌入式软件测试方法 |
WO2005055051A2 (en) * | 2003-12-04 | 2005-06-16 | International Business Machines Corporation | Determining the possibility of adverse effects arising from a code change |
CN1746861A (zh) * | 2004-09-09 | 2006-03-15 | 北京航空航天大学 | 软件动态聚类测试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101859274A (zh) | 2010-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101859274B (zh) | 一种进行模糊测试的方法及系统 | |
Münkemüller et al. | From diversity indices to community assembly processes: a test with simulated data | |
Knowles et al. | Statistical phylogeography | |
Pigot et al. | A new dynamic null model for phylogenetic community structure | |
CN105144187B (zh) | 提供预测的安全产品以及评分现有安全产品的方法与产品 | |
CN109218304B (zh) | 一种基于攻击图和协同进化的网络风险阻断方法 | |
CN108470003A (zh) | 模糊测试方法、装置和系统 | |
Grant | Outgroup sampling in phylogenetics: severity of test and successive outgroup expansion | |
CN101859273B (zh) | 一种产生测试用例的方法及装置 | |
CN108549597A (zh) | 一种基于wgan模型的模糊检测种子集合生成方法及生成器 | |
Devore-McDonald et al. | Mossad: Defeating software plagiarism detection | |
CN112565301B (zh) | 基于小样本学习的服务器运行网络流量异常数据检测方法 | |
CN110688480A (zh) | 一种基于消息的实时教学评估方法及系统 | |
CN117061236A (zh) | 一种网络协议的模糊测试方法 | |
CN110472416A (zh) | 一种网页恶意代码检测方法及相关装置 | |
CN114417345A (zh) | 一种基于NLP的Web攻击检测方法 | |
Ibias | Using mutual information to test from Finite State Machines: Test suite generation | |
Bjorner et al. | Detectability of varied hybridization scenarios using genome-scale hybrid detection methods | |
CN114881103A (zh) | 一种基于通用扰动贴纸的对抗样本检测方法及装置 | |
KR20090001795A (ko) | 메시지를 이용한 모의 훈련 방법 및 시스템 | |
CN114338195A (zh) | 基于改进孤立森林算法的web流量异常检测方法及装置 | |
Bidgolya et al. | A robust opinion spam detection method against malicious attackers in social media | |
Arora et al. | State based test case generation using VCL-GA | |
Xiao-Pei et al. | A new immunity intrusion detection model based on genetic algorithm and vaccine mechanism | |
Di Nardo et al. | Evolutionary robustness testing of data processing systems using models and data mutation (T) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |