微信MMTLS加密漏洞大揭秘:10亿用户数据安全引担忧
微信MMTLS加密漏洞大揭秘:10亿用户数据安全引担忧
微信MMTLS加密协议的安全隐患
微信作为全球最大的即时通讯应用之一,每月活跃用户超过12亿。其安全性一直备受关注。最近的研究发现,微信使用的专有网络加密协议MMTLS存在多个安全漏洞,引发了广泛讨论。
MMTLS协议的技术剖析
MMTLS是微信基于TLS 1.3标准修改的加密协议。研究显示,虽然MMTLS在一定程度上提供了安全保障,但其修改引入了多个安全弱点:
确定性IV的隐患
MMTLS在加密过程中使用了确定性初始化向量(IV)。每次连接时生成一个IV,然后为该连接中的每个后续记录递增IV。这种做法与NIST的建议相悖,因为很容易导致IV重复使用。在AES-GCM加密模式下,重复使用(key,IV)组合是灾难性的,因为它允许从身份验证标签中恢复密钥。这使得攻击者可以从仅两个使用相同密钥和IV的密文中恢复明文。
此外,Bellare和Tackmann的研究表明,使用确定性IV可能使强大的对手能够暴力破解特定的(密钥,IV)组合。考虑到微信拥有超过10亿的用户基数,这种规模使得此类攻击在理论上成为可能。
缺乏前向保密性
现代通信协议通常要求具有前向保密性,以降低会话密钥的重要性。然而,MMTLS大量使用预共享密钥(PSK)。由于Shortlink传输格式仅支持单次往返通信,因此通过该格式发送的任何加密数据都使用PSK加密。这意味着如果PSK_ACCESS
密钥泄露,第三方将能够解密通过多个MMTLS连接发送的EarlyData。
更令人担忧的是,微信在启动时会创建一个长寿命的Longlink连接,该连接在应用程序运行期间持续保持打开状态。所有需要发送的加密数据都通过同一连接发送,这进一步削弱了前向保密性。因此,微信的网络流量通常不会在网络请求之间保留前向保密性。
业务层加密的问题
除了MMTLS之外,微信还使用了一层称为“业务层加密”的内部加密机制。这层加密存在多个严重问题:
- 元数据泄露:业务层加密不会对用户ID、请求URI等关键元数据进行加密。这个问题甚至被微信开发者自己承认,也是开发MMTLS的动机之一。
- 可伪造的genSignature完整性检查:可以伪造特定长度的签名。
- 密钥和IV重复使用:在分组密码模式下重复使用密钥和IV,如果两个明文相同,它们将加密为相同的密文。
- 加密密钥问题:服务器选择客户端使用的加密密钥,且仅使用可打印的ASCII字符,导致密钥熵最多仅为106位。
虽然这些问题在现代微信版本中由于被MMTLS包裹而难以直接利用,但在2016年之前,业务层加密是微信网络请求的唯一加密层,这表明历史数据可能面临风险。
安全影响与潜在风险
尽管研究人员目前尚未开发出能够完全破解微信加密的攻击方式,但这些实现方式与十亿级用户应用所期望的加密标准并不相符。例如,确定性IV和缺乏前向保密性等问题,都表明微信的加密方案存在明显短板。
腾讯对这些披露的安全问题作出了回应,表示正在逐步从问题较多的AES-CBC模式迁移到更安全的AES-GCM模式。这一举措表明腾讯也意识到了这些问题的严重性。
中国互联网生态的独特现象
这种偏好使用自定义加密方案而非标准协议的现象,反映了中国互联网生态系统中一个令人担忧的趋势。许多中国应用程序选择发明自己的加密系统,而不是采用经过广泛测试和验证的标准方案。
例如,包括微信在内的许多中国应用程序使用腾讯火星等开源基础设施组件,而这些组件可能缺乏适当的文档和安全指导。此外,一些中国应用程序还采用了自定义的域名解析方法来对抗DNS劫持,这进一步偏离了国际标准实践。
专家建议与未来展望
专家建议微信应该迁移到标准的QUIC实现。QUIC协议结合了传输层和加密层握手,只需要一次往返即可完成连接,而传统的TCP和TLS握手则需要两次往返。这不仅提高了网络性能,还提供了更强的前向保密性。
此外,微信的当前加密方案对每个请求执行两层加密,这使得客户端加密数据的工作量是使用单一标准化密码系统的两倍。迁移到标准协议将有助于减轻客户端的性能负担。
这种趋势不仅出现在微信中,其他中国主要云计算提供商如阿里云和腾讯云也都提供了自己的DNS over HTTP服务。这种偏离标准的做法可能会带来长期的安全隐患,因此呼吁采用国际标准的呼声越来越高。
随着全球互联网逐渐转向使用QUIC或TLS等技术来保护传输中的数据,这种偏离标准的做法可能会带来长期的安全隐患。专家呼吁微信及其母公司腾讯应该采用标准的TLS或QUIC协议,以提高应用程序的安全性,同时也为整个行业树立一个积极的榜样。