开源项目 1天前 152 浏览次数 0 评论

用了Rust,谷歌实测:Android上内存漏洞率比C/C++低1000倍!

CSDN
CSDN

发布了 196 文章

编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

近年来,Rust 似乎成为了一门颇具争议性的语言。一方面,公开呼吁别再用 C/C++ 了,转向 Rust 等内存安全的编程语言。同时,各大公司竞相拥抱,强调用 Rust 可以写出更安全的代码。另一方面,开发者中又出现了明显的“逆反”心理,不少人既感觉 Rust 被“吹”得有点过头了,也认为 Rust 上手难度要比一般语言高不少。

就在这种“又火爆又被嫌”的氛围下,日前 Google 官方博客分享了一篇关于 Rust 在 Android 上真实的落地实践,用一些核心数据展示了 Rust 对 Android 安全性的影响。

随着这篇博客的发布,又把 Rust 的讨论推上了一波小高潮。接下来,我们不妨先看看:Google 到底是怎么在 Android 里用 Rust 的?

内存安全漏洞占比首次掉到 20% 以下

根据 Google 公布的 2025 年最新数据,Android 中的内存安全漏洞首次降至所有漏洞数量的 20% 以下。

这份统计涵盖了来自 Android 平台的一方与三方(包括开源项目)代码更新,涉及 C、C++、Java、Kotlin 和 Rust。

Google 表示,之所以采用 Rust,是为了提升安全性,而结果也超出预期:与 Android 现有的 C/C++ 代码相比,Rust 带来的内存安全漏洞密度降低了 1000 倍。

Rust 不止在安全方面带来了有效提升,更对软件交付效率也产生了显著的影响——Rust 相关变更的回滚率降低了 4 倍,代码审核所需时间也减少了 25%。换句话说,“更安全”现在也意味着“更高效”。

Rust 的真实应用背后

「开发一款操作系统离不开像 C、C++ 和 Rust 这些系统级编程语言所提供的底层控制与可预测性」,Google 说道,「虽然 Java、Kotlin 在 Android 平台开发中同样重要,但它们更多扮演互补角色,无法替代系统语言」。

自 2021 年起,Google 开始在 Android 系统中引入 Rust,使其成为 C/C++ 安全替代的方案。因此,本次分析主要聚焦在“新增或仍在活跃开发的代码”,因为数据表明这能更有效反映趋势。

从系统语言的整体使用情况来看(不含 Java/Kotlin),两条趋势非常明显:Rust 的使用量快速攀升,而新 C++ 代码则在缓慢下降。

Google 进一步解释称,如果只看他们自研(first-party)的 Android 代码,Rust 的新增代码量已经能和 C++ 相提并论,这也意味着两者在开发效率等方面具备可比性。

为了衡量这种变化,Google 使用了业界常用的 DORA 框架(评估软件工程团队绩效的行业标准),核心关注两项指标:

  • Throughput(吞吐量):软件变更交付的速度

  • Stability(稳定性):这些变更的质量

跨语言比较往往比较棘手。Google 表示,他们采用了多种方法来确保比较结果可靠,譬如:

  • 变更规模相近:Rust 与 C++ 的功能密度相近,尽管 Rust 稍微密集一些。这种差异对 C++ 有利,但整体比较仍然有效。Google 使用 Gerrit 的变更规模定义来统一衡量。

  • 开发者群体相似:分析仅包含 Android 平台的第一方代码变更,绝大多数开发者都是 Google 软件工程师,而且两者群体高度重叠,很多工程师同时参与 Rust 与 C++ 代码开发。

  • 长期趋势跟踪:随着 Rust 使用量增加,Google 观察各项指标是稳步提升、加速改善,还是回归平均水平。

基于此,Google 有了以下一些新的发现:

吞吐量:Rust 审查更快、返工更少

Google 指出,代码审核是开发中既耗时又容易产生延迟的环节,而“代码返工”更是导致拖延的重要原因。

数据显示,Rust 在这方面的表现明显更好:从 2023 年起,Rust 代码平均需要的修改次数比同规模的 C++ 少约 20%。

