APP下载

SSLStrip攻击原理与防范

2016-05-18倪健寒韩啸

电脑知识与技术 2016年9期

倪健寒++韩啸

摘要:由于在无线局域网环境下,ARP Spoof可以轻易完成对客户端的欺骗,使其误将攻击者视为网关,从而被攻击者截获大量明文传输的数据报文。因此,对重要数据进行加密传输的HTTPS协议应运而生。尽管HTTPS协议采用SSL进行加密可以基本杜绝信息泄露,但其并非无懈可击。SSLStrip利用用户键入网址的习惯进行中间人攻击就是一个典型例子。有鉴于此种攻击的难度低、实现率高,该文对其进行了探究,并基于HTTP Proxy、Cookie Proxy、拓展DHCP给出了相应的防范措施。

关键词:SSLStrip;中间人攻击;Cookie Proxy;DHCP

中图分类号:TP393.1 文献标识码:A 文章编号:1009-3044(2016)09-0068-04

1 引言

根据IEEE802.11协议簇,工作在2.4Ghz频段的Wi-Fi能够提供高达300-600Mbps传输速率的无线网络。良好的覆盖范围与众多的应用场合使得越来越多的家庭、企业将其作为接入Internet的首选布网方式。轻便、智能、快捷的同时却也带来了一定的安全隐患。

由于无线信道的共享属性。所有人均可以在一定工具的帮助下拦截、捕获、篡改WLAN中传输的明文数据报文。其大致方法为:通过ARP Spoof使客户端误将攻击者视为无线局域网中的网关;然后用同样的方法使局域网网关误将攻击者视为客户端;最后便可以抓取客户端与网关之间的所有明文数据包。这显然是对用户隐私的不尊重。

为了保护用户重要的数据在无线局域网中传输时不被监听,HTTPS协议应运而生。由于缺乏有效的SSL证书与正确的密钥,一个正在进行中的SSL会话是很难被监听和攻击的。当然,这只是在SSL会话正在进行的过程中是这样,那么,如果一个SSL会话还没有建立之前也是这样吗?考虑一种情形,用户在键入http://content时被服务器要求跳转至相应的https://content网页,在这一过程中,由于SSL会话尚未建立,所有的数据报文仍然明文传输,所以是存在被攻击的可能的。SSLStrip攻击就是在这种假设上完成的。

客观上讲,这种假设是普遍存在的。人们在访问一个网站时出于便捷的考虑会首选短网址进行输入,而不会在乎http与https的差别。因此,SSLStrip攻击具有难度低,实现率高的特点。在防范措施上,宣传并要求用户自觉输入https://content固然为一种办法,但是出于减轻用户负担的考虑,本文进一步研究了HTTP Proxy、Cookie Proxy、拓展DHCP这三种防范措施。

HTTP Proxy在客户端创建了一个数据库和一定的匹配策略,该数据库会自动记录用户浏览过的所有HTTPS网站的SSL配置信息。当用户再次访问相同的网站时会根据匹配策略比对当前网站的SSL配置信息和数据库中的SSL配置信息,得出客户端是否存在被攻击的结论,从而对当前访问的网站做出放行或阻止的行为。鉴于HTTP Proxy数据库无法检测未访问过的网站,而且匹配策略也可能较为庞大,本文进一步改进该方案:将数据库与匹配策略均放置于服务器端,通过爬虫自动补充SSL配置信息,从而提高匹配精确度。

Cookie Proxy采用了一个安全cookie 协议和增设了安全LAN代理与安全服务器代理的网络拓扑。其防范策略为:如果安全LAN代理检测到客户端发送的是HTTP请求而安全服务器代理中存储的相同Cookie ID的set-cookie为HTTPS类型,那么就可以认为客户端已经遭受中间人攻击,请求被立刻抛弃。

拓展DHCP则利用SSLStrip攻击中必须欺骗客户端把攻击者视为网关这一事实,利用DHCP确认消息在客户端的ARP缓存中绑定局域网网关的IP与MAC地址,从而有效阻止攻击的实现。

本文的研究思路为:首先介绍与SSLStrip相关的理论工作,并通过Kali下的实验予以展现;接着逐一介绍三种防范措施;最后对全文进行总结。

2 SSLStrip的相关理论与工作

伴随着互联网的不断发展,人们越来越多地使用网络来进行交流和娱乐。然而,在网络不断地融入人们生活方方面面的同时,网络安全问题也渐渐地显现了出来。近年来,越来越多的网络公司开始关注网络安全,例如Google、Baidu这些大型搜索引擎,诸多的电子商务网站(银行、邮箱、公司网站等)和大部分政府机关网站,都采用了HTTPS来加密用户与网站服务器之间的链接,从而保障用户的私密信息不会被盗取。

超文本传输安全协议(HTTPS)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议(HTTP)进行通讯,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。SSL/TLS,即传输层安全协议,目的是为互联网通信,提供安全及数据完整性保障。其原理为利用非对称加密演算来对通讯方做身份认证,之后交换对称密钥作为会谈密钥(Session key)将通讯双方交换的数据做加密,以保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

SSL/TLS采用TCP传输协议接收和发送数据,并且采用不对称加密技术实现双方身份的鉴别和信息的秘密完整传输。当我们建立一个HTTPS链接的时候,客户端与服务器端就开始进行握手过程。首先双方通过交换各自信息来鉴别身份。其中,由客户端先提供认证信息给服务器端并由服务器进行验证,之后由服务器返回证书给客户端验证,待验证通过后双方将建立起SSL/TLS链接并且双方将通过各自拥有的公钥私钥加密证书并生成一个会话密钥。最后通过该密钥进行加密会话,从而保证会话内容全程加密,不会被第三方监听或干扰。

目前,在浏览器、电子邮件、即时通讯、VoIP、网络传真等应用程序中,广泛支持SSL/TLS协议。主要的网站,如Google、Facebook、Twitter等也以SSL/TLS协议来创建安全连接,发送数据。SSL/TLS已成为互联网上保密通讯的工业标准。这很大一部分程度上杜绝了用户的隐私信息的泄露。然而,HTTPS本身也并非无懈可击,随着对HTTPS的研究的不断深入,针对其的攻击方法也日渐增多,这些攻击不仅仅让用户的隐私受到威胁,同时也阻碍了互联网安全的发展。其中最典型的一种攻击方式就是中间人攻击(MITM)。

所谓中间人攻击,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。目前,主流的攻击方式有SSL劫持攻击、SSLStrip攻击以及漏洞攻击等。由于HTTPS所使用的证书颁发者必须是经过认证的对象,因此如果使用SSL劫持攻击则必须让用户信任攻击者自己签发的证书,这使得该攻击的成功率大大降低。鉴于目前针对HTTPS的漏洞攻击尚不成熟,本文就着重来探讨SSLStrip的攻击实现方式,以及针对该类攻击的防御措施。

SSLStrip,是一种不针对任何程序错误,而是基于HTTPS体系实现的攻击方式。其原理为基于多数用户不会主动请求SSL协议来保护自己和服务器之间的通信,从而不会主动在浏览器中输入https访问域名。但是由于http跳转https往往是通过服务器端302重定向实现,因此本攻击方式就抓住了这个特点,在用户端接受到跳转信息之前通过明文HTTP协议去除掉HTTPS跳转的过渡,从而使得原先本应被加密的信息都明文呈现在了攻击者的面前,使得攻击者能够自由获取需要的信息。

具体的实现步骤如下:

(1) 攻击者利用ARP欺骗等方式成功监听客户端;

(2) 客户端向服务器端发送http请求,第三方攻击者如实转发请求;

(3) 服务器端回复https链接给客户端,攻击者收到请求并将该链接篡改为http链接回复给客户端;

(4) 客户再次发送http请求给服务器端,攻击者将其改为https发送至服务器端;

(5) 至此,客户端与攻击者就建立了一个http明文链接,攻击者与服务器端建立了https加密链接,客户端的所有信息都暴露在了攻击者的视野之下。

实现过程展示如下:

3 SSLStrip在Kali上的实现

实现步骤如下:

(1)开启Kali Linux,打开命令行,输入echo 1 > /proc/sys/net/ipv4/ip_forward打开数据包转发功能;

