术语表

中间人攻击 (MITM、Man-in-the-Middle)

最后核实

定义

中间人攻击是指攻击者暗中插入通信双方之间,转发并可能篡改流量,而双方都以为自己在直接和对方通信。

中间人攻击(MITM)中,攻击者设法进入通信路径,例如搭建伪造的 Wi-Fi 热点、在局域网内做 ARP 欺骗、DNS 欺骗或 BGP 路由劫持,然后在客户端和服务器之间转发流量。对未加密的协议,这意味着可以任意读取和修改。TLS 的设计目标正是抵御它:服务器必须证明自己持有证书对应的私钥,证书要覆盖所请求的域名并链到客户端信任的 CA,握手过程本身也经过认证,任何篡改都会被发现。

为什么重要

因此针对 TLS 的实际中间人攻击,打的都是这套模型的边缘:用户无视证书警告点了“继续访问”;客户端跳过了校验(curl -k、verify=False);在 TLS 开始前做 SSL 剥离;用降级攻击逼出弱协议;或者拿到一张被错误签发的证书。2011 年荷兰 CA DigiNotar 被入侵、签发了伪造的 google.com 证书,随后被各浏览器移除信任,是最后一种情况的典型案例。HSTS、证书透明度和 CAA 记录在很大程度上就是为堵住这些缺口而设计的。在企业安全评估中,公共 Wi-Fi 和办公网的中间人风险通常是必查项。

例子

最常见的“自找的”中间人风险,是关闭了证书校验:

curl -k https://api.example.com/                         # 接受任何证书,应避免
curl --cacert internal-ca.pem https://api.example.com/   # 改为显式信任指定 CA

常见误区

  • 用了 HTTPS 就不可能被中间人。 前提是客户端真的校验证书,而且用户没有无视警告。
  • 攻击者必须在物理上离你很近。 DNS 欺骗和路由劫持可以远程实施,被攻陷的路由器或代理则长期待在路径上。
  • 内部接口跳过校验没关系。 跳过校验恰恰去掉了防中间人的那层保护,应改为显式信任内部 CA。

延伸阅读