一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于HTTP/2的模糊测试方法和装置与流程

2022-02-22 02:49:04 来源:中国专利 TAG:

一种基于http/2的模糊测试方法和装置
技术领域
1.本发明涉及软件安全测试领域,具体涉及一种基于http/2的模糊测试方法和装置。


背景技术:

2.模糊测试是如今挖掘软件漏洞最有效的方法之一,由于其简单易用的特性,受到了软件安全相关从业人员的青睐。模糊测试的核心是通过给被测程序输入异常数据,监视软件是否会有异常行为,例如崩溃、超时等,以此来暴露软件潜在的漏洞。如果被测软件有异常行为,那么就可以将造成异常的输入记录下来。模糊测试应尽可能多地覆盖代码分支,以最大可能地暴露出潜在的漏洞。
3.模糊测试时需要设置起始种子,起始种子是指模糊测试开始时的第一个报文,后续将在这个报文的基础上进行变异,而传统的模糊测试是从任意一个报文起步,然后以此报文为基础,不断变异,然后在变异的报文中选择那些产生新的代码覆盖路径的报文,继续变异,以此循环。而http/2协议中规定了在不同帧结构报文的特定字段要么为预设的正常码,要么为预设的异常码。而所有异常码对服务器端的影响是一致的,因此,如果仍然采用传统方法随机选择一个起始种子并对其全字段进行模糊测试,则会出现许多对于特定字段而言是重复的测试例,导致测试效率低下。
4.另外,在进行协议的模糊测试时,需要监视器对被测试的程序的运行状态进行监视,而传统的监视器要么需要源码,要么需要在被测对象的运行环境上调用相应监视器,但是在面对协议测试的时候,往往是没有源码的,很多情况下测试人员也无法在宿主主机上进行操作,比如要测试http/2的服务端,只能通过发送各种变异的报文到服务端,并不能在服务端上进行任何操作,因此,传统的监视器就无法应用于此类测试。
5.因此,有必要提供一种新的基于http/2的模糊测试方法,以解决上述问题。


技术实现要素:

