来源:Meta Engineering Blog engineering.fb.com/2026/01/27/…
- WhatsApp 采用 Rust 语言构建了新的安全层,作为加强抵御恶意软件威胁的努力的一部分,已向用户推出。
- WhatsApp 将用 Rust 编写的媒体一致性库创建并分发到数十亿设备和浏览器的经验,证明 Rust 已具备全球规模的生产就绪能力。
一、媒体处理策略
WhatsApp 为超过 30 亿用户提供默认端到端加密的安全通讯服务。网络安全是一个对抗性领域,为确保用户能继续安全通讯,WhatsApp 不断调整和演进其网络安全策略。
WhatsApp 允许用户分享媒体和文档,并会对危险附件(如 APK 文件)发出警告。然而,罕见且复杂的恶意软件可能隐藏在看似无害的文件(如图片或视频)中。这些恶意构造的文件可能针对操作系统、系统库或应用本身的未修补漏洞。
为防范此类威胁,WhatsApp 越来越多地使用 Rust 编程语言,包括在其媒体分享功能中。Rust 是一种内存安全语言,具有众多安全优势。WhatsApp 认为这是全球范围内最大规模的 Rust 库部署。
二、2015 年 Android 漏洞:媒体文件保护的警钟
2015 年,Android 设备受到 Stagefright 漏洞的影响。该漏洞存在于操作系统提供的媒体处理库中,WhatsApp 等应用无法修补底层漏洞。由于用户更新系统往往需要数月时间,WhatsApp 开始寻找能在操作系统存在漏洞的情况下保护用户的方案。
当时,WhatsApp 已有一个名为 wamedia 的跨平台 C++ 库,用于发送和格式化 MP4 文件。团队对其进行了修改,使其能检测不符合 MP4 标准的文件——这些文件可能触发接收端脆弱的操作系统库中的 bug,危及目标的安全。该检查机制的推出使 WhatsApp 能比依赖用户更新操作系统更快地保护用户免受 Stagefright 漏洞影响。
由于媒体检查在下载时自动运行并处理不可信输入,团队很早就认识到 wamedia 是使用内存安全语言的首选候选项。
三、解决方案:大规模 Rust 应用
WhatsApp 没有采用渐进式重写的方式,而是与原有 C++ 版本并行开发 Rust 版本的 wamedia。团队使用差异模糊测试以及广泛的集成和单元测试来确保两个实现之间的兼容性。
两个主要挑战包括:引入 Rust 标准库导致的初始二进制文件体积增加,以及支持 WhatsApp 多样化平台所需的构建系统支持。WhatsApp 对此进行了长期投入。
最终成果:
- 用 9 万行 Rust 代码(含测试)替代了 16 万行 C++ 代码(不含测试)
- Rust 版本在性能和运行时内存使用方面优于 C++ 版本
- Rust 已全面推出至所有 WhatsApp 用户和多个平台:Android、iOS、Mac、Web、可穿戴设备等
随着时间推移,团队增加了更多针对特定文件类型中不合规结构的检查,以保护下游库免受解析器差异漏洞攻击。此外,即使结构合规,也会检查高风险文件类型的风险指标。例如,PDF 经常被用作恶意软件载体,其中嵌入的文件和脚本元素会进一步提高风险。团队还会检测一种文件类型伪装成另一种的情况(通过伪造的扩展名或 MIME 类型),并统一标记已知危险文件类型(如可执行文件或应用程序),以便在应用界面中进行特殊处理。
这套检查系统被统称为 Kaleidoscope(万花筒) ,它保护 WhatsApp 用户免受潜在恶意的非官方客户端和附件的侵害。虽然格式检查无法阻止所有攻击,但这一防御层有助于缓解其中许多攻击。
每月,这些库分发到数十亿部手机、笔记本电脑、台式机、手表和浏览器上,覆盖 WhatsApp、Messenger 和 Instagram 的多个操作系统用户。据其所知,这是 Rust 代码有史以来最大规模的部署,覆盖了多样化的终端用户平台和产品。
四、Rust 在 WhatsApp 应用安全中的定位
这只是 WhatsApp 众多安全投入的一个例子。WhatsApp 还构建了个人消息和通话的默认端到端加密、端到端加密备份、密钥透明技术、额外的通话保护等。
WhatsApp 在发现问题时会积极公开并追究不良行为者的责任。例如,WhatsApp 会发布 CVE(即使没有发现被利用的证据),以便用户看到安全公告后能快速更新。
为确保应用安全,WhatsApp 首先通过内部和外部审计(如 NCC Group 对端到端加密备份的公开评估)、模糊测试、静态分析、供应链管理和自动化攻击面分析来识别和量化风险来源。最近还扩展了 Bug Bounty 计划,引入了 WhatsApp Research Proxy 工具。
与行业中许多公司一样,WhatsApp 发现其发布的大多数高严重性漏洞都源于 C 和 C++ 语言编写的代码中的内存安全问题。为此采取三大并行策略:
- 设计产品以最小化不必要的攻击面暴露
- 为剩余的 C/C++ 代码投入安全保证措施(如 CFI、加固内存分配器、更安全的缓冲区处理 API、专业安全培训、开发指南、自动化安全分析、严格的问题修复 SLA 等)
- 将内存安全语言(而非 C/C++)设为新代码的默认选择
五、加速 Rust 采用以增强安全性
Rust 使 WhatsApp 安全团队能够开发安全、高性能、跨平台的库,确保平台上共享的媒体在各设备间保持一致和安全。这是为用户在幕后增加安全性的重要一步,也是其纵深防御方法的一部分。WhatsApp 和 Meta 的安全团队正在向感兴趣的团队展示 Rust 高影响力采用的机会,并预计在未来几年加速 Rust 的采用。