HTTP/HTTPS 协议降级攻击(SSL/TLS Stripping)详解
字数 2715 2025-12-11 16:02:03
HTTP/HTTPS 协议降级攻击(SSL/TLS Stripping)详解
题目描述
HTTP/HTTPS协议降级攻击,通常称为SSL Stripping或TLS Stripping,是一种由安全研究员Moxie Marlinspike在2009年提出的中间人攻击技术。该攻击的核心目标是迫使客户端与服务器之间原本应该建立的HTTPS安全连接,降级为不加密的HTTP连接,从而使攻击者能够明文窃听、篡改或劫持用户的通信数据,同时用户可能对此毫无察觉,因为攻击过程可能不会触发浏览器常见的安全警告(如证书错误)。
核心原理与攻击前提
- 攻击目标:依赖于用户倾向于访问HTTP版本的网站,或网站支持HTTP和HTTPS两种协议。
- 攻击位置:攻击者必须能够作为中间人(Man-in-the-Middle, MITM)拦截客户端(如用户浏览器)与目标服务器之间的网络流量。这通常在未加密的公共Wi-Fi、被ARP欺骗的局域网或受控的网络链路上实现。
- HSTS的缺失:目标网站未部署或未在浏览器预加载列表中的HTTP严格传输安全(HSTS)策略。HSTS能强制浏览器仅使用HTTPS连接该站点,是防御此类攻击的关键。
攻击步骤详解
攻击过程可以分解为以下几个关键阶段,我们以用户访问 https://example.com 为例进行说明。
步骤一:中间人劫持
攻击者(M)首先需要通过ARP欺骗、DNS欺骗或控制网络网关等方式,将自己插入到用户客户端(C)与目标服务器(S)的网络路径中。此后,C发出的所有前往S的网络数据包都会先经过M。
步骤二:拦截HTTPS请求并降级
- 当用户在浏览器中输入
https://example.com或点击一个HTTPS链接时,客户端C会尝试向S发起一个HTTPS连接(通常是向443端口发送ClientHello消息开始TLS握手)。 - 中间人M拦截到这个连接请求。M不会直接将这个HTTPS请求转发给S,而是主动终止客户端的HTTPS尝试。
- M转而使用HTTP协议,以自己的身份向真正的服务器S请求
http://example.com的页面(如果服务器同时监听80端口)。 - 服务器S响应HTTP请求,将
http://example.com的页面内容(通常是重定向到HTTPS的响应,或是HTTP版本的页面)返回给M。
步骤三:伪装与内容篡改
- M收到来自S的HTTP响应。
- 关键操作:M会篡改这个响应内容。
- 移除或修改HTTPS链接/重定向:如果S的响应中包含
Location: https://example.com这样的重定向头部,或者页面内的所有链接、表单提交地址都是https://开头的,M会将这些https://全部替换成http://。 - 伪造页面内容:M确保最终呈现给用户C的页面中,所有链接、资源请求、表单提交的目标地址都是
http://,且指向M自己控制的地址,或者指向M能继续拦截的http://example.com。
- 移除或修改HTTPS链接/重定向:如果S的响应中包含
- M将这个篡改后的HTTP响应返回给客户端C。此时,C的浏览器地址栏显示的是
http://example.com,而不是用户最初期望的https://example.com。
步骤四:维持HTTP会话
- 用户C在看到的“伪”HTTP页面上进行任何操作(点击链接、提交表单、登录),其请求都将以明文HTTP协议发送。
- 这些HTTP请求被M拦截。M可以:
- 窃听:直接读取所有明文数据,如用户名、密码、Cookie。
- 篡改:修改请求或响应内容。
- 转发:M将用户的HTTP请求转发给真正的服务器S(使用HTTP或HTTPS,取决于S的支持),并将S的响应经过同样的“HTTPS降HTTP”处理后再返回给用户C,从而维持一个“看似正常”的会话。
- 在整个过程中,用户可能完全看不到浏览器地址栏出现HTTPS锁标志,但由于网站本身可能HTTP和HTTPS内容相似,用户不易察觉。
防御措施详解
防御SSL Stripping需要从服务器、客户端和协议三个层面协同进行。
-
部署HTTP严格传输安全(HSTS):
- 原理:服务器在HTTPS响应头中设置
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload。浏览器收到此头后,在max-age指定时间内,对于该域名及其子域名的所有请求,即使手动输入http://,浏览器也会自动在内部将其转换为https://后再发起请求。 - 效果:这从根本上杜绝了客户端发起明文HTTP连接的可能性,使中间人无法实施降级。
preload列表机制允许网站提交到浏览器内置的HSTS列表,实现首次访问即受保护。
- 原理:服务器在HTTPS响应头中设置
-
启用HTTPS且将HTTP重定向至HTTPS:
- 服务器应配置将所有到80端口的HTTP请求,通过301或302状态码永久重定向到对应的HTTPS地址。虽然SSL Stripping攻击可以移除这个重定向,但这是基础且必要的安全实践。
-
使用安全的Cookie属性:
- 为会话Cookie设置
Secure属性,确保Cookie仅通过HTTPS连接传输。这样即使会话被降级到HTTP,Cookie也不会被发送,攻击者无法直接劫持已认证的会话。
- 为会话Cookie设置
-
实施内容安全策略(CSP)的
upgrade-insecure-requests指令:- 通过CSP头部
Content-Security-Policy: upgrade-insecure-requests,可以指示浏览器自动将页面中所有http://的资源请求升级为https://请求,这有助于缓解页面内混合内容导致的降级风险。
- 通过CSP头部
-
用户教育与使用VPN:
- 教育用户养成检查浏览器地址栏是否有HTTPS锁标志的习惯,尤其在使用公共网络时。使用可信的VPN可以加密本地网络到VPN服务器之间的链路,增加攻击者实施中间人劫持的难度。
总结
SSL/TLS Stripping攻击巧妙地利用了网络协议的可降级性和用户/网站的配置弱点,是一种隐蔽性极强的中间人攻击。其成功实施的关键在于阻止了初始的HTTPS连接建立,并将整个会话锁定在明文HTTP上。因此,最根本、最有效的防御手段是服务器端强制启用HSTS策略,从客户端侧源头消灭明文HTTP请求的可能,使得降级攻击无从下手。结合全站HTTPS、安全Cookie等最佳实践,可以构建对这类攻击的纵深防御体系。