整理?| 劉春霖? ? ? ?
出品 | CSDN(ID:CSDNnews)
過去十年,內(nèi)存漏洞占整個(gè)產(chǎn)業(yè)漏洞的 65%,但 Google 發(fā)現(xiàn)從 2019 年到 2022 年,Android 的內(nèi)存漏洞年度總數(shù),從 223 個(gè)下降到了 85 個(gè),而有這項(xiàng)安全性進(jìn)展,Google 歸因于 Android 的內(nèi)存安全程序代碼比例增加。
(相關(guān)資料圖)
Google 的 Jeffrey Vander Stoep 表示,雖然相關(guān)性不能代表因果性,但內(nèi)存安全漏洞的減少與采用 Rust 語(yǔ)言有關(guān)。
自 2019 年開始,谷歌一直采用 Rust 編程語(yǔ)言集成到 Android 操作系統(tǒng)中。事實(shí)證明,漏洞確實(shí)減少了。?
Android 內(nèi)存安全漏洞大幅減少
Google 過去持續(xù)投資工具提高 C/C++ 程序代碼的安全性,之前幾個(gè)版本,Google 在 Android 設(shè)備上引入 Scudo 強(qiáng)化分配器、HWASAN、GWP-ASAN 以及 KFENCE,同時(shí)增加現(xiàn)有程序代碼庫(kù)模糊測(cè)試的覆蓋率,運(yùn)用這些工具發(fā)現(xiàn)更多 C/C++ 程序代碼漏洞,并減少未來新程序代碼所包含的漏洞。
但即便 Google 在 C/C++ 程序代碼上做了這些努力,但他們認(rèn)為這仍無法解釋 Android 漏洞巨幅減少的變化,而 Google 在審視開發(fā)策略后,認(rèn)為 Android 從內(nèi)存不安全語(yǔ)言持續(xù)轉(zhuǎn)移到內(nèi)存安全語(yǔ)言,是這個(gè)現(xiàn)象的主要原因。
Rust 成關(guān)鍵因素
從 Android 12 開始,Google 就在 Android 支持 Rust 程序語(yǔ)言,作為 C/C++ 內(nèi)存安全替代方案,而從那時(shí)起,Google 也持續(xù)擴(kuò)展 Android 開源項(xiàng)目(AOSP)中的 Rust 體驗(yàn)和使用。Google 表示,他們的目標(biāo)并不是把現(xiàn)有的 C/C++ 程序代碼都轉(zhuǎn)換成為 Rust,而是在新的程序代碼使用內(nèi)存安全語(yǔ)言開發(fā)。
在 Android 13 中,大約 21% 的新原生碼都是以 Rust 開發(fā),在 AOSP 中已經(jīng)有大約 150 萬行的 Rust 程序代碼,涵蓋各種功能和組件,包括 Keystore2、UWB堆棧、DNS-over-HTTP3、Android 虛擬化框架等組件和開源相依項(xiàng)目。這些都是需要系統(tǒng)語(yǔ)言開發(fā)的低端組件,如果沒有 Rust,Google 就必須使用 C++ 來實(shí)例。
到目前為止,在 Android 的 Rust 程序代碼中發(fā)現(xiàn)的內(nèi)存漏洞為零,Google 提到,這是一個(gè)重要發(fā)現(xiàn),因?yàn)檫^去 Android 漏洞密度大于 1/kLOC,也就是說,每一千行程序代碼至少會(huì)發(fā)現(xiàn)一個(gè)漏洞,與歷史資料相比,Rust 可能已經(jīng)阻擋數(shù)百個(gè)漏洞進(jìn)入產(chǎn)品環(huán)境。
使用 C/C++ 開發(fā)的功能不如預(yù)想中的運(yùn)行迅速,Google 提到,使用非內(nèi)存安全語(yǔ)言,反而需要額外添加安全措施,而這些措施會(huì)讓程序執(zhí)行的速度更慢。非內(nèi)存安全的程序代碼通常意味著開發(fā)者必須在安全性和性能之間權(quán)衡,像是添加沙盒、執(zhí)行時(shí)緩解措施或是硬件保護(hù)等,都對(duì)程序代碼的大小、內(nèi)存和性能產(chǎn)生負(fù)面影響。
Google 提到,在 Android 中使用 Rust,能以更少的妥協(xié)優(yōu)化安全性和系統(tǒng)健康。像是使用新的 UWB 堆棧能夠節(jié)省數(shù)MB的內(nèi)存,并以現(xiàn)存的程序中執(zhí)行避免 IPC 延遲,又或是新的 DNS-over-HTTP3 實(shí)例,能夠以安全的方法,使用更少的線程處理相同的工作量。
要從 C/C++ 移植到 Rust 并不是一件簡(jiǎn)單的事,Google 持續(xù)增加 Rust 在 Android 平臺(tái)上的使用,為了實(shí)現(xiàn)更高的安全性和穩(wěn)定性等目標(biāo),Google 需要在更多原生碼中使用 Rust,目前他們正在以 Rust 實(shí)例用戶空間 HAL,并且已經(jīng)將 Android 虛擬化框架中的虛擬機(jī)固件移植到 Rust,也隨著 Linux 6.1 對(duì) Rust 的支持,便能夠從核心驅(qū)動(dòng)程序開始,對(duì)核心提供內(nèi)存安全。
雖然 Google 認(rèn)為 擺脫 C/C++ 是一個(gè)挑戰(zhàn),但也正在為安卓系統(tǒng)推進(jìn)該項(xiàng)目。然而,其并沒有在 Chrome 上使用 Rust 語(yǔ)言。
據(jù)悉,Rust 是一門系統(tǒng)編程語(yǔ)言,專注于安全,尤其是并發(fā)安全,支持函數(shù)式和命令式以及泛型等編程范式的多范式語(yǔ)言。Rust 在語(yǔ)法上和 C++ 類似,但是設(shè)計(jì)者想要在保證性能的同時(shí)提供更好的內(nèi)存安全。
參考鏈接:
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
關(guān)鍵詞: Android 內(nèi)存安全漏洞大幅下降 Rust 或成關(guān)鍵因素 rust