(2)更改iptables,将所有80端口的TCP数据全部转发至另一未用端口以便监听(图中设定8080端口);

(3)输入ifconfig,查看本机的ip并且确认自己即将攻击的主机的ip以及自己所处局域网内的路由器的ip地址;

(4)利用Ettercap工具进行ARP欺骗。根据步骤3的信息,首先选择需要嗅探的网卡,此处为eth0,因此选择sniff > unified sniffing > eth0,之后扫描需要被攻击的Host,选择Hosts > scan for hosts >hosts list。选择Target 1,即刚刚选定的需要攻击的主机IP(此处为192.168.1.111),Target 2,即网关IP(此处为192.168.1.1),实现双向欺骗从而能够监听双向的数据包;

(5)待成功进行ARP欺骗后,打开sslstrip开始监听8080端口,输入:sslstrip –p –l 8080。

(6)之后另开一个命令行,键入tail -F sslstrip.log查看监听日志;

从上图中可以看到,针对豆瓣的登陆网址(accounts.douban.com),客户端发送的信息原本是以https协议加密传输,被全部转换至http明文并成功被SSLStrip监听和记录(form_email=123@126.com&form_password=123456),并且客户端没有任何错误或警告信息提示。

至此,一个完整的SSLStrip攻击过程结束,第三方攻击者成功获取到了用户的登录信息并且客户端没有发现任何异常。

由此可见,SSLStrip的攻击方式非常简单,只需利用ARP欺骗监听同一网段下的受害者主机和网关,将所有主机到网关的HTTPS协议数据包篡改为HTTP协议的数据包即可实现数据的获取。经过多次的测试,我们发现很多大型邮箱服务网站(163.com、126.com、mail.qq.com等)都可以通过SSLStrip攻击获取用户的账号密码。由于没有使用SSL劫持攻击,所以不会产生浏览器证书报错或是HTTPS协议中包含HTTP明文内容的问题,从而能让用户在丝毫都没有察觉到信息被监听的情况下获取到用户的隐私。可以看出,整个攻击的行为应用了多种协议的攻击手段,效果非常明显。

当然,除了ARP欺骗受害者主机与网关这种方式以外,还可以通过其他方式来截获数据包并进行篡改,例如DNS欺骗、设置代理等。总而言之,通过多种方式攻击方式结合SSLStrip,可以成功将原本用户端发送的HTTPS加密的内容转换为HTTP明文内容,并被第三方攻击者监听获取。所以说,防范SSLStrip此类攻击方式,显得非常重要。

4 基于HTTP Proxy的防范措施

HTTP Proxy的核心为数据库和匹配规则。传统上,数据库与匹配规则均存储在客户端中,数据库负责记录浏览过的所有HTTPS站点的SSL配置信息,匹配规则负责比对当前浏览的网站所使用的SSL配置信息与数据库中的配置信息,从而做出客户端是否已经遭受中间人攻击的结论。为了提高效率与精确率,本文认为:可以将数据库与匹配规则均放置于服务器端,由爬虫定期更新SSL配置信息与匹配规则,从而减轻客户端负担。

由于传统的HTTP Proxy建立在客户端,因此存在如下假设:用户在大多数情况下都处在安全的网络环境之下,由此拥有足够的样本去建立一个数据库,告诉客户端在当前浏览的网站中,应该存在或不存在什么特征。从而为匹配规则建立相应的基础。基于此种特征,该防范策略将同样适用于动态网站。

History Proxy中内嵌三个模块,分别是:分析模块,用来解析浏览器发出的请求以及服务器的响应信息;检测模块,用来监测不符合检测规则的所有请求和回应,从而认定当前页面是否安全;私密数据跟踪模块,在中间人检测器出错的情况下用来防止私密数据的泄露。

其中,私密数据跟踪模块基于以下事实做出判断:所有登陆框都应使用HTTPS进行传输,因此,如果在HTTP数据流中发现用户键入的账号密码,那么,我们就可以断定攻击者绕过了客户端的HTTP Proxy检测规则。此时只要断开连接即可避免损失。根据上述描述,我们在客户端增加一段JavaScript代码,将用户在登陆框中键入的账号密码加密后发送至HTTP Proxy的一个数组中。之后,私密数据跟踪模块将检查所有POST出去的数据,如发现存在与数组中存储的私密数据相匹配的明文账号密码则立刻断开该链接。

