可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统技术方案

技术编号:37352832 阅读:9 留言:0更新日期:2023-04-27 07:04
本发明专利技术公开一种可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统。测试准备阶段:本地部署待测实体程序,将一个描述了待测的有状态协议的流量报文和其对应的消息类型的脚本文件作为输入;状态机学习阶段:从脚本文件中选择输入符号并映射为对应的消息报文,后对其进行模糊化生成测试用例;并判断该测试用例是否仍属于该符号,是则发送给待测程序执行,否则进行修正;收集待测程序执行完后的响应报文,并映射为对应的输出符号,使用模型学习构建一个待测协议实体程序对应的最小确定性Mealy状态机;结果整理分析阶段,对学习得到的结果状态机进行修剪和处理。本发明专利技术适用于有状态协议实体程序进行逻辑漏洞的检测,有可扩展性强、漏洞检测效率高。漏洞检测效率高。漏洞检测效率高。

【技术实现步骤摘要】
可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统


[0001]本专利技术涉及网络通信协议测试
,具体而言,涉及一种可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统。

技术介绍

[0002]模糊测试技术是一种通过向目标系统提供非预期输入并监视异常结果来实现漏洞挖掘的方法,具有准确性较高、可用性强、对测试目标源码依赖性低等优点。多数协议实现由厂商提供,用户对其协议内部实现结构了解不充分,因此多采用模糊测试技术对其进行漏洞挖掘。
[0003]根据协议报文之间是否存在关联,网络协议分为有状态协议和无状态协议。无状态协议,如ICMP、DNS等协议,其每个请求报文都是独立的,之间不存在关联关系;而有状态协议,如FTP、TCP、TLS、DTLS等协议,其每一次请求响应都会影响到下一次请求响应,通信双方都需要维护一个协议状态空间。
[0004]对有状态协议的模糊测试,测试用例报文与当前协议实体的状态一致时,才会被协议实体接收,否则被拒绝接收,因此在测试时需要依赖协议状态机。如对协议状态机中的某一个中间状态进行测试,则需要首先发送前序报文使协议实体程序到达待测状态后再进行测试。
[0005]现有针对有状态网络协议实体的模糊测试方法,主要集中会导致协议实体程序宕机的崩溃漏洞测试,主要有以下专利方法:CN 104796240 A提出的一种针对有状态网络协议的崩溃漏洞模糊测试方法,CN 114116500 A提出的一种针对未知协议的协议实体程序崩溃漏洞模糊测试方法,CN 105763392 A提出的一种根据协议状态对工控组件进行模糊测试的方法。
[0006]除了上述针对有状态协议的崩溃漏洞测试方法外,还有少数针对协议逻辑漏洞测试方法。逻辑漏洞通常是由于在编写协议程序时,程序设计者对协议规范的理解不够准确,导致协议实现代码存在某种逻辑错误所致。逻辑漏洞一般不会导致协议实体程序的崩溃异常情况,因此比较难检测到。文献《Protocol state machine fuzzing of TLS Implementations(tls

fuzzer)》提出了一种检测逻辑漏洞方法,利用自动机学习技术来构建不同的协议实体程序的状态机,通过映射器模块,可以将抽象的输入符号转化为具体的消息报文并发送给待测程序,同时接收待测程序返回的消息响应并转换为抽象的输出符号。这些输入输出符号均用于构建协议实体程序的状态机。最后,通过手动分析学习完成的状态机来发现逻辑漏洞。如果发现有问题的状态或异常的状态迁移,则找到其对应的源码以分析是否存在逻辑错误。《Analysis of DTLS Implementations Using Protocol State Fuzzing(dtls

fuzzer)》也采用类似的方法,实现了对DTLS协议的逻辑漏洞检测。
[0007]但上述协议逻辑漏洞测试工作有以下不足:其映射器和模糊测试实现代码与TLS、DTLS协议紧密耦合,只能针对TLS、DTLS协议进行状态机的学习和构建,如果扩展实现其他协议的测试,需要修改协议映射器和模糊测试实现代码,修改难度大,协议可扩展性差。
[0008]CN 109525457 A设计了一种基于协议状态迁移对协议实体程序实施模糊测试的方法,通过发现协议实体中的异常状态迁移来发现逻辑漏洞。对于协议规范公开的协议实体程序,需要先根据协议规范描述协议状态机信息,用于指导模糊测试;对于协议规范未知的私有协议实体程序,通过协议逆向分析方法获得程序的状态机信息,用于指导模糊测试。然后,在获取协议实体程序的状态机基础上,求解获取遍历协议状态机所有迁移的最短路径,并依据该最短路径依次针对各个状态迁移进行测试。在测试过程中依据协议状态的唯一输入/输出序列发现协议实体的状态异常迁移。该方法的不足:公开协议规范的协议状态机与协议实体程序的状态机不一定完全一致,程序在实现过程中可能会出现一些合理的中间状态和状态转换;而通过协议逆向分析获得的私有协议状态机信息与真实的协议状态有较大偏差。上述方法的状态机存在的不一致/偏差影响测试结果的准确性。
[0009]针对上述问题,本专利技术提出了一种可扩展的有状态协议实体程序逻辑漏洞检测方法及系统,将待测有状态协议的流量报文和其对应的消息类型作为输入,通过模糊测试和自动机学习相结合的方法,有效构建协议实体程序的状态机,再通过手动分析状态机来发现待测协议实体程序中潜在的逻辑漏洞。

