【技术分享】SSL Stripping攻防之道

http://p8.qhimg.com/t01d7021691ca2ede61.jpg

译者:shan66

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

几天前,安全研究人员又发现了一种新型的无线网络攻击方法——KRACK攻击,并且这种攻击对当前所有Wi-Fi网络安全加密协议而言,都构成了严重的威胁。通过KRACK攻击,攻击者可以拦截利用WPA2协议提供安全保护的无线网络流量。虽然可以通过安装相应的安全补丁来缓解该漏洞造成的影响,但是我们都知道,要想普遍安装安全更新的话,也不太现实。

在发现该漏洞之前,人们根本就没想到无线网络竟然存在这种窃听方面的漏洞。当前,有一些无线网络还在继续使用过时的安全协议(称为WEP),尽管该协议显然“根本就不安全”;同时,另外一些无线网络(例如咖啡店和机场的无线网络)仍然是完全开放的,它们根本就不对用户进行身份验证。一旦攻击者获得对网络的访问权限,他们就可以作为中间人来窃听网络上的连接(使用称为ARP缓存中毒和DNS劫持的策略)。是的,这些窃听手段可以轻松地部署到有线网络,如果他们可以访问以太网端口的话。

毫无疑问,盲目信任将用户连接到互联网的媒介是很危险的。因此,人们利用HTTPS来对HTTP流量进行加密传输,但是KRACK攻击的作者提供了一个视频演示,演示了如何在流行的交友网站上彻底剥离加密处理(尽管该网站支持HTTPS)。在本文中,我们将详细介绍如何剥离HTTPS的加密保护,以及针对这种攻击的防御机制。

HTTP over TLS

我们知道,互联网是建立在一系列网络标准的基础之上的,其中某些组件在经过重构和重建之后,会继续出现在新颁布的网络标准当中。当发现一个标准存在缺陷时,人们会对其进行修补,或者用新的标准替换它。随着标准的不断修正或被更好的标准所替代,互联网作为一个整体会变得越来越好。 

HTTP协议最初用于以明文形式在互联网上传输数据。在官方引入HTTP 1.0之前,HTTP协议第一个有文档记载的版本被称为HTTP V0.9,并于1991年颁布。Netscape是第一个意识到需要为在互联网上传输的信息提供更高级别的安全保障的公司,并于1994年中期,为Netscape浏览器提供了HTTPS。为了实现更高的安全级别,人们后来又创建了一种称为SSL(安全套接字层)的技术。

由于存在一些安全问题和缺点,导致SSL 1.0如昙花一现(甚至没有来得及正式标准化)。该协议随着SSL 2.0和SSL 3.0的到来而逐步更新;之后,它被TLS(传输层安全)标准所逐步替代。

http://p7.qhimg.com/t015f0e86c08ec517a5.png

当然,对于这些协议来说,每个版本都有不同的安全局限性,并且不同的浏览器会支持不同的版本。另外,这些协议所使用的加密算法,与上层协议相对独立。因此,确保任何支持HTTPS的Web服务器都设置为使用在浏览器支持与安全性进行权衡后的最优配置是至关重要的。这方面的详细内容,本文不做介绍,如果读者有兴趣的话,可以阅读SSL实验室文档中关于SSL和TLS部署方面的最佳做法的相关说明。

在使用HTTP over TLS后,就不再通过http://与网站建立连接,而是使用加密形式的https://建立连接。这样一来,就可以在保密性和完整性方面提供合理的保护;换句话说,我们不仅会加密发送的消息,同时还能确保收到的消息没有被篡改。当建立安全连接时,Web浏览器栏会变为绿色,以此来提示用户当前使用的是加密传输。

http://p0.qhimg.com/t01c643087158794497.png

