基于状态与消息感知的网络协议模糊测试方法及系统技术方案

技术编号:37681409 阅读:25 留言:0更新日期:2023-05-28 09:35
本发明专利技术涉及基于状态与消息感知的网络协议模糊测试方法及系统。本发明专利技术旨在提供一种方法,解决现有基于变异的网络协议模糊测试技术中的变异策略对消息序列的顺序性和结构性是不敏感的且存在着盲目性的问题。在协议测试过程中需要为被测协议的目标状态创建并维护一个全局的消息池,并从有趣的消息序列提取出中缀消息,然后根据给定的消息价值评估计算公式计算出它的价值分数。最后将其加入到该目标状态所维护的消息池。之后,每次从特定于状态的消息池中选取价值分数高的消息参与变异操作,从而提高协议模糊测试效率。本发明专利技术适用于所有基于AFLNET改进的网络协议模糊测试工具,本发明专利技术具有实现原理简单、网络协议漏洞检测效率高等优点。等优点。等优点。

【技术实现步骤摘要】
基于状态与消息感知的网络协议模糊测试方法及系统


[0001]本专利技术属于网络协议安全检测
,具体涉及基于状态与消息感知的网络协议模糊测试方法及系统。

技术介绍

[0002]随着互联网技术的发展,网络通信安全已经成为一项重要的研究工作。在互联网的服务中使用网络协议可以使得用户更有效地、更可靠地与远程服务器进行通信。因此,为了保证网络协议实体的安全,去发现其潜在的安全漏洞是至关重要的。网络协议规定了两个或多个网络参与者之间可以交换的消息的正确顺序和结构。但是,这种可以从世界任何地方与服务器通信的能力给攻击者对远程代码进行攻击提供了机会。攻击者甚至不需要物理访问服务器。OpenSSL是用于在SSL/TLS协议中保证通信安全的协议实体,其中著名的“心脏滴血(Heartbleed)”就是OpenSSL中的一个安全漏洞。
[0003]目前主流的网络协议(简称“协议”)模糊测试技术包括基于变异的灰盒模糊测试技术和基于生成的黑盒模糊测试技术。其中最先进的基于变异的灰盒模糊测试技术AFLNET,该协议模糊测试工具主要思想是结合AFL的覆盖引导和变异生成的灰盒模糊测试技术与自学习协议实体中状态信息来引导协议模糊测试工具不断地变异来生成新的消息序列,从而提高网络协议模糊测试的效率。
[0004]协议模糊测试所发送的消息序列是有顺序性和结构性的,协议实体很容易因为收不到特定的消息而导致拒绝接收后续的一系列消息,从而降低整个消息序列的有效性和被接受率,以及很难覆盖协议实体更深层次的状态和逻辑代码。基于变异的协议模糊测试方法主要利用位级别、字节级别和消息级别的变异策略来生成新的消息序列。这些变异操作是对消息序列的顺序性和结构性是不敏感的且存在着盲目性,因此它们很容易破坏消息的顺序性和结构性,从而导致变异生成消息序列的有效性降低,影响协议模糊测试的效率。
[0005]现有的基于变异的网络协议模糊测试研究主要有以下开源测试框架、专利和论文:
[0006]AFLNET是一种基于变异的网络协议模糊测试工具,它主要是利用位级别、字节级别和消息级别的变异策略来产生新的消息。其中,位级别和字节级别的变异策略对消息的结构是不敏感的,很容易破坏消息的结构。而消息级别的变异策略具体的做法是从语料库中随机选取一个消息,对先前被证明是有趣的消息序列进行随机替换、插入、删除消息等操作以此来生成新的消息序列,并将其发送给协议实体进行测试,这种变异策略对消息的顺序是不敏感的,很容易破坏消息的顺序性;SNPSFuzzer提出了一种基于快照的方式来提高网络协议测试的速度,主要是在协议实体处于特定协议状态时转储上下文信息,并在需要模糊该协议状态时恢复上下文信息。由于它是在AFLNET的基础上进行改进的,因此和AFLNET一样在对消息进行变异时存在同样的问题。
[0007]2.CN115238822A提出了基于混合变异策略的网络协议漏洞挖掘方法,通过改进的生成对抗网络模型和线下漏洞知识库指导生成样本数据变异以提高漏洞触发率,进而生成
更有效的测试用例。CN114650163A提出了一种面向有状态网络协议的模糊测试方法,通过分析报文间的依赖关系,约束报文中特殊字段的数据,避免因对特殊字段变异导致程序校验失败情形。该方法中需要根据待测协议格式规范来提取协议规则并构建协议规则集,利用规则集来生成报文测试模板,对报文测试模板中的可变异字段进行变异从而生成新的测试报文。CN113326194A设计了一种基于变异报文随机排序的模糊测试方法,具体方法是通过改变变异报文发送次序以及流量回放的操作。但是,这种变异报文次序的做法非常容易破坏报文次序的顺序性和结构性,导致生成的测试报文,非常容易被协议实体拒收,从而降低了测试报文的质量。
[0008]综上,基于变异的网络协议模糊测试技术中的变异策略对消息序列的顺序性和结构性是不敏感的且存在着盲目性,即没有考虑到状态和消息之间的关联关系,从而在变异过程中容易破坏消息序列的顺序性和结构性,进而导致整个消息序列的有效性降低。本专利技术提出了一种基于状态与消息感知的网络协议模糊测试方法,通过构建特定于状态的消息池以及给出消息价值评估计算公式来计算出每个消息的价值分数,可以让协议模糊测试工具优先选取满足消息序列的顺序性且价值高的消息参与消息级别的变异,从而生成更加高效的消息序列,去探索更深层次的网络协议实体中的状态空间以及逻辑代码。

