中间人攻击 (MITM)
1. 定义
中间人攻击 (Man-in-the-Middle, MITM) 发生在攻击者秘密地将自己置于两个通信方之间,在双方不知情的情况下拦截并可能修改其通信内容。
双方都认为自己在直接与对方通信,但实际上所有消息都经过攻击者,攻击者可以窃听、修改或向对话中注入新内容。
2. 技术原理
MITM 攻击利用网络通信中的信任关系。攻击者必须完成两件事:
- 拦截: 将自己置于通信路径中。
- 解密(如适用): 破解或绕过加密以读取内容。
常见 MITM 技术:
ARP 欺骗: 攻击者发送伪造的 ARP 消息,将其 MAC 地址与默认网关的 IP 关联,导致流量通过其机器路由。
DNS 欺骗: 攻击者提供虚假的 DNS 响应,将受害者重定向到恶意服务器。
恶意 Wi-Fi 接入点: 攻击者创建一个假的 Wi-Fi 热点(如「免费机场 WiFi」),受害者连接到该热点。
SSL 剥离: 攻击者将 HTTPS 连接降级为 HTTP,以明文方式拦截数据。
BGP 劫持: 大规模攻击,通过操纵互联网路由将流量重定向到攻击者控制的网络。
攻击者可以做什么:
- 读取敏感数据(凭据、消息、财务信息)
- 篡改传输中的数据(更改交易金额、注入恶意软件)
- 冒充任一方(代表服务器响应)
3. 攻击流程
sequenceDiagram
participant Victim as 受害者
participant Attacker as 攻击者<br/>恶意热点
participant Server as 银行服务器
Note over Victim,Attacker: 受害者连接到<br/>恶意 WiFi 热点
Victim->>Attacker: DNS 查询: bank.com
Attacker->>Attacker: 拦截 DNS 查询
Attacker-->>Victim: 返回攻击者 IP 作为 bank.com
Victim->>Attacker: HTTPS 请求到 bank.com
Note over Attacker: SSL 剥离:<br/>攻击者通过 HTTPS 连接真实银行<br/>但向受害者提供 HTTP
Attacker->>Server: 转发 HTTPS 请求
Server-->>Attacker: HTTPS 响应登录页面
Attacker-->>Victim: HTTP 响应 - 登录页面
Victim->>Attacker: 通过 HTTP 发送凭据
Note over Attacker: 明文捕获凭据
Attacker->>Server: 通过 HTTPS 转发凭据
Server-->>Attacker: 会话令牌
Attacker-->>Victim: 会话令牌4. 真实案例:DigiNotar 入侵事件 (2011)
目标: 通过伪造 SSL 证书攻击伊朗 Gmail 用户。 漏洞类别: 证书颁发机构被攻陷 / MITM。
事件经过: DigiNotar 是一家荷兰证书颁发机构 (CA),受到所有主流浏览器的信任。2011 年 7 月,攻击者入侵了 DigiNotar 并签发了 500 多个伪造的 SSL 证书,包括一个 *.google.com 的证书。
攻击过程:
- 伊朗 ISP(据信是国家支持的)使用这些伪造证书执行 MITM 攻击。
- 当伊朗用户访问 Gmail 时,他们收到了伪造的证书。
- 浏览器显示有效的 HTTPS 连接(绿色锁标),因为 DigiNotar 是受信任的。
- 所有电子邮件流量都被攻击者拦截和读取。
如何被发现: 伊朗的一位具有安全意识的用户注意到证书是由 DigiNotar(而非 Google)签发的,并进行了举报。这导致了调查,揭露了这次大规模入侵。
影响: DigiNotar 被从所有浏览器信任存储中移除,并在一个月内破产。这一事件加速了证书透明度的采用,并导致了更严格的 CA 安全要求。
5. 深度防御策略
A. 全面使用 HTTPS (TLS/SSL)
加密所有通信以防止窃听。
- HSTS(HTTP 严格传输安全): 强制浏览器只使用 HTTPS。
- HSTS 预加载: 将您的域名包含在浏览器预加载列表中,以防止首次访问攻击。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadB. 证书固定
防止攻击者使用伪造证书(即使来自被攻陷的 CA)。
- 公钥固定: 应用程序只信任特定的证书公钥。
- 证书透明度: 监控 CT 日志,发现为您的域签发的未授权证书。
// 移动应用证书固定示例
const validPins = [
'sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=',
'sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB='
];C. 在不受信任的网络上使用 VPN
在公共 Wi-Fi 上通过受信任的隧道加密所有流量。
- 始终开启 VPN: 配置设备在不受信任的网络上自动连接 VPN。
- 谨慎使用分割隧道: 避免分割隧道,因为它可能泄露部分流量。
D. DNS 安全
防止基于 DNS 的 MITM 攻击。
- DNS over HTTPS (DoH): 加密 DNS 查询以防止拦截。
- DNS over TLS (DoT): 替代的加密 DNS 协议。
- DNSSEC: 对 DNS 记录进行加密签名以防止欺骗。
E. 网络安全协议
- 802.1X 认证: 在授予网络访问权限之前要求认证。
- 动态 ARP 检测 (DAI): 交换机级别的 ARP 欺骗防护。
- DHCP 监听: 防止恶意 DHCP 服务器重定向流量。
F. 用户意识
- 证书警告: 永远不要忽略浏览器证书警告。
- 验证网络: 与工作人员确认合法的 Wi-Fi 网络名称。
- 避免敏感操作: 在不受信任的网络上不使用 VPN 时,不要访问银行/电子邮件。