除此之外,Rust 相关的变更在代码审核中停留的时间也更短,大约比 C++ 少 25%。Google 推测,2023 到 2024 年间的显著提升,可能来自 Android 团队整体 Rust 熟练度的提升。

不过,虽然审核更快确实能带来效率提升,Google 强调 Rust 真正的杀手锏还是在于“稳定性”。

稳定性:Rust 的回滚率低得惊人

在 DORA 指标中,“回滚率”是衡量代码变更质量的关键参考。Google 表示,Rust 在这一项上的优势非常明显:在中大型变更里,Rust 的回滚率大约是 C++ 的四分之一,而且随着 Rust 使用范围持续扩大,这个数字还在下降。

低回滚率的价值,也不仅仅是“稳定”。

Google 解释说,回滚对组织效率的破坏非常大——它会打断开发节奏、拖慢团队协作,还可能导致重新构建、撰写事故报告、阻塞其他团队任务等一连串连锁反应,远超提交代码的那位工程师本身。因此,Rust 带来的稳定性提升本质上也增强了整体开发吞吐量。

值得一提的是,Google 在 2022 年的内部调查中也发现,工程师普遍认为 Rust 的代码更容易 review,也更不容易写错。如今的硬数据进一步印证了这一点。

扩大战场:把 Rust 用到更多地方

