基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统技术方案

技术编号:39006253 阅读:12 留言:0更新日期:2023-10-07 10:37
本发明专利技术公开了一种基于细粒度覆盖信息引导的协议漏洞挖掘测试方法。在测试过程中,依据种子覆盖分支路径的覆盖频度计算种子报文的权重,优先选择权重最高的种子报文进行变异,引导新生成的测试用例覆盖更多程序分支;给每个被选种子赋予初始能量值,依据覆盖信息反馈动态调整能量值,然后淘汰能量值低的种子;最后,在对种子变异的过程中,在种子原有变异基础上,持续变异其它相关字段,使生成的测试用例探索执行更多程序分支,提高协议测试覆盖率,发现更多协议漏洞。本发明专利技术可以提高协议程序测试分支覆盖率,发掘更多协议漏洞。发掘更多协议漏洞。发掘更多协议漏洞。

【技术实现步骤摘要】
基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统


[0001]本专利技术属于协议自动化安全测试
,具体涉及基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统。

技术介绍

[0002]协议模糊测试是一种自动化的协议漏洞挖掘测试技术,它通过向待测协议实体程序输入大量随机、不合法或未预料的数据,以期发现其潜在的漏洞或异常。为了使网络协议模糊测试过程中生成的测试用例更加符合协议规范的要求,提升测试用例的接受率,并且与此同时提升对协议实体程序代码的覆盖率。近年来,相关研究工作提出了基于语法生成与覆盖信息引导的模糊测试方法,解决了协议测试过程中存在的大量报文变异操作破坏报文的结构格式的问题,以及基于语法生成的黑盒协议模糊器缺乏覆盖信息反馈指导的问题。
[0003]基于语法生成和覆盖信息引导的协议漏洞挖掘测试相关工作有:Peach*,PAVFuzz,Z

Fuzzer与EPF等。Z

Fuzzer在基于语法生成的黑盒协议模糊器BooFuzz上引入覆盖信息反馈来指导后续报文变异。EPF使用基于群体的模拟退火在模糊化过程中启发式地调度种子库中的测试用例,对种子库中的测试用例进行重组与突变,生成新的测试用例。PAVFuzz通过学习不同数据模型的两个字段之间的关系,计算更新每个可变字段的变异权重,引导模糊测试朝着覆盖率最大化的方向进行。Peach*在Peach的基础上引入了覆盖率反馈机制,利用触发新路径覆盖的测试用例,构造出更高质量的测试用例。
[0004]但是,上述基于语法生成与覆盖信息引导的协议模糊测试方法对覆盖信息的利用粒度都较粗,仅考虑覆盖率增长的情况,并未考虑测试用例覆盖了协议实体程序的哪些分支,其中有些分支可能被多次覆盖,有些分支可能很少被覆盖。如果能够充分利用这些信息,在模糊测试过程中引导模糊器更多的去探索覆盖频度较低的分支,将会提高模糊器对协议实体程序的分支探索能力,进而发现更多潜在的协议漏洞。

技术实现思路

[0005]本专利技术提出了一种基于细粒度覆盖信息引导的协议漏洞挖掘测试方法。在模糊测试过程中,依据种子覆盖分支路径的覆盖频度计算种子的权重,优先选择权重最高的种子进行变异,引导新生成的测试用例覆盖更多稀有分支;给每个被选种子赋予初始能量值,依据覆盖信息反馈动态调整能量值,然后淘汰能量值低的种子;最后,在对种子变异的过程中,保持种子原有变异,陆续变异其他字段,使生成的测试用例在触发原有分支的基础上,探索更新的分支。
[0006]该方法分为预处理阶段、测试准备阶段和模糊测试阶段。在预处理阶段,对待测协议实体程序进行插桩编译,得到对应的二进制可执行程序,并定义待测协议的会话模型作为模糊测试阶段的输入。在测试准备阶段,构建执行引擎、创建模糊测试过程中所需的全局数据结构并且创建每个数据模型对应的初始种子库。模糊测试阶段包含种子选择、测试用
例生成和测试用例评估等过程。种子选择:根据种子库中每个种子的细粒度分支覆盖信息计算出每个种子的权重,并对种子库中的种子按权重进行从大到小的排序,优先选择出权重最大的种子作为当前生成测试用例的基准。测试用例生成:在不破坏种子有益变异的基础上生成新的测试用例,即保持种子原来触发新分支的条件不变,继续变异其它可变字段。测试用例评估:检查测试用例是否触发了崩溃或者新分支路径。如果触发了新分支路径,则将该测试用例作为新的种子与其分支覆盖信息一起存入对应种子库。如果触发了崩溃,则将该测试用例加以保存,便于对崩溃的重现与分析。
[0007]本专利技术提出了一种基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,包括三个主要阶段:预处理阶段、测试准备阶段、模糊测试阶段;其中模糊测试阶段中包含种子选择、测试用例生成和测试用例评估等过程。
[0008]1.预处理阶段
[0009]1‑
1.对协议实体程序源码的插桩编译
[0010]在模糊测试过程中,为了获取到待测协议实体程序的分支覆盖情况,需要对协议实体程序源码利用aflfast自带的gcc编译工具进行插桩和编译,生成对应的二进制的可执行程序;
[0011]1‑
2.定义数据模型集合
[0012]通过分析待测协议对应的请求数据包并且结合待测协议规范,使用BooFuzz模糊测试框架提供的数据模型定义函数来定义协议的数据模型集合model
set
={model1,...,model
i
,...,model
n
},i=1,...,n,其中n为待测协议数据模型总数,所定义的数据模型用以作为生成对应测试用例的协议规范模板;
[0013]1‑
3.定义会话模型
[0014]结合待测协议规范对会话报文序列的要求,使用BooFuzz模糊测试框架提供的会话模型定义函数,将步骤1

