【技术实现步骤摘要】
基于细粒度状态引导的协议漏洞挖掘测试方法与系统
[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模糊测试框架提供的会话模型定义函数,将model
set
中的数据模型连接成会话模型sessionModels={sessionSeq1,
…
,sessionSeq
j
,
…
,sessionSeq
m
},j=1,...,m,其中sessionSeq
j
代表会话模型sessionModels中的一个会话序列,由若干个具有前后关系的数据模型组成,m为会话模型中会话序列的数量;1
‑
4.构建执行引擎运行步骤1
‑
1生成的可执行程序,开辟大小为XM字节的共享内存shareMem,用以实时的统计待测协议实体程序的覆盖信息。3.根据权利要求2所述的基于细粒度状态引导的协议漏洞挖掘测试方法,其特征在于模糊测试阶段包含以下子步骤:2
‑
1.系统预热;2
‑
2.数据模型选择;2
‑
3.细粒度状态选择;2
‑
4.前缀消息序列生成;2
‑
5.种子选择;2
‑
6.测试用例生成;2
‑
7.测试用例评估过程。4.根据权利要求3所述的基于细粒度状态引导的协议漏洞挖掘测试方法,其特征在于步骤2
‑
1和步骤2
‑
2具体实现如下:2
‑
1.系统预热;2
‑1‑
1.遍历会话模型sessionModels,依次遍历取出其中的会话序列sessionSeq
j
;如果会话模型已经遍历结束,则已完成系统预热工作,转向步骤2
‑
2;2
‑1‑
2.依据会话序列sessionSeq
j
中数据模型的顺序关系,遍历会话序列sessionSeq
j
得到数据模型model
i
;如果针对会话序列sessionSeq
j
的遍历工作已完成,重置协议实体程序为初始状态并且转向步骤2
‑1‑
1;
2
‑1‑
3.根据数据模型model
i
生成的测试用例,将其作为数据模型model
i
的种子库seedBank
i
中的初始种子seed
i0
;如果当前数据模型model
i
不是会话序列sessionSeq
j
中最后一个数据模型,则创建当前数据模型model
i
在同一会话序列sessionSeq
j
中下一数据模型model
i+1
的初始前缀消息链列表preChainsList
i+1
={[seedNo
10
,
…
,seedNo
i0
]},其中seedNo
10
代表当前会话序列sessionSeq
j
中第一个数据模型的初始种子seed
10
的标号,seedNo
i0
代表当前会话序列sessionSeq
j
中数据模型model
i
初始种子seed
i0
的标号;转向步骤2
‑1‑
2,进行下一数据模型的种子库初始化工作;步骤2
‑
2数据模型选择,具体实现如下:2
‑2‑
1.遍历会话模型sessionModels,依次遍历取出其中的会话序列sessionSeq
j
;如果会话模型已经遍历结束,则结束模糊测试工作;2
‑2‑
2.依据会话序列sessionSeq
j
中数据模型的顺序关系,遍历会话序列sessionSeq
j
得到数据模型model
i
,作为当前模糊测试阶段使用的数据模型;如果针对会话序列sessionSeq
j
的遍历已完成,则转向步骤2
‑2‑
1。5.根据权利要求4所述的基于细粒度状态引导的协议漏洞挖掘测试方法,其特征在于步骤2
‑
3细粒度状态选择,具体实现如下:如果数据模型model
i
为会话序列sessionSeq
j
中的首个数据模型,则该数据模型model
i
不具有前缀消息链列表,直接转向步骤3
‑
5,当前所选的细粒度状态为初始状态,在初始状态上对该数据模型进行模糊测试工作;否则,向下执行步骤2
‑3‑
1;2
‑3‑
1.遍历数据模型model
i
所对应的前缀消息链列表preChainsList
i
={[seedNo
10
,
…
,seedNo
i
‑
10
]1,
…
,[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
,
…
,[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
b
},a=1,...,b,其中b为前缀消息链列表preChainsList
i
的行数;其中ki代表对应种子库中的种子标号,得到preChainsList
i
中的前缀消息链行数组[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
,转向步骤2
‑3‑
2;如果前缀消息链列表preChainsList
i
已经遍历结束,则代表已经对当前数据模型model
i
所对应的所有状态完成了充分的模糊测试,转向步骤2
‑2‑
2,选择会话序列sessionSeq
j
中的下一数据模型model
i+1
;2
‑3‑
2.以前缀消息链行数组[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
作为当前测试的细粒度状态的标记,设state
a
=[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
,其中seedNo
i
‑
1ki
代表数据模型model
i
‑1的种子库seedBank
i
‑1中种子seed
i
‑
1ki
的唯一标号。6.根据权利要求5所述的基于细粒度状态引导的协议漏洞挖掘测试方法,其特征在于步骤2
‑
4前缀消息序列生成,具体实现如下:初始化前缀消息序列为preMessSeque
a
=[],根据步骤2
‑
3中所选择的细粒度状态state
a
=[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
,遍历该状态state
a
所对应的前缀消息链行数组[seedNo
1ki
,
…
,seedNo
i
‑
1ki
]
a
,根据种子标号seedNo
1ki
检索数据模型model1的种子库seedBank1,从中取出种子seed
1ki
,并且将检索种子库得到的种子seed
1ki
,添加到前缀消息序列preMessSeque
a
中;最终遍历到的种子标号为seedNo
i
‑
1ki
;同理,根据种子标号seedNo
i
‑
1ki
检索数据模型model
i
‑1的种子库seedBank
i
‑1,从中取出种子seed
i
‑
1ki
,并且将其添加到前...
【专利技术属性】
技术研发人员:徐向华,支世腾,孙语韬,丁森阳,
申请(专利权)人:杭州电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。