得益于这些发现,Google 表示,随着 Rust 在 Android 系统服务和系统库中的支持已经成熟,他们正在把 Rust 的安全性与生产力优势进一步推广到更多领域。

  • 内核(Kernel):Android 基于 Linux 6.12 的内核首次默认启用了 Rust 支持,同时也出现了首个正式上线的 Rust 驱动。Google 还在与 Arm、Collabora 合作研发 Rust 版的内核态 GPU 驱动。

  • 固件(Firmware):固件权限高、性能要求严苛,且很多安全措施并不适用,因此一旦出现漏洞风险非常大。Google 透露,其已经在固件中使用 Rust 数年,并向社区发布了一系列教程与示例代码(
    https://github.com/google/aarch64-rt)。另外,他们也与 Arm 合作了 Rusted Firmware-A 项目,坚定地认为 Rust 在固件领域能带来实质性的安全提升。

  • Google 自家应用(First-party apps):多款安全敏感的 Google 应用也开始用 Rust 从底层保证内存安全,例如:

    Nearby Presence:用于安全发现附近蓝牙设备的协议已用 Rust 重写,现运行在 Google Play Services 中;

    MLS:RCS 安全消息协议的 Rust 实现将纳入未来版本的 Google Messages;

    Chromium:包括 PNG、JSON、Web Fonts 在内的多种解析器已换成 Rust 实现,帮助工程师在遵守 “Rule of 2” 的前提下更安全地处理来自网络的数据。

Google 强调,这些案例说明 Rust 确实在压低安全风险方面发挥作用,但内存安全语言只是整体策略的一部分,他们仍在维持多层防御体系。而这种“多层防御”最近再次证明了价值。

Android 差点出现第一个 Rust 内存安全漏洞(但没发生)

不过,使用 Rust 不等于“零漏洞”。Google 透露,他们最近成功避免了一个差点成为“Android 上第一个 Rust 内存安全漏洞”的问题:CrabbyAVIF(
https://android.googlesource.com/platform/external/rust/crabbyavif/)中的一个线性缓冲区溢出。

为了确保这个补丁获得高优先级,并在发布过程中得到跟踪,Google 将其编号为 CVE-2025-48530。

虽然漏洞最终没有流向用户,但 Google 从这次事件中总结出不少经验。

Scudo:关键时刻立大功

调查结果显示,Android 默认使用的 Scudo 加固分配器通过“保护页”机制,让该漏洞不可利用。换句话说,Scudo 把一个可能静默破坏内存的问题变成了明显的崩溃,从而暴露了问题。

不过,Google 也发现崩溃报告中缺少“这是因溢出导致”的关键信息,导致排查变慢。这个问题现已修复,如今溢出一旦触碰到 Scudo 的保护页,系统能明确识别。

Google 还表示,虽然 Pixel 等设备默认启用 Scudo,但他们正与更多合作伙伴推动 Scudo 成为所有设备的强制选项。在此期间,他们会继续为能被 Scudo 阻止的漏洞分配足够级别的 CVE。

加强 unsafe Rust 培训:禁不掉,就教会大家写对

Google 也强调,操作系统开发离不开 unsafe 代码——无论是 C、C++,还是 Rust 中的 unsafe{},因此简单“全面禁止”并不现实。关键是确保开发者理解如何安全地使用它。

为此,Google 正在为其 Rust 全面培训课程(
https://google.github.io/comprehensive-rust/)新增一门关于 unsafe 的深度模块,内容包括如何推理 unsafe 代码、soundness(健全性)、undefined behavior(未定义行为)、如何使用安全注释、如何用抽象封装 unsafe。

Google 认为,提升开发者对 unsafe Rust 的理解,将进一步提高 Android 和整个开源生态的代码质量。

漏洞密度比较:Rust 的安全性差距不是一点点

对此,有网友持怀疑态度:“Rust 既然也会有内存安全漏洞,那用 Rust 有啥意义?”

Google 的回答很直接——使用 Rust,漏洞密度大幅降低。

Google 给出的保守估计是 Android 平台目前约有 500 万行 Rust,发现 1 个(且在发布前就修了)潜在内存漏洞,由此可以推算得到 0.2 个漏洞 / 每百万行(MLOC)。

相比之下,历史数据显示 C/C++ 的密度约为 1000 个漏洞 / 每百万行。

换句话说,Rust 带来了 1000 倍以上的下降。

Google 指出,内存安全漏洞威力极强(历史上也非常常见),高密度的漏洞会让原本不错的安全设计形同虚设,因为攻击者可以串联利用多点漏洞绕过防御。因此,漏洞密度大幅下滑不仅减少 bug 本身,也让整个安全架构更有效。

而 unsafe Rust 是不是更危险?

Google 的答案是——不是。

Google 进一步回应围绕 unsafe Rust 的争议。有观点认为,Rust 中大约 4% 的 unsafe{} 代码可能比 C/C++ 更容易出错。但 Google 的数据指出:即便按照“unsafe Rust 的 bug 概率 = C/C++ 的 bug 概率”的保守假设来算,其风险仍被严重高估。

可能的原因包括:

  • unsafe{} 并不会关闭 Rust 的大部分安全检查(常见误解)

  • 封装(encapsulation)让安全性更容易推理

  • unsafe{} 块本身会得到更多审查

Rust 让 Google 不再需要在“快”与“安全”之间二选一

Google 称,以往想降低内存安全风险,只能依靠静态分析、运行时防御、沙箱隔离、快速补丁等方式,每种方式都要付出性能或开发效率的代价。但 Rust 带来了另一种路线:最安全的路径,同时也是最高效的路径。

Google 认为,未来 Android 的安全性会越来越高,而随着 Rust 的进一步普及,他们甚至可能把过去为安全而牺牲的性能与生产力重新“赚回来”。

来源:
https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html

【活动分享】2025 年是 C++ 正式发布以来的 40 周年,也是全球 C++ 及系统软件技术大会举办 20 周年。这一次,C++ 之父 Bjarne Stroustrup 将再次亲临「2025 全球 C++及系统软件技术大会」现场,与全球顶尖的系统软件工程师、编译器专家、AI 基础设施研究者同台对话。

本次大会共设立现代 C++ 最佳实践、架构与设计演化、软件质量建设、安全与可靠、研发效能、大模型驱动的软件开发、AI 算力与优化、异构计算、高性能与低时延、并发与并行、系统级软件、嵌入式系统十二大主题,共同构建了一个全面而立体的知识体系,确保每一位参会者——无论是语言爱好者、系统架构师、性能优化工程师,还是技术管理者——都能在这里找到自己的坐标,收获深刻的洞见与启发。详情参考官网:https://cpp-summit.org/

CSDN

CSDN

196 文章 31120 浏览次数 0 粉丝

评论 (0)

睡觉动画