HTTP/HTTPS 协议降级攻击(SSL/TLS Stripping)详解
字数 2912 2025-12-11 00:04:15

HTTP/HTTPS 协议降级攻击(SSL/TLS Stripping)详解

描述

HTTP/HTTPS 协议降级攻击,常被称为 SSL/TLS Stripping 或 SSL Stripping,是一种中间人攻击(MitM)技术。其核心目标是强制或诱使用户的加密连接(本应使用 HTTPS)降级为不加密的 HTTP 连接,从而使攻击者能够明文窃听或篡改用户与服务器之间的通信数据。这种攻击利用了用户在浏览过程中的行为习惯和部分网站对 HTTPS 支持的不完善性。

循序渐进讲解

步骤1:理解攻击前提与场景

  1. 攻击者位置:攻击者必须位于受害用户与目标网站之间的网络路径上,能够进行流量拦截(例如,通过 ARP 欺骗、恶意 Wi-Fi 热点、或被攻陷的路由器)。
  2. 目标网站特性:目标网站可能同时支持 HTTP 和 HTTPS 访问,或者其主站(首页)默认使用 HTTP,但在登录或关键操作时才跳转到 HTTPS(即“混合使用”模式)。纯 HTTPS(强制 HTTPS,并启用 HSTS 的)网站不易受此攻击。
  3. 用户行为:用户通常习惯通过输入域名(如 example.com)或点击 HTTP 链接来访问网站,而不是直接输入 https://example.com

步骤2:攻击核心原理——中间人角色扮演

攻击者扮演一个“透明的中间代理”角色,同时与用户和服务器建立两个独立的连接:

  • 对用户端:攻击者冒充目标服务器。
  • 对服务器端:攻击者冒充受害用户。

攻击的终极目标是:让用户 以为 自己正在与服务器进行安全的 HTTPS 通信,而实际上用户与攻击者之间是 不安全的 HTTP 连接;同时,攻击者与服务器之间建立正常的 HTTPS 连接,以获取或转发数据。

步骤3:详细攻击步骤分解

我们以一个用户尝试访问 http://example.com 为例,该网站支持 HTTPS 但未强制。

  1. 初始连接劫持

    • 用户在浏览器地址栏输入 example.com(默认为 HTTP)或点击一个 HTTP 链接。
    • 攻击者(作为中间人)拦截到用户发往目标服务器的 HTTP 请求。
  2. 阻止 HTTPS 重定向/升级

    • 正常情况下,服务器收到 HTTP 请求后,会通过 301 Moved Permanently302 Found 状态码,响应一个 Location: https://example.com 的头部,指示浏览器跳转到 HTTPS。
    • 攻击者拦截这个来自服务器的重定向响应,并 丢弃或篡改它,阻止浏览器收到“升级到 HTTPS”的指令。
  3. 建立“伪 HTTPS”连接给用户

    • 攻击者将自己伪装成 example.com,继续通过 HTTP 与用户通信。同时,攻击者以用户的名义,与真实的 example.com 服务器建立一个新的 HTTPS 连接。
    • 用户的所有后续请求(包括登录表单提交)都通过 明文 HTTP 发送给了攻击者。
    • 攻击者收到用户的明文请求后,通过已建立的 HTTPS 连接转发给真实服务器。
    • 攻击者收到服务器通过 HTTPS 返回的响应后,再通过 HTTP 返回给用户。
  4. 视觉欺骗(可选但常见)

    • 为了使欺骗更逼真,攻击者可能会篡改服务器返回的响应内容,例如:
      • 将页面内的 HTTPS 链接或表单的 action 属性改为 HTTP。
      • 移除或禁用安全相关的 Cookie 标志(如 SecureHttpOnly)。
    • 在早期工具(如 sslstrip)中,甚至会伪造一个“锁”图标,让用户的浏览器地址栏看起来是安全的(现代浏览器已极难实现此效果)。
  5. 数据窃取与篡改

    • 由于用户与攻击者之间的连接是 HTTP,用户的 所有数据(包括用户名、密码、Cookie、敏感信息)都以明文形式流经攻击者。攻击者可以:
      • 直接记录、存储这些数据。
      • 实时篡改请求或响应内容(如插入恶意代码、修改交易金额)。

步骤4:防御措施详解

防御 SSL Stripping 攻击需要网站管理员和用户共同努力。

