一种基于遗传变异的模糊测试用例生成方法及系统技术方案

技术编号:20819744 阅读:23 留言:0更新日期:2019-04-10 05:53
本发明专利技术公开了一种基于遗传变异的模糊测试用例生成方法及系统,方法包括选择两个种子测试用例,针对新测试用例的数据位置,如果两个种子数据相同则将数据遗传到新测试用例的当前数据位置,如果两个种子数据不同,且任意属于目标二进制文件进行静态分析提取的字符串比较集合,则将数据随机突变为预设的字符串比较集合中的数据,否则随机选择一方种子的数据遗传到新测试用例的当前数据位置。本发明专利技术继承了基于生成的测试用例生成方法和基于变异的测试用例生成方法各自的优点,又同时规避掉了他们相应的缺点,能够实现无需人工操作的大规模fuzzing目标程序的核心代码,具有生成测试用例有更大的可能性提升路径覆盖率、易于触发崩溃的优点。

【技术实现步骤摘要】
一种基于遗传变异的模糊测试用例生成方法及系统
本专利技术涉及计算机领域的漏洞挖掘领域,具体涉及一种基于遗传变异的模糊测试用例生成方法及系统,用于为漏洞挖掘的目标程序提供漏洞挖掘的模糊测试用例。
技术介绍
测试用例的生成方法大致分为两类,基于生成的测试用例生成和基于变异的测试用例生成。现有基于生成的测试用例生成方法是通过人工的编写测试用例生成规则,使得测试用例可以按照目标规则进行生成,保证生成的测试用例可以绕过目标程序的错误检查代码,从而fuzzing(基于缺陷注入的自动软件测试技术)目标程序的核心功能代码;但是,这种测试用例生成方法需要大量的人工干预,导致过高的人工成本,同时,不同的目标程序的规则并不相同,这会导致基于生成的测试用例生成的方法可扩展性较差,不适于对大量不同的目标程序进行fuzzing。现有基于变异的测试用例生成方法,是通过对现存的正常输入进行随机变异的方式产生新的测试用例,这样生成的测试用例可以利用现有的正常输入中的一些信息从而绕过错误检查代码,而且无需人工操作就可以直接运行,针对不同的程序只需更换正常输入即可达到有较高的扩展性的效果;但是,这种测试用例生成方法生成的测试用例,只能fuzzing到正常测试用例可达代码附近的一些代码,相对较远的或进入条件较为苛刻的代码则较难达到,这就导致了所生成的测试用例难以fuzzing目标程序的全部代码。
技术实现思路
本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种基于遗传变异的模糊测试用例生成方法及系统,本专利技术继承了基于生成的测试用例生成方法和基于变异的测试用例生成方法各自的优点,又同时规避掉了他们相应的缺点,能够实现无需人工操作的大规模fuzzing目标程序的核心代码,具有生成测试用例有更大的可能性提升路径覆盖率、易于触发崩溃的优点。为了解决上述技术问题,本专利技术采用的技术方案为:一种基于遗传变异的模糊测试用例生成方法,实施步骤包括:1)选择两个种子测试用例;2)针对新测试用例的种子长度,选择一个数据位置作为当前数据位置;3)针对当前数据位置,判断两个种子测试用例的数据是否相同,如果相同则跳转执行步骤4);否则,跳转执行步骤5);4)将种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;5)判断两个种子测试用例的当前数据位置的数据中任意一个属于预设的字符串比较集合是否成立,预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到,如果成立则将新测试用例的当前数据位置的数据随机突变为预设的字符串比较集合中的数据,跳转执行步骤7);否则,跳转执行步骤6);6)随机选择一方种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;7)判断种子长度是否已经遍历完毕,如果尚未遍历完毕,则继续选择下一个数据位置作为当前数据位置,跳转执行步骤3);否则跳转执行下一步;8)按照指定的比例对新测试用例进行随机突变,将完成随机突变后的新测试用例作为最终得到的新测试用例输出。可选地,步骤5)中预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到。可选地,所述字符串比较集合为根据用于执行测试用例的目标二进制文件中字符串数据所在位置的密集程度划分得到的第一子集PAC、第二子集PSC、第三子集CSP,第一子集PAC的密集程度比第二子集PSC、第三子集CSP两者的密集程度高,所述第二子集PSC、第三子集CSP两者的密集程度相同。可选地,步骤5)的详细步骤包括:5.1)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第一子集PAC是否成立,如果成立则将新测试用例的当前数据位置的数据按照第一概率优先随机突变为预设的字符串比较集合中第一子集PAC的数据、否则随机突变为第二子集PSC或第三子集CSP随机数据,跳转执行步骤7);否则,跳转执行步骤5.2);5.2)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第二子集PSC是否成立,如果成立则将新测试用例的当前数据位置的数据按照第二概率优先随机突变为预设的字符串比较集合中第二子集PSC的数据、否则随机突变为随机数据,跳转执行步骤7);否则,跳转执行步骤5.3);5.3)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第三子集CSP是否成立,如果成立则将新测试用例的当前数据位置的数据按照第二概率优先随机突变为预设的字符串比较集合中第三子集CSP的数据、否则随机突变为随机数据,跳转执行步骤7);否则,跳转执行步骤6)。可选地,所述第一概率比第二概率大。可选地,所述字符串比较集合的提取生成步骤包括:S1)提取用于执行测试用例的目标二进制文件中的所有字符串数据,并记录字符串数据所在位置,根据字符串所在位置的密集程度,将字符串分为不同的字符串组,此类字符串组集合称为P,其中每个字符串组成称为p,p∈P;S2)获取目标二进制文件中的字符串比较信息,并记录记录字符串数据所使用时的比较代码位置,根据字符串比较代码位置的密集程度,将字符串分为不同的字符串组,此类字符串组集合称为C,其中的每个字符串组称为c,c∈C;S3)将两类字符串集合中的字符串组进行与操作,获得p和c的并集,此类字符串组集合称为第一子集PAC,其中的每个字符串组称为pac,pac∈PC,pac=p∩c;S4)将两类字符串集合中的字符串组进行差操作,获得p和c的差集与c和p的差集,此类字符串组集合称为第二子集PSC、第三子集CSP,其中每个字符串组分别称为psc和csp,psc∈PSC,csp∈CSP,psc=p-c,csp=c-p;S5)将第二子集PSC、第三子集CSP中只有一个元素的字符串组从两集合中移除,并将所有单独的字符串组成一个新的第四子集S,最终得到由第一子集PAC、第二子集PSC、第三子集CSP、第四子集S构成的字符串比较集合。可选地,步骤1)选择两个种子测试用例具体是指从种子集合中选择,且生成所述种子集合的详细步骤包括:1.1)收集用于作为训练集的种子测试用例;1.2)将种子测试用例放入目标二进制文件中执行,获取每个种子测试用例执行中的路径覆盖信息;1.3)将路径覆盖信息为PS1、PS2的两个种子测试用例随机组合生成新的组合测试用例,将新的组合测试用例放入目标二进制文件中执行,获取新的组合测试用例的路径覆盖信息PN;1.4)将两个种子测试用例的路径覆盖信息为PS1、PS2作为输入,将两个种子测试用例的对应新的组合测试用例的路径覆盖信息PN和路径覆盖信息为PS1、PS2两者的差别作为进行分类的依据,利用收集的种子测试用例构建训练集来完成训练机器学习模型,当新的组合测试用例的路径覆盖信息PN和路径覆盖信息为PS1、PS2两者的差别大于阀值时,将新测试用例和其路径覆盖信息加入种子集合;1.5)将任意路径覆盖信息为PS1、PS2的两个种子测试用例输入训练机器学习模型进行分类,选择两个种子测试用例的对应新的组合测试用例的路径覆盖信息PN和路径覆盖信息为PS1、PS2两者的差别最大的一类的两个种子组合成新的测试用例放入目标二进制文件中执行,获取新的组合测试用例的路径覆盖信息PN,判断指定时间长度内路径覆盖率是否本文档来自技高网...

