HTTP2于今年2月28日正式通过IETF组织批准发布,正式定稿,那末甚么是HTTP2,HTTP2将给我们带来哪些改变,将对我们的业务和产品产生哪些影响,利用安全研究部的协议分析研究员对此进行了深入的分析。
HTTP是来回“阅读器”与“WEB Server”的协议(即:HTTP Protocol)。
HTTP 0.9
只有基本的文本 GET 功能,具有典型的无状态性,每一个事务独立进行处理。事务结束时就释放这个连接。
客户没法使用内容协商,所以服务器也没法返回实体的媒体类型。
HTTP 1.0(1982年)
面向事务的利用层协议,每次要求/响应,建立并撤除1次连接。
对客户要求响应慢,网络堵塞严重,安全性不佳。
HTTP 1.1(1997年)
流水方式,客户端对同1服务器发出多个要求,并等待这些要求发送终了,再等待响应。
HTTP 1.1的服务器端处理要求时依照收到的顺序进行,服务器端产生中断时,会自动重传要求。也就是我们所说的PipeLine模式。
有内容协商机制,提供了(1)身份验证,(2)状态管理,(3)Cache缓存机制。
HTTP2 (201502)
HTTP 2.0 首个 draft 已于 2012 年 11 月发布,2015年2月正式批准发布。它保证了与 HTTP 1.1 的完全语义兼容,最初斟酌的是 Google SPDY 协议、微软的 SM 协议和 Network-Friendly HTTP 更新。终究各方推荐了 SPDY 协议,并在此基础上进行了相应更新,详细见后面介绍。
?多路复用
1个流上分配多个HTTP要求响应交换,流在很大程度上是相互独立的,由于1个要求上的阻塞和终止不会影响其他要求的处理,相比HTTP1.x协议的PipeLine模式更加灵活。
?HEAD 紧缩
HTTP2中最基本的协议单位是帧。每一个帧都有不同的类型和用处。例如,报头(HEADERS)和数据(DATA)帧组成了基本的http要求和响应。帧包括的HTTP报头字段是紧缩的。HTTP要求有多是高度冗余的,因此紧缩能显著减少要求和响应的大小,相比HTTP1.x传输大量的报文头性能更高。
?服务器推送
添加了1种新的交互模式,即服务器能推送消息给客户端。服务器推送允许服务端预测客户端需要来发送相干数据内容,相比HTTP1.x按要求发送性能更高。
?优先级要求
流量控制和优先级确保正确使用复用流,流量控制有助于确保只传播接受需要的数据,优先级确保有限的资源能被重要的要求使用,相比HTTP1.x按顺序接收数据更加稳定高效。
通过分析发现HTTP1.X和HTTP2协议之间存在较大差异,详细分析以下:
HTTP1.x协议中我们可以很容易提取出HTTP的头部字段,以下红色部份包括要求方法、主机域名地址、援用地址、客户端信息等。图1为HTTP1.x报文内容
GET /ebook/478d1a62376baf1ffc4fad99 HTTP/1.1
Accept: */*
Referer: http://www.csdn.net/article/2014-09⑴7/2821721
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: yuedu.baidu.com
图1为HTTP1.x报文格式
HTTP2协议中报文头可以采取Haffman编码,我们看到的报文头信息都是2进制信息,以下为HTTP2协议的报头帧,对报文帧数据进行解码后内容以下:图2为HTTP2报文格式
图2 HTTP2报文格式
1、还原后报头内容以下:
:authority = localhost:3000
:method = Get
:path = /doc/manual/html/index.html
:scheme = http
:accept = */*
:accept-encoding = gzip,deflate
:user-agent = nghttp..
详细分析以下:
0000 50 52 49 20 2a 20 48 54 54 50 2f 32 2e 30 0d 0a
0010 0d 0a 53 4d 0d 0a 0d 0a 00 0c 04 00 00 00 00 00
0020 00 03 00 00 00 64 00 04 00 00 ff ff 00 39 01 05
0030 00 00 00 01 41 8a a0 e4 1d 13 9d 09 b8 c8 00 0f
0040 82 04 94 62 43 91 8a 47 55 a3 a1 89 d3 4d 0c 1a
0050 a9 0b e5 79 d3 4d 1f 86 53 03 2a 2f 2a 90 7a 8d
0060 aa 69 d2 9a c4 c0 17 6d 71 2d 7f 07 1f
分析还原:
1、连接叙言:
0000 50 52 49 20 2a 20 48 54 54 50 2f 32 2e 30 0d 0a
0010 0d 0a 53 4d 0d 0a 0d 0a
2、设置帧及数据
0010 00 0c 04 00 00 00 00 00
0020 00 03 00 00 00 64 00 04 00 00 ff ff
设置帧及数据内容
设置最大流数为96,滑动窗口大小65535
3、报头帧及数据
0020 00 39 01 05
0030 00 00 00 01 41 8a a0 e4 1d 13 9d 09 b8 c8 00 0f
0040 82 04 94 62 43 91 8a 47 55 a3 a1 89 d3 4d 0c 1a
0050 a9 0b e5 79 d3 4d 1f 86 53 03 2a 2f 2a 90 7a 8d
0060 aa 69 d2 9a c4 c0 17 6d 71 2d 7f 07 1f
41::authority
8a: len = 10 data = a0 e4 1d 13 9d 09 b8 c8 00 0f data dec = localhost:3000
82: :method = Get
04: :path
94: len = 20 data 62 43 91 8a 47 55 a3 a1 89 d3 4d 0c 1a a9 0b e5 79 d3 4d 1f data dec /doc/manual/html/index.html
86: :scheme = http
53: :accept
03 len = 3 data = 2a 2f 2a */*
90: :accept-encoding = gzip,deflate
7a: :user-agent
8d: len = 13 data = aa 69 d2 9a c4 c0 17 6d 71 2d 7f 07 1f data dec = nghttp
? 传统的使用HTTP1.x的爬虫工具没法爬取并获得到HTTP2的网页内容信息。
? 传统的攻防工具使用HTTP1.x的协议没法对HTTP2网站进行渗透测试,没法验证原有攻击是不是有效。
? 利用辨认:目前我们只能辨认到HTTP2,还没法对HTTP2协议进行细分辨认,如目前在HTTP1.x上,我们可以对Youku、爱奇艺等进行细分辨认,但对HTTP2还没法做到细分。
? URL分类:域名分类业务失效,传统的网页爬取工具紧支持HTTP1.x,对HTTP2网页没法还原获得,与此同时URL分类引擎目前只能对HTTP1.x的HOST字段进行提取过滤,暂时不支持HTTP2。
? WAF特点:传统的HTTP1.x的检测特点没法对使用了HTTP2协议的SQL注入跨站等进行检测。
? IDP特点:传统的HTTP1.x的特点没法对使用了HTTP2协议的溢出、扫描等攻击进行检测。
? 病毒特点:病毒特点对HTTP2协议传输的病毒文件将没法进行检测。
使用了上面特点库的产品或项目或多或少都会被HTTP2所冲击,1旦HTTP2被大范围推行使用,这将意味着现网所销售的产品都将全面升级,影响范围巨大。
特点库:在提取辨认和攻击检测规则时要重点斟酌HTTP1.x和HTTP2协议之间的差异,重点斟酌如何提取1个高质量的通用规则。
引擎开发:支持对HTTP2协议的解码审计,目前利用安全研究部正在着手分析并开发对HTTP2协议的解码审计功能,计划在下半年落地到版本中。
产品:将HTTP2协议带来的需求和挑战落入版本,综合斟酌影响,制定输出全网解决方案,在大范围推行使用HTTP2前,将现网版本逐渐升级,以此应对风险和挑战。