Skip to content

常见中间人攻击方案

简介

本文介绍针对 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 的端到端加密保证,这可以通过以下方式实现:

  1. 证书伪造:攻击者使用自签证书或从受信任 CA 获取的证书冒充目标服务器
  2. CA 妥协:攻击者控制了一个受信任的 CA,可以签发任意域名的有效证书
  3. 证书链攻击:利用某些 TLS 实现不严格验证中间证书的漏洞
  4. 降级攻击:强制通信方使用较弱的加密套件或协议版本

针对 HTTPS 的 TLS 拦截模式

模式一:企业级 TLS 拦截代理

许多企业和组织在边界部署 TLS 拦截设备(如防火墙、安全网关),用于检查出站 HTTPS 流量:

客户端 ←→ [TLS 拦截代理] ←→ 目标服务器
   ↑              ↑
  内部CA签发     真实证书
  的伪证书

工作流程:

  1. 客户端发起 TLS 连接到目标服务器
  2. 拦截代理截获连接,代替客户端与目标服务器完成 TLS 握手(使用真实证书)
  3. 拦截代理使用内部 CA 签发的伪证书与客户端完成 TLS 握手
  4. 拦截代理拥有两端的解密密钥,可以检查明文内容

这种模式在用户设备上安装了企业 CA 证书时有效。客户端会"信任"拦截代理签发的伪证书。

模式二:客户端安全软件

防病毒软件、家长控制软件等通常也使用类似技术:

  • 在操作系统上安装自己的根 CA 证书
  • 拦截所有 HTTPS 流量
  • 检查内容后重新加密

NDSS 论文《Killed by Proxy》对这类软件的安全性进行了系统分析,发现许多产品存在严重的证书验证缺陷。

模式三:网络层面的 TLS 拦截

政府或 ISP 层面的 TLS 拦截:

  • 依靠法律强制要求 ISP 部署拦截设备
  • 使用国家背书的 CA 签发伪造证书
  • 主要用于审查和对特定内容的监控

GFW 是否有能力进行这种级别的 MITM 尚无公开确凿证据,但某些研究(如 Kazakhstan 2019 年的 HTTPS 拦截事件)表明一些国家确实部署了国家级 TLS 拦截。

MITM 指纹检测

Cloudflare 开发的 MITMEngine 是一个开源的 HTTPS 拦截检测库。它通过比对 ClientHello 指纹来识别拦截:

  1. 正常浏览器的 ClientHello 有已知的指纹
  2. TLS 拦截代理在转发 ClientHello 时会修改其中的字段(如密码套件、扩展)
  3. 修改后的 ClientHello 指纹与任何已知浏览器都不匹配
  4. 结合 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 收到真证书时不直接断开

下一步阅读