CN109597767A - 一种基于遗传变异的模糊测试用例生成方法及*** - Google Patents
一种基于遗传变异的模糊测试用例生成方法及*** Download PDFInfo
- Publication number
- CN109597767A CN109597767A CN201811554639.9A CN201811554639A CN109597767A CN 109597767 A CN109597767 A CN 109597767A CN 201811554639 A CN201811554639 A CN 201811554639A CN 109597767 A CN109597767 A CN 109597767A
- Authority
- CN
- China
- Prior art keywords
- character string
- subset
- data
- seed
- test case
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computational Linguistics (AREA)
- Genetics & Genomics (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Physiology (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于遗传变异的模糊测试用例生成方法及***,方法包括选择两个种子测试用例,针对新测试用例的数据位置,如果两个种子数据相同则将数据遗传到新测试用例的当前数据位置,如果两个种子数据不同,且任意属于目标二进制文件进行静态分析提取的字符串比较集合,则将数据随机突变为预设的字符串比较集合中的数据,否则随机选择一方种子的数据遗传到新测试用例的当前数据位置。本发明继承了基于生成的测试用例生成方法和基于变异的测试用例生成方法各自的优点,又同时规避掉了他们相应的缺点,能够实现无需人工操作的大规模fuzzing目标程序的核心代码,具有生成测试用例有更大的可能性提升路径覆盖率、易于触发崩溃的优点。
Description
技术领域
本发明涉及计算机领域的漏洞挖掘领域,具体涉及一种基于遗传变异的模糊测试用例生成方法及***,用于为漏洞挖掘的目标程序提供漏洞挖掘的模糊测试用例。
背景技术
测试用例的生成方法大致分为两类,基于生成的测试用例生成和基于变异的测试用例生成。现有基于生成的测试用例生成方法是通过人工的编写测试用例生成规则,使得测试用例可以按照目标规则进行生成,保证生成的测试用例可以绕过目标程序的错误检查代码,从而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.4),否则判定种子集合生成完毕并退出。
本发明还提供一种基于遗传变异的模糊测试用例生成***,包括计算机设备,所述计算机设备被编程以执行本发明所述基于遗传变异的模糊测试用例生成方法的步骤。
和现有技术相比,本发明具有下述优点:
1、本发明预设的字符串比较集合为针对用于执行测试用例的目标二进制文件进行静态分析提取其中的字符串数据得到,通过静态分析目标程序的二进制代码,获取程序二进制代码中的部分信息,可以得到程序中用做字符串比较的相关信息。此信息在漏洞挖掘中是十分有用,而且经常被用在错误检查中。如果是纯随机的测试用例生成,很难随机的匹配到这些信息。例如,在浏览器程序中,解析模块就会根据html中的标签对html文件进行解析,这时就需要html文件严格的按照标签相应的字符串进行创建,否则,创建的测试用例就会被解析模块是为错误文本进行处理,从而无法挖掘到浏览器程序的核心功能模块。因此,通过静态分析得到这些信息,对后续指导测试用例生成方面具有重大意义。
2、种子对(两个种子测试用例)的处理方法也是本发明的核心内容,改方法对核心思路来源于遗传学中的基因重组思想,首先,通过分析种子文件中的数据信息,获取程序中的规则信息,种子中数据相同位置的数据相对稳定,代表此位置的数据更有可能是规则格式数据,不应该轻易被改变。如同在遗传学中,父系和母系共有的相同基因更有可能是比较重要的基因,应该被继承,而不是轻易改变。此过程模拟遗传学中的继承等操作。之后,判断不同位置数据是否属于字符串比较类,如果属于,则将会将此位置中的数据替换成字符串比较类中随机的一个。此过程模拟基因工程中对基因的定向改造。如果不属于字符串比较类,则选择一个种子中的数据进行继承。此过程模拟了遗传学中显性基因和隐形基因的所显示的性状的不同。最后,随机变异测试用例,提高目标程序代码覆盖率。此过程模拟遗传学中的基因突变。从而使得本发明基于遗传变异的模糊测试用例生成方法继承了基于生成的测试用例生成方法和基于变异的测试用例生成方法各自的优点,又同时规避掉了他们相应的缺点,能够实现无需人工操作的大规模fuzzing目标程序的核心代码。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例方法的遗传变异原理示意图。
具体实施方式
如图1所示,本实施例基于遗传变异的模糊测试用例生成方法的实施步骤包括:
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构成的字符串比较集合。
通过上述字符串比较集合的提取生成步骤的详细步骤,得到了4类集合PAC,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.4),否则判定种子集合生成完毕并退出。
本实施例中前述生成种子集合的步骤是通过fuzzing工具实现的。
通过前述生成种子集合的不断强化学习,随着运行次数的增加,机器学习的能力会逐渐增强,大幅的提升机器学习模型所选择的种子所生成的测试用例的路径覆盖率。
本实施例步骤1.1)种收集用于作为训练集的种子测试用例时,收集大量合法的种子应包含:(1)常用的正常测试用例,例如,用视频处理程序为例,应该收集常见的一些视频,电视剧,mv等;(2)一些生成的测试用例,例如,用视频处理程序为例,应使用视频生成程序生成各种视频。而且,收集的种子种类应尽量丰富,例如,用视频处理程序为例,应包含各种视频格式文件的类型,如mp4、rmvb、avi、wma、rm、mpeg、mov、mkv、flv、f4v、m4v、3gp、dat、ts、mts、vob等。
如图2所示,图中A部分代表从目标程序静态分析中得出的字符串比较集合,此集合包括第一子集PAC、第二子集PSC、第三子集CSP。种子一和种子二两个种子测试用例中,数据相同的位置和数据不同的位置,对不同的情况会后续进行不同的操作如图所示,图中种子一和种子二的未标记字母区域的位置代表此位置种子数据相同,其他标记字母区域的位置代表种子数据不同。
图2中的未标记字母区域的位置代表种子中的数据相同,这说明此位置的数据相对稳定,代表此位置的数据更有可能是规则格式数据,不应该轻易被改变。如同在遗传学中,父系和母系共有的相同基因更有可能是比较重要的基因,应该被继承,而不是轻易改变。此过程模拟遗传学中的继承等操作;图中标记字母区域的位置的代表种子中的数据不同,许对其情况进行判断,判断这些不同位置的数据是否属于图中红色的字符串比较类。之后根据数据类型的不同,在生成新测试用例时对不同的位置数据进行不同操作。
图2中标记字母B部分的数据代表两个种子中相同位置的数据都属于字符串比较类,此时就可以从字符串比较类中随机选取一个字符串放入新生成的测试用例中,由于此位置的数据大多为字符串比较类的数据,因此,在此集合中对字符串比较操作进行随机选择,更有可以发现新的未知路径,并且此种未知路径是之前两个种子都为达到过得新的核心代码区域,此过程模拟基因工程中对基因的定向改造;
图2中标记字母D和C的部分分别代表两种子中相同位置的数据不属于字符串比较类,此时随机选择黄色部分或绿色部分中的一种进行遗传,此过程模拟了遗传学中显性基因和隐形基因的所显示的性状的不同;将生成的测试用例按照一定比例进行随机突变,此过程模拟遗传学中的基因突变,而后生成的新的测试用例就位本方法生成的最新的测试用例,并且可以定向的提高在模糊测试中的路径覆盖率。
由于本实施例前述基于遗传变异的模糊测试用例生成方法是一种基于遗传的测试用例生成方法,收集大量且种类丰富的合法种子后,丰富且优质的种子可以帮助测试用例生成方法更为高效的遗传各类种子种较为优良的数据,对提高fuzzing工具对代码覆盖率和帮助测试用例绕过程序前期的格式化检查执行更多的程序核心代码有极大的帮助;本实施例前述基于遗传变异的模糊测试用例生成方法通过对种子进行两两配对,由于不同的种子存在不同的执行路径,因此,种子的选择方式也很重要,本实施例前述基于遗传变异的模糊测试用例生成方法采取监督学习的方法选择测试用例中最有可能触发新路径的两个测试用例组合,对两种子进行或遗传或变异的操作,此操作会根据两种子的不同情况针对性的根据两个种子中的数据形成新的测试用例。
综上所述,本实施例前述基于遗传变异的模糊测试用例生成方法将两个已知的测试用例通过遗传学中的遗传变异的方法,将两个测试用例相同的位置进行遗传,对两个测试用例不同对位置进行或选择性遗传、或随机性变异的操作,使得两个测试用例中对fuzzing程序更高效、更稳定的部分遗传到后代,相对效率低、易变化的部分进行概率性的变异,从而大幅提升测试用例的有效性,具有生成测试用例有更大的可能性提升路径覆盖率、易于触发崩溃的优点。此外,本实施例还提供一种基于遗传变异的模糊测试用例生成***,包括计算机设备,该计算机设备被编程以执行本实施例前述基于遗传变异的模糊测试用例生成方法的步骤。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围的情况下,都可利用上述揭示的技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (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所述的基于遗传变异的模糊测试用例生成方法,其特征在于,所述第一概率比第二概率大。
6.根据权利要求3所述的基于遗传变异的模糊测试用例生成方法,其特征在于,所述字符串比较集合的提取生成步骤包括:
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构成的字符串比较集合。
7.根据权利要求3所述的基于遗传变异的模糊测试用例生成方法,其特征在于,步骤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.4),否则判定种子集合生成完毕并退出。
8.一种基于遗传变异的模糊测试用例生成***,包括计算机设备,其特征在于,所述计算机设备被编程以执行权利要求1~7中任意一项所述基于遗传变异的模糊测试用例生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811554639.9A CN109597767B (zh) | 2018-12-19 | 2018-12-19 | 一种基于遗传变异的模糊测试用例生成方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811554639.9A CN109597767B (zh) | 2018-12-19 | 2018-12-19 | 一种基于遗传变异的模糊测试用例生成方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109597767A true CN109597767A (zh) | 2019-04-09 |
CN109597767B CN109597767B (zh) | 2021-11-12 |
Family
ID=65963986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811554639.9A Active CN109597767B (zh) | 2018-12-19 | 2018-12-19 | 一种基于遗传变异的模糊测试用例生成方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597767B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110401581A (zh) * | 2019-07-22 | 2019-11-01 | 杭州电子科技大学 | 基于流量追溯的工控协议模糊测试用例生成方法 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
CN110633221A (zh) * | 2019-09-26 | 2019-12-31 | 信联科技(南京)有限公司 | 一种模糊测试自动化漏洞定位方法 |
CN111258909A (zh) * | 2020-02-07 | 2020-06-09 | 中国信息安全测评中心 | 一种测试样本生成方法及装置 |
CN111694755A (zh) * | 2020-07-31 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 应用程序测试方法、装置、电子设备及介质 |
CN111913877A (zh) * | 2020-07-03 | 2020-11-10 | 中国科学院信息工程研究所 | 一种面向文本配置文件的模糊测试方法及装置 |
CN112948277A (zh) * | 2021-04-30 | 2021-06-11 | 上海大学 | 一种基于耦合自编码器的模糊测试用例生成***和方法 |
CN113746819A (zh) * | 2021-08-24 | 2021-12-03 | 中国科学院信息工程研究所 | 一种二进制软件协议探测载荷的挖掘方法及装置 |
CN115134278A (zh) * | 2021-03-24 | 2022-09-30 | 奇安信科技集团股份有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859274A (zh) * | 2009-04-07 | 2010-10-13 | 西门子(中国)有限公司 | 一种进行模糊测试的方法及*** |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
DE102012217705A1 (de) * | 2011-09-29 | 2013-04-04 | Siemens Aktiengesellschaft | Verfahren, Vorrichtung und System zur Durchführung von Fuzz- Testing |
CN103853650A (zh) * | 2012-11-28 | 2014-06-11 | 西门子公司 | 一种模糊测试的测试用例生成方法及装置 |
CN103914383A (zh) * | 2014-04-04 | 2014-07-09 | 福州大学 | 一种基于多种群协同演化遗传算法的模糊测试*** |
US9619375B2 (en) * | 2014-05-23 | 2017-04-11 | Carnegie Mellon University | Methods and systems for automatically testing software |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘***及方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
-
2018
- 2018-12-19 CN CN201811554639.9A patent/CN109597767B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859274A (zh) * | 2009-04-07 | 2010-10-13 | 西门子(中国)有限公司 | 一种进行模糊测试的方法及*** |
DE102012217705A1 (de) * | 2011-09-29 | 2013-04-04 | Siemens Aktiengesellschaft | Verfahren, Vorrichtung und System zur Durchführung von Fuzz- Testing |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
CN103853650A (zh) * | 2012-11-28 | 2014-06-11 | 西门子公司 | 一种模糊测试的测试用例生成方法及装置 |
CN103914383A (zh) * | 2014-04-04 | 2014-07-09 | 福州大学 | 一种基于多种群协同演化遗传算法的模糊测试*** |
US9619375B2 (en) * | 2014-05-23 | 2017-04-11 | Carnegie Mellon University | Methods and systems for automatically testing software |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘***及方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
Non-Patent Citations (4)
Title |
---|
SANJAY RAWAT 等: "Evolving indigestible codes: Fuzzing interpreters with genetic programming", 《IEEE》 * |
XING HAN 等: "A mutation-based fuzz testing approach for network protocol vulnerability detection", 《IEEE》 * |
刘朋: "基于Fuzzing的Android漏洞挖掘技术", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
迟欣茹: "基于模糊测试的Android平台漏洞挖掘方法及软件实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175120B (zh) * | 2019-05-20 | 2020-11-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110401581A (zh) * | 2019-07-22 | 2019-11-01 | 杭州电子科技大学 | 基于流量追溯的工控协议模糊测试用例生成方法 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
CN110633221A (zh) * | 2019-09-26 | 2019-12-31 | 信联科技(南京)有限公司 | 一种模糊测试自动化漏洞定位方法 |
CN111258909A (zh) * | 2020-02-07 | 2020-06-09 | 中国信息安全测评中心 | 一种测试样本生成方法及装置 |
CN111258909B (zh) * | 2020-02-07 | 2024-03-15 | 中国信息安全测评中心 | 一种测试样本生成方法及装置 |
CN111913877A (zh) * | 2020-07-03 | 2020-11-10 | 中国科学院信息工程研究所 | 一种面向文本配置文件的模糊测试方法及装置 |
CN111913877B (zh) * | 2020-07-03 | 2021-09-28 | 中国科学院信息工程研究所 | 一种面向文本配置文件的模糊测试方法及装置 |
CN111694755B (zh) * | 2020-07-31 | 2023-07-18 | 抖音视界有限公司 | 应用程序测试方法、装置、电子设备及介质 |
CN111694755A (zh) * | 2020-07-31 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 应用程序测试方法、装置、电子设备及介质 |
CN115134278A (zh) * | 2021-03-24 | 2022-09-30 | 奇安信科技集团股份有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
CN112948277A (zh) * | 2021-04-30 | 2021-06-11 | 上海大学 | 一种基于耦合自编码器的模糊测试用例生成***和方法 |
CN113746819A (zh) * | 2021-08-24 | 2021-12-03 | 中国科学院信息工程研究所 | 一种二进制软件协议探测载荷的挖掘方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109597767B (zh) | 2021-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109597767A (zh) | 一种基于遗传变异的模糊测试用例生成方法及*** | |
Harman et al. | A theoretical and empirical study of search-based testing: Local, global, and hybrid search | |
McRae et al. | Circuitscape user’s guide | |
US8473914B2 (en) | Semi-automated update of application test scripts | |
CN105528289B (zh) | 一种基于分支覆盖与相似性的回归测试用例优先排序方法 | |
US9152303B2 (en) | Systems and methods for efficient video analysis | |
CN102708045B (zh) | 一种缓解路径***的动态符号执行方法 | |
Nguyen et al. | Recommending API usages for mobile apps with hidden markov model | |
CN110751224A (zh) | 视频分类模型的训练方法、视频分类方法、装置及设备 | |
CN110162457A (zh) | 用户界面的测试方法、装置、设备及存储介质 | |
CN103116540A (zh) | 基于全局超级块支配图的动态符号执行方法及其装置 | |
CN105279089B (zh) | 一种获取页面元素的方法及装置 | |
US8543984B2 (en) | Architecture for state driven testing | |
US20090204703A1 (en) | Automated document classifier tuning | |
Stephan et al. | Towards a taxonomy for simulink model mutations | |
CN110781960A (zh) | 视频分类模型的训练方法、分类方法、装置及设备 | |
CN104392171A (zh) | 一种基于数据关联的自动内存证据分析方法 | |
CN115687115A (zh) | 一种移动应用程序自动化测试方法及*** | |
CN107608685A (zh) | 安卓应用的自动执行方法 | |
CN112948193B (zh) | 一种基于差异测试的fpga综合工具缺陷检测方法 | |
Huisman et al. | StOCNET: Software for the statistical analysis of social networks | |
CN108121749A (zh) | 网站用户行为分析方法及装置 | |
Huppe et al. | Mining complex temporal api usage patterns: an evolutionary approach | |
CN111459774B (zh) | 一种应用程序的流量的获取方法、装置、设备及存储介质 | |
CN107562615A (zh) | 基于目标符合性评审论证树模型的适航符合性测试方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |