[选译]

Source: https://blogs.fsfe.org/larma/

About backdoors in Signal and other apps

关于Signal和其他应用的后门

Posted on January 16, 2017

… or why it’s useless to have the most secure crypto system in the world, when using non-free and untrustworthy tools and libraries to implement it. 或许想说,为什么用上了世界上最安全的加密系统,但(它在执行时)用了非自由[*]和不信任的工具和库的话,就都是白扯。

tl;dr: There is a “backdoor” in Signal nobody cares about, only Google can use it. 「太长不读」(简短地说):Signal中其实也有个「后门」只是没人介意,只有谷歌可以使用这个「后门」。

如果你用Signal,你可能是因为它是开源的,被主流的安全和隐私专家审计过并推荐,而 WHatsapp却是闭源的,由脸书公司持有。

但你错了。Signal自己的代码虽然开源,但它不能被成为自由软件,因为它采用了不开源的外部库。这就是为什么我要看看Signal到底怎么回事。

谷歌Play服务

谷歌play服务由几个分开的部分组成。就 Signal来说,它包括了谷歌Play服务的三个模块:谷歌云信息、显示谷歌地图和请求用户的当前位置。这三个模块工作方式不同但都明显地会向谷歌泄露特定的数据,并通过 使用未固定的证书的 TLS 加密连接发送。再想想,我们可以也认为谷歌也是邪恶一方的(他们可能是,因为他们得遵守美国法律),而且 Signal 必须依赖 谷歌Play服务才可以运行(这意味着只有谷歌官方原版安卓才行)。

地图整合

当你选择分享一个地理位置时,Signal 会显示一个小地图,上面对选定的地点放了标记。等地图加载后,那地图就会被截图并发送到对方,还附带一些描述该地点的字串。这功能由 MapView 提供,可知其已在开启一个 Signal 对话时就已经初始化了。关键就在于这个 MapView 其实只是加载真正的 MapView 的封装器,后者的代码来自谷歌Play服务二进制代码……(后面略)

谷歌Play服务的代码可以很容易地在后台由谷歌商店更新,更新后代码就可直接在你的 Signal 里运行(而且可以完全不受用户控制)。还能更坏么?可以。Apk 更新虽然可以被用户检测到,但谷歌play服务使用了一种动态模块来加载系统,这系统看上去有能力把地图代码替换为一个没放在系统里的文件,那文件只要被谷歌签名了就行。也就是说,谷歌有可能通过推送更新通知的方式,替换相关代码/文件,在 Signal 里执行自己的代码,可以上传你的完整本地聊天记录,并在事后完美删除自己的痕迹。

什么叫“看上去有能力”?好吧当然很难把话说得绝对。相关二进制代码是高度混淆的,因此很难去理解(到底是哪块代码)。或许有人原意费时间去搞明白,但要知道它在下一新版本时可能又会不一样……

谷歌云信息和其他元信息

Signal 使用谷歌云信息(GCM)来告诉客户端是否有新消息。这些发自 Signal 服务器、使用 GCM 的数据包没包括什么实体信息(没有文本、甚至无加密字符,只是友好的ping)。但是,他们都是元信息。都有哪些元信息呢?

其实谷歌知道每个人很多信息。一般安卓用户会允许谷歌访问他们的通讯录、已安装的应用、哪些应用何时启动、你的当前位置、你输入的文字如果你用系统自带键盘的话(即 Gboard),还有更多。通常都只有一部分这些信息会分享到谷歌服务器,但如果谷歌自己是攻击者的话……

然鹅,你不大能说这些就叫「后门」吧?但是 元信息可以杀死你的。

尽管没有使用 Gboard,单单 GCM元信息 + 通讯录 + 在前台的应用 就仍然能收集到足够的信息:谁在何时与谁聊天。没使用 GCM 的话,这些数据只能被 Signal服务器可见。

到处都有后门的咯(?)

以上分析同样适用于同样采用了谷歌play服务的应用。我不知道其他加密通讯工具,但 Whatsapp 似乎也是有同样问题的。

但这真的是后门吗?其实,谷歌,还有 Signal/Whatsapp开发者,都不是有意要加后门,而是要让应用更用户友好一些,虽然他们不是不能把相关功能关掉,或把相关代码放在单独的沙盒里运行。很不幸,用户友好之于安全总是不能两全。

修复它

一个首要的应对方法(反而不是针对特定问题),就是你不能信任非自由代码的通讯工具——哪怕只有一部分也不能信。Signal is, WhatsApp is, Facebook Messenger is, Google Allo is (非自由的软件)。

当然你可以修改 Signal 代码。LibreSignal 就是个不用谷歌服务的替代,但是后来因为 WhisperSystem 公司的要求而中止了。

或者你直接换到更好的系统好了。XMPP 就可以。它是「前向保密」的,并可以让用户自建服务器,使用用户自己写的客户端。即使不用 OTR(加密技术)其安全水平也和 Signal 旗鼓相当。再在一部 无谷歌服务的 安卓手机上用 XMPP客户端(如 Conversations)你甚至能比 Signal更安全。

惊艳吧?



译者注释:「自由软件」有特定的含义,见:gnu.org



Copyleft

Initially translated by @mdrights

Released under CC-BY-SA 4.0

Posted on January 16, 2017