Android报告内存漏洞大幅减少,Rust采用加速推进
Android分享了平台向Rust长期转型如何重塑安全性和软件开发的新见解。新数据反映了向内存安全性的决定性转变,以及意外带来的整个Android生态系统更快的工程周期。
内存安全漏洞显著下降
Android团队报告称,内存安全漏洞首次降至所有Android漏洞的20%以下。这些数据涵盖了第一方和第三方组件中C、C++、Java、Kotlin和Rust的代码贡献。虽然报告在2025年底前发布,但行业标准的90天补丁窗口意味着数字在年底前不太可能发生太大变化。
Rust采用是这一趋势的核心。根据Android团队的说法,与C和C++相比,Rust的内存安全漏洞密度降低了1000倍。然而最令人惊讶的结果不仅限于安全性。基于Rust的更改现在的回滚率降低了4倍,代码审查时间减少了25%。
系统编程的平衡转变
Android历史上对C和C++等系统语言的依赖意味着采用Rust从来不是为了替代Java或Kotlin,而是为了在需要低级控制的地方提供更安全的替代方案。随着Rust使用量的上升和新的C++添加量缓慢下降,第一方代码趋势现在显示Rust和C++在系统级新代码贡献量上相当。
这种对等性允许使用DORA框架进行有意义的性能比较,该框架基于吞吐量和稳定性评估工程团队。使用类似大小的更改和重叠的开发人员池来测量同时使用Rust和C++的Android工程师,以确保公平性。
吞吐量改进:更少修订,更快审查
追溯到2023的数据显示了一致的模式:Rust代码比等效的C++代码需要大约少20%的修订。Rust更改在审查中花费的时间也少25%,Android团队将这一趋势部分归因于2023年至2024年间Rust专业知识的增长。
虽然这些增量增益有帮助,但最大的改进在稳定性指标中可见。
即使其采用率超过C++,Rust的低回滚率仍在继续下降。对于中型和大型更改,Rust更改的回滚率约为C++的四分之一。由于回滚会扰乱多个团队、启动事后分析并触发重建,这种稳定性显著提高了整体生产力。
2022年谷歌的一项调查发现,工程师认为Rust更容易审查且更可能正确。新数据从经验上支持了这些看法。
Rust的应用范围
Rust在Android中的作用正在扩展到平台代码之外:
内核:Android 6.12是第一个启用Rust支持并包含平台第一个生产Rust驱动程序的发货内核。Android还与Arm和Collabora合作开发基于Rust的GPU驱动程序。
固件:Rust已在固件中部署多年。Android和Arm现在正合作开发Rusted Firmware-A,以增强高特权固件环境中的安全性。
第一方应用:
- Nearby Presence使用Rust进行基于蓝牙的安全设备发现
- MLS(RCS消息安全协议)在Rust中实现,将在未来版本的Google Messages中出现
- Chromium已将PNG、JSON和网络字体解析器替换为基于Rust的内存安全实现
Rust中的第一个近乎漏洞
Android几乎发布了其第一个基于Rust的内存安全缺陷:CrabbyAVIF中的线性缓冲区溢出。它从未公开发布,但团队为其分配了CVE-2025-48530以通过内部渠道跟踪它。
Scudo强化分配器阻止了利用。Scudo的防护页停止了溢出,并将可能是静默损坏的情况转换为可见崩溃,尽管崩溃报告最初缺乏清晰度。Android此后改进了溢出处理。
为了进一步降低不安全风险,Android正在其Comprehensive Rust培训计划中添加关于不安全Rust的新深入模块,重点关注不安全块的声音使用、未定义行为、安全注释和安全抽象。
结论
Android使用Rust的经验表明,即使有一些不安全代码,内存安全性也显著改善:500万行代码中只有一个潜在漏洞,而C/C++中每百万行约有1000个。这种转变允许开发在保持安全的同时更快地进行,用安全和生产力相互加强的模式取代了"快速行动,打破常规"。