技术实现思路

[0009]本专利技术的一个目的是针对上述问题,提出了一种基于状态与消息感知的网络协议模糊测试方法,在协议模糊测试过程中,协议模糊测试工具为被测协议的目标状态创建并动态地维护一个全局的消息池,并从该状态下所产生的有趣的消息序列提取出中缀消息,然后根据是否触发新的代码分支、是否产生新的状态、是否产生新的状态转换以及执行时间等数据加权计算出一个值,作为当前中缀消息的价值分数。最后将带有价值分数的中缀消息加入到由该目标状态所维护的消息池中。之后,每次从特定于状态的消息池中选取价值分数高的消息参与消息的变异能够保证变异生成的消息序列在顺序性和结构性的正确性,从而提高协议模糊测试效率。
[0010]本专利技术的方法主要包括四个阶段:测试准备阶段、协议模糊测试阶段、结果信息反馈阶段,构建特定于状态的消息池阶段。
[0011]所述的测试准备阶段具体包括以下步骤:
[0012]1‑
1.编译插桩
[0013]对被测协议实体使用AFLNET自带的afl

clang

fast++进行编译插桩,生成被测协议的目标代码,便于收集协议实体运行时的代码覆盖信息。
[0014]1‑
2.构建初始语料库
[0015]首先分别启动客户端与被测协议目标代码,并进行通信。
[0016]然后利用数据包嗅探工具tcpdump去监听协议实体的端口的所有流量,并将捕获到的所有请求数据包和响应数据包保存在traffic.pcap文件中。
[0017]最后,使用消息序列解析器(Wireshark)对traffic.pcap文件进行解析并提取出所有的请求消息序列(简称“消息序列”),并将其作为初始语料库InitialMessagePool。初始语料库是消息序列的集合,即InitialMessagePool={M1,..,M
i
,...,M
d
},i=1,...,d,其中d为消息序列总数,而消息序列是消息的链表,即M
i
=m
i,1

>...

>m
i,k

>...

>m
i,q
,m
i,k

示第i个消息序列的第k个消息,k=1,...,q,其中q为M
i
的消息总个数。
[0018]所述的协议模糊测试阶段具体包含以下步骤:
[0019]2‑...