6.本发明的目的在于提供一种基于http/2的模糊测试方法、装置、电子设备及计算机可读存储介质,能够减少模糊测试例的数量,提高模糊测试的效率。
7.为实现上述目的,本发明提供了一种基于http/2的模糊测试方法,包括:
8.获取异常报文作为种子,所述异常报文为特定字段存在任一预设异常码的报文;
9.对所述异常报文的其他字段进行变异生成测试报文;
10.将所述测试报文发送至服务器端。
11.可选地,所述特定字段为预设正常码或预设异常码,所述服务器端接收到所述特定字段为预设异常码的报文必须响应协议错误的连接错误至客户端。
12.可选地,所述其他字段不包括影响所述客户端与所述服务器端交互的字段。
13.可选地,所述其他字段不包括表示报文类型的字段。
14.可选地,所述获取异常报文作为种子包括:通过配置文件控制一报文的所述特定
字段变异以得到所述异常报文。
15.可选地,在将所述测试报文发送至所述服务器端之后,所述方法还包括:
16.发送ping帧报文至所述服务器端;
17.根据是否接收到所述服务器端返回的带有ack标志位的所述ping帧报文,确定所述服务器端是否正常。
18.可选地,所述异常报文包括:
19.padding字段为非0x0的data帧报文;
20.window size increment字段为0x0的window_update帧报文;
21.stream identifier字段为0x0的push_promise帧报文、headers帧报文、 priority帧报文、continuation帧报文、rst_stream帧报文;
22.stream identifier字段为非0x0的ping帧报文、setting帧报文、goaway 帧报文。
23.为实现上述目的,本发明还提供了一种基于http/2的模糊测试装置,包括:
24.获取模块,用于获取异常报文作为种子,所述异常报文为特定字段存在任一预设异常码的报文;
25.生成模块,用于对所述异常报文的其他字段进行变异生成测试报文;
26.发送模块,用于将所述测试报文发送至服务器端;
27.为实现上述目的,本发明还提供了一种电子设备,包括:
28.处理器;
29.存储器,其中存储有所述处理器的可执行指令;
30.其中,所述处理器配置为经由执行所述可执行指令来执行如上所述的基于 http/2的模糊测试方法。
31.为实现上述目的,本发明还提供了一种计算机可读存储介质,其上存储有程序,所述程序被处理器执行时实现如上所述的基于http/2的模糊测试方法。
32.与现有技术相比,本发明的基于http/2的模糊测试方法通过获取异常报文作为种子,且该异常报文为特定字段存在任一预设异常码的报文,根据http/2 协议可知,各种帧结构报文的特定字段的所有异常码给服务器端带来的影响都是一致的,因此在对报文中的特定字段进行模糊测试时,只需要测试特定字段存在任一预设异常码的情况,而该预设异常码可以代表该特定字段的所有异常情况,所以选择该异常报文作为种子,并且在后续的模糊测试中将该异常报文中特定字段固定下来不进行变异,而是对其他字段进行变异,可以大大减少测试例的生成,提高测试效率。
附图说明
33.图1是https握手信息交互流程图。
34.图2是建立http/2连接的信息交互流程图。
35.图3是建立http/2连接的报文交互示意图。
36.图4是本发明实施例基于http/2的模糊测试方法的方法流程图。
37.图5a-图5j依次是data帧、header帧、ping帧、priority帧、setting 帧、rst_stream帧、continuation帧、push_promise帧、goaway 帧、window_update帧的结构示意图。
38.图6是本发明实施例对报文字段进行控制的代码示意图。
39.图7是本发明实施例ping帧报文监控服务器端的信息交互流程图。
40.图8是本发明实施例客户端发送的ping帧报文以及服务器端返回的带有 ack标志位的ping帧报文的示意图。
41.图9是本发明实施例基于http/2的模糊测试装置的示意框图。
42.图10是本发明实施例电子设备的示意框图。
具体实施方式
43.为了详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
44.实施例一
45.请参阅图1,由于http/2的模糊测试需要建立在https的基础之上,因此需要先建立https的握手协商,具体步骤如下:
46.客户端发送一条详细说明其加密功能的clienthello消息。此消息未加密发送,因为尚未达成加密协议;
47.服务器端发回一个serverhello消息,根据它所知道的客户端支持的内容选择https协议(比如tlsv1.2)。服务器端还发送将用于该连接的密码(例如ecdhe-rsa-aes128gcm-sha256),同样,它是根据clienthello消息中所支持的内容来选择的。然后,服务器端提供服务器端https证书(servercertificate)。密钥取决于所选择的密码(serverkeyexchange)和是否需要客户端https证书 (certificaterequest)。最后,服务器端发送完成的信息(serverhellodone);
48.客户端验证服务器端证书,并在请求时发送客户端证书(clientcertificate)。然后它发送它的密钥详细信息(clientkeyexchange)。这些详细信息是通过服务器端证书中的公钥加密发送的,因此只有服务器端可以使用私钥解密消息。如果正在使用客户端证书,则发送一条证书验证的消息(certificateverify),该消息用私钥签名,以证明客户端证书的所有权。客户端使用服务器端密钥交换 (serverkeyexchange)和客户端密钥交换(clientkeyexchange)的详细信息来定义一个加密的对称密钥,并发送一个更改秘钥规范(changecipherspec)消息通知客户端加密开始了,然后它发送一个加密完成的信息(finished);
49.服务器端也发送一个更改秘钥规范(changecipherspec)消息通知客户端采用协商的密钥进行相互通信,并发送一个加密完成的信息(finished)。
50.请参阅图2和图3,https握手协商完成后,便可以开始建立http/2的连接,具体步骤为:
51.客户端发送一个连接序言(magic string,一个固定的字符串,客户端连接前奏以24个八位字节的序列开始,以十六进制表示法为: 0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a);
52.发送完毕连接序言后,客户端可以不用等待来自服务器端的响应,马上发送http/2其它帧,一般是发送setting帧,windows_update帧,还有 get请求方法;
53.服务器端接收到setting帧之后,返回一个包含确认标志位setting作为确认,到这一步的时候,http/2的连接已经建立起来;
54.响应get请求方法,正常传输其它帧。
55.请参阅图4,本发明公开了一种基于http/2的模糊测试方法,包括:
56.s1、获取异常报文作为种子,异常报文为特定字段存在任一预设异常码的报文。
57.具体地,特定字段为预设正常码或预设异常码,服务器端接收到特定字段为预设异常码的报文必须响应协议错误的连接错误至客户端。
58.具体地,可以通过配置文件控制一报文的特定字段变异以得到异常报文。
59.具体地,请参阅图5a-图5j,http/2协议的规格书rfc7540中规定了下列的特定字段存在异常码的报文:
60.padding字段为非0x0的data帧报文;
61.window size increment字段为0x0的window_update帧报文;
62.stream identifier字段为0x0的push_promise帧报文、headers帧报文、 priority帧报文、continuation帧报文、rst_stream帧报文;
63.stream identifier字段为非0x0的ping帧报文、setting帧报文、goaway 帧报文。
64.以上报文里的特定字段都是只有两种情况:一种是0x0,另一种是非0x0。这两种情况在rfc7540中规定各自对应异常和非异常,当异常情况要求特定字段为非0x0,可以随机设置一非0x0的情况,并将该特定字段固定下来,不需要对非0x0的所有情况进行测试,因此直接获取特定字段存在任一预设异常码的报文作为种子进行模糊测试,相当于同时测试特定字段为异常的所有情况,且在后续的模糊测试中,该特定字段则不需要再进行变异。
65.以setting帧报文为例,rfc7540规定其stream identifier字段为非0x0 时为异常报文,则可以通过配置文件获取一个stream identifier字段为非0x0的 setting帧报文作为种子,而非0x0的所有情况对于服务器端的模糊测试而言都是等效的(即0x1、0x2、0x3等非0x0情况都是等效的),因此,假设预设异常码为0x1,则可以获取一个stream identifier字段为0x1的setting帧报文作为种子,且在后续的模糊测试中,stream identifier字段固定为0x1。
66.进一步地,rfc7540中还规定上述特定字段存在任一预设异常码的报文在传输给服务器端时,服务器端还必须响应协议错误的连接错误至客户端。以此可作为进行模糊测试的反馈,如果客户端能够收到该响应,能够证明特定字段的模糊测试通过。
67.s2、对异常报文的其他字段进行变异生成测试报文。
68.具体地,其他字段是指报文中特定字段以外的字段。
69.进一步地,其他字段不包括影响客户端与服务器端交互的字段。通过控制上述报文字段的不变异,避免了服务器端与客户端的报文交互中断,也避免了无意义测试报文的生成。
70.具体地,请参阅图5a-图5j,当还在进行与当前异常报文同一类帧结构的报文测试时,不对表示报文类型的字段进行变异。各种帧结构的表示报文类型的字段为type字段。
71.具体地,可以通过配置文件控制报文字段的变异。具体参考如图6所示代码,token属性为true时,将不再对该字段进行模糊,在图6的代码中,对一个 setting帧报文中的type和flags字段设置了token属性为true,这样在后面的模糊测试中,将不会对type和flags字段有任何的操作。这样就实现了对报文字段的精确控制。
72.s3、将测试报文发送至服务器端。
73.进一步地,请参阅图7和图8,客户端每发送一次测试报文至服务器端,也会发送一个ping帧报文至服务器端,如果服务器端运行正常,则会返回带有 ack标志位的ping帧报文至客户端。通过客户端是否接收到带有ack标志位的ping帧报文作为服务器端是否正常运行的判断依据,不需要在服务器端上进行操作即可获取服务器端的运行状态。
74.基于上述设计,本发明的基于http/2的模糊测试方法通过获取异常报文作为种子,且该异常报文为特定字段存在任一预设异常码的报文,根据http/2协议可知,各种帧结构报文的特定字段的所有异常码给服务器端带来的影响都是一致的,因此在对报文中的特定字段进行模糊测试时,只需要测试特定字段存在任一预设异常码的情况,而该预设异常码可以代表该特定字段的所有异常情况,所以选择该异常报文作为种子,并且在后续的模糊测试中将该异常报文中特定字段固定下来不进行变异,而是对其他字段进行变异,可以大大减少测试例的生成,提高测试效率。
75.实施例二
76.请参阅图9,本发明公开了一种基于http/2的模糊测试装置,包括:
77.获取模块100,用于获取异常报文作为种子,异常报文为特定字段存在任一预设异常码的报文;
78.生成模块200,用于对异常报文的其他字段进行变异生成测试报文;
79.发送模块300,用于将测试报文发送至服务器端。
80.本发明在针对特定字段的模糊测试时,只需要测试特定字段存在任一预设异常码的情况,而该预设异常码可以代表该特定字段的所有异常情况,所以选择该异常报文作为种子,并且在后续的模糊测试中将该异常报文中特定字段固定下来不进行变异,而是对其他字段进行变异,可以大大减少测试例的生成,提高测试效率
81.实施例三
82.请参阅图10,本发明还提供了一种电子设备,包括:
83.处理器40;
84.存储器50,其中存储有处理器40的可执行指令;
85.其中,处理器40配置为经由执行可执行指令来执行如实施例一所述的基于 http/2的模糊测试方法。
86.实施例四
87.本发明还提供一种计算机可读存储介质,其上存储有程序,程序被处理器执行时实现如实施例一所述的基于http/2的模糊测试方法。
88.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述基于http/2的模糊测试方法。
89.应当理解,在本发明实施例中,所称处理器可以是中央处理模块 (centralprocessing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignal processor,dsp)、专用集成电路(application specificintegratedcircuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器
或者该处理器也可以是任何常规的处理器等。
90.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(random accessmemory,ram)等。
91.以上所揭露的仅为本发明的较佳实例而已,不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,均属于本发明所涵盖的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献