Mullvad VPN 被公认为市场上最注重隐私的 VPN 服务之一 Edward Snowden 推荐过它 独立审计机构也验证了它的无日志承诺 固定月费和匿名注册(无需邮箱 支持比特币/门罗币/现金付款)为隐私保护树立了黄金标准

但安全研究者 tmctmt 的最新分析揭示了一个隐蔽的设计缺陷在 Mullvad 分配出口 IP 的方式上 这个漏洞可以让有资源的攻击者仅通过观察你在不同时间连接的 IP 地址 就能以超过 99% 的精度对 Mullvad 用户进行指纹识别 这项研究在 HN 上发布后迅速登上了首页

这并不意味着 Mullvad 是伪劣产品 但它有力地提醒我们没有任何隐私工具是完美的 理解真实的攻击面才是有效防御的第一步

Mullvad 如何分配出口 IP

与大多数将数千用户塞进同一个共享 IP 的 VPN 不同 Mullvad 给每个用户在每个服务器上分配独立的出口 IP 它只有约 578 台服务器(相比之下 ProtonVPN 有 20000+ 台) 这种垂直扩展方式可以避免 IP 封禁和限速影响所有用户

你获得的出口 IP 是根据你的 WireGuard 公钥确定性映射的 Mullvad 默认每 1 到 30 天轮换一次密钥(仅限官方客户端 第三方客户端永远不会轮换) 这意味着除非密钥改变 否则相同的出口 IP 模式会持续存在

关键点:Mullvad 的出口 IP 映射使用基于种子的伪随机数生成器(PRNG) 你的 WireGuard 密钥决定种子 然后 PRNG 在每个服务器的 IP 池中选取一个位置 但底层 RNG 的第一个随机浮点数无论池大小都是相同的 因此比例位置(例如 "第 81 百分位")在所有服务器上完全一致

指纹识别原理

研究者测试了 9 个分布在不同地区的 Mullvad 服务器(澳大利亚、智利、德国、丹麦、芬兰、美国西海岸、美东、圣何塞、南非) 通过轮换 3650 个不同的 WireGuard 公钥进行测试 每个服务器都有一个小型出口 IP 池 最少的只有 8 个 IP(柏林) 最多 91 个(洛杉矶)

理论上 这些服务器之间有 8.2 万亿种可能的 IP 组合 每个用户应该得到唯一的组合 但现实中 研究者只发现了 284 种不同的 IP 组合 因为 RNG 在每个池中分配的是相同的比例位置 而不是独立的随机位置

以下是在 Rust(Mullvad 的后端语言)中发生的情况:

let seed = 12345;
for bound in 10..100 {
    let mut rng = StdRng::seed_from_u64(seed);
    let number = rng.random_range(0..bound);
    let ratio = number as f64 / bound as f64;
    // 每次迭代:相同的比例!
}

PRNG 的熵池不受 bound 参数影响 每次调用 random_range 先生成相同的浮点数 然后再缩放到 bound 范围 这意味着如果你在一个服务器的 IP 池中处于第 81 百分位 你在所有服务器的 IP 池中都处于第 81 百分位

对隐私的实际影响

如果攻击者能观察到你在多个服务器上的出口 IP(例如通过论坛 IP 日志、数据泄露或司法请求) 他们就可以计算出比例位置 并将这些连接与同一个 Mullvad 用户关联起来

研究者构建了一个工具 可以将种子浮点数缩小到约 0.0034 的范围(0.34% 的用户) 这意味着在估计的 10 万活跃 Mullvad 用户中 大约 340 个用户共享相同的 IP 组合 在实际场景中 只需要 2-3 个服务器的信息 精度就能超过 99%

现实场景:论坛管理员怀疑新账户是被封用户的马甲 两个账户都使用 Mullvad 但连接了不同的服务器 两个账户的 IP 日志显示重叠的浮点范围(例如 0.4334-0.4428 和 0.4358-0.4423) 管理员有 >99% 的把握确定他们是同一个人

对比:其他 VPN 如何处理出口 IP

ProtonVPN

ProtonVPN 采用相反的方式:大量用户共享极少数 IP 地址 20000+ 台服务器意味着每个服务器的 IP 被大量共享 这样你无法通过用户使用的 IP 来识别他们(因为成千上万人共享同一个 IP) 代价是这些 IP 更容易被反滥用系统标记和被网站屏蔽

IVPN

IVPN 提供中间路线:用户可以选择标准共享 IP(一般隐私更好 更难被指纹识别)或专用 IP 附加服务(网站兼容性更好 但指纹识别风险增加) IVPN 还支持通过两台服务器链式连接的多跳模式 这让基于 IP 的关联攻击更困难 此外 IVPN 允许用户随时主动轮换 WireGuard 密钥

Mullvad

Mullvad 的方式——每个用户在每个服务器上有独立出口 IP——是一种尽力而为的折中方案 初衷是好的(防止 IP 滥用影响所有人) 但 RNG 实现创造了一个意外的指纹识别面 Mullvad 对确定性分配一直保持透明(在 GitHub issue 中有文档记录) 但跨服务器关联这个实现细节之前未被注意到

