基于多种群遗传算法的二进制程序模糊测试方法技术

技术编号:18732209 阅读:39 留言:0更新日期:2018-08-22 02:58
本发明专利技术涉及基于多种群遗传算法的二进制程序模糊测试方法,属于信息安全中的二进制漏洞挖掘领域。本方法采用多种群遗传算法的方法,首先把每个测试数据个体抽象为染色体。然后随机或由初始数据初始化一个主种群以及子种群1和子种群2,通过记录测试数据执行路径中新发现的边的数量以及与该测试数据相关的边的数量作为适应度的衡量标准。接着由适应度排序得到子种群的优良个体并迁移到主种群。最后主种群和子种群分别进行遗传操作(交叉和变异)得到新的个体进行新一轮的跟踪执行。本发明专利技术可以有效的提高程序执行路径的覆盖率,能够覆盖特定程序执行路径,对测试数据的生成具有显著的指导意义,具有很好的应用价值和推广价值。

Fuzzy testing method of binary program based on multi population genetic algorithm

The invention relates to a binary program fuzzy testing method based on multi-population genetic algorithm, belonging to the field of binary vulnerability mining in information security. In this method, a multi-population genetic algorithm is used to abstract each test data individual into chromosomes. Then a primary population and subpopulations 1 and 2 are initialized randomly or from the initial data. The fitness is measured by recording the number of newly discovered edges in the test data execution path and the number of edges associated with the test data. Secondly, the fine individuals of the sub population are migrated to the main population by ranking fitness. Finally, the main population and the sub-population are genetically manipulated (crossover and variation) to get new individuals for a new round of tracking implementation. The invention can effectively improve the coverage rate of the program execution path, can cover the specific program execution path, has significant guiding significance for the generation of test data, and has good application value and popularization value.

