跳转至

CRIME Attack on TLS Compression

针对 TLS 压缩的 CRIME 攻击

描述

此漏洞表明服务器易受 CRIME 攻击,该攻击利用 TLS 压缩,通过压缩率分析来提取身份验证 Cookie 等敏感信息。

当 TLS 连接使用 DEFLATE 压缩(该压缩通过消除重复字符串来减少带宽)时,就会发生 CRIME(Compression Ratio Info-leak Made Easy)漏洞。攻击者通过注入受控数据(这些数据与部分机密信息匹配),并观察压缩如何影响加密 Payload 大小来利用此机制。

工作原理:

  1. 攻击者迫使受害者的浏览器向目标网站发送 HTTPS 请求。
  2. 恶意请求中包含与机密 Cookie 值部分匹配的猜测。
  3. 当猜测与实际 Cookie 内容匹配时,压缩会减小 Payload 大小。
  4. 攻击者测量加密请求的长度以确定正确的猜测。
  5. 逐字节重复此过程,直到提取出整个 Cookie。

要求:

  • 客户端和服务器均必须支持 TLS DEFLATE 压缩。
  • 处于中间人(Man-in-the-middle)网络位置以观察流量。
  • 能够注入 JavaScript 或控制受害者的请求。
  • 目标机密必须出现在被压缩的请求数据中。

Example Scenario: 用户通过公共 WiFi 连接到银行网站。攻击者注入 JavaScript,发起数千个 HTTPS 请求并附带诸如“sessionid=a”、“sessionid=b”之类的 Cookie 猜测。当猜测与真实的会话 Cookie 匹配时,DEFLATE 压缩会识别出重复字符串并生成更小的 Payload。通过测量加密后的大小,攻击者可在几分钟内提取出完整的会话 Cookie。

此漏洞影响支持 TLS 压缩的旧版浏览器(2012 年之前的 Chrome/Firefox),攻击者可通过压缩预言机(Compression Oracle)攻击实现完整的会话劫持和未经授权的帐户访问。

建议

为了缓解 CRIME 攻击:

主要防御措施 - 禁用 TLS 压缩:

# Nginx - 默认已禁用 TLS 压缩
# 请确保没有显式启用压缩

# Apache - 禁用 TLS 压缩
SSLCompression off
# Python 应用程序
import ssl
context = ssl.create_default_context()
context.options |= ssl.OP_NO_COMPRESSION

更新软件:

大多数现代浏览器和服务器默认禁用 TLS 压缩: - Chrome 和 Firefox 已于 2012 年移除了对 TLS 压缩的支持。 - 更新至最新版本的 OpenSSL(1.0.0+ 默认禁用)。 - 使用完全移除压缩功能的 TLS 1.3。

测试 TLS 压缩:

# 测试服务器是否支持 TLS 压缩
openssl s_client -connect example.com:443 < /dev/null 2>&1 | grep -i compression

# 安全时应显示:"Compression: NONE"
# 若存在漏洞则会显示:"Compression: zlib compression"

# 替代测试方法
nmap --script ssl-enum-ciphers -p 443 example.com

其他缓解措施:

  • 实施带有随机 Padding 的 CSRF Token,以降低压缩效率。
  • 使用安全会话管理,并进行频繁的 Token 轮换。
  • 监控可能表明存在潜在攻击的异常请求模式。
  • 启用 HSTS 以防止协议降级尝试。

由于 TLS 压缩在 2012 年 CRIME 披露后已被广泛禁用,因此现代应用程序通常受到保护,但传统旧系统(Legacy Systems)可能仍存在此漏洞。

链接

标准

  • SOC2_CONTROLS:
    • CC_6_7
    • CC_7_1
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213
  • CCPA:
    • CCPA_1798_150
  • GDPR:
    • ART_32
  • PCI_STANDARDS:
    • REQ_4_1
    • REQ_6_2
    • REQ_11_3