最新消息:关注人工智能 AI赋能新媒体运营

降低基础频率高风险攻击面,Google在Pixel 10系列中引入用Rust重写的DNS解析器

科技资讯 admin 浏览

Google在Pixel 10系列的基带固件中引入了内存安全语言,具体做法是采用Rust语言重写用于解析DNS响应的DNS解析器。Google选用开源Rust函数库hickory-proto作为基础,通过体积优化设置构建原型后估算,相关Rust代码总量约为371 KB。

Google指出,近年来基带已成为攻击者和安全研究人员的重点目标,其自家Project Zero团队过去曾通过互联网在Pixel基带上实现远程代码执行。Pixel基带可执行代码达数十MB,且绝大部分使用内存不安全语言编写,仍可能隐藏其他关键内存安全漏洞。

开发团队选择从DNS入手,是因为现代移动通信已全面转向数字数据网络,包括通话转接等基本功能都依赖DNS服务。而DNS协议复杂,必须解析来自网络的不可信数据,容易引发漏洞。使用Rust重写DNS解析器,可大幅降低这一类与内存不安全相关的漏洞风险。

Google评估了多个Rust DNS库后选定hickory-proto,理由包括维护状况良好、测试覆盖率超过75%,以及在Rust社区中的高普及度。该库原不支持嵌入式环境所需的no_std,开发团队为hickory-proto及其依赖的rust-url和ipnet补充了支持,相关成果已回馈至上游项目。

Google直接将Rust编译流程接入原有的Pigweed与GN构建系统。开发团队表示,这样做的好处是便于后续扩展,也能避免未来加入更多Rust组件时在链接阶段出现符号重复问题。由于Rust代码需与现有的C/C++程序协同运行,团队还额外处理了内存分配与程序异常崩溃时的衔接机制。

在DNS响应解析完成后,Rust程序会调用原有的C函数,更新现有数据结构。Google也提到,集成过程中曾出现非预期的功耗和性能问题,原因是compiler_builtins中的memset和memcpy实现,在链接阶段替换了基带固件内原本针对硬件优化过的版本。团队最终在链接前移除了compiler_builtins的相关目标文件,才解决了该问题。

代码体积是评估过程中的重要考量因素。Google承认hickory-proto并非为嵌入式环境设计,未针对体积进行优化,但因Pixel基带内存空间相对充裕,因此优先考虑代码质量与社区支持。Google表示,此次虽仅替换了基带中一个高风险模块,但已为后续将更多内存安全的解析器与代码引入基带奠定了基础。