7.3 防御中间人攻击
中间人攻击很难防御。这种攻击通常发生在受害人可控范围之外;处理得当的话,它甚至不会留下任何明显的可能引起受害者注意的痕迹。MITM通常只是更邪恶的攻击如SSL strip的前奏而已。防御MITM攻击的一种常见方式是保证网站使用的都是SSL/TLS 3.0。换句话说,确保网站都是通过HTTPS或HTTP安全连接访问。验证HTTPS并非我们看到的在绿色的地址栏上带上一个加锁的图标那么简单,因为攻击者可以向受害者提供证书服务,使得那个会话看上去像是安全的。
要正确验证一个HTTP会话,你需要检查该证书,看看证书的认证机构,这步额外的工作量将许多用户挡在了验证会话的安全性的门外,也使得这种攻击方式非常有效。
上面的截图显示的是由谷歌互联网认证机构(Google Internet Authority) 颁发的Gmail SSL证书。听起来很权威,但谁是谷歌互联网认证机构 呢?我能信任它么?它真的就是谷歌么?这个例子中,在谷歌互联网认证机构之上还有另外一个名为Equifax安全证书认证机构(Equifax Secure Certificate Authority) 的证书认证机构。Equifax在颁发证书之前会做大量的检查和权衡,以确保该公司是一个有效的实体。在确认了是Equifax生成的这张证书后,我更有信心可以信任这张证书了。
归根结底,HTTPS构建在信任的概念之上。更严格地说,这个问题的本质是相信颁发该证书的证书认证机构是有效和合法的。在实验环境中,我们经常能看到各种触发Web浏览器警报的自签名证书。用户访问网站时经常会弹出一个烦人的弹出窗口,它作为证书认证机构不可信时发出警告的一个途径,表明可能存在MITM攻击的风险。
经过加密的虚拟专用网络(VPN,Virtual Private Network) 是防止中间人攻击的另一个途径。在进行公网IP地址掩码运算时,将所有通过你的设备收发的数据都加密,经过加密的VPN可以保证你所在的网络不会被除了VPN提供商之外的任何人监测或记录。
VPN可以使用强认证方法,例如使用双重认证——它可以包含一重用户名和密码认证,外加其他某种认证方式,如一次性密码(OTP,One-time Password) 、口令(Token),或是证书。这使得攻击者很难窃取其他用户建立VPN连接需要的认证信息。
VPN能够使用一些加密方法,如PPTP、L2TP、SSL和IPSEC。SSL和IPSEC类型的VPN相比其他类型的协议提供了更加安全的数据保护,因为它们采用了强加密协议。
VPN可以由私有或公共组织提供。VPN提供商有可能可以检查你的数据流,他们是受信任的服务提供商。因此,在使用VPN这方面,信任问题依然非常重要。你必须先确认是否信任你的VPN服务提供商来帮你保护数据和隐私。你的数据安全掌握在服务提供商的手中。
其他也可用来防御MITM攻击的技术包括媒介访问控制安全(MACsec,Media Access Control Security) 和802.1x。这些方法采用了先进的网络技术来提供源地址认证、数据完整性以及数据在网络中传送时的加密。这两种方法都要求保证数据兼容性,并且为了有效使用必须正确启用。
防御SSL strip
SSL strip(参见第3章 ),它允许攻击者剥离网站的加密部分,查看受害者的会话信息,包括机密信息。通常SSL strip会跟其他类型的攻击连在一起,如中间人攻击等;也就是说,黑客会抓取所有数据流,并除去SSL加密部分,这样所有信息都会暴露在黑客的网络嗅探工具中。我们曾在本书第5章 中介绍过相关内容。
要抵御SSL strip攻击,就要理解SSL strip是如何对受害者进行漏洞利用的。该攻击利用的是会将用户从未加密部分重定向到加密部分的网站。当你浏览http://www.facebook.com 或http://www.gmai.com 时,你会注意到你将被重定向到https://www.facebook.com 和https://www.gmail.com 。SSL strip会破坏重定向的过程,强制受害者使用该网站的非安全版本。而且,即使该站点没有非安全版本,但仍然有重定向,SSL strip也会截获该HTTP请求,将用户请求转发给HTTPS站点。当受害者这么做时,攻击者就能查看受害者的整个会话。
对抗SSL strip攻击的一种方法是保证网站没有非安全版本,并且他们不实现重定向功能。这么做可以阻止SSL strip攻击,因为这里不存在重定向的可能性。在受害者被攻击时,他们仅仅只是无法访问网站。站在现实生活中可实现的角度看,我们知道这是很难加强的部分。人们已经习惯了输入不安全的HTTP请求,并且在需要加强安全时自动重定向。还有,许多公司并不希望用户因为没有访问他们网站的安全版本而以为他们的网站宕机了。所以最好的保护SSL strip的方式是教育用户网络攻击是如何进行的,这样他们就能识别出来。
除此之外,我们前面列出的针对中间人攻击的防御方法也可用于防御SSL strip攻击。这么做有效的原因是SSL strip攻击依赖于中间人攻击才能进行。