一种自动选取模糊器组合的集成模糊测试方法和系统技术方案

技术编号:37367043 阅读:23 留言:0更新日期:2023-04-27 07:13
本发明专利技术提出了一种自动选取模糊器组合的集成模糊测试方法和系统。本发明专利技术分为训练阶段和测试阶段。训练阶段包括:首先,在各个选定的待测程序上,依次测试各可选模糊器在该待测程序上的性能表现;然后,根据得到的在每个待测程序上单独使用各可选模糊器的性能,分别计算出在每个模糊器上各种模糊器组合的性能期望;最后,构建一个包含特征提取部分和分类部分的代码分类网络。测试阶段包括:将待测程序输入代码分类网络,得到相适应的模糊器组合;然后,使用这个模糊器组合对待测程序进行并行化测试,测试结束后收集全部测试结果并去重。本发明专利技术能够自动为待测程序选择适合的模糊器组合,实现异构模糊器并行化方式的集成测试,提高模糊测试性能。糊测试性能。糊测试性能。

【技术实现步骤摘要】
一种自动选取模糊器组合的集成模糊测试方法和系统


[0001]本专利技术涉及程序测试
,是一种自动选取模糊器组合的集成模糊测试方法和系统,尤其涉及一种使用机器学习辅助选择合适的模糊器的集成模糊测试方法和系统。

技术介绍

[0002]模糊测试是一种通过生成随机变异的输入并将其输入被测程序,然后观察被测程序的行为来自动发现漏洞的测试技术,目前已经成为了查找软件错误和漏洞的重要技术。近几年来,AFL和HonggFuzz等开源模糊测试工具已经在实践中成功得到了应用。
[0003]目前常用的软件模糊器主要都是基于覆盖率引导的,以便生成能够最大化代码覆盖率的输入集,因此需要大量生成各种测试用例并将其输入目标程序来收集程序的反馈信息,而这是一个十分消耗CPU资源的工作;另一方面,项目软件代码规模的不断增长,也使得模糊测试过程需要消耗更多的计算资源和测试时间。因此,需要通过模糊器的并行,即同时运行多个模糊器实例来提高测试效率。
[0004]为此,流行的模糊器(例如AFL)都会自带一个并行模式。在此模式下,多个模糊器实例会共享一个种子语料库来同步它们的工作。然而,虽然采用简单并行的方法确实能够增加一些代码覆盖率,但它并无法解决特定模糊器的固有限制的问题。例如,单实例的AFL难以解决魔术字节(一种固定地址、固定位数的校验码,可用于标识文件的类型等关键信息)匹配的问题,而即使使用多个AFL实例并行,这个问题依然存在。
[0005]通过观察模糊测试平台benchfuzz上的多种测试结果以及我们的测试结果发现(如图一所示):不同模糊器在不同被测程序上的性能表现受到目标程序特性的影响,说明不同模糊器在不同被测程序上的性能表现各有所长。因此,选择合适的异构模糊器组合,并采用并行化的集成模糊测试方式,其综合性能可以优于单一模糊器并行化的性能。
[0006]<<EnFuzz:Ensemble Fuzzing with Seed Synchronization among Diverse FuzzersEnFuzz>>提出了异构模糊器的集成模糊测试方案——EnFuzz,通过人工挑选一组表现良好的异构模糊器进行并行化的集成测试,增加了代码覆盖率,提高了测试效率。CN110633201A提出的集成模糊测试方法,在EnFuzz基础上加入了测试输入文件同步机制和结果集成机制。
[0007]但是,人工挑选适合的模糊器组合需要大量先验知识。测试人员既需要深入了解每种模糊器的内部特性,还需要了解待测程序自身特点。因此,人工挑选模糊器组合困难且费时,反而降低了整个测试过程的总体效率。
[0008]<<CUPID:Automatic Fuzzer Selection for Collaborative Fuzzing>>提出了集成模糊测试框架CUPID,通过在特定待测目标程序(和后文中的待测程序、目标程序、被测目标含义相同)集上进行一次测试评估,选出一组平均性能较好的模糊器组合,然后在后续所有其他目标程序测试过程中始终使用该组模糊器。然而,该方法不能根据待测目标程序特点自适应选择模糊器组合,不能保证在各类被测目标程序上都能有良好测试性能。
[0009]综上所述,集成模糊测试目前存在不能根据被测目标程序特点自动选择合适的模
糊器组合的问题。本专利技术提出了一种使用神经网络将待测程序分类,自动选择适应待测程序特点的模糊器组合,以获得更好的模糊测试性能,提高测试效率的方法。

技术实现思路

