跳到主要内容

当某个 VPN 说“我们的代码是开源的”,它同时提出了两个主张。安全主张是:专家可以阅读代码并找出错误。信任主张是:你安装的东西就是他们读过的东西。这两点都值得核实,而核实并没有听起来那么难。不读一行代码,你也能在三十分钟里对一个开源项目了解很多。

本指南写给不是程序员、却想知道开源 VPN 的安全声明是否站得住脚的人。它给出一连串检查步骤、一张区分健康与不健康项目的表,以及一份半小时能完成的计划。如果你想先了解开源对 VPN 意味着什么、能覆盖服务的哪些部分,请先读开源 VPN 详解;本文讲的是检验本身。

先弄清你要检验的是什么

“开源 VPN”可能指非常不同的几件事。开始之前,先判断服务商实际声称的是下面哪一种。

  • 应用是开源的。 手机和电脑上程序的代码已经公开,局外人可以检查应用在你的设备上做了什么,比如发送什么、使用哪些权限。
  • 协议是开源的。 VPN 使用已公开的技术,例如 WireGuard 或 OpenVPN,其设计和代码已被广泛研究。这说明的是加密方面,而不是公司本身。
  • 服务器软件是开源的。 服务商服务器上运行的代码已公开。这很少见也很有价值,但你仍然看不到实际运行的是哪个版本。
  • 只有某个库或组件是开源的。 营销有时会把“开源”扩大到涵盖一个基本闭源产品中的一小部分。

把声明写成一句话,例如“Android 应用是开源的,去年经过审计”。下面的每项检查,都是在检验这句话的某一部分。如果服务商说不清楚哪些部分是开放的,把它记作你的第一个发现。

第一步:看代码仓库的“生命体征”

开源代码通常放在代码托管网站的公开仓库里。你不必看懂代码,也能读出它的健康状况。打开项目,查看这些信号。

信号 去哪里看 健康 令人担心
近期活动 最近提交的日期 最近几个月内有改动 多年没有动静,或者一次性上传一大坨
发布版本 发布或标签页面 带编号的版本和说明 没有发布版本,或只有指向别处的下载链接
维护者 贡献者列表 多位署名的人 只有一个账号,没有历史
问题反馈 Issues 标签页 问题有人回答,缺陷被修复 大量问题无人回应,或关闭了反馈
安全政策 说明如何报告漏洞的文件或页面 有清晰的联系方式和流程 完全没有
许可证 许可证文件 公认的开源许可证 没有,或有奇怪的限制
文档 README 与文档 讲清楚如何构建、如何设计 只有营销文字

这些都不能证明代码好,但它们说明项目是否还活着、是否由预期会被审视的人在运营。一个最后更新在四年前的仓库,而服务商的应用此后更新了好几次,说明公开的代码很可能不是你正在运行的那一份。

特别要留意仓库与产品是否对得上。把手机上应用的版本号与仓库中的最新发布版本对比。如果应用已经是第 8 版,而仓库只有第 4 版,你看到的就是一份旧副本。

第二步:确认下载的文件与源代码一致

这一步大多数人会漏掉,却是信任主张的核心。除非有办法把两者联系起来,否则公开的源代码并不能证明你下载的文件如何。

从弱到强,找这些迹象。

  1. 构建指南。 任何人都可以照着从源代码构建应用的说明。说明流程有文档,尽管大多数读者不会真去做。
  2. 公布的校验值(checksum)。 发布页面上列出每个下载文件的简短“指纹”。如果你能算出下载文件的指纹且与之一致,就说明文件自发布以来没有被改动。多数系统都有内置命令可以计算指纹,可以搜索你系统上的做法。
  3. 签名的发布。 开发者用加密密钥为发布版本签名,你可以验证签名。这说明文件来自持有密钥的人。
  4. 可复现构建(reproducible builds)。 不同的人用相同的源代码构建,得到完全一致的文件。这是发布的二进制文件与公开代码一致的最强证据。消费级 VPN 应用里很少见,所以不要期待,但如果项目提到了,请留意。
  5. 应用商店分发。 如果你从应用商店安装,商店会替你处理签名和分发,但这并不能证明构建结果与公开代码一致。

要现实一点:多数消费级 VPN 应用最多做到第 2 或第 3 步。把到达的每一步当作额外的证据,而不是通过与否。如果某个项目要你信任来自非官方网站、没有校验值也没有签名的下载文件,那就是换个来源的理由。同样的警惕也适用于第三方镜像的文件;风险下载通常什么样,可以看 Android 免费 VPN 应用检查清单。

