奧推網

選單
科技

Android 記憶體安全漏洞大幅下降,Rust 或成關鍵因素

整理 | 劉春霖

出品 | CSDN(ID:CSDNnews)

過去十年,記憶體漏洞佔整個產業漏洞的 65%,但 Google 發現從 2019 年到 2022 年,Android 的記憶體漏洞年度總數,從 223 個下降到了 85 個,而有這項安全性進展,Google 歸因於 Android 的記憶體安全程式程式碼比例增加。

Google 的 Jeffrey Vander Stoep 表示,雖然相關性不能代表因果性,但記憶體安全漏洞的減少與採用 Rust 語言有關。

自 2019 年開始,谷歌一直採用 Rust 程式語言整合到 Android 作業系統中。事實證明,漏洞確實減少了。

Android 記憶體安全漏洞大幅減少

Google 過去持續投資工具提高 C/C++ 程式程式碼的安全性,之前幾個版本,Google 在 Android 裝置上引入 Scudo 強化分配器、HWASAN、GWP-ASAN 以及 KFENCE,同時增加現有程式程式碼庫模糊測試的覆蓋率,運用這些工具發現更多 C/C++ 程式程式碼漏洞,並減少未來新程式程式碼所包含的漏洞。

但即便 Google 在 C/C++ 程式程式碼上做了這些努力,但他們認為這仍無法解釋 Android 漏洞巨幅減少的變化,而 Google 在審視開發策略後,認為 Android 從記憶體不安全語言持續轉移到記憶體安全語言,是這個現象的主要原因。

Rust 成關鍵因素

從 Android 12 開始,Google 就在 Android 支援 Rust 程式語言,作為 C/C++ 記憶體安全替代方案,而從那時起,Google 也持續擴充套件 Android 開源專案(AOSP)中的 Rust 體驗和使用。Google 表示,他們的目標並不是把現有的 C/C++ 程式程式碼都轉換成為 Rust,而是在新的程式程式碼使用記憶體安全語言開發。

在 Android 13 中,大約 21% 的新原生碼都是以 Rust 開發,在 AOSP 中已經有大約 150 萬行的 Rust 程式程式碼,涵蓋各種功能和元件,包括 Keystore2、UWB堆疊、DNS-over-HTTP3、Android 虛擬化框架等元件和開源相依專案。這些都是需要系統語言開發的低端元件,如果沒有 Rust,Google 就必須使用 C++ 來例項。

到目前為止,在 Android 的 Rust 程式程式碼中發現的記憶體漏洞為零,Google 提到,這是一個重要發現,因為過去 Android 漏洞密度大於 1/kLOC,也就是說,每一千行程式程式碼至少會發現一個漏洞,與歷史資料相比,Rust 可能已經阻擋數百個漏洞進入產品環境。

使用 C/C++ 開發的功能不如預想中的執行迅速,Google 提到,使用非記憶體安全語言,反而需要額外新增安全措施,而這些措施會讓程式執行的速度更慢。非記憶體安全的程式程式碼通常意味著開發者必須在安全性和效能之間權衡,像是新增沙盒、執行時緩解措施或是硬體保護等,都對程式程式碼的大小、記憶體和效能產生負面影響。

Google 提到,在 Android 中使用 Rust,能以更少的妥協最佳化安全性和系統健康。像是使用新的 UWB 堆疊能夠節省數MB的記憶體,並以現存的程式中執行避免 IPC 延遲,又或是新的 DNS-over-HTTP3 例項,能夠以安全的方法,使用更少的執行緒處理相同的工作量。

要從 C/C++ 移植到 Rust 並不是一件簡單的事,Google 持續增加 Rust 在 Android 平臺上的使用,為了實現更高的安全性和穩定性等目標,Google 需要在更多原生碼中使用 Rust,目前他們正在以 Rust 例項使用者空間 HAL,並且已經將 Android 虛擬化框架中的虛擬機器韌體移植到 Rust,也隨著 Linux 6。1 對 Rust 的支援,便能夠從核心驅動程式開始,對核心提供記憶體安全。

雖然 Google 認為 擺脫 C/C++ 是一個挑戰,但也正在為安卓系統推進該專案。然而,其並沒有在 Chrome 上使用 Rust 語言。

據悉,Rust 是一門系統程式語言,專注於安全,尤其是併發安全,支援函式式和命令式以及泛型等程式設計正規化的多正規化語言。Rust 在語法上和 C++ 類似,但是設計者想要在保證效能的同時提供更好的記憶體安全。

參考連結:

https://www。theregister。com/2022/12/02/android_google_rust/

https://www。solidot。org/story?sid=73540

https://security。googleblog。com/2022/12/memory-safe-languages-in-android-13。html