[0010]本专利技术提出了一种自动选取模糊器组合的集成模糊测试方法和系统。本专利技术分为训练阶段和测试阶段。其中,训练阶段分为三个步骤:首先,在各个选定的待测程序上,依次测试各可选模糊器在该待测程序上的性能表现,如图1所示;然后,根据上一步得到的在每个待测程序上单独使用各可选模糊器的性能,分别计算出在每个模糊器上各种模糊器组合的性能期望;最后,构建一个包含特征提取部分和分类部分的代码分类网络,首先使用公开的代码分类数据集训练该网络,然后使用迁移学习的方法,使其实现根据待测程序的特征给出适合的模糊器组合的功能。测试阶段分为两个步骤:首先,将待测程序输入代码分类网络,得到相适应的模糊器组合;然后,使用这个模糊器组合对待测程序进行并行化测试,测试结束后收集全部测试结果并去重。
[0011]具体的,本专利技术的训练阶段和测试阶段的方法步骤如下:
[0012]1.训练阶段。
[0013]首先,通过测试逐一收集各可选模糊器在特定待测程序集中的各待测程序上单独运行的测试性能数据。然后,根据这些测试性能数据计算模糊器组合并行后的覆盖分支数的数学期望,以此来预测在每个待测程序上各种模糊器组合的性能。最后,构建和训练一个代码分类网络,并使用迁移学习的方式使其能够预测适合于待测程序的模糊器组合。
[0014]具体的,训练阶段又可以分为三个步骤:评估单个模糊器的性能、预测模糊器组合的性能、构建和训练待测程序分类网络。
[0015]1‑
1评估单个模糊器的性能
[0016]针对可选的模糊器集合,在选定的典型模糊测试程序集上,逐一测试各可选模糊器,然后收集各模糊器的测试性能数据(包括覆盖分支和覆盖路径数)。
[0017]本步骤的输入为可选的模糊器列表和待测程序列表,输出为在每个待测程序上分别使用各可选模糊器单独测试得到的覆盖位图和覆盖路径数等测试性能数据。
[0018]进一步的,评估单个模糊器性能的工作流程如下:
[0019]1‑1‑
1依次选择给定的待测程序列表中的待测程序,若所有待测程序均测试完成,则1

1运行结束;
[0020]1‑1‑
2在目标程序上使用基础的模糊器AFL进行一次模糊测试,为之后的模糊器性能评估准备初始种子;
[0021]1‑1‑
3依次选择给定的可选模糊器列表中的模糊器,若所有模糊器均被选择完,则返回步骤1
‑1‑
1;
[0022]1‑1‑
4使用步骤1
‑1‑
2中所得到的种子作为初始种子,对目标程序使用选定的模糊器进行一次模糊测试。为了减少随机误差,这一步骤需要重复多次(具体的重复次数可以根据实际测试条件决定);
[0023]1‑1‑
5将步骤1
‑1‑
4中每次评估得到的种子全部在相应的目标程序上运行一次,得到一个分支覆盖位图和一个路径覆盖计数。每份分支覆盖位图和路径覆盖计数的组合都将作为单个模糊器在特定目标程序上的性能数据保存起来,以供后续预测各模糊器组合的性
能时使用。
[0024]1‑
2预测模糊器组合在各待测程序上的测试性能
[0025]根据各可选模糊器在各目标程序上测试得到的覆盖位图,分别计算各种模糊器组合并行测试情况下,目标程序的每个分支被至少一个模糊器覆盖的概率,然后以在目标程序上本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种自动选取模糊器组合的集成模糊测试方法,其特征在于:分为训练阶段和测试阶段;其中,训练阶段分为三个步骤:1

1、评估单个模糊器的性能:在各个选定的待测程序上,依次测试所有可选模糊器在该待测程序上的性能表现;1

2、预测模糊器组合在各待测程序上的测试性能:根据上一步得到的在每个待测程序上单独使用各可选模糊器的性能,分别计算出在每个模糊器上各种模糊器组合的性能期望;1

3、构建和训练待测程序分类网络:构建一个包含特征提取部分和分类部分的代码分类网络,首先使用公开的代码分类数据集训练该网络,然后使用迁移学习的方法,使其实现根据待测程序的特征给出适合的模糊器组合的功能;测试阶段分为两个步骤:2

1、预测适合待测程序的模糊器组合:将待测程序输入代码分类网络,得到相适应的模糊器组合;2

2、使用异构模糊器对待测程序进行并行测试:使用这个模糊器组合对待测程序进行并行测试,测试结束后收集全部测试结果并去重。2.如权利1所述的自动选取模糊器组合的集成模糊测试方法,其特征在于:在不进行实际并行测试的情况下,预测在给定的模糊测试待测程序列表中的每一个对象上各种模糊器组合的性能;其工作流程遵循以下步骤:1
‑2‑
1、依次选择给定的模糊测试待测程序列表中的各个待测程序,若所有的待测程序都被选择完毕,则该步骤结束运行;1
‑2‑
2、逐一读取在该待测程序上各个可选模糊器在评估单个模糊器的性能这一步骤中得到的所有分支覆盖位图和覆盖的路径数;1
‑2‑
3、选取在该待测程序上各次测试平均覆盖路径数最多的模糊器;1
‑2‑
4、使用分支覆盖位图计算包含步骤1
‑2‑
3中选中的模糊器在内的各种模糊器组合覆盖每个分支的概率,然后计算在该待测程序上覆盖分支数的数学期望;其中,模糊器组合中的模糊器数量为输入的值;1
‑2‑
5、将步骤1
‑2‑
4计算出的覆盖分支数的数学期望值作为该模糊器组合在该待测程序上的性能得分,给出在该待测程序上所有模糊器组合的性能分数表,并从该性能分数表中筛选出最高性能得分对应的模糊器组合。3.如权利1或2所述的自动选取模糊器组合的集成模糊测试方法,其特征在于使用常用的代码分类网络的特征提取部分和两层全连接层组成的分类部分构建分类网络;在训练此网络时,首先使用公开的代码分类任务数据集训练该网络;然后使用迁移学习的方法,训练一个可以根据待测目标特征自动给出其最适合的模糊器组合的网络。4.如权利3所述的自动选取模糊器组合的集成模糊测试方法,其特征在于建与训练待测程序分类网络的流程满足以下步骤:1
‑3‑
1、使用代码分类网络的特征提取部分与两层全连接层组成的分类部分组成基础的代码分类网络;1
‑3‑
2、使用公开的程...

【专利技术属性】
技术研发人员:徐向华孙语韬
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1