网站管理员侧(关键防御方)

  1. 启用 HTTP 严格传输安全(HSTS):这是最有效的防御手段。
    • 原理:服务器在 HTTPS 响应头中发送 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
    • 作用:浏览器收到此头后,在 max-age 指定时间内,对于该域名及其子域名,所有 HTTP 请求都会在内部强制转换为 HTTPS 请求,根本不发送 HTTP 请求,从根源上杜绝了降级的可能。preload 列表更进一步,使主流浏览器在出厂时就知道该网站只使用 HTTPS。
  2. 强制 HTTPS 重定向:将所有 HTTP 流量通过 301/302 永久重定向到 HTTPS。这虽然能被 SSL Stripping 攻击,但与 HSTS 结合后效果极佳。
  3. 使用安全 Cookie:为所有会话 Cookie 设置 Secure 属性,确保它们只通过 HTTPS 传输,防止被攻击者通过 HTTP 连接窃取。
  4. 实施内容安全策略(CSP):使用 upgrade-insecure-requests 指令,指示浏览器将页面中所有 HTTP 请求自动升级为 HTTPS。

用户侧

  1. 手动输入 HTTPS:访问重要网站时,养成手动输入 https:// 前缀的习惯。
  2. 使用 HSTS 预加载列表的浏览器:现代浏览器(Chrome, Firefox, Edge等)都内置了 HSTS 预加载列表,对于列表中的网站,首次访问就会强制 HTTPS。
  3. 警惕公共 Wi-Fi:在不安全的公共网络上,尽量避免访问敏感账户。使用可信的 VPN 可以加密所有流量,防止本地网络上的 MitM。
  4. 留意浏览器警告:注意浏览器地址栏的“不安全”提示、锁图标是否消失或出现异常,不忽视证书警告。

步骤5:攻击的现代演变与局限

随着 Web 安全标准的普及,经典的 SSL Stripping 攻击成功率已大大降低:

  • HSTS 的广泛采用:大量主流网站加入了 HSTS 预加载列表。
  • 浏览器更严格:现代浏览器对混合内容(HTTP 资源在 HTTPS 页面中)有明确的警告和阻止策略。
  • 攻击场景受限:攻击通常需要主动的网络位置,在加密通信普及的今天,实施难度增加。

然而,在以下场景中仍需警惕:

  • 针对尚未部署 HSTS 的网站。
  • 结合钓鱼邮件或社交工程,诱使用户点击一个明确指向 http:// 的链接。
  • 针对移动应用或物联网设备中未正确实现证书校验的 HTTPS 客户端。

总结:SSL/TLS Stripping 攻击是一种经典的、利用协议协商弱点的中间人攻击。其根本防御在于服务器端 强制使用 HTTPS 并部署 HSTS,将安全的选择权从用户和潜在的中间人手中收回,由服务器通过技术手段强制执行。

