掌桥专利:专业的专利平台
掌桥专利
首页

一种基于动态自适应策略的模糊测试优化方法

文献发布时间:2024-04-18 20:01:30


一种基于动态自适应策略的模糊测试优化方法

技术领域

本发明属于网络安全漏洞挖掘技术领域,具体涉及一种基于动态自适应策略的模糊测试优化方法。

背景技术

模糊测试技术广泛应用于漏洞挖掘领域,具有自动化、高效率和可扩展性等优势,结合启发式算法的模糊测试工具AFL因为其智能、高效等特点,成为工业化并行漏洞挖掘的标志性产品。用户针对待测程序提供初始测试集,AFL采用遗传算法对测试用例进行变异,将能发现新执行路径的测试用例标记为种子,通过不断覆盖执行路径形成种子集,种子集在模糊测试周期中不断迭代,此过程中可触发crash发现程序bug。AFL针对种子的选择和变异设定了favorite策略,该策略类似模拟退火的思想,在单条路径中,找出到达目标区域速度最快、形态最小的种子并标记为favorite,在种子选择时被标记为favorite的种子具有更高的优先级。

Fuzz循环开始前,AFL选择种子开始进行变异,将变异的测试用例数量定义为种子能量,能量计算包含种子路径代码片段覆盖率,执行时间和产生新测试用例的周期三个元素决定。在一轮完整的Fuzz周期中,被标记为favorite的种子比未被标记的种子多出近百倍的变异测试用例,实际运行发现,AFL绝大部分周期都在执行favorite种子,由于判定favorite种子的方法由种子形态和执行速度有关,与是否产生新执行路径并无关联,导致在模糊测过程中种子集中未被标记为favorite种子过早丢弃,不能充分触发新路径,存在种子集过早收敛问题,导致路径覆盖率不足。目前业界有利用模拟退火算法优化种子集选择的方法来扩大favorite种子标记数量、利用梯度下降法来缓解局部最优、利用贪婪算法来提高路径遍历等方法,但在防止种子集过早收敛、提高漏洞挖掘效率方面仍存在较大提升空间。

发明内容

(一)要解决的技术问题

本发明要解决的技术问题是:如何设计一种提高模糊测试路径覆盖率的方法。

(二)技术方案

为了解决上述技术问题,本发明提供了一种基于动态自适应策略的模糊测试优化方法,包括以下步骤:

步骤1.在初始化阶段,将能发现新执行路径的测试用例标记为种子,并完成种子的广度索引;

步骤2.将程序控制流映射到马尔科夫链;

步骤3.基于步骤2进行路径权重、种子的深度索引值计算;

步骤4.基于步骤1、3进行动态自适应函数优化,实现种子集收敛。

优选地,步骤1中,设定两种种子广度索引启发式规则:1.单个种子发现新路径片段越多,种子后代变异发现新路径的概率越大;2.单个种子发现执行流跨越的代码块越多,控制流执行越复杂,离程序异常越近;基于以上两个种子广度索引启发式规则,设定种子的广度索引函数如下:

其中,i是种子在当前基本块可选执行路径片段的序号,2

优选地,程序包含多个基本块,每个基本块代表程序特定执行状态,相邻基本块之间有直接影响关系,即:过去状态不影响将来状态的预测,将来状态的发生只于现在有关,满足马尔科夫性质,步骤2中,将程序控制流抽象成为马尔科夫链,路径是状态转移过程,AFL在程序分支节点进行动态插桩获取执行路径信息,形成完整的程序控制流图;定义路径分支概率计算方法:

X表示有X个测试用例经过基本块A到基本块B的路径分支AB,Y表示有Y个测试用例不经过从到B的路径分支AB,在一次模糊测试循环后,m个测试用例经过基本块A往下运行,经过路径分支AD的测试用例有n个,则

优选地,单个种子在每条路径上的权重值即代表种子的深度索引值,根据路径分支概率的计算基本块的概率的计算公式如下:

B为基本块,JB是基本块J到B的路径片段,J(B)是与给定基本块S直接相连的基本块集合,J(B)中的基本块通过一次状态装换可以直接到达基本块S,P(R)表示选择基本块R的概率,P(B)为一次模糊测试循环后,经过基本块B的种子占比,P(JB)表示经过J到B的路径的概率,采用步骤2中的计算方法计算得到;步骤3中,根据所述计算公式计算每个基本块的权重值£B,从而得到路径的权重值,设单个种子执行路径经过的基本块总数为BLK(s),计算单个种子的深度索引值:

index_value_deep=∑

优选地,步骤4中,针对单个种子,需要找出该种子的深度索引和广度索引的阈值,在不同的阈值区间,分别执行索引值计算,依据深度索引值计算方法,最终计算得到种子的适应度。

优选地,所述种子的适应度的计算方法是在AFL本身的遗传算法基础上进行改进实现的。

优选地,所述种子的适应度的计算公式为:

其中,τ是设定的适应度阈值,根据程序控制流图规模,

优选地,τ根据程序控制流图的规模而定,程序控制流图中种子集最大执行路径层级最大,τ值最大,一轮模糊测试过后,种子集更新,适应度高于预设阈值的种子保留,继续进行变异,剔除剩下的种子,整个模糊测试周期中,种子集不断更新优化,确保能够到达更多的路径分支。

优选地,在种子集不断更新优化的过程中,采用萤火虫算法继续优化种子集,缓解路径爆炸问题。

优选地,种子集在优化过程中,与适应度函数契合度越好,标记为萤火虫亮度越高,在种子决策范围内种子集逐渐收缩,契合度偏离超过预设指标的种子丢弃,从整体上逐步实现全局最优,达到更高的路径覆盖率。

