CRIME Attack on TLS Compression
针对 TLS 压缩的 CRIME 攻击
描述
此漏洞表明服务器易受 CRIME 攻击,该攻击利用 TLS 压缩,通过压缩率分析来提取身份验证 Cookie 等敏感信息。
当 TLS 连接使用 DEFLATE 压缩(该压缩通过消除重复字符串来减少带宽)时,就会发生 CRIME(Compression Ratio Info-leak Made Easy)漏洞。攻击者通过注入受控数据(这些数据与部分机密信息匹配),并观察压缩如何影响加密 Payload 大小来利用此机制。
工作原理:
- 攻击者迫使受害者的浏览器向目标网站发送 HTTPS 请求。
- 恶意请求中包含与机密 Cookie 值部分匹配的猜测。
- 当猜测与实际 Cookie 内容匹配时,压缩会减小 Payload 大小。
- 攻击者测量加密请求的长度以确定正确的猜测。
- 逐字节重复此过程,直到提取出整个 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