HTTP2技术变革的冲击和影响分析
HTTP2于今年2月28日正式通过IETF组织批准发布,正式定稿,那么什么是HTTP2,HTTP2将给我们带来哪些改变,将对我们的业务和产品产生哪些影响,应用安全研究部的协议分析研究员对此进行了深入的分析。
HTTP协议发展及特点
HTTP是往返“浏览器”与“WEB Server”的协议(即:HTTP Protocol)。
HTTP 0.9
只有基本的文本 GET
功能,具有典型的无状态性,每个事务独立进行处理。事务结束时就释放这个连接。
客户无法使用内容协商,所以服务器也无法返回实体的媒体类型。
HTTP 1.0(1982年)
面向事务的应用层协议,每一次请求/响应,建立并拆除一次连接。
对客户请求响应慢,网络拥塞严重,安全性不佳。
HTTP 1.1(1997年)
流水方式,客户端对同一服务器发出多个请求,并等待这些请求发送完毕,再等待响应。
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
协议,并在此基础上进行了相应更新,详细见后面介绍。
HTTP2协议的优势
?多路复用
一个流上分配多个HTTP请求响应交换,流在很大程度上是相互独立的,因为一个请求上的阻塞和终止不会影响其他请求的处理,相比HTTP1.x协议的PipeLine模式更加灵活。
?HEAD 压缩
HTTP2中最基本的协议单位是帧。每个帧都有不同的类型和用途。例如,报头(HEADERS)和数据(DATA)帧组成了基本的http请求和响应。帧包含的HTTP报头字段是压缩的。HTTP请求有可能是高度冗余的,因此压缩能显著减少请求和响应的大小,相比HTTP1.x传输大量的报文头性能更高。
?服务器推送
添加了一种新的交互模式,即服务器能推送消息给客户端。服务器推送允许服务端预测客户端需要来发送相关数据内容,相比HTTP1.x按请求发送性能更高。
?优先级请求
流量控制和优先级确保正确使用复用流,流量控制有助于确保只传播接受需要的数据,优先级确保有限的资源能被重要的请求使用,相比HTTP1.x按顺序接收数据更加稳定高效。
HTTP1.x与HTTP2报文头差异
通过分析发现HTTP1.X和HTTP2协议之间存在较大差异,详细分析如下:
HTTP1.x
HTTP1.x协议中我们可以很容易提取出HTTP的头部字段,如下红色部分包括请求方法、主机域名地址、引用地址、客户端信息等。图1为HTTP1.x报文内容
GET
/ebook/478d1a62376baf1ffc4fad99 HTTP/1.1
Accept: */*
Referer: http://www.csdn.net/article/2014-09-17/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
HTTP2协议中报文头可以采用Haffman编码,我们看到的报文头信息都是二进制信息,如下为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
HTTP2产生的影响
工具的影响
? 传统的使用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所冲击,一旦HTTP2被大范围推广使用,这将意味着现网所销售的产品都将全面升级,影响范围巨大。
应对策略
特征库:在提取识别和攻击检测规则时要重点考虑HTTP1.x和HTTP2协议之间的差异,重点考虑如何提取一个高质量的通用规则。
引擎开发:支持对HTTP2协议的解码审计,目前应用安全研究部正在着手分析并开发对HTTP2协议的解码审计功能,计划在下半年落地到版本中。
产品:将HTTP2协议带来的需求和挑战落入版本,综合考虑影响,制定输出全网解决方案,在大范围推广使用HTTP2前,将现网版本逐步升级,以此应对风险和挑战。