【技术实现步骤摘要】
基于多种群遗传算法的二进制程序模糊测试方法
本专利技术涉及二进制程序模糊测试方法,属于信息安全中的二进制漏洞挖掘领域。
技术介绍
模糊测试技术是目前安全领域最常用、综合效果较好的漏洞挖掘方法,该技术通过向目标软件系统提供随机构造的或者变异的测试用例,监视软件的执行过程是否出现崩溃等异常,以观测目标软件是否存在潜在漏洞。模糊测试系统生成的测试数据的代码覆盖率越高,发现漏洞的可能性越大,因此,可以把测试数据的代码覆盖率作为测试数据生成优劣的评价标准。一般模糊测试中,我们并没有被测程序的源码,所以其输入数据的格式是未知的。基于变异的方法通过直接修改现有的测试数据来生成新的测试数据。然而因为变异方式随机,不能够达到很高的代码覆盖率,漏洞挖掘效果并不好。因此,本专利技术将提供多种群遗传算法的二进制程序模糊测试方法来提高基于变异的模糊测试生成测试数据的代码覆盖率。多种群遗传算法的二进制程序模糊测试方法需要解决的基本问题是:基于变异的方法随机生成的测试数据不能达到很高的代码覆盖率的问题。综观现有的针对输入数据格式未知的二进制程序模糊测试方法,通常使用方法可归为两类:1.符号执行的方法基于符号执行的方法将测试数据作为符号值处理。通过收集程序处理符号值时的约束信息,进而利用约束信息求解生成新的测试数据来测试新的执行路径。理论上,该方法能够达到100%的代码覆盖率,然而对于复杂程序,符号执行有路径爆炸的缺点,严重影响了符号执行方法的应用范围。2.进化算法的方法基于进化算法的方法将测试数据转换为适当的格式以方便指导测试数据的生成,应用广泛的是遗传算法。目前遗传算法的使用需人工预定义一条或多条执行路径,进而生成符合预设执行路径的测试数据,不能对其他路径进行测试。综上所述,综上所述,现有针对输入数据格式未知的二进制程序模糊测试方法存在不适用于复杂程序、测试的执行路径少等问题。所以,本专利技术提出基于多种群遗传算法的二进制程序模糊测试方法。
技术实现思路
本专利技术的目的是为解决输入数据格式未知的二进制程序模糊测试方法不适用于复杂程序、测试的执行路径少的问题,提出基于多种群遗传算法的二进制程序模糊测试方法。本专利技术的设计原理为:将测试数据转化为主种群和子种群的个体,使用个体在进化过程中的改变来产生新的测试数据,同时用子种群的新个体影响主种群的进化,即通过设置迁移算子保证各个种群之间的优良信息的分享交流,保证种群个体多样性的同时,加快收敛的速度,即加快提高程序执行路径覆盖率,整体流程见图1。本专利技术的技术方案是通过如下步骤实现的:步骤1,种群初始化。步骤1.1,测试数据转化为种群内个体。步骤1.2,主种群和子种群个体随机初始化。步骤2,定位基本块。步骤2.1Qemu插桩后执行程序,获取程序执行过程中的基本块信息。步骤2.2基本块前插入代码,把程序执行路径信息输出到外部文件。步骤3,监控被测程序是否崩溃及记录程序执行路径。步骤3.1,记录程序执行后的基本块序列,可以转化为边的序列,边是两个连续基本块之间的跳转。步骤3.2,合并边的序列中的相同边,得到边的集合作为程序执行路径信息。步骤3.3根据步骤3.1和步骤3.2处理所有个体Xi得到所有测试数据对应的程序的执行路径信息,即边的集合Ei。步骤4,计算测试数据的适应度,选出种群优秀个体。步骤4.1计算测试数据执行后发现的边的数量的增量作为适应度计算的f1值。步骤4.2更新所有曾经发现的边的集合,并计算与测试数据相关的边的数量作为适应度计算的f2值。步骤4.3,首先比较f1值,然后比较f2值进行适应度排序,筛选出优秀个体(测试数据)。步骤5,子种群向主种群迁移及种群内变异交叉。步骤5.1把子种群中适量的优秀个体迁移到主种群。步骤5.2种群内交叉。步骤5.3种群内变异。步骤5.3,把主种群和子种群新得到的优秀个体带入被测程序执行,重复步骤3到步骤5。有益效果相比于符号执行分析方法和其他进化算法,本专利技术在相同的时间内生成的测试数据能够获得更高的代码覆盖率,、证明了多种群遗传算法对于模糊测试数据中测试数据的生成具有显著的指导意义,且发现崩溃漏洞的效率比AFL有明显提高,这也意味着生成的测试数据能够覆盖特定程序的执行路径。附图说明图1为本专利技术基于多种群遗传算法的二进制程序模糊测试方法的流程图。图2为本专利技术一种基本块举例示意图。具体实施方式为了更好的说明本专利技术的目的和优点,下面结合实例对本专利技术方法的实施方式做进一步详细说明。具体流程为:步骤1,种群初始化。步骤1.1,首先主种群和子种群由若干数量的个体组成,每个个体可以抽象表示为染色体,那么种群中的第i个体可以表示为Xi=(xi,1,xi,2,xi,3,...,xi,D)。种群初始化的过程就是为Xi中每一个基因xi,d赋值,,每个xi,d代表一个字节,长度D即为测试数据的字节数。步骤1.2,本专利技术使用随机赋值的方式初始化主种群和子种群。class1和class2子种群均采用一个种群来试验,其中class2子种群初始化是由class1子种群中每个的二进制编码取反得到。步骤2,定位基本块。步骤2.1,Qemu插桩能够获取程序执行过程中的基本块信息。Qemu模拟执行程序的过程中将程序划分为基本块进行翻译和执行。步骤2.2,在Qemu执行一个基本块之前插入一段输出当前正在执行的基本块的信息的代码,在Qemu模拟执行程序时得到程序执行过程对应的基本块序列,即程序的执行路径信息,并记录到外部文件。步骤3,跟踪执行被测程序。步骤3.1,将程序中每一个基本块由其入口地址b代表,通过跟踪程序执行过程可获得一个基本块的序列(b1,b2,b3,...,bn)。定义执行路径中两个连续基本块之间的跳转为e=(bk,bk+1),那么e就是以基本块为节点的程序执行路径中的边(如图2所示),程序的执行路径可以表示成边的序列Ee=(e1,e2,e3,...,en-1)。步骤3.2,合并序列Ee中相同的边,得到包含出现次数信息的边的集合E‘e=(e’1,e‘2,e’3,...,e‘n-1)。相同边出现的次数在不同的程序执行过程可能不同,我们将其分成8种不同的类型:1、2、3、4-7、8-15、16-31、32-127、≥128。这8种类型能够使用一个字节的不同位进行表示,便于编程实现。经过分类后,将得到一个新的边的集合E“e={e”1,e“2,e”3,...,e“n-1}。步骤3.3,对主种群和子种群中的每一个个体Xi对应的程序基本块序列使用上述方法进行处理,最终将得到程序的执行路径信息,即边的集合Ei={ei,1,ei,2,ei,3,...}。步骤4,适应度计算并排序,然后选出种群的优秀个体。步骤4.1,定义整个模糊测试过程中所有曾经发现的边的集合为Et={et,1,et,2,et,3,...}。通过f1(Xi)=card(Ei-Et),计算测试数据在被测程序中执行后新发现的边的个数f1。步骤4.2,更新种群内的集合Et和Wt。对于集合Et中任意一条边et,i,假设最后一次发现这条边的测试数据为Xt,i,得到一个边与测试数据相对应的集合Wt={(et,1,Xt,1),(et,2,Xt,2),(et,3,Xt,3),...}。并使用函数计算集合Wt中与测试数据相关的边的数量f2,其中W(e)为本文档来自技高网
...