2定义的数据模型集合model
set
中的数据模型连接成会话模型sessionModels={sessionSeq1,...,sessionSeq
j


,sessionSeq
m
},j=1,...,m,其中sessionSeq
j
代表会话模型sessionModels中的一条会话序列,会话序列由数据模型集合model
set
中若干个数据模型以一定的前后顺序关系组成,m为会话模型中会话序列的数量。
[0015]2.测试准备阶段
[0016]2‑
1.构建执行引擎
[0017]执行引擎是一个用来接收模糊测试过程中产生的测试用例的独立模块,用以执行插桩编译后生成的二进制可执行程序。
[0018]为了记录模糊测试过程中协议实体程序每个分支被覆盖的情况,在构建执行引擎时开辟大小为XM字节的共享内存shareMem(shareMem的大小为经验值,一般设为64K字节);
[0019]为了单独记录当前测试用例所覆盖到的分支情况,开辟了大小同为XM字节的临时共享内存temShareMem,在模糊测试过程中,如果当前测试用例可作为新的种子,临时共享内存存储的信息即可作为该种子对协议实体程序的分支覆盖信息。
[0020]2‑
2.创建模糊测试过程中所需的全局数据结构
[0021]为了能够统计每个分支被覆盖的次数,创建全局整形数组branCovArr,每个数组元素统计一个分支被覆盖的次数,为了与全局共享内存相对应,整形数组的长度取XM,每个元素都为整形,为4个字节,最大取值为2
32

1,足以用来统计对应分支在模糊测试过程中被
覆盖的次数。全局整形数组branCovArr需要占用的内存大小为4*XM字节。
[0022]2‑
3.系统预热,初始化数据模型种子库
[0023]2‑3‑
1.遍历步骤1

3中定义的会话模型sessionModels,依次遍历取出其中本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于包括:预处理阶段、测试准备阶段、模糊测试阶段;其中模糊测试阶段中包含种子选择、测试用例生成和测试用例评估。2.根据权利要求1所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于预处理阶段包含以下子步骤:1

1.对协议实体程序源码的插桩编译;在模糊测试过程中,为了获取到待测协议实体程序的分支覆盖情况,需要对协议实体程序源码利用aflfast自带的gcc编译工具进行插桩和编译,生成二进制的可执行程序;1

2.定义数据模型集合;通过分析待测协议对应的请求数据包并且结合待测协议规范,使用BooFuzz模糊测试框架提供的数据模型定义函数来定义待测协议的数据模型集合model
set
={model1,...,model
i
,...,model
n
},i=1,...,n,其中n为待测协议数据模型总数,所定义的数据模型作为生成对应测试用例的协议规范模板;1

3.定义会话模型;结合待测协议规范对会话报文序列的要求,使用BooFuzz模糊测试框架提供的会话模型定义函数,将步骤1

2中定义的数据模型集合model
set
中的数据模型连接成会话模型sessionModels={sessionSeq1,...,sessionSeq
j


,sessionSeq
m
},j=1,...,m,其中sessionSeq
j
代表会话模型sessionModels中的一条会话序列,由若干个具有前后关系的数据模型组成,m为会话模型中会话序列的数量。3.根据权利要求1所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于测试准备阶段包含以下子步骤:2

1.构建执行引擎;为了记录模糊测试过程中协议实体程序每个分支被覆盖的情况,在构建执行引擎时开辟大小为XM字节的全局共享内存shareMem;为了单独记录当前测试用例所覆盖到的分支情况,开辟了大小同为XM字节的临时共享内存temShareMem;在模糊测试过程中,如果当前测试用例能作为新的种子,临时共享内存存储的信息即可作为该种子对协议实体程序的分支覆盖信息;2