下面针对不同的HTTP消息谈论检测模块所应包含的规则:

①HTTP Moved消息:如果攻击者能够成功阻止Moved消息,那么将导致HTTP跳转HTTPS无法完成。表1列举了可能的修改以及它们是否被检测规则所允许:

表1 HTTP Moved Messages 检测规则

[当前响应\& 修改情况以及是否允许\&跳转到HTTPS域名\&无修改,允许跳转\&跳转到HTTPS域名\&修改Page,允许跳转\&跳转到HTTP 域名\& 非SSL协议,不允许跳转\&跳转到HTTP 域名\& 修改了的域名,不允许\&跳转到HTTPS域名\& 修改了的域名,不允许\&OK....\& HTML代替MOVED,不允许\&]

②JavaScript:由于JavaScript可以被用来在页面中读取用户键入的字符串。所以,我们应当对一个HTTPS页面中所有的JavaScript(包括内部与外部的)的执行过程予以记录,从而与当前的HTTPS页面进行比较,判断是否有额外加入或篡改的JavaScript 。一旦检测到这种情况就应当对用户发出警告。

③Iframe Tags:由于Iframe Tags可以将一个伪造的登录框覆盖到原始的登录框之上。因此,一旦数据库中的信息表示该网页在此处不应当有Iframe Tags时,我们就应该阻止该段代码的执行。

④HTTP Forms:由于增加的表单可能会诱导用户泄露私密信息,所以,我们在检测规则中对HTTP Forms采取如下策略:

(1)表单缺失:如果HTTP Proxy发现页面缺失安全登陆表单,则提出警告,建议终止会话。

(2)新表单:如果新表单为登陆框,发出警告;若不是,检测该表单是否采取加密传输并与其他表单指向相同安全域名。

(3)表单篡改:当HTTP Proxy发现表单由HTTPS转向HTTP或者表单所指向的目标域名发生变化,则提出警告。

对于实时变化额动态网站,我们做如下处理:

(1)对网页进行抽象:HTTP Proxy在首次访问一个网页时做两次相同的请求。比较两次请求的相应,若不同,记录相同部分的配置以及不同部分的配置变化域,将这些信息记录到数据库供检测模块比对。

(2)JavaScript认证:对网站上使用的JavaScript进行签名,从而认证该网页所使用的JavaScript没有被篡改过。

5 基于Cookie Proxy的防范措施

目前的Cookie机制可以描述如下:

(1)客户端发送HTTP(S)请求到服务器端;

(2)服务器端生成set-cookie发送至客户端;

(3)客户端生成一个cookie并存储;

(4)客户端将cookie发送至服务器端;

(5)服务器端予以响应。

Cookie Proxy采用了一个安全Cookie 协议和增设了安全LAN代理与安全服务器代理的网络拓扑。安全Cookie协议的主要作用为判断当前使用的是HTTP还是HTTPS进行数据传输。该协议工作在安全LAN代理与安全服务器代理之间。我们将安全Cookie协议表示如图3所示:

说明:expires:有效期;EK(data):使用密钥K加密data;

HMACK密钥为K的data的哈希消息认证码。

图3中的SN为HTTPS标志,当SN的值为secure时,我们认为当前传输协议为HTTPS。CID即Cookie ID,为标志该Cookie的随机数。我们建立如图拓扑。

根据该拓扑,WLAN中客户端的所有数据报文均经过SLGP过滤后再转发至网关。同样,服务器端所有的数据报文也是通过SSGP转发到其所在的网关。Cookie Proxy的运行机制为:如果SLGP发现客户端请求的传输类型为HTTP而SLGP中存储的具有相同CID的set-cookie为secure类型,那么SLGP将拒绝该次请求。

综述,我们将Cookie Proxy运行流程归纳如下:

(1)客户端将一个请求发送到SSGP;

(2)SSGP 接收到请求,从中解析出Cookie并验证该Cookie是否有效。如果有效,将请求转发至服务器组。

(3)服务器根据接收到的请求生成set-cookie,将set-cookie发送至SSGP。