由于SSL证书本身是由证书颁发机构签署的,因此能够进行一定程度的“域验证”——证书颁发机构保证只让有权对网站进行更改的人拥有的证书通过认证。这样就能够在一定程度上确保证书不会被发送给窃听网络流量的攻击者了。如果证书认证失败,则可以使用证书吊销列表来撤回证书。然后,这些列表将被现代操作系统自动下载,以确保当提供的证书无效时,在浏览器中将其标记为不安全的网站。由于许多(> 100个)证书颁发机构都有权颁发SSL证书,因此可以通过配置CAA DNS记录构建一个whitelist,指出哪些证书颁发机构可以为哪些给定的域颁发证书。

http://p8.qhimg.com/t012a35482de3f4b1e7.png

现在,SSL配置过程已经非常简单了,例如:当您的流量通过Cloudflare网络进行代理时,我们将动态管理您的证书更新和签名(同时使用Cloudflare的Origin CA生成证书,对返回原始Web服务器的流量进行加密)。类似地,EFF提供了一个名为CertBot的工具,不仅让安装更简便,并且还能够从命令行生成加密证书。

使用HTTPS时,它的优点是会利用HTTPS来加载网站的所有内容,而不仅仅是登录页面。在此之前,网站通常做法是刚开始通过安全加密连接提供登录页面,当用户登录时,它们会将连接退化为HTTP。登录网站后,会话cookie被存储在本地浏览器中,网站借此确保用户处于登录状态。

2010年,埃里克·巴特勒(Eric Butler)通过拦截工具FireSheep展示了这种处理方式存在的安全缺陷。通过窃听无线连接,FireSheep能够捕获常见网站的登录会话。虽然攻击者不一定能够捕获网站的密码,但是他们不仅能够捕获登录会话,并且还能如同已经完成登陆那样在网站上执行某些操作。此外,他们还可以在用户登录时拦截流量。

当使用SSL连接到网站时,第一个请求通常将用户重定向到网站的安全版本。例如:当您第一次访问http://www.cloudflare.com/时,HTTP 301重定向用于将您发送到该站点的HTTPS版本,即https://www.cloudflare.com/。

这就带来了一个严重的问题。如果有人能够拦截对该站点的HTTP版本的未加密请求,那么他们是否可以剥离加密,并让该站点以不加密的形式为用户提供服务?这正是Moxie Marlinspike所研究的问题,后来导致了HSTS的诞生。


HTTP Strict Transport Security (HSTS)

在2009年的Blackhat DC大会上,Moxie Marlinspike展示了一种称为SSLStrip的工具。该工具能够拦截HTTP流量,并且每当发现用户被重定向到站点或使用HTTPS连接到站点时,它能够透明地将其剥离。

这种情况下,受害者并没有直接连接到网站;相反,受害者将被连接到攻击者那里,然后,攻击者会与该网站建立连接。这种攻击手法就是所谓的中间人攻击。

SSLStrip的神奇之处在于,只要在未加密的HTTP连接上发现一个HTTPS网页的链接,它就会使用HTTP替代HTTPS,并坐在中间拦截连接。拦截器会通过HTTPS与Web服务器建立加密连接,并将流量以未加密的形式传输给站点访问者(在此过程中,它会记录所有感兴趣的密码或信用卡信息)。

为了应对这种攻击,人们在2012年创建了一个称为HTTP Strict Transport Security(HSTS)的协议,并在RFC 6797中对该协议做了详细的规定。该协议的工作原理是,让服务器使用一个名为Strict-Transport-Security的特殊头部进行应答,其中包含一个响应消息,告诉客户每当重新连接站点时,必须使用HTTPS。该响应中包含一个“max-age”字段,存放的是一个以秒为单位的数值,它代表着HSTS Header的过期时间。

虽然这样做有助于防止拦截攻击,但并不完美,还是存在一些缺点。


HSTS Preloading

HSTS的一个缺点是,它需要通过先前的连接才能知道可以安全地连接到特定的站点。当访问者初次连接到网站时,他们不会收到要求始终使用HTTPS的HSTS规则。只有在后续的连接中,访问者的浏览器才会收到要求他们通过HTTPS进行连接的HSTS规则。

