HEIST是一项新的HTTP/2协议漏洞,它能从HTTPS通讯中盗取加密内容。安全专家Michael Cobb将在下文解释此种攻击的实现原理以及如何阻止这种攻击。
HTTP/2协议设计的初衷是为改进安全和性能,但这也显然会使威胁因素能够造成更大的破坏。在2016年的美国Black Hat大会上,来自比利时鲁汶大学(University of Leuven)的博士研究员Tom Van Goethem和Mathy Vanhoef披露了一种基于网页的,能够仅仅利用JavaScript从HTTPS通讯中盗取加密信息的攻击方式。直到今天,例如CRIME和BREACH这样面向安全嵌套层SSL和传输层安全协议TLS的攻击方式,需要攻击者能够观察和操纵受害者以及他们所访问的网站——即中间人攻击,使得攻击者不那么容易找到漏洞。研究人员发现的这种名为HEIST的攻击方式,只要受害者访问了被攻击者控制的中间站点或仅仅是基于JavaScript的广告页,“HTTP加密信息就能够通过TCP窗口进行盗取”,从而使用户的隐私遭受到威胁。更糟糕的是,HEIST攻击能够利用HTTP/2协议的特征来提升攻击的速度。
HEIST是一种HTTPS上的旁路攻击方式。其本身并不会真正打断终端加密过程,然而通过将弱点和未知行为加入到与浏览器、HTTP、SSL/TLS以及TCP的交互过程中,可以在不同源应答的浏览器中发现有关交换数据的大量信息,进而猜测其中传输的内容,即使这些内容是加密的并且通过HTTPS发送。其工作原理是通过破解在TCP上的HTTPS应答方法来测量单一HTTPS应答的长度。JavaScript代码是不允许获取返回的应答中的数据长度,然而HEIST所应用的JavaScript使用了两个新的应用程序接口——HTML5资源定时器以及获取来生成开始和结束时间,而这些内容能够从加密的应答中推测到。一旦攻击者掌握了加密应答的长度,他便可以使用BREACH或CRIME攻击的方式来直接获取其中的明文信息。网站通常使用的文件压缩的方式来降低传输的数据量,从而使页面能够更快地载入,而BREACH和CRIME攻击方式均可以通过操纵压缩的方式来对网站载荷进行解密。
如果页面上有重复的信息,服务器只会发送信息一次。HEIST脚本会向网站发送多次请求,通过改变每个请求的字节内容,试图匹配的页面上的区块信息,这其中就包括密码或银行帐户号码。猜测块中的数据的尝试如果是错误的,其结果会导致数据体积的增大,而如果猜测与数据块匹配,数据将不会有明显的体积增加,这是因为压缩功能不会发送重复的数据块。重复这一过程,并分析数千次该过程产生的每个应答的数据尺寸,将允许脚本最终确定包含在网页上的明文信息。这种类型的攻击可能需要一段时间,但如果页面是使用HTTP/2协议加载的,攻击所花费的时间将大大减少,因为所有的请求都是包含在某一单一的HTTP/2连接中。同时HTTP/2所使用的压缩格式hpack,使得预测头帧长度更加容易。
HTTP/2是面向超文本传输协议15年来的首次主要升级。其主要目标在于改进网站性能,但结果是其安全性有可能被弱化,HTTP/2中的新特性将毫无疑问地增加黑客可利用的攻击面。Imperva的报告中讨论了HTTP/2协议中相关的四项漏洞以及攻击向量:“HTTP/2:下一代Web协议中四项主要缺陷的深入分析”,其中两项已经可以确认在HTTP/1.x版本中就已存在。尽管没有哪种技术能够完全确保敏感信息的安全,然而HTTPS是安全讯通的核心因素,任何可破解的漏洞都会将整个网络置于危险之中。
在有关HTTP/2的深入研究面世前,延迟HTTP/2协议的实施也许是存放敏感数据网站的最佳选择。那些想要利用HTTP/2协议优势以提升页面访问速度的管理员们,应该在升级前确保所有已知漏洞均被修复。大多数网站仍无法阻止BREACH攻击,并且尽管尚无BREACH已经成功盗取真实账户的报告,基于HEIST的攻击可能会改变这种情况。Van Goethem与Vanhoef的研究报告中详细阐明了HEIST的攻击方法。如Qualys的SSL server这样的在线工具能够检查网站是否能够抵御BREACH或类似攻击方法。
HEIST攻击方法若要奏效,网页必须在自己的内容中包含或反映浏览器的部分请求,且用户必须启用JavaScript以及第三方cookies。如果实际环境中有报告称HEIST已经成功实施,用户应该考虑打开主流浏览器均提供的隐私浏览模式。这一功能会禁用第三方cookies,使HEIST脚本无法通过HTTPS保护的网页的验证。然而,由于会阻止浏览器中JavaScript的执行,这将使许多网站无法访问。