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

技术编号:39259819 阅读:12 留言:0更新日期:2023-10-30 12:11
本发明专利技术公开了一种基于细粒度状态引导的协议漏洞挖掘测试方法与系统。本发明专利技术以一种细粒度的方式表示协议实体程序的状态转换,将被测协议实体程序的分支覆盖快照等价为协议实体程序的状态,如果触发了新的分支覆盖,则认为触发了协议实体程序的新状态,在触发新状态时,生成与之对应的前缀消息链列表,用以保存到达此状态的报文序列信息。细粒度状态选择器选择出当前阶段测试的状态后,通过对应的前缀消息链行数组生成报文序列的同时,将协议实体程序引导到对应的状态,在该状态上进行充分的模糊测试工作,以探索更深层次的分支路径。并且在模糊测试过程中动态的调整更新细粒度状态。本发明专利技术提高了对协议实体程序的分支覆盖率,且发掘更多协议漏洞。且发掘更多协议漏洞。且发掘更多协议漏洞。

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


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

技术介绍

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

Fuzzer与EPF等。Z

Fuzzer在基于语法生成的黑盒协议模糊器BooFuzz上引入覆盖信息反馈来指导后续报文变异。EPF使用基于群体的模拟退火在模糊化过程中启发式的调度种子库中的测试用例,对种子库中的测试用例进行重组与突变,生成新的测试用例。PAVFuzz通过学习不同数据模型的两个字段之间的关系,计算更新每个可变字段的变异权重,引导模糊测试朝着覆盖率最大化的方向进行。Peach*在Peach的基础上引入了覆盖率反馈机制,利用触发新路径覆盖的测试用例,构造出更高质量的测试用例。
[0004]现有基于语法生成与覆盖信息引导的协议模糊测试方法利用协议规范事先定义会话模型,以此表示协议实体程序状态转换的条件。但是,由于协议实体程序是复杂的系统,用会话模型表示协议实体程序的状态转换条件,粒度过粗,不能准确表示协议实体程序内部状态转换细节,导致模糊器对协议实体程序的状态探索能力较弱,进而限制了模糊器对协议实体程序的代码覆盖能力与漏洞挖掘能力。

技术实现思路

[0005]本专利技术提出了一种基于细粒度状态引导的协议漏洞挖掘测试方法。以一种细粒度的方式表示协议实体程序的状态转换,在触发新状态时,生成与之对应的前缀消息链列表,用以保存到达此状态的报文序列信息,通过前缀消息链列表生成报文序列的同时,能够将协议实体程序引导到对应的细粒度状态,并且在每个细粒度状态上进行充分的模糊测试工作,以探索更深层次的分支路径。
[0006]该方法分为预处理阶段、模糊测试阶段和结果信息反馈阶段。在预处理阶段,对待测协议实体程序进行插桩编译,得到对应的二进制可执行程序;定义待测协议的会话模型作为模糊测试阶段的输入;根据二进制可执行程序构建执行引擎。模糊测试阶段包含细粒度状态选择、前缀消息序列生成、种子选择、测试用例生成、测试用例评估过程。
[0007]在模糊测试阶段,利用前缀消息链列表保存触发新状态的测试用例序列信息,利
用前缀消息链列表生成异常报文序列的同时准确地定位到该状态,进而在每个状态上进行充分的模糊测试。
[0008]通过细粒度状态选择过程选择出现阶段测试的状态后,生成与之对应的前缀消息序列,进而通过前缀消息序列将协议实体程序定位到该状态,然后利用种子选择过程所选的种子模板生成测试用例,对该状态进行充分的模糊测试。
[0009]在结果信息反馈阶段,将模糊测试过程中触发待测协议实体程序崩溃的次数与覆盖信息进行实时的反馈;并且将触发待测协议实体程序崩溃的测试用例加以保存,便于后期对崩溃的重现与分析。
[0010]本专利技术提出了一种基于细粒度状态引导的协议漏洞挖掘测试方法,包括三个主要阶段:预处理阶段、模糊测试阶段和结果信息反馈阶段;其中模糊测试阶段包含细粒度状态选择、前缀消息序列生成、种子选择、测试用例生成、测试用例评估过程。
[0011]在详细介绍本专利技术之前,先对本专利技术涉及的名词进行定义:
[0012]细粒度状态:与传统的程序状态不同,本专利技术将待测协议实体程序的分支覆盖情况等价为协议实体程序的细粒度状态,如果在模糊测试过程中触发了新的分支覆盖,则认为触发了协议实体程序的新细粒度状态。本专利技术所指的状态都为细粒度状态。
[0013]1.预处理阶段:
[0014]1‑
1.对协议实体程序源码的插桩编译
[0015]在模糊测试过程中,为了获取到待测协议实体程序的分支覆盖情况,需要对协议实体程序源码利用aflfast自带的gcc编译工具进行插桩和编译,生成二进制的可执行程序。
[0016]1‑
2.定义数据模型集合
[0017]通过分析待测协议对应的请求数据包并且结合待测协议规范,使用BooFuzz模糊测试框架提供的数据模型定义函数来定义协议的数据模型集合model
set
={model1,...,model
i
,...,model
n
},i=1,...,n,其中n为待测协议数据模型总数,所定义的数据模型用以作为生成对应测试用例的协议规范模板。
[0018]1‑
3.定义会话模型
[0019]结合待测协议规范对会话报文序列的要求,使用BooFuzz测试框架提供的会话模型定义函数,将model
set
中的数据模型连接成会话模型sessionModels={sessionSeq1,...,sessionSeq
j
,...,sessionSeq
m
},j=1,...,m,其中sessionSeq
j
代表会话模型sessionModels中的一个会话序列,会话序列由数据模型集合model
set
中若干个数据模型以一定的前后顺序关系组成,m为会话模型中会话序列的数量。
[0020]1‑
4.构建执行引擎
[0021]运行步骤1

1生成的可执行程序,并且开辟大小为XM字节的共享内存shareMem(XM的大小为经验值,一般设为64K字节),用以实时的统计待测协议实体程序的覆盖信息。
[0022]2.模糊测试阶段:
[0023]2‑
1.系统预热。根据所定义的会话模型中的会话序列依次生成未经过变异的原始报文序列,输入到执行引擎中,完成系统的预热。
[0024]2‑1‑
1.遍历会话模型sessionModels,依次遍历取出其中的会话序列sessionSeq
j
;如果会话模型已经遍历结束,则已完成系统预热工作,转向步骤2

2。
[0025]2‑1‑
2.依据会话序列sessionSeq
j
中数据模型的顺序关系,遍历会话序列sessionSeq
j
得到数据模型model
i
,转向步骤2
‑1‑
3;如果针对会话序列sessionSeq
j
的遍历工作已完成,重置协议实体程序为初始状态并且转向步骤2<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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
,并且将其添加到前...

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

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

1