CVE-2024-3661 技术机制与 DHCP Option 121 路由攻击分析
CVE-2024-3661(被称为 TunnelVision)是一种针对 VPN 技术的关键设计缺陷攻击,由 Leviathan Security Group 的研究人员披露。该漏洞的核心在于利用 DHCP(动态主机配置协议)中的 Option 121 字段,通过在本地网络中注入比 VPN 隧道更具体(More Specific)的静态路由条目,强制受害者流量绕过加密隧道直接发送至攻击者控制的网关。这种攻击手段不依赖于破解 VPN 协议本身的加密算法,而是利用了操作系统底层路由查找算法的优先级规则,即最长前缀匹配(Longest Prefix Match, LPM)。
DHCP Option 121 的协议机制与安全风险
DHCP Option 121 允许 DHCP 服务器向客户端推送一系列无类别静态路由(Classless Static Routes)。在典型的网络环境中,DHCP 服务器除了提供 IP 地址和默认网关(Option 3)外,还可以通过 Option 121 告知主机如何到达特定的子网。当主机接收到包含 Option 121 的 DHCP 响应时,它会更新其内核路由表。
在 VPN 工作流程中,大多数 VPN 客户端通过修改默认网关或添加 0.0.0.0/1 和 128.0.0.0/1 两条路由(以覆盖整个 IPv4 地址空间)来拦截流量。然而,根据操作系统路由优先级,手动添加或通过 DHCP 获取的特定 CIDR 路由(如 /24 或 /32)其优先级永远高于通用的 /0 或 /1 路由。在使用 VPNWG 等安全通信方案时,用户通常期望所有流量都受到加密保护,但如果本地网络中存在恶意 DHCP 服务器,它可以通过推送 0.0.0.0/0 的细化子集路由,引导特定流量流向物理网关而非虚拟网卡(TUN/TAP 设备)。
路由优先级对比示例
假设用户连接到 VPN 后,路由表可能如下所示:
Destination Gateway Genmask Flags Interface
0.0.0.0 10.8.0.1 128.0.0.0 UG tun0
128.0.0.0 10.8.0.1 128.0.0.0 UG tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG eth0
此时,如果攻击者通过 DHCP Option 121 推送以下路由:
Destination Gateway Genmask Flags Interface
1.2.3.4 192.168.1.1 255.255.255.255 UGH eth0
当主机访问 1.2.3.4 时,内核会发现 1.2.3.4/32 是最精确的匹配项,从而将流量通过 eth0 发送到本地网关 192.168.1.1,完全绕过了 tun0 加密隧道。这种行为对 VPN 客户端而言几乎是透明的,因为 VPN 隧道仍然保持“连接”状态,且没有任何断开警报。
TunnelVision 攻击流程解析
实施 TunnelVision 攻击通常需要攻击者与目标主机处于同一个广播域(L2 层级)。以下是攻击者利用该漏洞的技术路径:
- 侦察与环境模拟: 攻击者启动一个虚假的 DHCP 服务器,或通过 ARP 欺骗干扰合法的 DHCP 交互。在某些场景中,为了验证内网是否存在此类配置风险,研究人员常使用 Secably 进行针对性的漏洞扫描与渗透测试。
- 伪造 DHCP 响应: 当受害者请求 IP 续租或首次加入网络时,攻击者发送包含 Option 121 字段的
DHCP ACK报文。该报文包含一系列覆盖常用目标的特定路由。 - 流量拦截与镜像: 攻击者将自己的 IP 设置为这些路由的下一跳。受害者流量到达攻击者后,攻击者可以利用 Wireshark、Tcpdump 或其他中间人(MITM)工具对解密后的流量进行嗅探、注入或修改。
- 隐蔽性维持: 由于攻击只是修改了路由表的一部分,VPN 客户端通常无法检测到这种更改,甚至“Kill Switch”功能在许多实现中也会失效,因为物理接口仍然处于活动状态以维持 VPN 本身的连接。
受影响的操作系统与防御现状
CVE-2024-3661 的影响范围极广,主要原因在于它利用的是标准化协议的行为而非单一的代码漏洞。不同操作系统对 DHCP Option 121 的处理逻辑决定了其受威胁程度。
| 操作系统 | 受影响程度 | 技术备注 |
|---|---|---|
| Linux | 高 | 大多数发行版的网络管理器(如 NetworkManager)默认遵循 DHCP Option 121。 |
| Windows | 高 | Windows DHCP 客户端原生支持并应用 Option 121 静态路由。 |
| macOS | 高 | macOS 同样支持 Option 121,且路由优先级逻辑易受操纵。 |
| Android | 低 | Android 系统原生不处理 DHCP Option 121,从而在机制上免疫此攻击。 |
| iOS | 中 | 在特定版本中对静态路由的处理存在差异,但仍存在潜在泄露风险。 |
在进行大规模互联网侦察时,Zondex 能够帮助识别暴露在公网上的不安全服务,但在 TunnelVision 场景中,攻击主要发生在局域网(LAN)侧,这使得传统的边界防护手段失效。
针对 CVE-2024-3661 的缓解措施
由于该漏洞深植于 DHCP 和内核路由逻辑中,彻底修复需要从架构层面进行调整。以下是目前推荐的技术缓解方案:
1. 禁用 DHCP Option 121
在 Linux 系统上,可以通过配置 dhclient.conf 来拒绝 Option 121。在 /etc/dhcp/dhclient.conf 中删除或注释掉相关请求项:
# 找到 request 行,移除 rfc3442-classless-static-routes
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name;
2. 引入命名空间(Network Namespaces)防护
这是 Linux 环境下最有效的防御手段。将 VPN 客户端和敏感流量隔离在一个独立的 Network Namespace 中,只向该命名空间暴露虚拟网卡,而将物理网卡(受 DHCP 影响的接口)保留在默认命名空间。这样,即使物理路由表被篡改,也不会影响隔离空间内的路由逻辑。
3. 使用防火墙规则限制非隧道流量
通过防火墙(如 iptables 或 nftables)实施强制策略,仅允许 VPN 加密后的流量(通常是 UDP 500/4500 或 TCP 443)通过物理接口发出,而拦截所有其他发往物理接口的非加密流量。这种策略比传统的 VPN 软件内置 Kill Switch 更为可靠。
# 仅允许流量通过虚拟接口 tun0
iptables -A OUTPUT ! -o tun0 -d 192.168.1.0/24 -j ACCEPT # 允许访问本地网段
iptables -A OUTPUT ! -o tun0 -m owner --uid-owner vpnuser -j ACCEPT # 允许 VPN 进程本身
iptables -A OUTPUT ! -o tun0 -j DROP # 拦截其他所有非 tun0 的出口流量
4. 网络层防御:DHCP Snooping
在企业级交换机上启用 DHCP Snooping,只允许来自受信任端口(即合法的企业 DHCP 服务器所在的端口)的 DHCP 响应报文通过。这可以从源头上阻止非法 DHCP 服务器在局域网内广播 Option 121 路由。
TunnelVision 与传统 VPN 泄露的区别
TunnelVision 不同于以往的 DNS 泄露或 IPv6 泄露。传统的泄露通常是因为配置不当导致主机在隧道外发起查询,而 TunnelVision 是主动引导正常的流量“跨越”边界。它将受害者的物理接口变成了一个侧信道,即使 VPN 加密依然完好,数据也会因为路由表的指令而选择明文路径。对于依赖 VPN 进行高强度隐私保护的研究人员而言,理解并防御此类 L2/L3 层的协议攻击是确保链路完整性的必要前提。