CVE-2024-3661:利用 DHCP Option 121 强制绕过 VPN 隧道的技术原理
CVE-2024-3661,通常被称为 TunnelVision,是存在于多种操作系统(包括 Windows、macOS、Linux 和 iOS)中的一个严重网络协议设计漏洞。该漏洞允许处于同一局域网(LAN)中的攻击者通过伪造的 DHCP 服务器发送特定的 DHCP Option 121 路由信息,从而在受害者系统的路由表中强制插入优先级高于 VPN 虚拟网卡的静态路由。这导致受害者的流量在未经过加密和隧道化的情况下直接发送到本地网络网关,实现了对 VPNWG 所定义的典型加密通道的完全绕过。
DHCP Option 121 的核心作用与滥用
DHCP Option 121(无类静态路由,Classless Static Routes)在 RFC 3442 中定义,旨在允许 DHCP 服务器向客户端推送除默认网关之外的特定路由规则。当客户端通过 DHCP 获取 IP 地址时,如果数据包中包含 Option 121,操作系统会根据其中的指令在本地路由表中添加静态条目。
在正常的网络环境中,Option 121 用于优化局域网内部资源访问,例如引导流量流向特定的子网。然而,在 CVE-2024-3661 攻击场景下,攻击者配置恶意 DHCP 服务器,推送两条覆盖整个 IPv4 地址空间的路由:0.0.0.0/1 和 128.0.0.0/1。由于这两条路由的掩码比 VPN 通常设置的默认路由 0.0.0.0/0 更加精确(More Specific Match Rule),根据操作系统的路由查找逻辑,流量将优先匹配这两条静态路由,而不是 VPN 隧道网卡。通过这种方式,攻击者可以获取原本应受保护的明文流量,并利用 Zondex 等工具对局域网内暴露的服务进行进一步的侦察与数据截获。
VPN 路由冲突的技术细节
大多数 VPN 客户端通过修改默认网关或设置具有较低跃点数(Metric)的 0.0.0.0/0 路由来重定向流量。然而,路由表的匹配规则遵循“最长前缀匹配”原则。即使 VPN 客户端尝试将 0.0.0.0/0 指向虚拟网卡,一旦 DHCP 注入了掩码长度为 /1 的路由,物理网卡的优先级就会瞬间反超。下表展示了受影响操作系统对该攻击的响应表现:
| 操作系统 | 是否支持 Option 121 | 漏洞状态 | 备注 |
|---|---|---|---|
| Windows | 是 | 易受攻击 | 默认处理 DHCP 路由优先级高于 VPN。 |
| macOS | 是 | 易受攻击 | 系统组件会根据 DHCP 响应自动更新路由表。 |
| Linux | 是 | 易受攻击 | 具体取决于 NetworkManager 或 dhcpcd 的配置。 |
| iOS | 是 | 易受攻击 | 在连接物理 Wi-Fi 时会处理 Option 121。 |
| Android | 否 | 免疫 | Android 默认不支持 DHCP Option 121。 |
攻击实施流程与 PoC 代码片段
攻击者首先需要在目标局域网内建立一个虚假的 DHCP 服务器。这可以通过 dnsmasq 等开源工具轻松实现。攻击者的目标是抢在合法路由器之前向目标主机发送响应(DHCP Offer/ACK)。
# dnsmasq 恶意配置示例 interface=eth0 dhcp-range=192.168.1.50,192.168.1.150,12h # 推送 Option 121 路由,将所有流量引导至攻击者网关 192.168.1.1 # 格式为: [目标网络]/[掩码],[网关] # 0.0.0.0/1 -> 192.168.1.1 (01.00.00.00.00.c0.a8.01.01) # 128.0.0.0/1 -> 192.168.1.1 (01.80.00.00.00.c0.a8.01.01) dhcp-option=121,01,00,00,00,00,c0,a8,01,01,01,80,00,00,00,c0,a8,01,01
当受害者设备连接到该网络并启动 VPN 时,其路由表会呈现以下状态:
0.0.0.0/0->utun0(VPN 网卡)0.0.0.0/1->192.168.1.1(物理网卡)128.0.0.0/1->192.168.1.1(物理网卡)
此时,受害者访问任何互联网 IP(如 8.8.8.8),系统会发现 8.8.8.8 匹配 0.0.0.0/1(掩码长度 1),而 VPN 的 0.0.0.0/0(掩码长度 0)因为精度不足被忽略。流量直接通过物理网卡流向攻击者控制的网关。
深度防御与缓解措施
针对 CVE-2024-3661 的防御不能完全依赖于 VPN 提供商,因为这是操作系统底层处理 DHCP 协议的方式。企业应使用 Secably 等漏洞扫描工具定期评估端点配置,并实施以下技术手段:
1. 禁用 DHCP Option 121
在 Linux 系统中,可以修改 DHCP 客户端配置文件(如 /etc/dhcp/dhclient.conf),移除或注释掉对 classless-static-routes 的请求。在 Windows 和 macOS 上,目前缺乏直接禁用该选项的系统级开关,通常需要依赖第三方防火墙软件。
2. 网络命名空间与防火墙策略
在 Linux 平台上,可以将 VPN 运行在独立的网络命名空间(Network Namespace)中。通过 ip netns 强制隔离物理接口与虚拟接口,可以有效防止 DHCP 路由注入干扰 VPN 环境。此外,配置严厉的防火墙规则(Kill Switch),禁止除 VPN 隧道加密端口以外的所有物理网卡出向流量,是目前最稳妥的通用方案。
# 示例:使用 iptables 实现 Kill Switch,防止泄漏 iptables -A OUTPUT -o eth0 -p udp --dport 51820 -j ACCEPT # 允许 VPN 流量 iptables -A OUTPUT -o eth0 -j DROP # 拦截其他所有物理接口流量
3. 使用 IPv6 隧道
由于该漏洞主要针对 IPv4 的 DHCP 机制,在纯 IPv6 环境下或强制所有流量通过 IPv6 隧道可以在一定程度上规避此攻击,但需注意 IPv6 的邻居发现协议(NDP)也存在类似的路由重定向风险。
侧信道分析与流量监控
识别此类攻击的难度在于它不破坏网络连接,而是静默地重定向流量。管理员应监控 DHCP 响应包,寻找异常的 Option 121 字段。如果发现局域网内的 DHCP 响应包含覆盖大范围 IP 段的静态路由,应立即触发安全警报。对于个人用户,在公共 Wi-Fi 环境下,建议始终开启 VPN 自带的“强力 Kill Switch”功能,这种功能通常通过在 Windows 平台上利用 WFP (Windows Filtering Platform) 驱动层拦截不符合策略的数据包,从而无视路由表的非法变更。