Rust 被納入 Android 平台開發的主要語言之一

谷歌宣布將 Rust 程式語言納入允許開發 Android 平台的語言之中。 Rust 語言編譯器早在 2019 年就已包含在 Android 原始碼樹中,但對該語言的支援仍處於實驗階段。 計劃用於 Android 的首批 Rust 元件包括 Binder 進程間通訊機制和藍牙堆疊的新實作。

Rust 的引入是作為一個專案的一部分進行的,該專案旨在加強安全性、推廣安全編程技術並提高在 Android 中使用記憶體時識別問題的效率。 值得注意的是,Android 中發現的所有危險漏洞中約有 70% 是由記憶體操作錯誤引起的。 使用注重記憶體安全和自動記憶體管理的 Rust,將降低釋放後存取和緩衝區溢位等記憶體錯誤導致的漏洞風險。

Rust 透過引用檢查、物件所有權和物件生命週期追蹤(範圍)以及在執行時間評估記憶體存取的正確性來強制編譯時的記憶體安全。 Rust 還提供針對整數溢位的保護,要求變數值在使用前初始化,在標準庫中有更好的錯誤處理,預設使用不可變引用和變數的概念,並提供強大的靜態類型以最大限度地減少邏輯錯誤。

在Android中,已經支援的語言Kotlin和Java都提供了記憶體安全,但由於開銷較高,它們不適合開發系統元件。 Rust 可以實現接近 C 和 C++ 語言的效能,這使得它可以用於開發平台的低階部分以及與硬體互動的元件。

為了確保C和C++程式碼的安全,Android使用沙箱隔離、靜態分析和模糊測試。 沙箱隔離的能力是有限的,已經達到了其能力的極限(從資源消耗的角度來看,進一步碎片化進程是不切實際的)。 使用沙箱的限制包括大量的開銷成本和由於需要產生新進程而導致的記憶體消耗增加,以及與使用 IPC 相關的額外延遲。

同時,沙箱並不能消除程式碼中的漏洞,而只能降低風險並使攻擊複雜化,因為利用該漏洞需要識別的不是漏洞,而是多個漏洞。 基於程式碼測試的方法的限制在於,為了識別錯誤,必須為問題的顯現創造條件。 不可能涵蓋所有可能的選項,因此許多錯誤會被忽略。

對於Android 中的系統進程,Google 遵循“二規則”,根據該規則,任何添加的程式碼必須滿足以下三個條件中的兩個以上:使用未經驗證的輸入資料、使用不安全的程式語言(C /C++) 以及在沒有嚴格沙箱隔離的情況下運作(具有提升的權限)。 此規則意味著處理外部資料的程式碼必須減少到最低權限(隔離)或以安全程式語言編寫。

Google 並不打算用 Rust 重寫現有的 C/C++ 程式碼,而是計畫使用這種語言開發新程式碼。 將 Rust 用於新程式碼是有意義的,因為從統計資料來看,大多數錯誤出現在新的或最近更改的程式碼中。 特別是,Android 中偵測到的記憶體錯誤中大約 50% 是在不到一年前編寫的程式碼中偵測到的。

Rust 被納入 Android 平台開發的主要語言之一


來源: opennet.ru

添加評論