第三步:读安全政策与公告历史

项目如何处理麻烦,比它在顺利的日子里的表现更能说明问题。

  • 安全政策。 找一个通常叫 SECURITY 的文件,或服务商网站上的“安全”页面。它应当说明怎样报告漏洞、谁来接收、多久回复。欢迎报告的项目,更有可能听到问题。
  • 公开的安全公告。 许多项目会保留一份过去漏洞的列表,附日期、严重程度和修复版本。列表里有条目并不是坏事,它说明问题被公开地发现和修复。一个用了多年却声称从未出过任何问题的项目,要么非常小,要么没有告诉你全部。
  • 修复速度。 比较问题被报告的日期与修复版本发布的日期。迅速而清晰的说明是好迹象。
  • 公共漏洞数据库。 搜索项目名称加上“vulnerability”或“CVE”,看看搜到什么、项目如何应对。解读时要小心:一个流行、被充分研究的项目,条目会比无名项目多,原因仅仅是看的人更多。
  • 公告的措辞。 诚实的公告会说明发生了什么、用户该怎么做。把安全修复写成含糊的“小改进”,比平实的描述更糟糕。

记下最近一次安全修复的日期。如果项目仍在使用而最后一次修复已经很久远,要么它非常稳固,要么没人在看;接下来的两步有助于你区分。

第四步:寻找对开源代码的独立评审

开源代码的意义在于别人可以阅读。检查他们是否真的读过。

  1. 搜索第三方评审,来自安全公司、研究者或学术团体。找报告、博客或论文,并看它是否写明了所检查的版本。
  2. 阅读范围,用与任何审计相同的问题:谁写的、检查了什么、哪个版本、什么时候。如何阅读 VPN 审计报告列出了这些问题。
  3. 看后续发生了什么。 项目是否公布了发现并加以修复?评审之后有修复,比一份干净却没有细节的报告更有力。
  4. 单独查看协议层的评审。 成熟的协议有公开的分析。WireGuard 白皮书描述了其设计,OpenVPN 社区资源记录了该协议。关于 VPN 架构的公共标准,NIST SP 800-77 提供了这类系统必须做对哪些事的背景。
  5. 区分库与产品。 受人尊敬的开放协议,放在封闭或运营不善的应用里,仍然是好坏参半。对某一层的评审,并不覆盖另一层。

如果完全找不到独立评审,这并不意味着项目不好,但意味着开源的好处只停留在理论上:真正读过它的人可能很少。

第五步:检查依赖项与应用联系的对象

即便写得很好的代码也要依赖别的代码。现代应用包含几十个第三方组件,每一个都是问题可能进来的地方。

  • 依赖清单。 许多仓库带有列出所用库的文件。你不需要逐一评估。看有没有这份清单,以及项目是否有更新它的迹象。
  • 统计分析与广告组件。 无论代码是否开源,它们出现在应用里都是隐私问题。可以在仓库里搜索“analytics”“tracking”“advertising”之类的词,或阅读应用商店页面上的隐私声明。
  • 网络行为。 开源代码让研究者能看到应用联系了哪些服务器。如果项目有记录,很好;如果没有,视为缺口。
  • 权限。 把应用请求的权限与 VPN 真正需要的对照。一个 VPN 应用若要联系人或位置权限,必须给出解释。

至于更大的问题,即你最终要信任哪些方,VPN 信任模型梳理了从你到服务商、服务器托管方和软件的信任链。

三十分钟检验计划

第一次可以把它当作脚本。笔记记在一页纸上。

  1. 0-3 分钟:写下声明。 一句话,写明声称开放的具体部分。
  2. 3-8 分钟:找到仓库。 顺着服务商网站上的链接找。如果五分钟都找不到,记下来。检查许可证与最近活动日期。
  3. 8-13 分钟:对比版本。 把你要安装的应用版本,与仓库中最新的发布版本对上。
  4. 13-18 分钟:看发布与校验值。 记下是否有校验值、签名或构建说明。
  5. 18-23 分钟:读安全政策与公告。 记下最近一次修复的日期,以及问题是如何描述的。
  6. 23-28 分钟:搜索独立评审。 记下作者、范围、版本和日期。
  7. 28-30 分钟:打分。 给五个方面(活跃度、版本一致、发布完整性、安全处理、独立评审)各打一个“强”“部分”或“缺失”。

