基于SSLStrip的HTTPS会话劫持



0 引言
HTTPS作为一种安全的HTTP数据传输协议,被广泛应用于万维网上敏感信息的通信,例如交易支付等方面。然而,HTTPS也存在自身的缺陷,不能绝对保证服务端自身的安全。在网络攻防中,威胁服务器安全的行为时有发生,最常见的例子就是使用模仿银行域名的钓鱼攻击(Phishing)。随着HTTPS的广泛使用,一些新的针对HTTPS会话的劫持也开始出现,如基于中间人攻击的Surf Jacking、SSLSniff等。
文中结合HTTPS实现过程中出现的一些问题,分析了一种新的HTTPS会话劫持方法SSLStrip,同时提出了针对HTTPS会话劫持的防范措施。
1 HTTPS协议分析
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道。它是由Netscape公司开发,其目的是通过应用Netscape的安全套接字层(SSL)作为HTTP应用层的子层,实现对数据的加密以及身份的验证。当客户端向服务器提出连接要求时,首先要协商建立SSL连接,然后在SSL应用数据通道上传输HTTP数据。HTTPS使用端口443进行通信,而不同于HTTP使用端口80与TCP/IP进行通信[1]。
当HTTPS服务器与客户端进行交互时,其连接过程可以分为3个阶段:客户端与服务器之间建立TCP连接;客户端与服务器进行SSL握手;在客户端与服务器成功SSL握手后,传送已加密的HTTPS数据。
其中,完整的SSL握手过程又可分成以下4个步骤[2]:
① 建立安全能力:确定客户端浏览器与HTTPS服务器之间通信所使用的SSL版本和密码编码方式。
② 服务器鉴别和密钥交换:HTTPS服务器向客户端发送数字证书,以证明自己的身份,此证书中包含服务器公钥及其他信息,并使用CA密钥加密。
③ 客户端验证和密钥交换:客户端验证HTTPS服务器身份,并生成会话密钥,使用服务器公钥加密。如服务器需验证客户端,则向服务器发送客户端证书,并使用客户端自己的私钥加密。
④ 握手完成:服务器与客户端确认会话密钥,并发送单独加密报文,表示握手完成。
在HTTPS的使用中,一些服务器也会采用SSL简单握手协议,在SSL握手过程中,服务器不需要客户端提供证书,其结果可导致欺骗的发生。
2 HTTPS会话劫持
2.1 HTTPS中间人攻击
HTTPS中间人攻击(Man-in-the-Middle Attack)[3]是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机MITM虚拟放置在网络连接中的客户端Client与服务器Server之间,在客户端与服务器进行HTTPS通信时,由MITM对HTTPS数据进行转发,Client和Server都不会意识到会话已被劫持。MITM不仅可窃听HTTPS通信还可以对信息进行篡改,达到HTTPS攻击的目的。
基于Web的HTTPS会话使用SSL协议,而SSL协议在握手协商阶段发送公钥证书。比较普遍的HTTPS中间人攻击,例如SSLSniff等,在网关截获SSL会话,替换服务器公钥证书,将公钥PKey换成自己的公钥PKey’,欺骗客户端。客户端使用PKey’加密信息并发送会话,中间人用私钥Skey’解密客户端返回会话,从而劫持会话。同时,中间人用PKey加密明文会话并返回服务器[4]。
使用SSLSniff进行HTTPS会话劫持时,在客户端收到未认证的证书时,浏览器会弹框示警,从而有可能造成客户端对MITM存在的警觉。
2.2 HTTPS会话劫持的新方法 SSLStrip
(1) SSLStrip简介
在分析完HTTPS协议流程以及一种HTTPS中间人方法SSLSniff后,文中介绍一种新的HTTPS中间人会话劫持方法SSLStrip[5]。SSLStrip所能达成的目标是在客户端与服务器建立连接时,在MITM与Server之间形成HTTPS连接,而在Client与MITM之间形成HTTP连接,即将SSL层从原HTTPS连接中“剥离”。这样,既避免了在客户端验证证书时难以避免的弹框问题,又能够劫持HTTP明文数据,并同时保证客户端HTTP数据的传输,达到欺骗服务器与客户端的效果。
(2) SSLStrip的原理和实现
现实生活中,在浏览器地址栏中输入网址时,多数用户会采用直接输入网址的方式,而忽略了传输所采用的协议。例如,在登录gmail过程中,大多数用户会直接在地址栏中输入
www.gmail.com,向Google服务器发送一个HTTP连接请求,而不是输入https://www.gmail.com,向服务器发送一个HTTPS连接请求。因此,用户通常接触到HTTPS的方式有两种:一种是 Web上的连接,比如当用户在gmail上输入用户名和密码后,点击的登录键,将用户的用户名和密码以HTTPS的形式POST到服务器。另一种是通过HTTP的302状态。当客户端向gmail提出HTTP连接请求时,gmail服务器会返回一个REDIRECT网址,https://www.google.com/accounts/ServiceLogin?service=mail...,用户端在接收到这个URL后,将页面重定位到该网页,并请求HTTPS连接。
从另外一个角度讲,用户通常是通过HTTP向服务器发起HTTPS连接的。而HTTP本身是以明文的形式对外传送,并不能保证数据的安全。因此,可以考虑通过对HTTP进行劫持,来实现对HTTPS劫持的目的。整个SSLStrip过程包括如下几个步骤(见图1):
① 客户端Client向服务器Server发起HTTP连接请求;
② 中间人MITM监听客户端与服务器的HTTP数据;
③ 服务器返回给客户端的HTTP数据包被在客户端与服务器之间的中间人截获。中间人解析原HTTP数据包,将其中<a href=”https://...”>替换成<a href=”http://...”>,将Location:https://... 替换成Location:http://..,同时记录下所修改的URL,并保存;
④ 中间人将修改后的HTTP数据发送给客户端;
⑤ 客户端Client向服务器Server发起HTTP连接请求;
⑥ 中间人计算机解析客户端的HTTP连接请求,并与保存文件相比较。当发现存在有已修改过的HTTP URL时,将其替换成原HTTPS URL,并发送给服务器;
⑦ 与服务器保持HTTPS连接,回到步骤③;
⑧ 与客户端保持HTTP连接,回到步骤④。
SSLStrip原理流程如图2所示。
(3) SSLStrip劫持HTTPS的效果
对于服务器端而言,服务器Server从HTTPS连接开始,就与中间人MITM建立SSL连接。服务器并不能区分客户端Client和中间人MITM的区别,因而,服务器认为HTTPS是安全的。
对于客户端而言,由于中间人MITM与客户端Client之间是HTTP连接,因此并不会产生证书认证时弹框等任何示警。如图3所示,在Firefox浏览器下,SSLStrip前后的明显区别是:URL前的图标不同;URL中的https://被替换成http://。作为一般用户,不会注意到这些区别,而浏览器也会误认为其与服务器之间的http连接是安全的。
对于中间人而言,他们可以劫持并监听服务器与客户端之间的任何HTTP与HTTPS通信。
3 针对SSLStrip的防御
SSLStrip在SSL连接开始之前,就对客户端进行欺骗,同时与服务器进行HTTPS交互。针对SSLStrip的防御可以从两个方面开始进行:
(1)针对服务器
在整个域名下,建议都使用基于SSL的HTTPS连接,不要在已经不属于SSL的对话页面上提供注册服务,以防止中间人以HTTP中间人的方式劫持HTTPS。
(2)针对客户端[6]
针对客户端的防御有以下步骤:
① 在输入涉密网站的网址时,尽量加上“https://”,以防止中间人篡改HTTP重定向后的URL;
② 对于使用IE作为浏览器的用户,在登录涉密网站时,若地址栏没有变成黄色时加以注意;对于使用其他浏览器的用户,在登录涉密网站时,注意是否显示为https://...,均可在一定程度上防范当前的中间人和网络钓鱼攻击;
③ 下载最新版高安全度的网络浏览器;
④ 对敏感账号采用认证证书,如令牌和其他形式的双因素认证;
⑤ 对来自未知发件人发出的电子邮件要高度警惕,不要以点击链接的方式接入涉密网站(而应在浏览器中输入网址)。
另外,由于SSLStrip是基于中间人攻击的,因此一些针对ARP欺骗的防御方式[7]同样可有效地用于SSLStrip的防御,比如,使用非对称加密等方式,或者使用一些带有IP过滤的以太网交换机等等。
4 结语
通过理论分析及实现,SSLStrip可以成功劫持HTTPS,客户端不会产生弹框示警或网页的错误显示。作为一种有效的HTTPS劫持方法,SSLStrip在中间人攻击的基础上,更融合了钓鱼攻击的思想,在不需要伪造CA证书和网页的基础上,成功地将HTTPS的安全系数降低到HTTP的强度。此方法的提出,一方面对HTTPS协议的安全性提出了更高的要求;另一方面在利用“通配符证书”缺陷以及“国际化域名”规则后,SSLStrip可进一步伪装URL,从而对各浏览器安全性能的改善提出了一个新的研究方向