【技术保护点】
1.一种基于遗传变异的模糊测试用例生成方法,其特征在于实施步骤包括:1)选择两个种子测试用例;2)针对新测试用例的种子长度,选择一个数据位置作为当前数据位置;3)针对当前数据位置,判断两个种子测试用例的数据是否相同,如果相同则跳转执行步骤4);否则,跳转执行步骤5);4)将种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;5)判断两个种子测试用例的当前数据位置的数据中任意一个属于预设的字符串比较集合是否成立,预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到,如果成立则将新测试用例的当前数据位置的数据随机突变为预设的字符串比较集合中的数据,跳转执行步骤7);否则,跳转执行步骤6);6)随机选择一方种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;7)判断种子长度是否已经遍历完毕,如果尚未遍历完毕,则继续选择下一个数据位置作为当前数据位置,跳转执行步骤3);否则跳转执行下一步;8)按照指定的比例对新测试用例进行随机突变,将完成随机突变后的新测试用例作为最终得到的新测试用例输出。

【技术特征摘要】
1.一种基于遗传变异的模糊测试用例生成方法,其特征在于实施步骤包括:1)选择两个种子测试用例;2)针对新测试用例的种子长度,选择一个数据位置作为当前数据位置;3)针对当前数据位置,判断两个种子测试用例的数据是否相同,如果相同则跳转执行步骤4);否则,跳转执行步骤5);4)将种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;5)判断两个种子测试用例的当前数据位置的数据中任意一个属于预设的字符串比较集合是否成立,预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到,如果成立则将新测试用例的当前数据位置的数据随机突变为预设的字符串比较集合中的数据,跳转执行步骤7);否则,跳转执行步骤6);6)随机选择一方种子测试用例当前数据位置的数据遗传到新测试用例的当前数据位置;7)判断种子长度是否已经遍历完毕,如果尚未遍历完毕,则继续选择下一个数据位置作为当前数据位置,跳转执行步骤3);否则跳转执行下一步;8)按照指定的比例对新测试用例进行随机突变,将完成随机突变后的新测试用例作为最终得到的新测试用例输出。2.根据权利要求1所述的基于遗传变异的模糊测试用例生成方法,其特征在于,步骤5)中预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到。3.根据权利要求1所述的基于遗传变异的模糊测试用例生成方法,其特征在于,所述字符串比较集合为根据用于执行测试用例的目标二进制文件中字符串数据所在位置的密集程度划分得到的第一子集PAC、第二子集PSC、第三子集CSP,第一子集PAC的密集程度比第二子集PSC、第三子集CSP两者的密集程度高,所述第二子集PSC、第三子集CSP两者的密集程度相同。4.根据权利要求3所述的基于遗传变异的模糊测试用例生成方法,其特征在于,步骤5)的详细步骤包括:5.1)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第一子集PAC是否成立,如果成立则将新测试用例的当前数据位置的数据按照第一概率优先随机突变为预设的字符串比较集合中第一子集PAC的数据、否则随机突变为第二子集PSC或第三子集CSP随机数据,跳转执行步骤7);否则,跳转执行步骤5.2);5.2)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第二子集PSC是否成立,如果成立则将新测试用例的当前数据位置的数据按照第二概率优先随机突变为预设的字符串比较集合中第二子集PSC的数据、否则随机突变为随机数据,跳转执行步骤7);否则,跳转执行步骤5.3);5.3)判断两个种子测试用例的当前数据位置的数据中任意一个属于字符串比较集合中第三子集CSP是否成立,如果成立则将新测试用例的当前数据位置的数据按照第二概率优先随机突变为预设的字符串比较集合中第三子集CSP的数据、否则随机突变为随机数据,跳转执行步骤7);否则,跳转执行步骤6)。5.根据权利要求4所述的基于遗传变异的模糊测试用例生成方法,其特征在于,所述第一概率...

【专利技术属性】
技术研发人员:卢凯周旭何兴陆张文喆王睿伯王鹏飞
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1