一种用于提升模糊测试的覆盖率的方法和系统技术方案

技术编号:27265845 阅读:25 留言:0更新日期:2021-02-06 11:29
本发明专利技术提供一种用于提升模糊测试的覆盖率的方法和系统。其中所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;以及步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。种子节点作为评估变异测试用例的依据。种子节点作为评估变异测试用例的依据。

【技术实现步骤摘要】
一种用于提升模糊测试的覆盖率的方法和系统


[0001]本专利技术涉及软件测试领域,尤其是涉及一种用于提升模糊测试的覆盖率的方法和系统。

技术介绍

[0002]Fuzzing测试(模糊测试)是一种软件测试方法,它向程序提供无效的,非预期或者是随机的输入数据,一旦程序出现了比如崩溃或者断言失败的错误,就会发现存在的缺陷。Fuzzing测试不仅适用于有源软件,也适用于二进制软件,应用范围广,它通过大量的测试用例动态执行目标软件,对动态执行过程进行分析,误报率要低于静态分析技术。另外,Fuzzing实现原理简单,没有大量理论推导和公式计算,避免了符号执行过程中的路径爆炸问题,自动化程度高,人工参数的工作量小,被广泛应用于漏洞挖掘领域。
[0003]但是Fuzzing测试是半自动化的测试方法,程序是否执行崩溃与输入的测试用例关系很大,常规的基于变异的Fuzzing工具会设置测试用例的变异策略,也就是给定种子文件,对种子文件中的字段进行变异,这种方法虽然自动化程度较高,但是存在覆盖率的问题。这是因为变异策略一般是预先设定,并不会根据程序实际执行过程而进行适应性改变,因此特别是在遇到魔术字符串的判断时,一般的变异策略是无法通过判定,导致程序无法继续执行后续的路径。因此,当前对Fuzzing进行改进的一个重要方面就是如何提高其导向性,尽可能覆盖更多路径,以提高漏洞挖掘的效率和有效性。
[0004]目前,最接近的现有技术是AFL,它是一种典型的模糊测试工具。图1为根据本专利技术比较例的AFL工作流程的示意图。如图1所示,AFL是典型的Fuzzing测试流程首先判断目标,根据软件的特征采用相应的技术;之后识别输入,认为所有的可利用漏洞都是因为应用程序接受了用户的输入并且在处理输入数据时没有清除非法数据或者执行确认过程。任何发往目标应用程序的输入都是可能的Fuzzing测试变量;生成Fuzzing测试用例,根据一定的变异规则对种子文件进行变异生成大量的测试用例;测试用例输入目标程序,观察程序是否出现崩溃,如果出现崩溃,保留崩溃时的执行信息,用于后续调试,如果没有出现崩溃,继续输入其他测试用例直至测试用例集为空。如果测试用例可以使程序覆盖新的路径,则将其放入种子文件中,基于其生成新的测试用例,以提高覆盖率。
[0005]AFL虽然记录了测试用例的执行路径,提高覆盖新执行路径的测试用例的生成数量以调高其对代码的覆盖率,这种方法在一定程度上能够提高Fuzzing的效果,但是依然存在一定的盲目性,在种子文件的生成上,对程序的分析粒度依然较粗,针对性较差。对AFL的改进工作也是为了提高模糊测试的代码覆盖率,这些方法主要的改进在于增加从程序入口到当前执行点的正向执行路径覆盖分支以提高覆盖率,这种方法分析粒度细,受程序执行上下文影响大,且由于是从当前执行点开始,对提高覆盖率的贡献有限。而本申请主要是筛选能够提高执行覆盖率的重点函数和可能导致程序崩溃的可疑漏洞函数,提高从程序的当前执行点到重点目标函数的执行的可能性来提高覆盖率,对模糊测试起到导向性的作用。

技术实现思路

[0006]本专利技术的目的在于提供一种用于提升模糊测试的覆盖率的方案,以解决现有技术中存在的技术问题。
[0007]本专利技术第一方面提供了一种用于提升模糊测试的覆盖率的方法,所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
[0008]具体地,在所述步骤S2中,利用如下方法确定所述第一锚节点:步骤S2-a1、获取所述调用图的节点和边作为函数调用关系;步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
[0009]具体地,在所述步骤S2中,利用如下方法确定所述第二锚节点:步骤S2-b1、提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;步骤S2-b2、利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;步骤S2-b3、计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
[0010]具体地,在步骤S3中,根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
[0011]本专利技术第二方面提供了一种用于提升模糊测试的覆盖率的系统,所述系统包括:预处理单元,被配置为,对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;锚节点确定单元,被配置为,基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;距离计算单元,被配置为,根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;以及能量计算单元,被配置为,基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
[0012]具体地,所述锚节点确定单元具体被配置为:获取所述调用图的节点和边作为函数调用关系;基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
[0013]具体地,所述锚节点确定单元具体被配置为:提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
[0014]具体地,所述距离计算单元具体被配置为:根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
[0015]本专利技术第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令
由处理器执行时,执行根据本专利技术第一方面的用于提升模糊测试的覆盖率的方法中的步骤。
[0016]综上,本专利技术的技术方案从对代码的理解角度出发,对程序中的函数进行按照重要性进行筛选,得到对提高程序覆盖率的关键函数和更容易导致程序崩溃的可疑漏洞函数,构建重要函数集(锚函数集);并使用适应性算法计算种子到重要函数的距离,对种子文件进行能量计算,基于种子能量生成更容易执行到重要函数的测试用例,提高Fuzzing测试对代码的覆盖率,增强Fuzzing测试的针对性和效率。
附图说明
[0017]为了更清楚地说明本专利技术具体实施方式或现有技术中的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于提升模糊测试的覆盖率的方法,其特征在于,所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。2.根据权利要求1所述的用于提升模糊测试的覆盖率的方法,其特征在于,在所述步骤S2中,利用如下方法确定所述第一锚节点:步骤S2-a1、获取所述调用图的节点和边作为函数调用关系;步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。3.根据权利要求2所述的用于提升模糊测试的覆盖率的方法,其特征在于,在所述步骤S2中,利用如下方法确定所述第二锚节点:步骤S2-b1、提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;步骤S2-b2、利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;步骤S2-b3、计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。4.根据权利要求3所述的用于提升模糊测试的覆盖率的方法,其特征在于,在步骤S3中,根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。5.一种用于提升模糊测试的覆盖率的系统,其特征在于,所述...

【专利技术属性】
技术研发人员:于璐沈毅陆余良潘祖烈杨国正赵军赵家振黄晖
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1