【技术实现步骤摘要】
可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统
[0001]本专利技术涉及网络通信协议测试
,具体而言,涉及一种可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统。
技术介绍
[0002]模糊测试技术是一种通过向目标系统提供非预期输入并监视异常结果来实现漏洞挖掘的方法,具有准确性较高、可用性强、对测试目标源码依赖性低等优点。多数协议实现由厂商提供,用户对其协议内部实现结构了解不充分,因此多采用模糊测试技术对其进行漏洞挖掘。
[0003]根据协议报文之间是否存在关联,网络协议分为有状态协议和无状态协议。无状态协议,如ICMP、DNS等协议,其每个请求报文都是独立的,之间不存在关联关系;而有状态协议,如FTP、TCP、TLS、DTLS等协议,其每一次请求响应都会影响到下一次请求响应,通信双方都需要维护一个协议状态空间。
[0004]对有状态协议的模糊测试,测试用例报文与当前协议实体的状态一致时,才会被协议实体接收,否则被拒绝接收,因此在测试时需要依赖协议状态机。如对协议状态机中的某一个中间状态进行测试,则需要首先发送前序报文使协议实体程序到达待测状态后再进行测试。
[0005]现有针对有状态网络协议实体的模糊测试方法,主要集中会导致协议实体程序宕机的崩溃漏洞测试,主要有以下专利方法:CN 104796240 A提出的一种针对有状态网络协议的崩溃漏洞模糊测试方法,CN 114116500 A提出的一种针对未知协议的协议实体程序崩溃漏洞模糊测试方法,CN 105763392 A提出的一种根据 ...
【技术保护点】
【技术特征摘要】
1.可扩展的有状态协议实体程序的逻辑漏洞检测方法,其特征在于包括三个阶段:测试准备阶段、状可扩展的有状态协议实体程序的逻辑漏洞检测方法态机学习阶段、结果整理分析阶段;在测试准备阶段,首先本地部署待测实体程序,并将一个描述了待测的有状态协议的流量报文和其对应的消息类型的脚本文件作为输入;在状态机学习阶段,首先,从脚本文件中选择输入符号,将符号映射为对应的消息报文,对消息报文进行模糊化生成测试用例;接着,通过相似度判断该测试用例是否仍属于该符号,如果是则发送给待测程序执行,否则再次模糊化进行修正;最后,收集待测程序执行完测试用例后的响应报文,通过相似度计算将响应报文映射为对应的输出符号,并使用模型学习构建出一个待测协议实体程序对应的最小确定性Mealy状态机,即结果状态机;在结果整理分析阶段,对学习得到的结果状态机进行修剪和处理,以便于测试人员进行异常路径迁移和冗余状态的分析。2.根据权利要求1所述的可扩展的有状态协议实体程序的逻辑漏洞检测方法,其特征在于测试准备阶段使用现有工具对待测协议的通信流量进行抓包,并将其中的消息报文和对应的消息类型作为测试器的输入,具体包含以下步骤:2.1待测协议实体程序部署对待测协议实体程序进行部署,启动待测协议实体程序和与其对应的通信端;2.2网络流量捕获启动网络封包分析工具Wireshark,捕获待测协议实体程序与其对应的通信端之间的网络流量;2.3消息类型分类对捕获的网络流量进行筛选和整理,将其分为不同的消息类型,同时确保每个消息类型至少对应有一个消息报文实例;然后,将由待测协议实体程序发出的消息,其类型划分为输出消息类型;由通信端发出的消息,其类型划分为输入消息类型;最后,每一个消息类型都用一个符号进行唯一标识,并将整理的消息类型的数据结构表示为<符号,该符号标识的消息类型对应的报文实例集合>。2.4脚本文件构建将步骤2.3提到的所有消息报文实例、消息类型和符号通过一个脚本文件进行描述,形成一个描述了待测有状态协议的流量报文和其对应的消息类型的脚本文件,将该脚本文件作为测试器的输入;脚本文件包含有三个映射关系表:符号映射表、输入符号映射表和输出符号映射表;其中符号映射表描述了符号和消息类型的一对一映射关系;输入符号映射表描述了所有输入符号和该符号标识的消息类型对应的消息报文实例的一对多映射关系;输出符号映射表描述了所有输出符号和该符号标识的消息类型对应的消息报文实例的一对多映射关系。3.根据权利要求2所述的可扩展的有状态协议实体程序的逻辑漏洞检测方法,其特征在于状态机学习阶段具体实现如下:3.1消息报文获取从脚本文件中的符号映射表中随机选择输入符号,对于选择到的每个符号,从脚本文
件中的输入符号映射表中获取该符号所标识的消息类型对应的消息报文实例,如果一个符号对应有多个实例,则随机选择一个实例作为待模糊化的消息报文;3.2消息报文模糊化对得到的消息报文进行模糊化操作,包括不处理、空处理、随机字段变异、havoc变异操作,改变消息报文中部分字段的属性值;3.3模糊修正使用相似度计算对模糊化操作进行修正;将模糊化生成的测试用例分别与所有输入符号所标识的消息类型对应的所有消息报文实例进行相似度的计算,计算公式为Levenshtein距离:dis(MM
input
,M
input
)=lev(MM
input
,M
input
)/max(len(MM
input
),len(M
input
))其中,lev(MM
input
,M
input
)表示将测试用例MM
input
进行插入、替换、删除转换为与其进行比较的消息报文实例M
input
所需要的最小操作次数,max()表示取最大值,len()表示求消息报文实例M
input
的长度;dis(MM
input
,M
input
)表示了两个消息报文实例的不相似度;计算模糊化生成的测试用例MM
input
与所有消息报文实例的不相似度,找到其中与其不相似度最小的消息报文实例M
min_dis
;如果该消息报文实例M
min_dis
与当前测试用例属于同一个输入符号S
input
,则修正完毕,进行下一步;否则重新进行模糊化操作并重复上述过程直到满足条件;3.4测试用例执行将步骤3.3修正后的测试用例发送给待测协议实体程序进行执行;3.5输出符号匹配获取步骤3.4程序执行完测试用例后返回的响应报文,使用相似度计算确定响应报文对应的输出符号;将响应报文与所有输出符号所标识的消息类型对应的所有消息报文实例进行相似度的计算,计算公式为Lev...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。