网络威胁与对策

中间人攻击 (MITM)

约 4 分钟阅读

什么是中间人攻击

中间人攻击 (Man-in-the-Middle Attack,MITM) 是指攻击者插入到进行通信的双方之间,窃听或篡改通信内容的攻击手法。由于受害者以为自己正在与正规的对象直接通信,因此很难察觉攻击的存在。

要让这种攻击成立,攻击者必须把自己插入到通信路径上。公共 Wi-Fi、ARP 欺骗、DNS 伪装等各种手法,都是为了夺取通信的中继点。自从基于 TLS/SSL 的加密被广泛使用之后,仅仅插入到路径上已经读不到通信内容。之所以仍然留有成立的余地,是因为路径中还残留着未加密的区段、应用程序省略了证书校验,以及用户忽视证书警告继续连接。

主要攻击手法

中间人攻击有几种代表性的手法。

  • ARP 欺骗:在局域网内发送伪造的 ARP (Address Resolution Protocol) 数据包,把通信对象的 MAC 地址改写为攻击者的地址。ARP 没有确认响应来源是否正确的机制 (RFC 826,1982 年的规范),缓存被改写的终端的通信就会经由攻击者
  • DNS 欺骗:伪装 DNS 的响应,让正规的域名解析到攻击者服务器的 IP 地址。用户以为自己访问的是正确的 URL,实际上被引导到了仿冒网站
  • SSL 剥离:把 HTTPS 连接降级为 HTTP 的手法。攻击者与客户端之间用 HTTP 通信,与服务器之间用 HTTPS 通信,从而窃听未加密的通信内容。对于浏览器中已内置 HSTS 预加载信息的域名,从首次连接起就会强制使用 HTTPS,这一手法因此难以成立
  • 伪造的 Wi-Fi 接入点:在咖啡馆、机场等场所设置与正规接入点名称相似的伪造 AP (如「Cafe_WiFi_Free」),让连接者的通信经过自己的设备。这也被称为 Evil Twin 攻击。受 HTTPS 保护的通信内容读不到,但连接目标域名等元数据可以被观测,也会成为未加密通信和引导至仿冒网站的落脚点
  • BGP 劫持:滥用互联网的路由协议 (BGP),把发往特定 IP 地址的流量绕行到攻击者的网络。BGP 本来就没有验证所收到路由通告来源的机制,因此除了有意的绕行之外,配置错误导致的同类路由泄漏也会发生。作为对策,基于 RPKI 的路由来源验证 (RFC 6480、RFC 6811) 一直在推进部署

防御策略与加密的重要性

防御中间人攻击的核心,在于同时具备通信的加密与对通信对象的认证。

通信加密

  • 使用 TLS 1.3:TLS 1.3 (由 2018 年的 RFC 8446 标准化,2026 年 7 月的 RFC 9846 为其修订版) 通过改进握手过程,对降级攻击具有较强的抵抗力。TLS 1.0 和 TLS 1.1 已被 RFC 8996 (2021 年) 禁止使用,禁用它们是前提
  • HSTS (HTTP Strict Transport Security):由 RFC 6797 (2012 年) 定义,指示浏览器此后始终通过 HTTPS 连接。它能阻止 SSL 剥离,但收到该指示之前的首次连接不受保护,因此通过登记到浏览器内置的预加载列表来填补这一空隙
  • 使用 VPN:在公共 Wi-Fi 等不可信的网络上,用 VPN 把全部通信包裹进加密隧道。不过受到保护的只是到 VPN 服务商为止的区段,这同时也是把信任对象从网络管理者转移到 VPN 服务商的选择

认证与验证

  • 证书固定 (pinning):让应用程序只信任特定的证书或公钥,从而阻止使用伪造证书的中间人攻击。面向浏览器的 HPKP (RFC 7469,2015 年) 存在配置失误就会让自家网站无法访问的风险,Chrome 已在 72 版 (2019 年 1 月) 将其删除。固定仍然现实可行的场景,限于分发物与连接目标由同一开发者管理的移动应用这类情况
  • 基于公钥加密的双向认证:引入不仅认证服务器、也用证书认证客户端的双向 TLS (mTLS),实现双方向的认证
  • 部署 DNSSEC:这是 RFC 4033 及之后的文档所定义的机制,为 DNS 响应附加数字签名,使响应的来源与是否被篡改可以验证。它并不加密 DNS 的内容,只有区域侧的签名与查询侧的验证同时到位,才能拒绝伪造的响应

网络层面的对策

  • 动态 ARP 检查 (Dynamic ARP Inspection,DAI):交换机产品具备的功能,验证 ARP 数据包的正当性并防止 ARP 欺骗
  • 802.1X 认证:在设备接入网络时要求进行认证,防止非法设备接入

公共 Wi-Fi 的实用自卫措施

公共 Wi-Fi 之所以容易成为中间人攻击的落脚点,是因为任何人都能进入同一个网络,而路径上的设备可以由第三方准备。自从 HTTPS 成为默认之后,通信内容被直接读取的场面已经有限。即便如此,连接目标的域名等元数据仍能从路径上看到,未加密的通信、把证书警告放行的操作、以及被引导至仿冒域名,都仍然作为缺口留存。在弄清什么受到保护、什么仍然暴露的基础上,把下面的做法变成习惯,可以减少接触到这些残余缺口的场面。

  • 始终启用 VPN:用 VPN 加密通信之后,路径上的设备能看到的只是加密隧道,即使连接到伪造的接入点,通信内容与连接目标也不会被读取
  • 关闭自动连接:关闭智能手机和笔记本电脑的 Wi-Fi 自动连接功能,避免连上并非本意的网络
  • 看到证书警告一定停下:警告直接说明路径上可能有另一个主体插入,因此不要添加例外继续前进。反过来说,地址栏里显示锁形图标只表示通信已被加密,并不保证该域名是真的
  • 使用在仿冒域名上无法通过的认证方式:作为中间人攻击的应用,还有攻击者在与正规网站之间放置反向代理、把输入的认证信息与会话 Cookie 当场中继的中间人钓鱼 (AiTM)。一次性密码会被原样中继,因此像密钥与正规网站域名绑定的通行密钥 (FIDO2) 这样、在仿冒域名上签名无法成立的方式才有效
  • 避免机密性高的操作:网上银行和登录重要账户,请在可信的网络环境中进行
  • 注意 DNS 泄露:即使在使用 VPN 时,DNS 查询也可能通过未加密的路径发送。可以用 DNS 泄露测试进行确认

中间人攻击是在没有确认通信对象是否为真的情况下继续通信时成立的。用加密保护内容,用证书确认对象,出现警告就停下。这三点是否齐备就是分水岭。

常见误解

有 HTTPS 就不可能遭受中间人攻击
HTTPS 在正确实现时是强大的防御,但当应用忽略证书验证、使用过时的 TLS 版本或用户忽略证书警告时,中间人攻击仍可能成功。
中间人攻击需要在同一 Wi-Fi 网络
ARP 欺骗是局域网攻击,但 DNS 欺骗和 BGP 劫持可以远程执行。ISP 级别的流量拦截和恶意软件修改代理设置等许多技术不需要物理接近。
分享

相关术语

相关文章