【技术保护点】
1.基于多种群遗传算法的二进制程序模糊测试方法,其特征在于所述方法包括如下步骤:步骤3,首先得到基本块序列,并得到对应的边的序列,接着合并相同的边得到包含出现次数信息的边的集合Ee,然后把每条边出现的次数分为8种类型,并用一个字节的不同位进行表示,分类之后得到一个新的边的集合E‘’e,最终得到了程序的执行路径信息,即边的集合E‘’e;步骤4.1,通过f1(Xi)=card(Ei‑Et),计算测试数据在被测程序中执行后新发现的边的个数;步骤4.2,对于整个模糊测试过程中所有曾经发现的边的集合Et={et,1,et,2,et,3,...}中任意一条边et,i,假设最后一次发现这条边的测试数据为Xt,i,那么可以得到一个边与测试数据相对应的集合Wt={(et,1,Xt,1),(et,2,Xt,2),(et,3,Xt,3),...},并使用函数

【技术特征摘要】
1.基于多种群遗传算法的二进制程序模糊测试方法,其特征在于所述方法包括如下步骤:步骤3,首先得到基本块序列,并得到对应的边的序列,接着合并相同的边得到包含出现次数信息的边的集合Ee,然后把每条边出现的次数分为8种类型,并用一个字节的不同位进行表示,分类之后得到一个新的边的集合E‘’e,最终得到了程序的执行路径信息,即边的集合E‘’e;步骤4.1,通过f1(Xi)=card(Ei-Et),计算测试数据在被测程序中执行后新发现的边的个数;步骤4.2,对于整个模糊测试过程中所有曾经发现的边的集合Et={et,1,et,2,et,3,...}中任意一条边et,i,假设最后一次发现这条边的测试数据为Xt,i,那么可以得到一个边与测试数据相对应的集合Wt={(et,1,Xt,1),(et,2,Xt,2),(et,3,Xt,3),...},并使用函数计算集合Wt中与测试数据相关的边的数量f2;步骤4.3,两个测试数据适应度的比较,首先比较两个测试数据的f1值,如果相等,就更新集合Et和Wt,最后计算测试数据的f2值进行比较;步骤5,交叉过程使用2-opt交换,并随机生成0到D的交叉点,以主种群为基准给不同的子种群设置不同的交叉率和变异率,一个低于主种群,一个高于主种群,从而避免算法陷入早熟收敛。2.根据权利要求1所述的基于多种群遗传算法的二进制程序模糊测试方法,其特征在于:步骤3通...

【专利技术属性】
技术研发人员:罗森林侯留洋潘丽敏焦龙龙张笈
申请(专利权)人:北京理工大学
类型:发明
国别省市:北京,11

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

1