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

文档序号:34267495发布日期:2023-05-26 19:37阅读:179来源:国知局
基于状态与消息感知的网络协议模糊测试方法及系统

本发明属于网络协议安全检测,具体涉及基于状态与消息感知的网络协议模糊测试方法及系统。


背景技术:

1、随着互联网技术的发展,网络通信安全已经成为一项重要的研究工作。在互联网的服务中使用网络协议可以使得用户更有效地、更可靠地与远程服务器进行通信。因此,为了保证网络协议实体的安全,去发现其潜在的安全漏洞是至关重要的。网络协议规定了两个或多个网络参与者之间可以交换的消息的正确顺序和结构。但是,这种可以从世界任何地方与服务器通信的能力给攻击者对远程代码进行攻击提供了机会。攻击者甚至不需要物理访问服务器。openssl是用于在ssl/tls协议中保证通信安全的协议实体,其中著名的“心脏滴血(heartbleed)”就是openssl中的一个安全漏洞。

2、目前主流的网络协议(简称“协议”)模糊测试技术包括基于变异的灰盒模糊测试技术和基于生成的黑盒模糊测试技术。其中最先进的基于变异的灰盒模糊测试技术aflnet,该协议模糊测试工具主要思想是结合afl的覆盖引导和变异生成的灰盒模糊测试技术与自学习协议实体中状态信息来引导协议模糊测试工具不断地变异来生成新的消息序列,从而提高网络协议模糊测试的效率。

3、协议模糊测试所发送的消息序列是有顺序性和结构性的,协议实体很容易因为收不到特定的消息而导致拒绝接收后续的一系列消息,从而降低整个消息序列的有效性和被接受率,以及很难覆盖协议实体更深层次的状态和逻辑代码。基于变异的协议模糊测试方法主要利用位级别、字节级别和消息级别的变异策略来生成新的消息序列。这些变异操作是对消息序列的顺序性和结构性是不敏感的且存在着盲目性,因此它们很容易破坏消息的顺序性和结构性,从而导致变异生成消息序列的有效性降低,影响协议模糊测试的效率。

4、现有的基于变异的网络协议模糊测试研究主要有以下开源测试框架、专利和论文:

5、aflnet是一种基于变异的网络协议模糊测试工具,它主要是利用位级别、字节级别和消息级别的变异策略来产生新的消息。其中,位级别和字节级别的变异策略对消息的结构是不敏感的,很容易破坏消息的结构。而消息级别的变异策略具体的做法是从语料库中随机选取一个消息,对先前被证明是有趣的消息序列进行随机替换、插入、删除消息等操作以此来生成新的消息序列,并将其发送给协议实体进行测试,这种变异策略对消息的顺序是不敏感的,很容易破坏消息的顺序性;snpsfuzzer提出了一种基于快照的方式来提高网络协议测试的速度,主要是在协议实体处于特定协议状态时转储上下文信息,并在需要模糊该协议状态时恢复上下文信息。由于它是在aflnet的基础上进行改进的,因此和aflnet一样在对消息进行变异时存在同样的问题。

6、2.cn115238822a提出了基于混合变异策略的网络协议漏洞挖掘方法,通过改进的生成对抗网络模型和线下漏洞知识库指导生成样本数据变异以提高漏洞触发率,进而生成更有效的测试用例。cn114650163a提出了一种面向有状态网络协议的模糊测试方法,通过分析报文间的依赖关系,约束报文中特殊字段的数据,避免因对特殊字段变异导致程序校验失败情形。该方法中需要根据待测协议格式规范来提取协议规则并构建协议规则集,利用规则集来生成报文测试模板,对报文测试模板中的可变异字段进行变异从而生成新的测试报文。cn113326194a设计了一种基于变异报文随机排序的模糊测试方法,具体方法是通过改变变异报文发送次序以及流量回放的操作。但是,这种变异报文次序的做法非常容易破坏报文次序的顺序性和结构性,导致生成的测试报文,非常容易被协议实体拒收,从而降低了测试报文的质量。

7、综上,基于变异的网络协议模糊测试技术中的变异策略对消息序列的顺序性和结构性是不敏感的且存在着盲目性,即没有考虑到状态和消息之间的关联关系,从而在变异过程中容易破坏消息序列的顺序性和结构性,进而导致整个消息序列的有效性降低。本发明提出了一种基于状态与消息感知的网络协议模糊测试方法,通过构建特定于状态的消息池以及给出消息价值评估计算公式来计算出每个消息的价值分数,可以让协议模糊测试工具优先选取满足消息序列的顺序性且价值高的消息参与消息级别的变异,从而生成更加高效的消息序列,去探索更深层次的网络协议实体中的状态空间以及逻辑代码。


