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

整理 | 劉春霖

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

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

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

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

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

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

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

Rust 成關鍵因素

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

相關文章

Rust vs Go,到底該怎麼選?

Rust vs Go,到底該怎麼選?

【CSDN 編者按】擁有 40 多年程式設計經驗的知名 Go 開發者與作家 John Arundel 在其個人部落格分享了《Rust vs ...

「聽我說,創業公司選擇 Rust 需謹慎」

「聽我說,創業公司選擇 Rust 需謹慎」

摘要:近年來,Rust 絕對是一門成長速度飛快的程式語言,許多國內外大廠都開始關注這門年輕的語言,但本文作者表示,對於創業公司而言,Rust...

C、C++ 將退休,Rust 欲上位?

C、C++ 將退休,Rust 欲上位?

整理 | 蘇宓 Rust 這把火在微軟Azure CTO Mark Russinovich的助力下,似乎越燒越旺。而每當波及程式語言時,紛爭...

我用 Rust 程式設計的這兩年

我用 Rust 程式設計的這兩年

摘要:近年來,Rust 被越來越多大廠投入使用,如微軟的 VS Code、Visual Studio 等工具已提供對 Rust 的良好支持,...