常见中间人攻击方案
简介
本文介绍针对 TLS 加密通信的中间人攻击(Man-in-the-Middle, MITM)方案,包括 TLS 拦截代理、证书链攻击,以及 REALITY 如何通过其证书验证机制检测和应对 MITM。
本文回答
- MITM 攻击的基本原理和分类
- 针对代理/VPN 流量的 MITM 攻击方案
- GFW 是否可能使用 MITM 技术
- REALITY 的三级证书验证机制如何检测 MITM
本文在项目中的位置
本文属于背景知识层。理解 MITM 是理解 REALITY 为什么设计了复杂的"临时证书 vs 真证书"验证逻辑的前置条件。
适合读者
所有想理解 TLS 安全威胁模型的读者。
前置知识
TLS 握手流程、证书链验证机制、公钥基础设施(PKI)基础。
文章理解难度
中等。需要理解证书验证和数字签名机制。
重点
- MITM 代理的工作原理
- TLS 拦截的三种常见模式
- REALITY 的三层证书验证逻辑
- 爬虫模式的设计意图
上级文档和相关文档
主要证据
Cloudflare MITMEngine 项目,NDSS 论文《Killed by Proxy》,REALITY 源码中的证书验证逻辑。
MITM 攻击概述
中间人攻击指攻击者在通信双方不知情的情况下插入到通信链路中,可以读取、修改或注入通信内容。
在 TLS 通信中,MITM 攻击通常需要破坏 TLS 的端到端加密保证,这可以通过以下方式实现:
- 证书伪造:攻击者使用自签证书或从受信任 CA 获取的证书冒充目标服务器
- CA 妥协:攻击者控制了一个受信任的 CA,可以签发任意域名的有效证书
- 证书链攻击:利用某些 TLS 实现不严格验证中间证书的漏洞
- 降级攻击:强制通信方使用较弱的加密套件或协议版本
针对 HTTPS 的 TLS 拦截模式
模式一:企业级 TLS 拦截代理
许多企业和组织在边界部署 TLS 拦截设备(如防火墙、安全网关),用于检查出站 HTTPS 流量:
客户端 ←→ [TLS 拦截代理] ←→ 目标服务器
↑ ↑
内部CA签发 真实证书
的伪证书工作流程:
- 客户端发起 TLS 连接到目标服务器
- 拦截代理截获连接,代替客户端与目标服务器完成 TLS 握手(使用真实证书)
- 拦截代理使用内部 CA 签发的伪证书与客户端完成 TLS 握手
- 拦截代理拥有两端的解密密钥,可以检查明文内容
这种模式在用户设备上安装了企业 CA 证书时有效。客户端会"信任"拦截代理签发的伪证书。
模式二:客户端安全软件
防病毒软件、家长控制软件等通常也使用类似技术:
- 在操作系统上安装自己的根 CA 证书
- 拦截所有 HTTPS 流量
- 检查内容后重新加密
NDSS 论文《Killed by Proxy》对这类软件的安全性进行了系统分析,发现许多产品存在严重的证书验证缺陷。
模式三:网络层面的 TLS 拦截
政府或 ISP 层面的 TLS 拦截:
- 依靠法律强制要求 ISP 部署拦截设备
- 使用国家背书的 CA 签发伪造证书
- 主要用于审查和对特定内容的监控
GFW 是否有能力进行这种级别的 MITM 尚无公开确凿证据,但某些研究(如 Kazakhstan 2019 年的 HTTPS 拦截事件)表明一些国家确实部署了国家级 TLS 拦截。
MITM 指纹检测
Cloudflare 开发的 MITMEngine 是一个开源的 HTTPS 拦截检测库。它通过比对 ClientHello 指纹来识别拦截:
- 正常浏览器的 ClientHello 有已知的指纹
- TLS 拦截代理在转发 ClientHello 时会修改其中的字段(如密码套件、扩展)
- 修改后的 ClientHello 指纹与任何已知浏览器都不匹配
- 结合 User-Agent 等信息,可以推断连接是否被拦截
REALITY 的 MITM 应对
REALITY 通过临时 Ed25519 证书的三层验证机制来检测和应对 MITM 攻击:HMAC 签名验证(识别 REALITY 临时证书)、ML-DSA-65 后量子验证(可选)、x509 标准证书链验证(识别真证书)。收到非临时证书时进入爬虫模式,不传输代理数据。
完整的验证流程源码分析见 REALITY 协议详解:客户端验证 和 REALITY 客户端源码走读:VerifyPeerCertificate。
外部参考资料
资料:Monsters in the Middleboxes: Introducing Two New Tools for Detecting HTTPS Interception 类型:技术博客(Cloudflare) 链接:https://blog.cloudflare.com/monsters-in-the-middleboxes 可信度:A
资料:Killed by Proxy: Analyzing Client-end TLS Interception Software 类型:顶会论文(NDSS 2016) 链接:https://www.ndss-symposium.org/wp-content/uploads/2017/09/killed-proxy-analyzing-client-end-tls-interception-software.pdf 可信度:A
资料:MITMEngine 开源项目 类型:开源工具 链接:https://github.com/cloudflare/mitmengine 可信度:A
读者自检
读完本文后应能回答:
- TLS 拦截代理的三种常见部署模式
- 为什么 TLS 拦截会修改 ClientHello 指纹
- REALITY 的三层证书验证分别做什么
- 爬虫模式解决了什么问题
- 为什么 REALITY 收到真证书时不直接断开
下一步阅读
- REALITY 协议详解:完整的握手机制和证书管理
- GFW 审查机制:审查方如何实施 MITM 和主动探测