【技术保护点】

【技术特征摘要】
1.基于状态与消息感知的网络协议模糊测试方法,其特征在于,包括四个阶段:测试准备阶段、协议模糊测试阶段、结果信息反馈阶段,构建特定于状态的消息池阶段。2.根据权利要求1所述的基于状态与消息感知的网络协议模糊测试方法,其特征在于,所述的测试准备阶段,包括以下子步骤:步骤1

1,编译插桩:对被测协议实体使用AFLNET自带的afl

clang

fast++进行编译插桩,生成被测协议的目标代码,便于收集协议实体运行时的代码覆盖信息;步骤1

2构建初始语料库:首先分别启动客户端与被测协议目标代码,并进行通信;然后利用数据包嗅探工具tcpdump去监听协议实体的端口的所有流量,并将捕获到的所有请求数据包和响应数据包保存在traffic.pcap文件中;最后,使用消息序列解析器对traffic.pcap文件进行解析并提取出所有的请求消息序列,并将其作为初始语料库InitialMessagePool;初始语料库是消息序列的集合,即InitialMessagePool={M1,..,Mi,...,Md},i=1,...,d,其中d为消息序列总数,而消息序列是消息的链表,即Mi=mi,1

>...

>mi,k

>...

>mi,q,mi,k表示第i个消息序列的第k个消息,k=1,...,q,其中q为Mi的消息总个数。3.根据权利要求2所述的基于状态与消息感知的网络协议模糊测试方法,其特征在于,所述的协议模糊测试阶段,包括以下子步骤:步骤2

1.初始化利用AFLNET的preform_dry_run()函数对初始语料库中的每个消息序列执行一遍协议模糊测试,收集产生的协议状态并保存在全局变量state_ids数组中,state_ids={S1,...,Si,...,Sn},Si表示第i个协议状态,i=1,...,n,n为协议状态总数;收集产生的状态转换保存到state_transition二维数组中,state_transition[i][j]=1表示状态state_ids[i]能够到达状态state_ids[j],state_transition[i][j]=0表示状态state_ids[i]不能够到达状态state_ids[j],其中i,j=1,...,n,n为协议状态总数;步骤2

2.选择目标状态步骤2
‑2‑
1.初始时,对state_ids数组中采用轮询的方式挑选出一个状态作为协议模糊测试的目标状态Sp,p=1,...,n,n为协议状态总数;如果轮询次数小于等于L次(通常经验取值为10),就跳转至步骤2

3,否则跳转至步骤2
‑2‑
2;步骤2
‑2‑
2.采用AFLNET中的update_scores_and_select_next_state()函数选出下一个模糊的目标状态Sp,p=1,...,n,n为协议状态总数;步骤2

3.选择消息序列根据步骤2

2中选定的目标状态Sp,从InitialMessagePool中选出能使被测协议实体到达目标状态Sp的消息序列M,用于进一步消息序列的变异;步骤2

4.变异消息序列根据步骤2

3中选定的消息序列M,利用AFLNET的划分方法将M划分为三个子序列:前缀消息序列(M1)、中缀消息序列(M2)、后缀消息序列(M3),即M=<M1,M2,M3>;其中M1是能使协议实体到达目标状态Sp的消息序列,M2是等待变异的候选消息序列,M3是剩余的消息序列;
然后,根据目标状态Sp所对应的消息池TargetMessagePool是否为空,对M2采用不同的变异策略。4.根据权利要求3所述的基于状态与消息感知的网络协议模糊测试方法,其特征在于:所述的协议模糊测试阶段中步骤2

4:对M2采用不同的变异策略,包括:1)如果TargetMessagePool为空,则对M2采用位级别和字节级别的变异策略来生成新的M2

,即M=<M1,M2

,M3>,用于进一步的协议测试;2)否则TargetMessagePool不为空,则对M2采用消息级别的变异策略:首先,从TargetMessagePool={M
p,1
(value1),M
p,2
(value2),...,M
p,...

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

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

1