MTE配置

MTE可以在Android核心中以及Android系統中的任何進程中獨立啟用。 Google 不強制要求任何特定配置,旨在為設備製造商提供最大的靈活性。

本文檔描述了 MTE 設定和範圍,我們認為,它為 Android 用戶提供了安全性和成本之間的良好權衡,因為始終存在漏洞緩解。

核心

內核中的MTE是透過命令列配置的。同步模式下預設為開啟。由於以下幾個原因,這可能會在未來發生變化:

  • 它已被證明會顯著影響性能並且需要優化工作。
  • 一般認為核心程式碼品質不足以在強制(即失敗時恐慌)模式下傳送 MTE。

目前建議是在生產設備上停用核心 MTE 。為此,請將kasan=off加入到核心命令列。

使用者空間

Google 提供了受 MTE 保護的使用者空間二進位檔案的預設清單。此清單由 Android Security 的輸入組成,包括具有特權和/或處理不受信任輸入的元件。 MTE 推薦的本機二進位檔案的最新清單可以在 Android 建置系統的memtag-common.mk檔案中找到。此外,還包括多個系統應用程式:目前包括 Nfc、藍牙和 SecureElement。預設情況下,這些二進位檔案和應用程式在非同步模式下啟用。

目前建議是使用預設目標清單(無需更改)。此外,建議評估核心系統中的 BSP 和 OEM 添加內容,並在安全敏感的系統上啟用 MTE。

應用領域

上面列出的三個系統應用程式是目前唯一使用 MTE 的系統應用程式。為了讓第三方應用程式啟用 MTE,其AndroidManifest.xml需要指定android:memtagMode的值不是off 。因此,Geekbench 或 AnTuTu 等常見基準測試套件不能與 MTE 一起運作。如果核心 MTE 也被停用(請參閱上面的kasan=off ),那麼基準測試預計顯示的效能影響非常有限(如果有的話)。

至於其他應用程序,Chrome 中正在積極開發 MTE 支援。 Chrome 的目前 Play 商店版本在清單中包含memtagMode=async設定。我們也期望 Android 生態系統中的許多具有安全意識的應用程式(例如銀行應用程式)最終也會這樣做。另一方面,我們預計一些需要峰值 CPU 效能的應用程式(例如遊戲)將選擇停用 MTE。

其他模式

以上說明各處僅使用非同步 MTE 模式。根據硬體的不同,其他模式可能幾乎或完全一樣快。它們還提供更好的診斷和更強的漏洞緩解特性。

我們建議測試一兩個其他配置,看看它們是否足以滿足您的效能/功耗要求。可以透過寫入/sys/devices/system/cpu/cpu*/mte_tcf_preferred為系統中的每個 CPU 核心設定 MTE 模式。例如,寫入sync (或asymm )將導致任何請求非同步模式的使用者空間進程在該核心上執行時自動升級到Sync(或Asymm)。此設定可以在裝置啟動時在 .rc 檔案中完成。

我們建議測量一種或兩種其他配置,以檢查它們是否符合您的效能和功耗要求。一些值得探索的有趣配置:

  • 所有核心上的非同步
  • 大核心上不對稱,其他核心上同步

若要驗證進程是否正在請求非同步模式(可能具有自動升級),請檢查下列行是否同時包含PR_MTE_TCF_SYNCPR_MTE_TCF_ASYNC

  debuggerd  | head -30 | grep tagged_addr

不幸的是,沒有簡單的方法來查看流程的有效模式。但任何顯示上述兩個數值的進程都會受到自動升級行為的影響。