(4)SSGP 将set-cookie进行封装,发送至SLGP。

(5)SLGP接收到SSGP发送的set-cookie,验证签名,如果有效就发送至客户端。

(6)客户端将接收到的set-cookie进行存储。

(7)客户端根据存储的set-cookie生成一个新的cookie并发送请求。

(8)返回第一步。

6 基于拓展DHCP的防范措施

在说明拓展DHCP之前,本文首先介绍一下目前DHCP协议中对DHCP ACK消息采取的规范。根据RFC2132,DHCP ACK消息中包含的配置信息有:IP Address、Net Mask、Default Gateway、DNS Sever等。但由于不存在对MAC Address的描述,所以我们无法通过DHCP ACK信息对局域网网关的IP-MAC关系进行绑定。ARP欺骗也因此容易成功。本文在查阅DHCP ACK报文结构之后发现,我们可以在ACK报文的一个可选项NIS (Network Information Service) 中加入相应的MAC消息完成网关绑定。

图5为拓展DHCP对NIS的一个结构设想:

根据协议,NIS的Code为40,由于NIS Domain Name中封装的是MAC Address,所以长度我们设置为6。从图5中可以推断该局域网内的网关的MAC 地址为3f-06-1e-5c-03-05。为进一步说明拓展DHCP的工作流程,我们构建如下拓扑:

在拓展DHCP网络拓扑中,DHCP服务器将局域网网关的IP-MAC关系通过重新设想的DHCP ACK消息告知客户端。客户端接收到DHCP服务器传送过来的DHCP ACK消息之后首先进行签名验证,验证通过后会将NIS字段和IP Address字段进行解析,之后将解析到的信息写入ARP缓存,从而完成网关的IP-MAC关系绑定。这样便可以有效避免ARP欺骗,并进一步制止SSLStrip的攻击。

7 论文总结与展望

本文在介绍了SSL工作机制之后对在其之上建立的HTTPS传输协议进行了分析,指出在网页由HTTP跳转HTTPS的过程中存在可以被中间人攻击所利用的漏洞。对于该漏洞的利用,本文以SSLStrip为例进行了展示。

由于该种攻击方式难度低、成功率高、防范少,本文随后重点分析了三种防范此类攻击的措施。第一种措施以HTTPS页面的配置信息比对结果为参考,重点在于检测规则的完善与精确。第二种措施通过Cookie中的SN字段判断传输类型是HTTP还是HTTPS,从而检测出本该请求HTTPS页面而实际获得HTTP页面的情形。这样便可以及时阻止该次攻击。第三种措施通过拓展DHCP在客户端的ARP缓存中绑定局域网网关的IP-MAC关系,从而有效制止基于ARP Spoof的SSLStrip攻击。

本文认为,由于HTTPS通信的开销相对较大,且用户在大多数情况下还是处于一个相对安全的网络环境之中的。所以,额外的攻击检测将使网络的负载更大。如何权衡开销更小的攻击检测与防范策略还需要我们进一步予以探究。

参考文献:

[1] 王立彦. HTTPS协议中间人攻击的实现与防御[D]. 东北大学,2011.

[2] 赵森栋.安全套接层中间人攻击与防护研究[D]. 哈尔滨工程大学,2013.

[3] Yan zhao. A New Strategy to Defense against SSLStrip for Android[J]. Proceedings of ICCT2013,2013:70-74.

[4] Marlinspike M. More Tricks for Defeating SSL in Practice. In Black Hat USA,2009.

[5] Marlinspike M. New tricks for defeating ssl in practice,2009.

[6] Callegati F, Cerroni W, Ramilli M. Man-in-the-Middle Attack to the HTTPS Protocol[J]. Security Privacy. 2009, 7(1):78-81.

[7] Chen Z, Guo S, Zheng K. Modeling of man-in-the-middle attack in the wireless networks. Wireless Communications, Networking and Mobile Computing,2007: 21-25.

[8] Seung Yeob Nam, Dongwon Kim, Jeongeun Kim. Enhanced ARP: Preventing ARP Poisoning-Based Man-in-the-Middle Attacks[J]. Communications Letters, IEEE, 2010, 14(2):187-189.