技术实现思路

[0010]针对上述问题,本专利技术提出了一种可扩展的有状态协议实体程序的逻辑漏洞检测方法及系统。该方法分为测试准备阶段、状态机学习阶段、结果整理分析阶段。在测试准备阶段,本地部署待测协议实体程序,将一个描述了待测有状态协议的流量报文和对应消息类型的脚本文件作为输入。在状态机学习阶段,首先,从脚本文件中选择输入符号,将符号映射为对应的消息报文,对消息报文进行模糊化生成测试用例;然后,通过相似度计算判断该测试用例是否属于该符号,如果是则发送给待测程序执行,否则再次模糊化进行修正;最后,收集待测程序执行完测试用例后的响应报文,通过相似度计算将响应报文映射为对应的输出符号,使用模型学习构建出一个待测协议实体程序对应的最小确定性Mealy状态机,即结果状态机。在结果分析阶段,对学习得到的结果状态机进行修剪和处理,便于测试人员进行异常路径迁移和冗余状态的分析。
[0011]本专利技术提出一种可扩展的有状态协议实体程序的逻辑漏洞检测方法,主要包括三个阶段:测试准备阶段、状态机学习阶段、结果整理分析阶段。
[0012]1测试准备阶段
[0013]使用Wireshark工具对待测协议的通信流量进行抓包,并将其中的消息报文和对应的消息类型作为模糊测试器的输入。具体包含以下内容:
[0014]1.1待测协议实体程序部署
[0015]对待测协议实体程序进行部署,启动待测协议实体程序和与其对应的通信端(如果待测协议实体程序是客户端,则启动对应的通信服务端,反之则启动对应的通信客户端)。
[0016]1.2网络流量捕获
[0017]启动网络封包分析工具Wireshark,捕获待测协议实体程序与其对应的通信端之间的网络流量。
[0018]1.3消息类型分类
[0019]对捕获的网络流量进行筛选和整理,将其分为不同的消息类型,同时确保每个消息类型至少对应有一个消息报文实例。
[0020]然后,将由待测协议实体程序发出的消息,其类型划分为输出消息类型;由通信端发出的消息,其类型划分为输入消息类型。
[0021]最后,每一个消息类型都用一个符号唯一标识,并将整理的消息类型的数据结构表示为<符号,该符号标识的消息类型对应的报文实例集合>。
[0022]1.4脚本文件构建
[0023]将1.3得到的所有消息报文实例、消息类型和符号通过一个脚本文件进行描述,形成一个描述了待测有状态协议的流量报文和其对应的消息类型的脚本文件,将该脚本文件作为测本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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...

【专利技术属性】
技术研发人员:徐向华黄一乘
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1