特性 Mullvad ProtonVPN IVPN
出口 IP 分配 每用户每服务器独立 数千人共享 共享或专用 IP
跨服务器指纹风险 高(确定性 RNG) 低(IP 高度共享) 低(默认共享 IP)
密钥轮换 每 1-30 天(客户端) 每次会话自动 用户随时发起
多跳支持 通过 SOCKS5 代理 Secure Core 内置多跳
网站兼容性 更好(IP 多样化) 较差(共享 IP 易被封) 好(可选专用 IP)
开源审计 独立审计通过 独立审计通过 独立审计通过

对用户的实用建议

先说清楚:这个漏洞没有破坏 Mullvad 的基础隐私保障 你的 ISP 仍然看不到你的流量 VPN 提供商仍然无法记录你的活动 网站仍然看不到你的真实 IP 地址

风险具体在于关联性——如果有人能观察到你在多个不同服务器上的出口 IP 就能确定这些连接属于同一个人 这对以下用户最为关键:

  • 记者和活动人士——通过不同 Mullvad 服务器连接不同服务的人
  • 马甲账户——论坛运营和安全团队可以通过 IP 日志关联账户
  • 长期模式分析——当数据泄露暴露 IP 日志时 匹配 Mullvad IP 模式成为可能
  • BT 下载用户——在不同任务之间切换服务器的人

防护策略

可以继续安全地使用 Mullvad 以下是如何堵上这个指纹识别漏洞:

1. 定期轮换 WireGuard 密钥

最简单的修复方法:退出 Mullvad 客户端再重新登录 这会生成一个新的 WireGuard 密钥 从而产生完全不同的出口 IP 组合 在进行敏感活动之前做一次 或者建立例行机制(例如每周轮换一次) 如果使用第三方 WireGuard 客户端 你不会获得自动密钥轮换——需要手动生成新密钥

2. 避免不必要地切换服务器

每次连接新服务器都会暴露出你 IP 指纹中的一个数据点 如果你在进行敏感工作 每个会话固定使用一个服务器 除非必要 避免在不同国家的节点间跳转

3. 使用 Mullvad 的桥接和混淆功能

Mullvad 提供混淆协议(包括基于 Shadowsocks 的桥接) 可以为你的 VPN 流量再包裹一层 虽然这最初是为了绕过深度包检测和网络审查 但它也增加了关联攻击的难度

4. 多跳 VPN

通过两个提供商链式连接你的 VPN 例如 先连接任意 VPN 提供商 再通过 Mullvad 隧道传输 这打破了 IP 关联 因为中间 VPN 提供一个不同的可观察端点 IVPN 提供原生多跳 使用 Mullvad 时 可以通过 SOCKS5 代理实现

5. VPN 叠加 Tor

为获得最大匿名性 可以先通过 Mullvad 路由流量 再通过 Tor 网络(或反过来) 这结合了 VPN 的优势(改变 IP 对 ISP 加密)和 Tor 的多跳路由及流量分析抵抗能力 注意:这种方式速度较慢 且部分服务会阻止 Tor 出口节点

6. 针对特定场景考虑其他 VPN

如果你的威胁模型特别涉及在资源充足的对手面前隐藏多个在线身份 ProtonVPN 的共享 IP 模式或 IVPN 的多跳 + 共享 IP 方式可能更合适

为什么 VPN 不是伪劣产品

看到这样的研究 很容易得出结论说"VPN 没用" 但这是错误的解读 这里的发现不是说 Mullvad 被入侵了或恶意为之 这是一个善意设计的技术副作用——而且是可以缓解的

  • VPN 仍然加密你的流量不被 ISP 看到——你的 ISP 看不到你访问了什么网站或下载了什么
  • VPN 仍然防止基于 IP 的地理定位——你的真实 IP 不会暴露给访问的网站
  • VPN 仍然为网站提供静态 IP 表面——你获得与家庭 IP 不同的对待
  • 经过审计的无日志 VPN 仍然保证你的连接历史不被存储

真正的教训是纵深防御 没有任何单一的隐私工具能覆盖所有攻击面 VPN + Tor + 良好的操作安全习惯(定期轮换密钥 为不同活动使用不同身份)远比单独使用 VPN 强得多——但即使是仅使用 VPN 也远好于没有 VPN

隐私栈不是一个单一工具——它是一种分层方法。 Mullvad 存在一个隐蔽的指纹识别向量 这并不能否定成千上万种威胁模型中 VPN 是正确解决方案的事实 了解你的对手 了解你的工具的局限 并相应地分层防护

结论

关于 Mullvad 出口 IP 指纹识别的研究 是对理解真实世界 VPN 隐私的重要贡献 它没有揭示后门、日志丑闻或政府妥协 而是揭示了一个具有实际后果的隐蔽实现细节 针对一种特定的攻击场景:跨服务器关联

对于普通 Mullvad 用户——那些使用 VPN 防止 ISP 窥探浏览记录、绕过地理封锁、或想在公共 WiFi 上获得更好隐私的人——这个发现几乎没有什么改变 你的威胁模型并不包括一个能访问多服务器 IP 日志的资源充足的对手

对于注重隐私的用户——记者、活动人士、安全研究者、隐私爱好者——修复方法很简单:在进行敏感工作前轮换密钥 尽量减少服务器切换 并考虑叠加 Tor 或多跳配置

Mullvad 仍然是市面上最好的隐私优先 VPN 之一 这项研究改变不了这一点 它只是提醒我们:隐私不是一个购买决定——它是一种实践