多伦多大学公民实验室最近进行的调查发现了微信自定义加密协议中潜在的安全漏洞。 出现这些弱点的原因是,月活跃用户超过 10 亿的微信开发人员修改了传输层安全 (TLS) 1.3 协议,创建了一个名为 MMTLS 的版本。
微信使用双层加密系统。 首先,被称为"业务层加密"的内层对明文内容进行加密。 加密后的内容在传输前使用 MMTLS 进一步加密。
虽然这种双层加密提供了一定的保护,但也发现了几个令人担忧的问题。 业务层加密无法保护敏感元数据,如用户 ID 和请求 URI。 此外,MMTLS 使用确定性初始化向量 (IV),这与现代加密的最佳实践相悖。 此外,加密缺乏前向保密性,而这正是长期安全性的关键特征。
2016 年之前,微信的网络请求仅依赖于业务层加密。 MMTLS 的引入似乎是为了解决之前系统的缺陷。
在某种程度上,这种做法是有效的。 在这项研究中,研究人员无法成功攻击微信的加密,因为易受攻击的业务层加密现在受到 MMTLS 层的保护。 在缺乏 MMTLS 的早期微信版本中,业务层加密是暴露的,可能会受到某些攻击。 MMTLS 的加入使内部加密层免受直接攻击,从而大大提高了微信的整体安全性。
不过,研究人员指出,微信的实施没有达到这种规模的应用程序应有的加密标准。 此外,研究人员发现的其他"小"问题在标准、未修改版本的 TLS 中也不存在。
研究人员还指出,在中国,安全开发人员的独特做法是创建自己的定制密码系统,而不是使用既定标准。 这些自制的解决方案通常无法与 TLS 1.3 或 QUIC 等广泛使用的协议相媲美。 公民实验室将此描述为"中国安全领域独有的一种日益增长、令人担忧的趋势"。
例如,一些中国应用程序采用自定义域名解析方法来对抗互联网服务提供商的 DNS 劫持。 此外,包括微信在内的许多中国应用程序使用腾讯火星等开源基础设施组件,而这些组件可能缺乏适当的文档和安全指导。
Citizen Lab 研究人员提出的主要建议是,微信母公司腾讯应采用标准 TLS 或 QUIC 和 TLS 的组合来增强应用程序的安全性,这也许并不令人意外。