Tailscale 与 TunnelVision:我们的分析

Leviathan Security 的研究人员披露 TunnelVision 漏洞(CVE-2024-3661)后,一些用户询问它是否影响 Tailscale,以及具体如何影响。简短回答是:情况比较复杂。我们认为,对于多数 Tailscale 用户,它不构成重大安全问题,但部分用户可能受到影响。

详细回答取决于多个因素,包括如何使用 Tailscale、所在环境和使用的操作系统。下面逐一分析。

Leviathan 在2024年5月公开披露之前没有通知 Tailscale。本篇文章总结了披露后数周广泛测试的结果。

先介绍背景。VPN、覆盖网络和网状网络系统有多种用途;这些用途的威胁模型、安全目标和功能目标存在细微差异。两个常见用途是:

  • 访问企业或家庭等私有网络中的服务。
  • 防止窃听或篡改。通常考虑局域网中的攻击者,例如不可信的咖啡店 Wi-Fi;但实际上,攻击者可能影响你的计算机与远端对等节点之间的任何路由器或网络。

TunnelVision 主要针对后一种用途。

Tailscale 可用于这些场景。最直接的用途是访问私有网络服务,但子网路由器、出口节点、应用连接器和 Mullvad 集成等功能,会使影响分析更复杂。

各平台的测试结果

原文的结果图及下列说明显示,影响最大的是 Apple 平台。

  • Linux:Tailscale 的路由管理覆盖 DHCP 提供的路由,从而阻止攻击。
  • Android:Android DHCP 客户端没有实现 DHCP 选项121,而这是攻击的必要前提。因此 Android 上的 Tailscale 不受此漏洞影响。
  • Windows:部分受影响。针对 Tailscale 对等节点 CGNAT IP 的攻击无效,流量仍正确经 WireGuard 接口路由。如果启用了出口节点,针对非 Tailscale IP 的攻击会导致客户端丢弃数据包,形成拒绝服务(DoS)。
  • iOS 与 macOS:影响最大,DHCP 提供的路由优先于 Tailscale 提供的路由。攻击者能够冒充 tailnet 对等节点和出口节点,绕过 WireGuard 接口。不过,攻击者不能对合法 tailnet 节点之间的流量实施中间人攻击,因为接收节点要求完整的 WireGuard 连接。
  • tvOS:我们未能复现攻击。但由于只能有限地访问 tvOS 内部机制,无法确认 DHCP 选项121是否完整传递到了系统路由表。

2024年6月12日更新

在 macOS 上,从 Tailscale v1.68 开始,客户端会检测 DHCP 选项121路由。如果存在这样的路由,会显示模态窗口警告用户。用户可以选择停止使用 Tailscale,或仍然继续。警告也会记入系统日志,可通过“控制台”应用查看。我们希望并预计,现实中的 TunnelVision 攻击相对少见。

对于有正当理由使用 DHCP 选项121的部署,可以启用 HideDHCP121Warnings 系统策略键,隐藏警告。macOS 独立版客户端可在终端执行:

defaults write io.tailscale.ipn.macsys HideDHCP121Warnings true

如果使用 Mac App Store 版客户端,请使用对应的 bundle identifier:

defaults write io.tailscale.ipn.macos HideDHCP121Warnings true

对于运行 Tailscale 的受管理 Mac 设备群,也可以通过 MDM 远程部署上述键,关闭面向用户的警告。详细说明见原文链接的 macOS MDM 部署文档。

截至这次原文更新,iOS 上尚无修复方案,因为 Apple 的平台限制使 Tailscale 这样的第三方应用无法读取当前 DHCP 配置。如果找到缓解办法,作者会更新这份公告。

可以采取什么措施

TunnelVision 的不利影响来自 DHCP 选项121原本正常、预期的用途:发布特定网络路由。通常,DNS、DHCP、ARP 等“网络辅助协议”并不可信;理想情况下,我们也不应该依赖它们的可信性。

指向 CGNAT/Tailscale IP 地址或地址范围的更具体、更高优先级路由,可能是正常、预期的配置,也可能是攻击或入侵迹象。不理解具体部署场景时,Tailscale 客户端无法仅靠软件可靠区分二者。不过,我们认为,为 CGNAT IP 范围合法使用 DHCP 选项121的情况不太可能非常普遍。

手动检查 DHCP 提供的路由

在 macOS 终端运行 ipconfig getsummary en0,可以查看 DHCP 服务器是否为 en0 接口添加了 CGNAT、Tailscale 或其他 IP 地址、地址范围的路由。查找以 classless_static_route 开头的行。下面的示例中,DHCP 服务器提供了到 8.8.0.0/16 地址范围的路由:

% ipconfig getsummary en0
[…]
router (ip_mult): {10.0.50.1}
domain_name_server (ip_mult): {10.0.50.1}
domain_name (string): lan
classless_static_route (classless_route): {8.8.0.0/16, 10.0.50.75}
end (none):
[…]

请记住:看到这些路由,并不能确定有人实施了 TunnelVision 攻击。但网络管理员可以据此检查网络是否按预期运行。

使用安全的应用协议

使用 Tailscale 出口节点时,我们强烈建议只访问 HTTPS 网站,不要将敏感数据发送到使用明文 HTTP 的网页。多数较新的浏览器提供强制要求 HTTPS 的设置。

理想情况下,出口节点能帮助保护互联网流量免受本地局域网和上游 ISP 窥探,但流量仍会经过许多路由器,而每一个路由器都可能窥探未加密流量。HTTPS、加密 DNS、SSH 等加密协议,仍然是互联网流量的最佳实践。

使用 Tailscale 子网路由器时,同样适用这些建议。

使用 Tailscale 应用连接器时,应用或服务当然应该在接收端实现 HTTPS;在条件允许时,还应为服务账户配置 IP 允许列表,包含应用连接器节点的出口 IP。例如 GitHub Enterprise 支持 IP 允许列表。


注:TunnelVision 披露后,作者获悉 Andrew Ayer 已在2015年描述了实质相同的问题。

原文:Tailscale and TunnelVision: our analysis
作者:Chris Palmer;2024年5月24日发表,含2024年6月12日更新。本文为历史版本中文译稿,结论对应原文测试及版本范围;原文及原图权利归原权利人所有。转载依据用户对本批文章的明确授权;没有声称本译稿重新实测。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容