(三)有益效果

本发明提供了一种基于动态自适应策略的模糊测试优化方法,该方法基于动态自适应策略提高了模糊测试路径覆盖率。该方法包括在初始化阶段,完成种子的广度索引,设定两种种子广度索引启发式规则,设计种子的广度索引函数;将控制流映射到马尔科夫链,依据路径状态转移过程分别设计路径分支概率计算公式、基本块概率计算公式、种子深度索引值计算公式,获取种子的深度索引值;设计动态自适应函数优化种子集收敛过程,依据程序规模设定适应度阈值和种子的广度索引、深度索引值,获取种子变异执行过程中的适应度,根据适应度的值判断种子的契合程度,将契合度高的种子保留继续变异,其余的剔除;进一步,采用萤火虫算法防止路径爆炸问题优化种子集收敛过程,不断进行循环迭代,扩大对目标程序的路径覆盖,提高漏洞挖掘的crash产出。

附图说明

图1是本发明实施例中动态自适应模糊测试优化方法流程图;

图2是本发明实施例中路径适应度计算示意图。

具体实施方式

为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

本发明适用于C语言等结构化编程语言编译的二进制可执行程序,针对现有技术中的问题,本发明提出了一种基于动态自适应策略的模糊测试方法,主要优化种子变异过程中的路径选择,缓解种子集过早收敛问题,本发明着重缓解了AFL种子变异及种子集更新存在的过早收敛问题,达到了提高模糊测试效率的目的。

如图1所示,本实例提供一种基于动态自适应策略的模糊测试方法,其包括以下步骤:

步骤1.在初始化阶段,将能发现新执行路径的测试用例标记为种子,并完成种子的广度索引。

根据LAVA测试集提供的数据发现,程序控制流中代码片段越多,程序未知错误出现的就越多,即程序控制流与程序bug数量成正比,这里设定两种种子广度索引启发式规则:1.单个种子发现新路径片段越多,种子后代变异发现新路径的概率越大;2.单个种子发现执行流跨越的代码块越多,控制流执行越复杂,离程序异常越近。基于以上两个规则,设定种子的广度索引函数如下:

其中,i是种子在当前基本块可选执行路径片段(即路径分支)的序号,为了缓解路径爆炸,这里用2

步骤2.将程序控制流映射到马尔科夫链。

程序包含多个基本块,每个基本块代表程序特定执行状态,相邻基本块之间有直接影响关系,即:过去状态不影响将来状态的预测,将来状态的发生只于现在有关,满足马尔科夫性质,以下定义的程序控制流被抽象成为马尔科夫链,路径是状态转移过程,AFL在程序分支节点进行动态插桩获取执行路径信息,可形成完整的程序控制流图。下面定义路径分支概率计算方法:

X表示有X个测试用例经过基本块A到基本块B的路径分支AB,Y表示有Y个测试用例不经过从到B的路径分支AB,如图2所示,在一次模糊测试循环后,m个测试用例经过基本块A往下运行,经过路径分支AD的测试用例有n个,则

步骤3.基于步骤2进行路径权重、种子的深度索引值计算。

单个种子在每条路径上的权重值即代表种子的深度索引值,可根据路径分支概率计算得到基本块的概率:

B为基本块,JB是基本块J到B的路径片段,J(B)是与给定基本块S直接相连的基本块集合,J(B)中的基本块通过一次状态装换可以直接到达基本块S,P(R)表示选择基本块R的概率,P(B)为一次模糊测试循环后,经过基本块B的种子占比,P(JB)表示经过J到B的路径的概率,可参考步骤2中的计算方法计算P(JB)。通过此方法可以计算每个基本块的权重值£B,从而得到路径的权重值,设单个种子执行路径经过的基本块总数为BLK(s),可以计算单个种子的深度索引值:

通过以上方法计算单个种子的深度索引值。图2展示了发明实施例中路径适应度计算图,初始化程序输入,种子进入函数主程序入口,连线上的标注数字是种子经过此路径的概率,基本块A的(0.3,3.3)分别表示经过此基本块的概率和权重,因为从main到A只有1个路径片段,计算方法为:

步骤4.基于步骤1、3进行动态自适应函数优化,实现种子集收敛。

依据程序执行特性,前期阶段种子主要进行广度索引值计算,后期主要进行深度索引值计算,针对单个种子,我们需要找出该种子的深度索引和广度索引的阈值,在不同的阈值区间,分别执行索引值计算,依据以上索引值计算方法,最终计算得到种子的适应度,该种子的适应度的计算方法是在AFL本身的遗传算法基础上进行改进实现的:

τ是设定的适应度阈值,根据程序的控制流图规模,可以动态调整该阈值,

在种子集不断更新优化过程中,采用萤火虫算法继续优化种子集,缓解路径爆炸问题。

随着种子集广度的扩充和深度的延展,程序插桩运行中控制流图动态变化,种子路径扩充难以避免出现路径激增问题,导致运算量几何式增加,这里我们采用萤火虫算法思想,避免种子集陷入局部最优。种子集在优化过程中,与适应度函数契合度越好,标记为萤火虫亮度越高,在种子决策范围内(种子变异遍历路径过程)逐渐收缩,契合度偏离较高的种子丢弃,从整体上逐步实现全局最优,达到更高的路径覆盖率,提高模糊测试效率。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

相关技术
  • 仰斜式重力挡土墙的施工方法
  • 加筋土挡土墙仰斜式排水孔及其施工方法
技术分类

06120116558012