2.创建模糊测试过程中所需的全局数据结构;为了能够统计每个分支被覆盖的次数,创建全局整形数组branCovArr,每个数组元素统计一个分支被覆盖的次数,为了与全局共享内存相对应,整形数组的长度取XM,每个元素都为整形,为4个字节,最大取值为2
32

1,足以用来统计对应分支在模糊测试过程中被覆盖的次数;全局整形数组branCovArr需要占用的内存大小为4*XM字节;2

3.系统预热,初始化数据模型种子库。4.根据权利要求3所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于步骤2

3系统预热,初始化数据模型种子库,具体实现如下:2
‑3‑
1.遍历步骤1

3中定义的会话模型sessionModels,依次遍历取出其中的会话序列sessionSeq
j
,转向步骤2
‑3‑
2;如果会话模型已经遍历结束,则已完成系统预热工作;2
‑3‑
2.依据步骤2
‑3‑
1中得到的会话序列sessionSeq
j
中数据模型的顺序关系,遍历会
话序列sessionSeq
j
得到的当前数据模型model
i
,转向步骤2
‑3‑
3;如果针对会话序列sessionSeq
j
的遍历工作已完成,则转向步骤2
‑3‑
1;2
‑3‑
3.根据步骤2
‑3‑
2中遍历得到的数据模型model
i
生成未经过变异的测试用例,将其作为数据模型model
i
的种子库seedBank
i
中的初始种子seed
i0
,代表种子库seedBank
i
中的0号种子,将初始种子seed
i0
输入到执行引擎中,并且创建该种子对应的分支覆盖信息数组seedBranCovArr
i0
,遍历临时共享内存temShareMem,如果临时共享内存对应位置不为零,即对应位置下标所代表的分支被该种子覆盖到了,将该下标所代表的分支添加到该种子的分支覆盖信息数组seedBranCovArr
i0
中,并且更新全局整形数组branCovArr,用以统计每个分支被覆盖的次数;最后,将种子seed
i0
和其对应的分支覆盖信息数组seedBranCovArr
i0
添加到数据模型model
i
对应种子库seedBank
i
中,seedBank
i
={[seed
i0
,seedBranCovArr
i0
]},并且清空临时共享内存temShareMem;转向步骤2
‑3‑
2,进行下一数据模型的种子库初始化工作。5.根据权利要求1或4所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于模糊测试阶段包含以下子步骤:3

1.数据模型选择;3

2.种子选择;3

3.测试用例生成;3

4.测试用例评估。6.根据权利要求5所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于步骤3

1具体实现如下:3
‑1‑
1.遍历步骤1

3中定义的会话模型sessionModels,依次遍历取出其中的会话序列sessionSeq
j
,转向步骤3
‑1‑
2;如果会话模型已经遍历结束,则结束模糊测试工作;3
‑1‑
2.依据步骤3
‑1‑
1中得到的会话序列sessionSeq
j
中数据模型的顺序关系,遍历会话序列sessionSeq
j
得到的当前数据模型model
i
,作为当前模糊测试阶段使用的数据模型,转向步骤3

2;如果针对会话序列sessionSeq
j
的遍历已完成,则转向步骤3
‑1‑
1。7.根据权利要求6所述的基于细粒度覆盖信息引导的协议漏洞挖掘测试方法,其特征在于步骤3

2具体实现如下:3
‑2‑
1.遍历种子库seedBank
i
,计算种子权重如果种子库seedBank
i
中无种子,则代表该数据模型model
i
在现阶段已经经过了充分的模糊测试,转向步骤3
‑1‑
2,选择新的数据模型,作为现阶段使用的数据模型;如果种子库seedBank
i
中仅有一个种子,则无需进行种子排序,直接转向步骤3
‑2‑
3;否则遍历步骤3
‑1‑
2中所选择的数据模型model
i
对应的种子库seedBank
i
={[seed
i0
,seedBranCovArr
i0
],...,[seed
ik
,seedBranCovArr
ik
],...,[seed
it
,seedBranCovArr
it
]},k=1,...,t,其中t为种子库seedBank
i
中种子的数量,从中依次选择出一个种子seed
ik
,并且根据种子seed
ik
的分支覆盖信息数组seedBranCovArr
ik
计算种子seed
ik
的权重,种子的分支覆盖信息数组seedBranCovArr
ik
记录有种子seed
ik
覆盖到的协议实体程序的哪些分支;计算种子的权重的公式如下所示:
其中,weight
ik
代表种子seed
ik
的权重,seedBranCovArr
ik
为种子seed
ik
的分支覆盖信息数组,记录了该种子覆盖到了哪些分支,该数组的长度len(s...

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

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

1