Google 針對現代智能手機長期防護薄弱的一環——基帶——作出安全強化。雖然公司並非試圖重寫數十年調製解調器固件,而是透過在 Pixel 10 調製解調器中引入基於 Rust 的 DNS 解析器,來提升這一傳統作業系統防禦難以覆蓋的攻擊面。Google 在多年研究中已發現,一旦攻擊者突破基帶層面,作業系統常見的沙箱與漏洞緩解機制往往失效。 問題首先出在基帶調製解調器的建構方式上。
手機基帶實質上相當於一套獨立的作業系統,通常使用 C/C++ 編寫,運行體積達數十 MB 的龐大閉源代碼,負責從信號處理到協議堆疊的各方面。在這種環境下進行記憶體管理極為艱難,結果往往是固件「記憶體不安全」,易現緩衝區溢出、釋放後使用、記憶體洩漏等缺陷,並被串聯利用成遠端代碼執行漏洞。Google Project Zero 團隊此前已在 Pixel 使用的 Exynos 調製解調器上示範,可透過互聯網遠端實現代碼執行,並整理出二十多個 Exynos 基帶漏洞,其中 18 個評為嚴重等級。
雖然這些硬件缺陷陸續修補,但未改變底層風險:代碼依舊複雜、閉源且高度暴露在外部攻擊面上。
Rust 語言成基帶安全轉型的關鍵
將整套固件徹底改寫為使用記憶體安全語言,在現實中短期內難以實現。基帶廠商在過去數十年中,圍繞 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 體系中最薄弱的環節上多一層更堅固的防線。