技术实现思路

1、本发明的一个目的是针对上述问题,提出了一种基于状态与消息感知的网络协议模糊测试方法,在协议模糊测试过程中,协议模糊测试工具为被测协议的目标状态创建并动态地维护一个全局的消息池,并从该状态下所产生的有趣的消息序列提取出中缀消息,然后根据是否触发新的代码分支、是否产生新的状态、是否产生新的状态转换以及执行时间等数据加权计算出一个值,作为当前中缀消息的价值分数。最后将带有价值分数的中缀消息加入到由该目标状态所维护的消息池中。之后,每次从特定于状态的消息池中选取价值分数高的消息参与消息的变异能够保证变异生成的消息序列在顺序性和结构性的正确性,从而提高协议模糊测试效率。

2、本发明的方法主要包括四个阶段:测试准备阶段、协议模糊测试阶段、结果信息反馈阶段,构建特定于状态的消息池阶段。

3、所述的测试准备阶段具体包括以下步骤:

4、1-1.编译插桩

5、对被测协议实体使用aflnet自带的afl-clang-fast++进行编译插桩,生成被测协议的目标代码,便于收集协议实体运行时的代码覆盖信息。

6、1-2.构建初始语料库

7、首先分别启动客户端与被测协议目标代码,并进行通信。

8、然后利用数据包嗅探工具tcpdump去监听协议实体的端口的所有流量,并将捕获到的所有请求数据包和响应数据包保存在traffic.pcap文件中。

9、最后,使用消息序列解析器(wireshark)对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的消息总个数。

10、所述的协议模糊测试阶段具体包含以下步骤:

11、2-1.初始化

12、利用aflnet的preform_dry_run()函数对初始语料库中的每个消息序列执行一遍协议模糊测试,收集产生的协议状态并保存在全局变量state_ids数组中,state_ids={s1,...,si,...,sn},si表示第i个协议状态,i=1,...,n,n为协议状态总数;收集产生的状态转换保存到state_transition二维数组中,state_tr ansition[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为协议状态总数。

13、2-2.选择目标状态

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

15、2-2-2.采用aflnet中的update_scores_and_select_next_state()函数选出下一个模糊的目标状态sp,p=1,...,n,n为协议状态总数。

16、2-3.选择消息序列

17、根据步骤2-2中选定的目标状态sp,从initialmessagepool中选出能使被测协议实体到达目标状态sp的消息序列m,用于进一步消息序列的变异。

18、2-4.变异消息序列

19、根据步骤2-3中选定的消息序列m,利用aflnet的划分方法将m划分为三个子序列:前缀消息序列(m1)、中缀消息序列(m2)、后缀消息序列(m3),即m=<m1,m2,m3>。其中m1是能使协议实体到达目标状态sp的消息序列,m2是等待变异的候选消息序列,m3是剩余的消息序列。

20、然后,根据目标状态sp所对应的消息池targetmessagepool是否为空,对m2采用不同的变异策略:

21、1)如果targetmessagepool为空,则对m2采用位级别和字节级别的变异策略来生成新的m2’,即m=<m1,m2’,m3>,用于进一步的协议测试。

22、2)否则targetmessagepool不为空,则对m2采用消息级别的变异策略:

23、首先,从targetmessagepool={mp,1(value1),mp,2(value2),...,mp,j(valuej),...,mp,k(valuek)}中,mp,j表示目标状态sp所对应的消息池targetmessagepool中的第j个消息,valuej表示消息mp,j的价值分数,其中j=1,2,...,k,k表示消息池targetmessagepool中消息的总数,依据每个消息的价值分数valuej与所有消息价值分数总和的比值作为该消息被选中的概率。

24、其次,利用选定的消息对等待变异的m2分别进行插入、替换、重复等变异操作生成新的m2’,即m=<m1,m2’,m3>,用于进一步的协议测试。其中,插入操作:将选择的消息插入到m2的开头或者末尾;替换操作:将选择的消息分别对m2中的每一个消息都替换一次;重复操作:将选择的消息复制一次,然后替换整个m2.

25、2-5.协议测试

26、将步骤2-4中所生成m中的每一个消息依次的发送给被测协议实体进行测试。如果测试过程中触发了漏洞,那么就将m保存在crashs目录下,用于复现漏洞,并转到步骤2-2。

27、所述的结果信息反馈阶段包含以下步骤:

28、3-1.收集代码覆盖信息及状态序列

