来源: VPN + Tor: Not Necessarily a Net Gain – pastly@home
VPN + Tor:并不一定更安全
本文最初发表于我旧博客,时间是 2016 年 11 月。此处保留原文,但可能未作更新。
很多人都建议同时使用 VPN 和 Tor,通常的做法是把 VPN 放在用户与她的入口节点之间(通过 VPN 连接 Tor)。较少见的建议,则是把 VPN 放在 Tor 的出口节点与目标网站之间(通过 Tor 连接 VPN)。乍看之下,这些做法似乎不错,至少也不会有坏处。尤其是第一种,听起来似乎肯定有帮助。加密越多总是越好,对吧?
本文将说明,为什么我认为使用 VPN 配合 Tor,并不像人们说得那样显然能提升安全性。添加 VPN 可能不会让用户更不安全,但很可能也没有带来任何提升。
2019 年 6 月更新:
-
请记住,你必须信任 VPN 公司能妥善保护自身安全。为什么要增加更多故障点?这家 VPN 公司犯了一些愚蠢的错误,而且在有人负责任地向他们披露问题后,他们还试图起诉对方(存档)。与某个普通的住宅互联网服务提供商相比,我认为 VPN 公司更容易成为黑客的肥羊,因为黑客可以借此揭露许多从事非法或令人难堪活动的人。
-
调整了一些措辞。
2019 年 4 月更新:
-
我很喜欢的一篇反对 VPN 的 security.stackexchange.com 帖子。文章认为,在 Tor 上再加一层 VPN 的好处“充其量也很有限”。
-
重写了“信任”一节中的一句话。
2018 年 12 月更新: 补充了一些更有力的理由,说明为什么不该通过 Tor 使用 VPN;这些理由早就该加进来了。
2018 年 4 月更新: 以下是我认为大家都应该读一读或了解一下的内容。
-
VPN 会谎报自己的地理位置,而且这很容易做到(存档)。另请参阅发表于 IMC 2018 的 如何识破代理的谎言。
-
避开某些国家的中继,并不能有效防止流量经过这些国家(PDF)。此外,如果你认为某些国家确实属于你现实中需要考虑的对手模型,那么你一开始就应该把它们视为网络层面的对手,而不是仅仅把它们看作 Tor 中继运营者。
-
gist.github.com 上一篇随手贴出的文章,但我不同意你应该自行搭建 VPN 服务器。那基本上等于给你打上一个完美的指纹,让你的入口节点以及沿途的网络层面对手都能识别你。(存档)
-
VPN 服务商会为了吸引更多客户而做出不负责任、偷懒的事,所以大概不该指望他们能把那些复杂的技术细节处理正确。(存档)
我新增了一节,讨论如何向浏览器恶意软件隐藏你的 IP 地址。我也在正文中穿插补充了一些想法和信息,但没有标出哪些内容是新增的。此外,我还修正了一些拼写错误。
信任
首先,我想谈谈信任。 VPN 完全是一个你必须百分之百信任的单一实体或单一环节。 使用 Tor 时,你不必信任任何一个单独的实体或环节。为了安全地使用 Tor,用户不必信任自己经过的每个 Tor 中继。只要关键中继没有被攻陷、没有串通合作,也没有其他恶意行为,用户就能受到保护。
VPN 用户则完全信任自己的 VPN。他们相信 VPN 服务商:
- 不会保留付款信息;
- 不会保留日志;
- 不会向他们的对手分享信息;
- 有能力保护自己的网络和设备安全。
某家 VPN 服务商应该得到完全信任吗?也许吧。它的用户是否完全信任它?是的——无论用户是否意识到自己给予了服务商多少信任。
暂且假设,只使用 Tor 给 Alice 带来的“保护”,与只使用 VPN 一样。只使用 Tor 时,她不必信任任何一个单独的实体;使用 VPN 时,她却必须完全信任 VPN 服务商。
那么,既然她可以使用一种不需要信任任何单一实体的工具,为什么还要使用一种要求用户信任某个实体的工具呢?
这就引出了一个问题: 如果 Alice 选择百分之百信任自己的 VPN 服务商,并且想要同时使用 Tor 和 VPN,那么 VPN 能带来任何额外价值吗? 我会根据 VPN 是放在 Tor“之前”还是“之后”,分两部分讨论这个问题。
通过 VPN 连接 Tor
现在,我先从最容易实际实现、也最常被推荐的方式谈起。我更愿意把这一部分写成一系列理由,来说明人们为什么会考虑这样使用 VPN。
Tor 被封锁
不管出于什么原因,Alice 无法使用 Tor。也许她所在公司的防火墙管得特别严,或者她所在国家的防火墙限制极多。但显然,防火墙并不会封锁 VPN。
Alice 应该先尝试使用 Tor 网桥。网桥就是未公开列出的 Tor 入口中继。如果她是因为尝试连接已知的 Tor 中继 IP 地址而遭到封锁,网桥就能帮上忙。
如果这样也不行,那么她的流量可能是因为看起来像 Tor 流量而被封锁。毕竟,Tor 流量是可以被识别的。如果情况似乎如此,Alice 可以尝试使用带有可插拔传输的网桥。可插拔传输会改变 Tor 流量的外观,让它(希望能够)不被识别,从而避免被封锁。obfs4 是一种常见的可插拔传输,它会让 Alice 与网桥之间的 Tor 流量看起来像加密后的乱码。meek 是另一种可插拔传输,它会让流量看起来像是 Alice 正在访问 Amazon 或 Microsoft 云上的某个网站。
向 ISP 隐藏 Tor 使用情况
首先,Alice 应该考虑一下,她的对手是否真的有能力从她的 ISP 那里获取信息。她正在做的事,在她所在的地方真的违法吗?会让她感到难堪吗?她的对手会(或能够)采取多大程度的行动来查明她的身份?如果 Alice 只是想向伴侣隐瞒一个令人难堪的习惯,或者绕过自己所在国家糟糕的审查制度,那么隐藏她使用 Tor 的事实甚至可能没有必要。
此外,如果 Alice 并没有做什么坏事,那么不隐藏自己使用 Tor 的情况,反而有助于减轻 Tor 的负面污名。很多人出于各种不同的理由使用 Tor。如果 Alice 认为,仅仅使用 Tor 就足以让她被列入“潜在坏人”名单,那么她应该为此感到自豪。她并不是坏人,而且她正在拉低那份名单的质量。如果所有人都使用 Tor,那么所有人都会上这份名单,这份名单也就毫无价值。
如果 Alice 确认自己确实需要隐藏 Tor 使用情况,那么她应该先考虑使用网桥,或使用带有可插拔传输的网桥。相关信息请参阅上一节。
向全球被动对手隐藏真实 IP
先说明一点:并不是每个人都应该直接假设自己需要应对全球被动对手(GPA)。
全球被动对手能够在“各处”监视并记录互联网流量。这里的“各处”,是指足够多的地点;在 Tor 的情境下,这意味着他们既能监视或记录进入 Tor 网络的流量,也能监视或记录离开 Tor 网络的流量。一种实现方式是由全球被动对手自行运营 Tor 中继,但这并非必要。他们也可以在“各处”与 ISP 和自治系统(AS)合作,或者入侵、攻陷这些网络,从而充分观察 Tor 网络边缘的流量。
在 Alice 与她进入 Tor 网络的入口之间放一个 VPN,听起来似乎会有帮助,对吧?监视并关联流量的全球被动对手,会把她的流量关联到 VPN 的 IP 地址,而不是她自己的 IP 地址。
我最好的反驳,可以用几个反问来概括:如果她的对手强大到足以监视进入和离开 Tor 网络的流量,难道他们就没有能力监视进入和离开某一家 VPN 服务商的流量吗?
VPN 如此流行,全球被动对手难道不太可能已经采取措施,攻陷最受欢迎的 VPN 服务商了吗?
为什么有人会以为,他们试图防范的全球被动对手会被 VPN 彻底拦住?如果他们能够监视将近 1000 个 Tor 出口节点中的“足够多”以及大约 2500 个 Tor 入口节点中的“足够多”,那么以下事情为什么就做不到呢?
- 通过法律途径从 VPN 服务商那里获取信息;
- 从 VPN 服务商两侧的 ISP 或自治系统获取信息;
- 获准监视 VPN 网络上的流量;
- 通过攻陷 VPN 网络来监视其流量。
如果 Alice 认为自己需要担心全球被动对手,那么我认为她以为对手无法在 VPN 背后找到她,是愚蠢的。
向基于浏览器的恶意软件隐藏真实 IP
从过往情况来看,这类漏洞似乎很有用。它们只在现实中被发现用于针对那些做着可怕事情的人。它们的目标也只限于 Windows 用户(很可能是因为 Windows 用户数量最多,而且攻击者花最少的工夫就能获得最大的回报)。如果你没有做什么可怕的事,大概不会遇到这类漏洞;如果你不用 Windows,这些漏洞大概也无法攻击你。无论是因为你不是个糟糕的人,还是因为你没有使用最流行的操作系统,你都避开了这些漏洞。
不过,也许你不认为这类漏洞很少见且目标明确。好吧……
如果你假设自己的对手能够攻破 Tor Browser,让它发出不经过 Tor 的网络请求(或以其他方式收集你或你电脑的身份信息),那么他们很可能还具备更多能力。
如果你认为他们能够完全逃出 Tor Browser 的沙盒,并以你的普通用户身份运行任意命令,那么像 Tails 这样的系统,很可能比 VPN 更能应对这种对手。
如果你认为他们既能逃出 Tor Browser,又能在你的电脑上获得 root 权限,那么你就完了:Tails 没用,VPN 没用,Whonix 恐怕也没用。断开互联网连接吧。
通过 Tor 连接 VPN
现在,我转而讨论通过 Tor 网络连接 VPN 的方式。人们通常会考虑这样做,是因为他们想要一个不会变化、且与 Tor 无关联的 IP 地址。这样做会丢掉 Tor 带来的绝大多数安全收益。它对 Tor 的破坏太大,而你又必须如此信任 VPN 公司,因此还不如干脆完全不用 Tor。
流量模式
先说明一点:我自己从未实际尝试过这种做法,但我对其运作方式足够了解,因此有信心提出一些判断。
据我所知,连接 VPN 最常见的方式是使用 OpenVPN。OpenVPN 使用 UDP 时效果最好,但技术上也支持使用 TCP。Tor 无法传输 UDP,因此如果使用 OpenVPN,用户就必须使用 TCP 模式。
TCP 模式有什么问题?很遗憾,具体细节相当技术化,不过我会尽量概括说明。
TCP 会保证数据可靠、按顺序传送。它实现这一点的方式之一,是重新传送丢失的数据包。
使用 Tor 时,Alice 的出口节点与目标地址之间有一条 TCP 连接。如果从出口节点的角度看,她的目标是一个使用 TCP 的 OpenVPN 服务器,那么就会出现一条 TCP 连接中再套着另一条 TCP 连接。如果 Alice 最终执行的操作也使用 TCP(例如浏览网页),那么 Tor 的 TCP 连接中就包含一条 OpenVPN 的 TCP 连接,而其中又包含 Alice 实际使用的 TCP 连接。只要其中任何一条连接检测到数据包丢失,所有连接都会察觉,降低发送速率,并重新传输它们认为丢失的数据包。这会严重损害性能。
现在的 Tor 其实并没有那么慢……除非你做了这种极端的事。
安全性
那么,如果 Alice 不在意性能大幅下降,她能得到什么?她当然能得到自己想要的、非 Tor 的 IP 地址。她能否获得前文“通过 VPN 连接 Tor”一节提到的其他好处?
Alice 的 ISP 会看到她正在与 Tor 入口节点通信。她可以使用网桥(甚至是带有可插拔传输的网桥)来避免这种情况。有关网桥的信息,仍请参阅这一节。
她能向全球被动对手隐藏自己的真实 IP 地址吗?我已经解释过,认为对手不能从 VPN 服务商那里获取信息、却能够对 Tor 用户进行流量分析攻击,这种想法很荒谬。所以,如果她想保护自己免受全球被动对手的侵害,那么在我看来,她不应该认为通过 Tor 连接 VPN 比直接使用 Tor 更安全。
最后,还要再次考虑信任的问题。Alice 必须确信自己的 VPN 服务商值得她信任。她必须采用无法追溯到自己的方式向 VPN 服务商付款。她必须确信 VPN 服务商不会保留流量日志或连接日志。她还必须相信自己永远不会犯错,在没有使用 Tor 的情况下连接到 VPN。并且,要让这个 VPN 带来任何好处,她还必须说服自己:自己的对手不可能与 VPN 服务商合作、攻陷 VPN 服务商,或与 VPN 服务商附近的 ISP 和自治系统合作、攻陷它们。
最后的想法
我通常是最先提醒大家“每个人的安全需求都不一样”的人之一。我一般很反感有人一看到别人寻求建议,就立刻假设对方需要防范极其强大的对手。我说的内容可能并不都适用于你,读者;而且受限于我的经验,我或许也遗漏了你关心的问题。不过,我见过很多关于在 Tor 上使用 VPN 的讨论,希望这篇冗长的文章能帮助你做出知情的决定。