用途

本文檔包含用於AVF的常見用例。

孤立的彙編

作為一個軟體安全飛地,受保護的VM提供了一個安全的環境來編譯對安全敏感的程式碼。此環境允許將bootclasspath和System Server Jars(由Apex Update觸發)的編譯從早期啟動到重新啟動之前,並大幅減少了Apex Apex更新引導時間。

實作位於com.android.compos Apex中。該元件是可選的,可以使用makefile包括。

孤立的彙編

圖1.在主線更新上編譯罐子

安全目標是真實地編譯經過驗證的輸入並隔離產出。 Android作為一個不受信任的客戶端,除了導致失敗之外的任何方式更改彙編輸出(當Android退回啟動時間彙編時)。

VM中的彙編服務僅在整個彙編過程中沒有錯誤時才產生簽章。 Android可以從VM中檢索公用金鑰以進行簽章驗證。

VM的鍵是由VM的骰子配置檔案產生的,該骰子配置檔案由安裝在VM上的APK定義,除了其他VM參數(例如討論性)之外。

為了確定公用金鑰是否不是來自意外的VM,Android啟動VM以確定金鑰是否正確。每個APEX更新後,將在早期引導下啟動VM。

使用受保護的VM經過驗證的啟動,編譯服務僅執行驗證的程式碼。因此,該程式碼可以確定僅接受滿足某些條件的輸入,例如,僅在允許清單中定義其名稱和fs-verity Digest的情況下僅接受輸入檔。

來自VM的任何暴露API都是攻擊表面。所有輸入檔案和參數均假定來自不受信任的用戶端,並且必須在處理前進行驗證和審核。

輸入/輸出檔案完整性由VM驗證,將檔案儲存在Android上作為不信任的檔案伺服器,如下所示:

  • 使用fs-verity演算法之前,必須在使用之前驗證輸入檔案的內容。為了使輸入檔在VM中可用,必須在對VM的骰子配置檔中貢獻的容器(APK)中提供其根雜湊。有了可信賴的根哈希,攻擊者就無法在未被偵測到的情況下篡改輸入。
  • 輸出檔案的完整性必須在VM中維護。即使將輸出檔案儲存在Android上,在生成期間,以相同的fs-verity樹格式維護完整性,但可以動態更新。最終輸出檔案可以用root哈希標識,該哈希在VM中隔離。 VM中的服務透過簽章保護輸出檔。