这样解读分数。大部分为“强”:声明得到很好的支撑,同时要考虑下面的局限。有好有坏:声明部分属实,你应当记下哪些缺口对你的使用场景重要。大部分“缺失”:开源标签更像营销而不是安全属性,你应当依靠关于该服务商的其他证据。

开源代码无法告诉你的事

即使得分完美,也有天花板。请记住这些局限。

  • 它无法显示服务器上运行的是什么。 公开的服务器代码,并不能证明服务商的在线机器运行的正是那份代码。对运行中系统的审计是另一个问题,见如何核实 VPN 的日志审计声明。
  • 它无法显示公司如何处理数据。 商业做法、数据保留和法律风险都在仓库之外。
  • 它无法证明有人在读。 只有真有专业的人去看,开源才更安全。一个安静的仓库可能根本没有评审者。
  • 它不能弥补用户一侧的问题。 钓鱼、弱密码和设备上的恶意软件,不受 VPN 许可方式的影响。请读 VPN 无法保护你的方面。
  • 它只是某一时刻的状态。 去年得分很高的项目,可能已经易手或改变了方向。

对于需要高度保障的读者,比如在真实威胁下工作的人,EFF Surveillance Self-Defense 指南是比任何消费者清单更好的起点,也建议寻求针对个人情况的建议。

检验时的常见错误

  • 把“开源”当作认证印章。 它是邀请大家检查,而不是有人检查过的证据。
  • 看星标数量或人气来判断。 人气衡量的是关注度,不是质量。
  • 从镜像站下载来“测试”开源代码。 镜像本身可能就是风险。
  • 只检查协议。 强大的协议可能放在薄弱的应用里。
  • 忽视日期。 对第 2 版的评审,几乎说明不了第 9 版。
  • 期待完美的分数。 很少有消费级 VPN 能做到;目标是得到现实的图景。

小结

检验开源 VPN 的安全声明:明确说出到底什么被声称是开放的;检查仓库的活跃度、许可证和版本是否一致;看发布文件是否附有校验值或签名;阅读安全政策和过去的公告;寻找写明版本和范围的独立评审;并审查依赖项与权限。三十分钟的过程会让你对每个方面得出“强”“部分”或“缺失”的评级。开源让别人可以验证,但它从不保证他们真的验证了,也不保证你下载的文件与源代码一致,或服务器运行的就是它。

如果你更愿意用简单、可检验的条件来比较服务商,可以看看价格页面,了解预付费 VPN 套餐是如何提供的,并把同样的问题用在它身上。

常见问题

检验开源 VPN 一定要读源代码吗?

不需要。大多数有用的检查是围绕代码的项目本身:维护是否活跃、发布文件是否签名、过去如何处理安全问题,以及是否有独立评审者检查过。

代码公开就说明 VPN 安全吗?

不能。公开代码让别人可以找缺陷,但不保证真有人看过,也不保证你下载的应用就是用这份代码构建的,更不保证服务商的服务器运行的就是公开的版本。

开源声明里最快能识别的警示信号是什么?

链接不指向真实、较新的源代码,或者项目没有发布版本、没有动静、也没有报告安全问题的渠道。没有可用仓库的“开源”声明,只是营销。

闭源 VPN 一定更差吗?

不一定。闭源代码仍可由外部审计机构在协议下审查,只是你无法自己检查,所以独立报告和服务商的过往记录就更重要。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

隐私指南

开源 VPN 应用:代码透明为什么重要

开源常被当作可信的证明。本文说明它在 VPN 里覆盖什么、遗漏什么,以及普通用户怎样自己核实。

阅读约 9 分钟

隐私指南

VPN 独立审计:如何读懂审计报告

“已审计”的标志不是保证。本文介绍 VPN 审计的类型、报告结构,教你读懂范围、发现项和日期,并说明审计无法告诉你什么。

阅读约 9 分钟

隐私指南

使用 VPN 时,你把信任交给了谁

打开 VPN 并没有让信任消失,只是换了位置。这里列出你依赖的每一方、各自能看到的信息,以及缩小信任范围的办法。

阅读约 9 分钟

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟

选购指南

如何比较 VPN 服务商:隐私与透明度评分表

排名只反映别人看重什么。这份评分表让你用自己能核实的证据,比较任何两家 VPN 服务商的隐私与透明度。

阅读约 9 分钟