Google在Pixel 10调制解调器中引入Rust代码 进一步提高安全性
Google正把安全焦点对准现代智能手机中长期防护薄弱的一块:蜂窝基带。但公司并非试图推翻重写数十年的调制解调器固件,而是通过在 Pixel 10 调制解调器中引入一个基于 Rust 的 DNS 解析器,来强化这一传统操作系统防御难以覆盖的攻击面。
Google在多年研究中已经发现,一旦攻击者成功打入基带层面,操作系统常用的沙箱与漏洞缓解机制往往就不再奏效。

问题首先出在蜂窝调制解调器的构建方式上。 手机基带实际上相当于一套独立的操作系统,通常使用 C/C++ 编写,运行着体量达数十兆字节的大量闭源代码,负责从信号处理到协议协商的方方面面。 在这种环境下进行内存管理极为困难,结果往往是固件“内存不安全”,容易出现缓冲区溢出、释放后使用、内存泄漏等缺陷,并被串联利用成远程代码执行漏洞。
Google Project Zero 团队此前已经在 Pixel 所用的 Exynos 调制解调器上,演示了可以通过互联网远程实现代码执行,并整理出二十多个 Exynos 基带漏洞,其中 18 个被评为严重等级。 尽管这些具体缺陷随后陆续被修补,但并未改变底层风险:代码库依旧复杂、闭源且高度暴露在外部攻击面上。 将整套固件彻底改写为使用内存安全语言,在现实中短期几乎不可能。 基带厂商在过去数十年中,围绕 3GPP 规范不断叠加代码层次,其中大量内容被视作商业机密。
与此同时,基带必须在实时性极高的条件下运行,这也使得 C 和 C++ 长期成为性能优先的自然选择。 其他内存安全语言,如 Python 或 C#,依赖垃圾回收机制,这会带来不可预期的延时抖动,对基带这类对时延极为敏感的负载来说不可接受。 Rust 为Google提供了一条新的路径。 该语言通过所有权与借用模型,在编译阶段强制内存安全,由严格的“借用检查器”而非垃圾回收来把关。 在 Rust 中,某一类内存错误根本无法通过编译,这让它适合用于既要求高性能又需要安全保障的关键组件。
在当前阶段,Google并未尝试全面重写,而是选定了一个暴露面突出、边界相对清晰的子系统:基带内部的 DNS 解析。 随着蜂窝网络功能不断迁移到基于 IP 的数据网络,DNS 已成为手机查找服务、路由呼叫转移等功能的核心依赖。 DNS 解析器必须接收不受信任的数据包并解析一套相当复杂的协议,当它们以 C 或 C++ 实现时,已经多次被证明会成为可被利用的漏洞源头。
为强化这一路径,Google选择了 Rust 生态中广泛使用的 hickory-proto DNS 库,该库拥有完善测试与活跃维护。 由于 Pixel 调制解调器并不存在极端严苛的内存限制,团队可以将裁剪后的、基于 no_std 的 hickory-proto 版本直接集成到基带固件中。 在剔除标准库依赖以适应基带约束之后,这些 Rust 组件为固件额外带来的体积约为 371KB。 在新的架构下,抵达调制解调器的 DNS 请求将首先由 Rust 代码处理,然后才可能触及遗留的 C/C++ 路径。 针对恶意 DNS 数据包发起的内存破坏攻击,会优先撞上 Rust 在编译期施加的安全约束,而非开发者手写的指针运算。
Pixel 10 是首款在调制解调器中搭载 Rust DNS 解析器的设备。 Google将这一举措定位为未来工作的模板:先从最危险、解析逻辑复杂的代码入手,将其隔离并迁移到内存安全的 Rust 环境中,随着时间推移逐步缩小暴露在不受信任数据面前的遗留代码占比。 这一渐进式改造路线,试图在不推翻既有基带生态的前提下,为Android体系中最薄弱的环节加上一道更牢靠的防线。

