Messenger没有被强制监听但。。。

 

1

八月以来,Reuters报道了FBI和Facebook之间关于窃听Messenger通话的秘密合法斗争。The verge网站在2015年关于Messenger逆向工程的文章中经过分析发现了一系列的问题。很难找到与此相关的技术信息,因此我无法深入交流关于窃听的具体细节。

Reuters现在宣布Facebook不再被强制监听Messenger通话,并且FBI声明:目前没有实际的方法可令执法部门监测通话。

这对于注重隐私的用户来说是个好消息,但是我决定从新的角度分析,对于Facebook不再监听这件事我的发现使我吃惊。

Messenger和WebRTC

我们将2015年Messenger和它对WebRTC的使用作为我们黑盒探索系列的一部分。它使用了Google的开源webrtc.org library并且做了一些修改。对于App之间的通话它还使用了SDES机制来加密。

SDES vs DTLS-SRTP和监听

WebRTC规范明确说明WebRTC必须不能使用SDES。自从2013年Eric Rescorla的IETF展示以来,对此的技术论证就没有改变。

在那以前,WebRTC中的密钥交换主要有SDES和DTLS-SRTP。SDES意味着用于加密VoIP流量的密钥通过信令服务器发送。从密码学家的角度来看, SDES还意味着信令路径上的攻击者可以悄悄的监测密钥改变,接着捕捉到包,而不被发现。

DTLS-SRTP在很多方面表现的更出色。它使用了TLS握手来产生密钥材料,意味着发信服务器不能获取密钥材料。只有让信令服务器进行主动的‘中间人’攻击才可以监测通话。这比单单记录SDES密钥更费时,而且可以被监测到。

单纯从技术角度来看,DTLS-SRTP的缺点就是提升了性能需求。然而,ECDSA证书即使在移动设备上也可以快速生成,它进一步支持了DTLS-SRTP可用性的观点。这是猜测,但是回到2015年Facebook可能已经考虑到移动设备上的表现,并且在移动端使用了MUST NOTSDES机制,同时为了兼容性在浏览器中使用DTLS-SRTP。这在早期并不是唯一的SDE实现,Google Hangouts也做了同样的事。

Facebook Messenger喜欢WebRTC

再次谈到Messenger之前,我需要回答The Verge上Russell Brandom的问题。Chad和我这周末做了这个:

2

我们在浏览器和两个Messenger移动客户端都看着对方。第一次通话我使用了Chrome,Chad表示在他的安卓设备上没有发现意味着SDES使用的a=crypto。

3

因此肯定使用了表现不错的DTLS-SRTP。另外我们还看到了旧的基于RTP的数据频道,它不能与浏览器相互操作使用,因此我们并不能轻松知道它们的作用。

然而,使用网络输出查看发信,结果显示SDES的a=crypto依然存在:

4

如果你能在网络输出看到它,你同样可以在Facebook服务器中看到。如果你能想要查看自己,包含提供SDP的请求比其它帮助找到它们的请求大得多。你可以在此查看所有的offer.

这很奇怪,看起来像是JS代码,但是在将它传入WebRTC API前移除了a=crypto。这是因为2017年12月Google改变了当DTLS-SRTP的a=fingerprint和SDES的a=crypto同时存在的后备行为。现在产生了一个错误:

Failed to set remote offer sdp: SDES and DTLS-SRTP cannot be enabled at the same time.


感谢Google将SDES的使用变得更不方便!

这并不是好事,我们使用了iOS和Android上的Messenger App,重复试验,也没有发现任何DTLS握手的标志。

我们使用Wireshark抓包,过滤所有UDP流量,查看结果:

5

我们没有看到象征着DTLS开始的DTLS客户端hello.我们只看到了一些STUN信息,接着RTP包。同时,我们在app与浏览器通话中找到了SDP,这意味着使用了SDES。

结论

关于诉讼,我有很多问题。Facebook真的得到了实际的通话数据么?或者说RTP包?或许没有,因为1对1通话大多数时间使用了点对点连接,这可能也是为什么Reuters文章说你只是一个小的技术角色。

执法部门可能已经通过其它途径获取了数据,例如通过移动通信基地台抓取了信息。伴随着SDES,可以与Facebook的密钥信息配对。Facebook同样可以要求通过TURN中继服务器传达通话,这是很正常的,也使得在那儿监听变得有可能。

但是Facebook坚称,它不会改变软件或破坏它的用户来帮助FBI。

在技术层面,看到Messenger App之间还在使用SDES令人失望。IETF在2013年决定WebRTC中不能使用SDES。即便信息不加密,使用DTLS-SRTP也会显著增加监听耗费。这也会防止追溯解密。像Google Duo之类的产品已经证明,通过使用DTLS-SRTP你可以建立一个快速通话。
DTLS-SRTP在Messenger中同样支持,因此你只需要关掉旧东西。

原文标题:Messenger was not forced to wiretap but…
作者:‘Philipp Hancke’

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营