摘要
1) 一句话总结 WhatsApp 将其媒体处理库从 C++ 重写为 Rust,在 30 亿台设备上部署了名为 Kaleidoscope 的系统,以提升内存安全性并防御恶意媒体文件攻击。
2) 关键点
- 代码规模缩减:通过将媒体处理库从 C++ 重写为 Rust,代码量从 16 万行大幅减少至 9 万行。
- 部署规模:该库每月通过 WhatsApp、Messenger 和 Instagram 推送至数十亿台终端设备,涵盖手机、桌面设备、智能手表及网页浏览器。
- 重写动机:受 2015 年 Stagefright 漏洞事件启发,公司意识到需要使用内存安全语言来解析来自非可信来源的二进制媒体数据。
- 迁移策略:团队构建了完整的 Rust 版本与原 C++ 版本并行运行,通过差分模糊测试和大量集成测试验证兼容性后,才完成最终迁移。
- 性能收益:Rust 版本的部署不仅带来了性能提升,还降低了内存使用量。
- 构建系统优化:为解决二进制文件体积问题,团队将构建系统从 Gradle/CMake/Cargo 迁移至 Buck2,并利用 LTO(链接时优化)和最新的 clang 工具链进行压缩。
- Kaleidoscope 系统:扩展后的媒体库可检测可疑模式(如内嵌脚本的 PDF、扩展名不匹配、伪装成图片的可执行文件),并在用户界面中触发警告。
- 整体安全策略:Meta 采取三管齐下的策略:减少攻击面、强化仍在使用的 C/C++ 代码(如控制流完整性),以及新代码优先使用内存安全语言。
3) 风险/不足
- 二进制体积开销:Rust 标准库最初导致了约 200 KiB 的文件体积增加,这对于向数十亿移动设备分发软件而言是一个现实挑战(后通过构建优化缓解)。
- 兼容性难度:重写工作中最困难的部分是保持新版 Rust 解析器与旧版 C++ 解析器在行为上的“bug 级兼容”。
- 检测局限性:系统对恶意文件的检测机制无法拦截所有的攻击,只能阻挡许多常见的利用技术。
正文
WhatsApp 的工程团队将其媒体处理库从 C++ 重写为 Rust,将代码规模从 16 万行减少至 9 万行,同时引入了内存安全保护机制。该库运行在数十亿台设备上,包括 Android 手机、iPhone、桌面设备、智能手表以及网页浏览器,这使其成为迄今为止规模最大的客户端 Rust 代码部署之一。
这一工作可以追溯到 2015 年的 Stagefright 漏洞事件 。当时人们发现攻击者可以将恶意软件隐藏在看似正常的图片或视频文件中。这些恶意文件利用了 Android 媒体库中的漏洞,而像 WhatsApp 这样的应用无法直接修补底层操作系统。那时,WhatsApp 使用一个名为 “wamedia” 的 C++ 库,在发送前对 MP4 文件进行合规性检查。公司意识到,这段代码处理的是来自潜在恶意来源的非可信数据,因此非常适合使用内存安全语言进行重写。
Meta 工程博客 – 安全与隐私专栏
尽管 Meta 此次部署在规模上前所未有,但其策略并非没有先例。Mozilla 的首席工程师 Andrew Lilley Brinker 在 Bluesky 上 提到 :
很多人知道 Mozilla 在 Rust 早期发展阶段提供了大量资助,但可能不知道,Firefox 第一个上线的 Rust 组件其实是 2016 年的一个 MP4 解析器!
这同样是对 Stagefright 时代所揭示问题的回应——即当 C++ 媒体处理代码在解析非可信二进制数据时,存在固有的安全风险。
WhatsApp 并没有采用渐进式替换方式,而是同时构建了完整的 Rust 版本与原 C++ 版本并行运行。团队通过差分模糊测试以及大量集成测试,验证两个版本之间的兼容性,然后才完成迁移。WhatsApp 软件工程师 Daniel Sommermann 和 Baojun Wang 表示 ,这种策略不仅带来了性能提升,还降低了内存使用量。
不过,二进制文件大小成为一个现实问题。博客文章提到,Rust 标准库最初增加了文件体积,但并未详细说明解决方案。在 Hacker News 的 讨论 中,WhatsApp 工程师 Daniel Sommermann 解释道:
“我们在构建系统优化方面投入了大量工作,随着时间推移逐步将体积压缩下来。虽然一开始确实接受了大约 200 KiB 的标准库体积开销。”团队将构建系统从 Gradle、CMake 和 Cargo 迁移到 Buck2。Sommermann 表示,Buck2 “在缩小体积方面帮助巨大,比如改进了 LTO(链接时优化)并使用了最新的 clang 工具链优化。”
该媒体库已经不仅仅用于基础格式校验。WhatsApp 将这一扩展系统命名为 “Kaleidoscope”。它会检测可疑模式,例如:嵌入文件或脚本的 PDF、文件扩展名与实际内容不匹配的文件、伪装成图片的可执行文件等。一旦发现风险内容,系统会在用户界面中发出警告。这些检测无法拦截所有攻击,但能够阻挡许多常见的利用技术。
Meta 表示,这是他们所知规模最大的 Rust 库面向终端用户设备的部署。每个月,这段代码都会通过 WhatsApp、Messenger 和 Instagram 推送到数十亿台设备,包括手机、笔记本电脑、桌面设备、智能手表和各种操作系统上的浏览器。
在 Hacker News 的讨论中,还有人 探讨 了技术细节。例如,用户 Cong-or 指出二进制体积的重要性:
在服务器环境中,Rust 标准库带来的开销通常不算什么,但当你要向数十亿台移动设备发布软件时,每一个 KB 都至关重要。很高兴看到他们投入资源优化构建工具,而不是简单接受体积膨胀。
另一位用户 storystarling 则强调测试难度:
这种重写工作最难的部分通常不是 Rust 实现本身,而是要保持与旧版解析器在行为上的‘bug 级兼容’。
WhatsApp 的安全策略分为三条路径:尽可能减少攻击面;对仍然使用的 C 和 C++ 代码加强保护(如控制流完整性与强化内存分配器);对于新代码优先使用内存安全语言。使用 C/C++ 的开发者需要接受专门的安全培训,其代码会经过自动化分析工具审查,公司对发现的问题设有严格的修复期限。
Meta 的安全团队正在推动公司内部更多团队采用 Rust,并预计未来几年采用速度将加快。这一趋势也反映了整个行业的发展方向。谷歌在 2025 年 11 月的安全博客中 表示 ,Android 中 Rust 代码的引入,使内存安全漏洞占比从 2019 年的 76% 降至 2025 年底的不足 20%,公司将这一变化直接归因于用 Rust 替代新代码中的 C 和 C++。Chrome 已经在 字体渲染和图像解码 模块中使用 Rust 库,而 Microsoft 自 2023 年起也开始用 Rust 重写 部分 Windows 组件。
原文链接:
https://www.infoq.com/news/2026/02/whatsapp-rust-media-malware/