HTTP/2 很容易被误认为是一种传输层协议,HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。DANE RFC6698允许域名管理员不通过第三方CA自行发行证书。在本文中,我将介绍由实现漏洞和 RFC 漏洞引起的多种新的 HTTP/2独有的威胁。
首先,我将展示这些漏洞是如何启用HTTP/2排他的不同步攻击的,案例研究的目标是一些知名网站,这些网站的服务器包括亚马逊的应用程序负载均衡器、WAF、CDN和大型科技公司定制的堆栈。这些漏洞通过劫持客户端、木马化缓存、还有窃取凭据来发起攻击。
之后,我将介绍新的技术和工具来破解不同步驱动的请求隧道,一种广泛但被忽视的请求走私(request smuggling)变体,通常被误认为是攻击误报。最后,我将分享HTTP/2引入的多个新的利用原语,揭示新的服务器层和应用层攻击表面。HTTP请求走私在 2005 年第一次被提出, 是一项用于干扰 HTTP 请求的技术,网站会处理来自用户的多个 HTTP 请求,使用 request smuggling 可以干扰其他用户的请求。 请求 smuggling 漏洞在实践场景中经常发生,允许攻击者绕过控制,获得未授权的数据,并且直接攻陷应用的其他用户。
HTTP / 2攻击
使用HTTP/2的第一步是学习协议基础。
我通过从标头开始编写 HTTP/2 客户端来开始这项研究,得出的结论是,对于本文中描述的攻击,我们可以忽略许多低级特性的细节,如帧和流。
虽然HTTP/2很复杂,但它被设计用来传输与HTTP/1.1相同的信息,这是两个协议中表示的等效请求。
HTTP / 1.1:
HTTP / 2:
假设你已经熟悉了HTTP/1,那么你只需要理解三个新概念。
伪造的标头文件
伪造的标头文件(pseudo header),通常有TCP伪首部和UDP伪首部。在UDP伪首部中,包含32位源IP地址,32位目的IP地址,8位协议,16位UDP长度。通过伪首部的校验,UDP可以确定该数据报是不是发给本机的,通过首部协议字段,UDP可以确认有没有误传。
在HTTP/1中,请求的第一行包含请求方法和路径。HTTP/2用一系列伪造标头文件替换请求行。这五个伪造标头很容易识别