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环境里,随着时间慢慢缩小暴露在不受信任数据面前的遗留代码占比。这种渐进式的改造路线,试图在不推翻现有基带生态的前提下,给安卓体系中最薄弱的环节加上一道更牢靠的防线。





