【技术实现步骤摘要】
基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统
[0001]本专利技术属于协议自动化安全测试
,具体涉及基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统。
技术介绍
[0002]协议模糊测试是一种自动化的协议漏洞挖掘测试技术,它通过向待测协议实体程序输入大量随机、不合法或未预料的数据,以期发现其潜在的漏洞或异常。为了使网络协议模糊测试过程中生成的测试用例更加符合协议规范的要求,提升测试用例的接受率,并且与此同时提升对协议实体程序代码的覆盖率。近年来,相关研究工作提出了基于语法生成与覆盖信息引导的模糊测试方法,解决了协议测试过程中存在的大量报文变异操作破坏报文的结构格式的问题,以及基于语法生成的黑盒协议模糊器缺乏覆盖信息反馈指导的问题。
[0003]基于语法生成和覆盖信息引导的协议漏洞挖掘测试相关工作有:Peach*,PAVFuzz,Z
‑
Fuzzer与EPF等。Z
‑
Fuzzer在基于语法生成的黑盒协议模糊器BooFuzz上引入覆盖信息反馈来指导后续报文变异。EPF使用基于群体的模拟退火在模糊化过程中启发式地调度种子库中的测试用例,对种子库中的测试用例进行重组与突变,生成新的测试用例。PAVFuzz通过学习不同数据模型的两个字段之间的关系,计算更新每个可变字段的变异权重,引导模糊测试朝着覆盖率最大化的方向进行。Peach*在Peach的基础上引入了覆盖率反馈机制,利用触发新路径覆盖的测试用例,构造出更高质量的测试用例。
[0004]但是,上述基于语法生成 ...
【技术保护点】
【技术特征摘要】
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...
【专利技术属性】
技术研发人员:徐向华,支世腾,孙语韬,丁森阳,
申请(专利权)人:杭州电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。