HTTP/HTTPS 协议降级攻击(SSL/TLS Stripping)详解 描述 HTTP/HTTPS 协议降级攻击,常被称为 SSL/TLS Stripping 或 SSL Stripping,是一种中间人攻击(MitM)技术。其核心目标是强制或诱使用户的加密连接(本应使用 HTTPS)降级为不加密的 HTTP 连接,从而使攻击者能够明文窃听或篡改用户与服务器之间的通信数据。这种攻击利用了用户在浏览过程中的行为习惯和部分网站对 HTTPS 支持的不完善性。 循序渐进讲解 步骤1:理解攻击前提与场景 攻击者位置 :攻击者必须位于受害用户与目标网站之间的网络路径上,能够进行流量拦截(例如,通过 ARP 欺骗、恶意 Wi-Fi 热点、或被攻陷的路由器)。 目标网站特性 :目标网站可能同时支持 HTTP 和 HTTPS 访问,或者其主站(首页)默认使用 HTTP,但在登录或关键操作时才跳转到 HTTPS(即“混合使用”模式)。纯 HTTPS(强制 HTTPS,并启用 HSTS 的)网站不易受此攻击。 用户行为 :用户通常习惯通过输入域名(如 example.com )或点击 HTTP 链接来访问网站,而不是直接输入 https://example.com 。 步骤2:攻击核心原理——中间人角色扮演 攻击者扮演一个“透明的中间代理”角色,同时与用户和服务器建立两个独立的连接: 对用户端 :攻击者冒充目标服务器。 对服务器端 :攻击者冒充受害用户。 攻击的终极目标是:让用户 以为 自己正在与服务器进行安全的 HTTPS 通信,而实际上用户与攻击者之间是 不安全的 HTTP 连接 ;同时,攻击者与服务器之间建立正常的 HTTPS 连接,以获取或转发数据。 步骤3:详细攻击步骤分解 我们以一个用户尝试访问 http://example.com 为例,该网站支持 HTTPS 但未强制。 初始连接劫持 : 用户在浏览器地址栏输入 example.com (默认为 HTTP)或点击一个 HTTP 链接。 攻击者(作为中间人)拦截到用户发往目标服务器的 HTTP 请求。 阻止 HTTPS 重定向/升级 : 正常情况下,服务器收到 HTTP 请求后,会通过 301 Moved Permanently 或 302 Found 状态码,响应一个 Location: https://example.com 的头部,指示浏览器跳转到 HTTPS。 攻击者拦截这个来自服务器的重定向响应,并 丢弃或篡改它 ,阻止浏览器收到“升级到 HTTPS”的指令。 建立“伪 HTTPS”连接给用户 : 攻击者将自己伪装成 example.com ,继续通过 HTTP 与用户通信。同时,攻击者以用户的名义,与真实的 example.com 服务器建立一个新的 HTTPS 连接。 用户的所有后续请求(包括登录表单提交)都通过 明文 HTTP 发送给了攻击者。 攻击者收到用户的明文请求后,通过已建立的 HTTPS 连接转发给真实服务器。 攻击者收到服务器通过 HTTPS 返回的响应后,再通过 HTTP 返回给用户。 视觉欺骗(可选但常见) : 为了使欺骗更逼真,攻击者可能会篡改服务器返回的响应内容,例如: 将页面内的 HTTPS 链接或表单的 action 属性改为 HTTP。 移除或禁用安全相关的 Cookie 标志(如 Secure 和 HttpOnly )。 在早期工具(如 sslstrip )中,甚至会伪造一个“锁”图标,让用户的浏览器地址栏看起来是安全的(现代浏览器已极难实现此效果)。 数据窃取与篡改 : 由于用户与攻击者之间的连接是 HTTP,用户的 所有数据(包括用户名、密码、Cookie、敏感信息)都以明文形式流经攻击者 。攻击者可以: 直接记录、存储这些数据。 实时篡改请求或响应内容(如插入恶意代码、修改交易金额)。 步骤4:防御措施详解 防御 SSL Stripping 攻击需要网站管理员和用户共同努力。 网站管理员侧(关键防御方) : 启用 HTTP 严格传输安全(HSTS) :这是最有效的防御手段。 原理 :服务器在 HTTPS 响应头中发送 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload 。 作用 :浏览器收到此头后,在 max-age 指定时间内,对于该域名及其子域名, 所有 HTTP 请求都会在内部强制转换为 HTTPS 请求 ,根本不发送 HTTP 请求,从根源上杜绝了降级的可能。 preload 列表更进一步,使主流浏览器在出厂时就知道该网站只使用 HTTPS。 强制 HTTPS 重定向 :将所有 HTTP 流量通过 301/302 永久重定向到 HTTPS。这虽然能被 SSL Stripping 攻击,但与 HSTS 结合后效果极佳。 使用安全 Cookie :为所有会话 Cookie 设置 Secure 属性,确保它们只通过 HTTPS 传输,防止被攻击者通过 HTTP 连接窃取。 实施内容安全策略(CSP) :使用 upgrade-insecure-requests 指令,指示浏览器将页面中所有 HTTP 请求自动升级为 HTTPS。 用户侧 : 手动输入 HTTPS :访问重要网站时,养成手动输入 https:// 前缀的习惯。 使用 HSTS 预加载列表的浏览器 :现代浏览器(Chrome, Firefox, Edge等)都内置了 HSTS 预加载列表,对于列表中的网站,首次访问就会强制 HTTPS。 警惕公共 Wi-Fi :在不安全的公共网络上,尽量避免访问敏感账户。使用可信的 VPN 可以加密所有流量,防止本地网络上的 MitM。 留意浏览器警告 :注意浏览器地址栏的“不安全”提示、锁图标是否消失或出现异常,不忽视证书警告。 步骤5:攻击的现代演变与局限 随着 Web 安全标准的普及,经典的 SSL Stripping 攻击成功率已大大降低: HSTS 的广泛采用 :大量主流网站加入了 HSTS 预加载列表。 浏览器更严格 :现代浏览器对混合内容(HTTP 资源在 HTTPS 页面中)有明确的警告和阻止策略。 攻击场景受限 :攻击通常需要主动的网络位置,在加密通信普及的今天,实施难度增加。 然而,在以下场景中仍需警惕: 针对尚未部署 HSTS 的网站。 结合钓鱼邮件或社交工程,诱使用户点击一个明确指向 http:// 的链接。 针对移动应用或物联网设备中未正确实现证书校验的 HTTPS 客户端。 总结 :SSL/TLS Stripping 攻击是一种经典的、利用协议协商弱点的中间人攻击。其根本防御在于服务器端 强制使用 HTTPS 并部署 HSTS ,将安全的选择权从用户和潜在的中间人手中收回,由服务器通过技术手段强制执行。