0 引言
HTTPS作为一种安全的HTTP数据传输协议,被广泛应用于万维网上敏感信息的通信,例如交易支付等方面。然而,HTTPS也存在自身的缺陷,不能绝对保证服务端自身的安全。在网络攻防中,威胁服务器安全的行为时有发生,最常见的例子就是使用模仿银行域名的钓鱼攻击(Phishing)。随着HTTPS的广泛使用,一些新的针对HTTPS会话的劫持也开始出现,如基于中间人攻击的Surf Jacking、SSLSniff等。
文中结合HTTPS实现过程中出现的一些问题,分析了一种新的HTTPS会话劫持方法SSLStrip,同时提出了针对HTTPS会话劫持的防范措施。
1 HTTPS协议分析
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道。它是由Netscape公司开发,其目的是通过应用Netscape的安全套接字层(SSL)作为HTTP应用层的子层,实现对数据的加密以及身份的验证。当客户端向服务器提出连接要求时,首先要协商建立SSL连接,然后在SSL应用数据通道上传输HTTP数据。HTTPS使用端口443进行通信,而不同于HTTP使用端口80与TCP/IP进行通信[1]。
当HTTPS服务器与客户端进行交互时,其连接过程可以分为3个阶段:客户端与服务器之间建立TCP连接;客户端与服务器进行SSL握手;在客户端与服务器成功SSL握手后,传送已加密的HTTPS数据。
其中,完整的SSL握手过程又可分成以下4个步骤[2]:
① 建立安全能力:确定客户端浏览器与HTTPS服务器之间通信所使用的SSL版本和密码编码方式。
② 服务器鉴别和密钥交换:HTTPS服务器向客户端发送数字证书,以证明自己的身份,此证书中包含服务器公钥及其他信息,并使用CA密钥加密。
③ 客户端验证和密钥交换:客户端验证HTTPS服务器身份,并生成会话密钥,使用服务器公钥加密。如服务器需验证客户端,则向服务器发送客户端证书,并使用客户端自己的私钥加密。
④ 握手完成:服务器与客户端确认会话密钥,并发送单独加密报文,表示握手完成。
在HTTPS的使用中,一些服务器也会采用SSL简单握手协议,在SSL握手过程中,服务器不需要客户端提供证书,其结果可导致欺骗的发生。
2 HTTPS会话劫持
2.1 HTTPS中间人攻击
HTTPS中间人攻击(Man-in-the-Middle Attack)[3]是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机MITM虚拟放置在网络连接中的客户端Client与服务器Server之间,在客户端与服务器进行HTTPS通信时,由MITM对HTTPS数据进行转发,Client和Server都不会意识到会话已被劫持。MITM不仅可窃听HTTPS通信还可以对信息进行篡改,达到HTTPS攻击的目的。
基于Web的HTTPS会话使用SSL协议,而SSL协议在握手协商阶段发送公钥证书。比较普遍的HTTPS中间人攻击,例如SSLSniff等,在网关截获SSL会话,替换服务器公钥证书,将公钥PKey换成自己的公钥PKey’,欺骗客户端。客户端使用PKey’加密信息并发送会话,中间人用私钥Skey’解密客户端返回会话,从而劫持会话。同时,中间人用PKey加密明文会话并返回服务器[4]。
使用SSLSniff进行HTTPS会话劫持时,在客户端收到未认证的证书时,浏览器会弹框示警,从而有可能造成客户端对MITM存在的警觉。
2.2 HTTPS会话劫持的新方法 SSLStrip
(1) SSLStrip简介
在分析完HTTPS协议流程以及一种HTTPS中间人方法SSLSniff后,文中介绍一种新的HTTPS中间人会话劫持方法SSLStrip[5]。SSLStrip所能达成的目标是在客户端与服务器建立连接时,在MITM与Server之间形成HTTPS连接,而在Client与MITM之间形成HTTP连接,即将SSL层从原HTTPS连接中“剥离”。这样,既避免了在客户端验证证书时难以避免的弹框问题,又能够劫持HTTP明文数据,并同时保证客户端HTTP数据的传输,达到欺骗服务器与客户端的效果。
(2) SSLStrip的原理和实现
现实生活中,在浏览器地址栏中输入网址时,多数用户会采用直接输入网址的方式,而忽略了传输所采用的协议。例如,在登录gmail过程中,大多数用户会直接在地址栏中输入
www.gmail.com ,向Google服务器发送一个HTTP连接请求,而不是输入https://www.gmail.com,向服务器发送一个HTTPS连接请求。因此,用户通常接触到HTTPS的方式有两种:一种是 Web上的连接,比如当用户在gmail上输入用户名和密码后,点击的登录键,将用户的用户名和密码以HTTPS的形式POST到服务器。另一种是通过HTTP的302状态。当客户端向gmail提出HTTP连接请求时,gmail服务器会返回一个REDIRECT网址,https://www.google.com/accounts/ServiceLogin?service=mail...,用户端在接收到这个URL后,将页面重定位到该网页,并请求HTTPS连接。
从另外一个角度讲,用户通常是通过HTTP向服务器发起HTTPS连接的。而HTTP本身是以明文的形式对外传送,并不能保证数据的安全。因此,可以考虑通过对HTTP进行劫持,来实现对HTTPS劫持的目的。整个SSLStrip过程包括如下几个步骤(见图1):
① 客户端Client向服务器Server发起HTTP连接请求;
② 中间人MITM监听客户端与服务器的HTTP数据;
③ 服务器返回给客户端的HTTP数据包被在客户端与服务器之间的中间人截获。中间人解析原HTTP数据包,将其中<a href=”https://...”>替换成<a href=”http://...”>,将Location:https://... 替换成Location:http://..,同时记录下所修改的URL,并保存;
④ 中间人将修改后的HTTP数据发送给客户端;
⑤ 客户端Client向服务器Server发起HTTP连接请求;
⑥ 中间人计算机解析客户端的HTTP连接请求,并与保存文件相比较。当发现存在有已修改过的HTTP URL时,将其替换成原HTTPS URL,并发送给服务器;
⑦ 与服务器保持HTTPS连接,回到步骤③;
⑧ 与客户端保持HTTP连接,回到步骤④。
SSLStrip原理流程如图2所示。
(3) SSLStrip劫持HTTPS的效果
对于服务器端而言,服务器Server从HTTPS连接开始,就与中间人MITM建立SSL连接。服务器并不能区分客户端Client和中间人MITM的区别,因而,服务器认为HTTPS是安全的。
对于客户端而言,由于中间人MITM与客户端Client之间是HTTP连接,因此并不会产生证书认证时弹框等任何示警。如图3所示,在Firefox浏览器下,SSLStrip前后的明显区别是:URL前的图标不同;URL中的https://被替换成http://。作为一般用户,不会注意到这些区别,而浏览器也会误认为其与服务器之间的http连接是安全的。
对于中间人而言,他们可以劫持并监听服务器与客户端之间的任何HTTP与HTTPS通信。
3 针对SSLStrip的防御
SSLStrip在SSL连接开始之前,就对客户端进行欺骗,同时与服务器进行HTTPS交互。针对SSLStrip的防御可以从两个方面开始进行:
(1)针对服务器
在整个域名下,建议都使用基于SSL的HTTPS连接,不要在已经不属于SSL的对话页面上提供注册服务,以防止中间人以HTTP中间人的方式劫持HTTPS。
(2)针对客户端[6]
针对客户端的防御有以下步骤:
① 在输入涉密网站的网址时,尽量加上“https://”,以防止中间人篡改HTTP重定向后的URL;
② 对于使用IE作为浏览器的用户,在登录涉密网站时,若地址栏没有变成黄色时加以注意;对于使用其他浏览器的用户,在登录涉密网站时,注意是否显示为https://...,均可在一定程度上防范当前的中间人和网络钓鱼攻击;
③ 下载最新版高安全度的网络浏览器;
④ 对敏感账号采用认证证书,如令牌和其他形式的双因素认证;
⑤ 对来自未知发件人发出的电子邮件要高度警惕,不要以点击链接的方式接入涉密网站(而应在浏览器中输入网址)。
另外,由于SSLStrip是基于中间人攻击的,因此一些针对ARP欺骗的防御方式[7]同样可有效地用于SSLStrip的防御,比如,使用非对称加密等方式,或者使用一些带有IP过滤的以太网交换机等等。
4 结语
通过理论分析及实现,SSLStrip可以成功劫持HTTPS,客户端不会产生弹框示警或网页的错误显示。作为一种有效的HTTPS劫持方法,SSLStrip在中间人攻击的基础上,更融合了钓鱼攻击的思想,在不需要伪造CA证书和网页的基础上,成功地将HTTPS的安全系数降低到HTTP的强度。此方法的提出,一方面对HTTPS协议的安全性提出了更高的要求;另一方面在利用“通配符证书”缺陷以及“国际化域名”规则后,SSLStrip可进一步伪装URL,从而对各浏览器安全性能的改善提出了一个新的研究方向
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值