除此之外,HSTS还面临着其他类型的攻击,例如通过劫持用于同步计算机时间的协议,可以将计算机的日期和时间设置为将来的时间。当HSTS规则已过期后,可以将日期和时间设置为任意值,从而绕过HSTS。

HSTS Preload Lists是一种解决这些问题的潜在方案,其工作原理是把只能使用HTTPS连接的网站硬编码到一个列表中。启用HSTS的网站可以提交到hstspreload.org的Chrome HSTS Preload Lists中;它可以作为其他浏览器中采用的预加载列表的基础。

在Google Chrome的源代码中,有一个文件中保存了相关的硬编码文件,其中列出了“预加载列表”中所有域的HSTS属性。每个条目都使用JSON进行了格式化,例如:

http://p0.qhimg.com/t016b40bd2628504322.png

即使采用了预载技术,事情还不完美。假设有人正在阅读介绍各种图书的博客,那么在该博客上通常会有一个可以从在线零售商那里购买图书的链接。尽管在线零售商通过HSTS强制使用HTTPS,但是仍可能遭受中间人攻击,致使该博客实际上并没有通过HTTPS与在线零售商建立连接。


故事还在继续

后来,Leonardo Nve又开发了一款名为SSLStrip+的软件,它实际上是SSLStrip更新版,SSLStrip+具有绕过HSTS的能力。当站点通过未加密的HTTP进行连接时,SSLStrip+就会查找相关的HTTPS连接。当发现网站的HTTPS连接时,会将其重写为HTTP,并将该域重写为HSTS Preload列表之外的、与原来比较相似的域。

例如,假设一个网站包含一个指向https://example.com/的链接,HSTS可以通过将URL重写为http://example.org/来完成加密的剥离;攻击者位于两者中间,从http://example.org/接收流量,并将其代理到https://example.com/。

这种攻击也可以针对重定向:假设http://example.net/通过HTTP进行加载,然后重定向到通过HTTPS加载的https://example.com/。通过重定向,可以将受HSTS保护的合法站点重定向到一个手机域,供攻击者通过它以HTTP提供流量,然后加以拦截。

随着越来越多的互联网开始启用HTTPS,这种攻击的用武之地将会越来越小,因为可拦截的未加密HTTP数据流量也越来越少了。

在最新发布的Google Chrome版本(version 62)中,利用不安全连接提供输入表单(如信用卡表单和密码字段)的网站会向用户显示未“不安全”的站点。在隐身模式(隐身浏览)模式下,Chrome会将所有未使用HTTPS得网站都显示为不安全的站点。

http://p6.qhimg.com/t019660054df0aa73d0.png

这种警告能够帮助用户弄清楚登录时HTTPS是否已从网页上剥离。此外,这样做的另一个目的,是希望更多的网站能够采用HTTPS,从而提高整个互联网的安全性。


小结

在这篇文章中,我们讨论了从网站上剥离HTTPS的相关机制,特别是HSTS在这方面的影响。值得注意的是,对于各种HTTPS规范和某些加密算法来说,还存在其他潜在的攻击向量,但是本文没有对其进行介绍。

尽管HTTPS提供了一种加密网络流量的机制,但为了确保该机制的实施,需要落实诸如HTTP Strict Transport Security等技术,这是非常重要的,同时,最好将您的站点提交到HSTS预加载列表中。随着越来越多的网站实现了上面的这些措施,互联网整体的安全性也将得到更大的提高。

要想深入理解现实中HTTPS和HSTS的实现方式,我强烈推荐阅读Troy Hunt的文章:The 6-Step "Happy Path" to HTTPS。他在该文章中介绍了如何在实践中启用强大的HTTPS,另外还介绍了一种本文没提及的、称为CSP(内容安全策略)的技术。 CSP允许人们通过HTTPS加载页面时进行自动升级或阻止HTTP请求,因为这会引发另一个攻击向量。

(完)