谷歌的安卓13大幅度從C/C++遷移到Rust

banq發表於2022-12-02

從Android 12起,谷歌宣佈在Android平臺中支援Rust程式語言,作為C/C++的記憶體安全替代語言。
谷歌的目標不是將現有的C/C++轉換為Rust,而是隨著時間的推移將新程式碼的開發轉移到記憶體安全的語言。

Android 13 是第一個新增到版本中的大部分新程式碼都採用記憶體安全語言的 Android 版本。
Rust 不是Android 中唯一使用的記憶體安全語言(Java 和 Kotlin 也算在內),但它是一個主要的語言。

在Android 13中,約21%的新原生程式碼(C/C++/Rust)使用Rust。Android開源專案(AOSP)中總共有大約150萬行Rust程式碼,涉及新的功能和元件,如Keystore 2、新的超寬頻(UWB)堆疊、DNS-over-HTTP 3、Android的虛擬化框架(AVF)和各種其他元件及其開源依賴項。這些是需要系統語言的低階元件,否則這些系統語言將以C++實現。

到目前為止,Android的Rust程式碼中沒有發現記憶體安全漏洞。
我們不希望這個數字永遠為零,但考慮到兩個Android版本中新Rust程式碼的數量,以及使用它的安全敏感元件,這是一個重要的結果。它表明Rust正在實現其防止Android最常見漏洞來源的預期目的。在許多Android的C/C++元件(例如媒體、藍芽、NFC等)中,歷史漏洞密度大於1/kLOC(每千行程式碼1個漏洞)。根據這一歷史漏洞密度,使用Rust可能已經阻止了數百個漏洞進入生產環境。

從C/C++遷移是一項挑戰,但我們正在取得進展。Rust在Android平臺上的使用正在增長,但這並不是故事的結束。為了實現在Android範圍內提高安全性、穩定性和質量的目標,我們需要能夠在需要原生程式碼的程式碼庫中的任何地方使用Rust。我們正在Rust中實現使用者空間HAL。我們正在新增對受信任應用程式中Rust的支援。我們已將Android虛擬化框架中的虛擬機器韌體遷移到Rust。隨著Linux 6.1對Rust登陸的支援,我們很高興能將記憶體安全性引入核心,從核心驅動程式開始。

我們在Java中看到的漏洞型別主要是邏輯錯誤,如上所述,嚴重性通常較低。接下來,我們將探索Rust更豐富的型別系統如何幫助防止常見型別的邏輯錯誤

隨著Android從C/C++遷移到Java/Kotlin/Rust,我們預計記憶體安全漏洞的數量將繼續下降。為Android上記憶體損壞錯誤罕見的未來乾杯!





 

相關文章