29、利用aflnet收集被测协议实体的代码覆盖信息和状态序列:

30、1)如果在统计收集到的代码覆盖信息时发现产生了新的代码覆盖,说明m是有趣的,就加入到initialmessagepool中。

31、2)在统计收集到的状态序列state_sequence(由多个协议状态组成)时,如果发现产生了新的状态new_state_id,那么就将其保存到state_ids数组中。如果发现产生了新的状态转换,那么就将state_transition二维数组中对应下标的值设为1。例如,产生新的状态转换为s1->s3,那么state_transition[1][3]=1。同样将m加入到initialmessagepool中。

32、3)否则,即没有产生新的代码覆盖,也没有产生新的状态或者新的状态转换,就转到步骤2-2。

33、所述的构建特定于状态的消息池阶段具体包含以下步骤:

34、4-1.构建特定于状态的消息池

35、1)获得步骤3-1的m,以及步骤2-2的目标状态sp。

36、2)利用aflnet的划分方法得到m的中缀消息序列,将中缀消息序列中的每一个消息都加入到目标状态sp所对应的消息池targetmessagepool。

37、3)依据步骤3-1所收集到的代码覆盖信息及状态序列,然后利用消息价值评估计算公式计算出消息的价值分数value,并将value保存在state_message_value二维数组中,其中state_message_value[i][j]=valuei,j表示第i个状态所对应的消息池中第j个消息的价值分数为valuei,j。

38、具体计算公式如下:

39、

40、其中e:代表是否触发新的分支,s:代表是否产生新的状态,t:代表是否产生新的状态转换,e,s,t∈{0,1};t:表示执行时间;此外,,a,b,c,d∈{x|0<=x<=1},且a+b+c+d=1(权值),通常经验取值为a=0.4、b=0.3、c=0.2、d=0.1;e:代表自然指数,是个常量。

41、4)转到步骤2-2。

42、本发明的另一个目的是提供基于状态与消息感知的网络协议模糊测试系统,包括测试准备模块、协议模糊测试模块、结果信息反馈模块、构建特定于状态的消息池模块。

43、测试准备模块,借助aflnet自带的afl-clang-fast++对被测协议实体进行编译插桩,便于收集协议实体运行时的代码覆盖信息。以及利用数据包嗅探工具(tcpdump)、请求序列解析器(wireshark)这两个工具来捕获数据包->解析数据包,最后生成初始语料库。

44、协议模糊测试模块,用于对协议实体进行协议模糊测试。从所有已发现的状态中,选择一个状态作为模糊测试的目标状态,并从语料库里面挑选出能够使得协议实体到达该目标状态的消息序列,然后对消息序列的中缀消息进行变异。具体的做法是从特定于目标状态的消息池中挑选出价值分数高的消息,对中缀消息进行插入、替换、重复等操作,从而生成新的且更高效的消息序列。

45、结果信息反馈模块,用于收集代码覆盖信息和状态序列。利用消息序列是否产生新的代码覆盖信息、新的状态或新的状态转换作为其是否有趣的判断依据,并保存有趣的消息序列,便于进一步的协议模糊测试。而状态序列能够帮助协议模糊器探索协议实体内部更深层次的协议状态。

46、构建特定于状态的消息池模块,为每一个状态生成一个特定于该状态的消息池,具体采用<状态,消息>感知的消息分类算法和消息价值评估计算公式来生成消息池。然后,每次进行消息级别变异时,从特定于状态的消息池中选取消息进行变异操作,从而保证消息序列的顺序性和结构性。

47、本发明的有益效果是:

48、1.本发明采用了基于状态与消息感知的网络协议模糊测试方法,为每个状态生成特定于该状态的消息池,从而在进行消息变异的过程中,能够保证整个消息序列的顺序性和结构性,可以有效提升协议模糊测试的消息。

49、2.相对于已有的覆盖引导和突变的网络协议模糊测试工具aflnet,本发明提出基于状态与消息感知的网络协议模糊测试方法,可以有效解决协议模糊测试过程中由于变异策略对消息进行变异时存在的盲目性而导致破坏消息序列的顺序性和结构性的问题。在本发明中,通过构建特定于状态的消息池,能够让协议模糊测试工具对消息序列进行变异时,既考虑到协议状态和消息之间的关联关系又确保消息序列的顺序性和结构性,从而使得生成的消息序列更加高效,以此来提升协议模糊测试的效率。

50、3.使用本发明方法,可以提升协议实体的检测效率,在相同的测试时间内,能探索协议实体中更深层次的代码部分以及探索更深层次的协议状态,发现更多的漏洞。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1