用途

本頁面列出 AVF 的常見用途。

隔離編譯

受防護的虛擬機器 (VM) 是軟體安全封閉區,可提供安全環境來編譯安全敏感程式碼。這個環境可將 bootclasspath 和系統伺服器 JAR 的編譯作業 (由 APEX 更新觸發) 從早期啟動階段移至重新啟動前,大幅縮短 APEX 更新後的啟動時間。

實作方式位於 com.android.compos APEX 中。這個元件為選用項目,可使用 makefile 納入。

隔離編譯

圖 1. 在主系列更新中編譯 JAR。主系列更新時編譯 JAR

安全目標是如實編譯經過驗證的輸入內容,並在隔離狀態下產生輸出內容;Android 是不受信任的用戶端,無法以任何方式變更編譯輸出內容,只能導致編譯失敗 (Android 回復為開機時間編譯時)。

只有在整個編譯過程中沒有發生錯誤時,VM 中的編譯服務才會產生簽章。Android 可以從 VM 擷取公開金鑰,用於驗證簽章。

VM 的金鑰是從 VM 的 DICE 設定檔產生,由掛接至 VM 的 APEX 和 APK 定義,此外還會使用其他 VM 參數,例如可偵錯性。

為判斷公開金鑰是否來自非預期的 VM,Android 會啟動 VM,確認金鑰是否正確。每次更新 APEX 後,VM 都會在早期啟動時啟動。

透過受防護 VM 的驗證啟動功能,編譯服務只會執行經過驗證的程式碼。因此,程式碼可以判斷只接受符合特定條件的輸入內容,例如只接受名稱和 fs-verity 摘要在允許清單中定義的輸入檔案。

VM 暴露的任何 API 都是攻擊面。所有輸入檔案和參數都來自不受信任的用戶端,因此必須先經過驗證和審查,才能處理。

VM 會驗證輸入和輸出檔案的完整性,並將檔案儲存在 Android 上做為不受信任的檔案伺服器,如下所示:

  • 使用 fs-verity 演算法前,必須先驗證輸入檔案的內容。如要讓輸入檔案在 VM 中可用,必須在容器 (APK) 中提供其根雜湊,該容器會提供 VM 的 DICE 設定檔。有了可信的根雜湊值,攻擊者就無法在不被偵測到的情況下竄改輸入內容。
  • 輸出檔案的完整性必須在 VM 中維持。即使輸出檔案儲存在 Android 上,生成期間也會以相同的 fs-verity 樹狀結構格式維持完整性,但可以動態更新。最終輸出檔案可透過根雜湊識別,該雜湊會隔離在 VM 中。VM 中的服務會透過簽章保護輸出檔案。

Linux 開發環境

傳統上,Android 是唯一不允許使用者在平台本身開發應用程式的主要作業系統。我們推出 Linux 開發環境,是為了向 Android 開發人員提供以 Linux 為基礎的開發環境。未來,我們計畫擴大這項工作,讓合作夥伴能夠實作創新的 VM 用途,例如執行圖形使用者介面應用程式,甚至是遊戲。

Linux 開發環境適用於特定裝置,並在非受保護的虛擬機器中執行。

Linux 開發環境應用實例

圖 2. Linux 開發環境應用實例。

高階流程如下:

  1. 如要使用 Linux 開發環境,請啟用開發人員選項
  2. 啟用開發人員選項後,終端機應用程式就會顯示在主畫面啟動器上。
  3. 從主畫面啟動器啟動「終端機」應用程式。
  4. 如有需要,終端機應用程式會從 Play 下載 OS 映像檔。
  5. 「終端機」應用程式會使用 Android 虛擬化架構 (AVF) 建立虛擬機器 (VM)。
  6. AVF 隨後會使用 OS 映像檔執行 VM。
  7. 虛擬機器會從映像檔啟動 OS。
  8. VM 啟動後,終端機應用程式中的 WebView 會連線至虛擬機器中的網路服務。這項服務會透過 HTTP 提供終端機存取權。
  9. 您可以在應用程式中輸入指令並查看輸出內容,與終端機互動。

Linux VM 的高階元件如下:

  • 終端機應用程式:提供終端機介面的 Android 應用程式。 這個應用程式會使用 WebView 連線至 VM 中執行的 Web 服務,以便進行互動。 這項應用程式預設為停用。在「開發人員設定」中啟用。
  • Android 虛擬化架構 (AVF):Android 現有的子系統,用於建立及管理 VM。支援這項功能時,只需要對自訂 OS 映像檔進行最少的修改。
  • 虛擬機器:AVF 產生的 VM。這個服務會代管終端機服務,AVF 專為終端機應用程式功能建立這個服務。
  • OS 映像檔:上游 Debian 提供的 OS 映像檔經過稍微修改,「終端機」應用程式會從外部 Google 伺服器下載這張圖片。這是 VM 作業的基礎。
  • 客體代理程式:VM 中的新軟體。並向 AVF 回報 OS 狀態,以及控管虛擬機器。
  • ttyd:在 VM 中執行的開放原始碼軟體,可透過 HTTP 實作終端機模擬。終端機應用程式的 WebView 會連線至該網址。
  • 網路共用管理員:現有的 Android 子系統。將虛擬機器連線至 Android 裝置,即可透過網路存取虛擬機器。

裝置端內容安全功能

裝置端內容安全防護是保護隱私權的內容安全防護解決方案,由裝置端內容安全防護團隊開發。這項技術可在第一方/第三方裝置上,為各種 Google 產品執行內容安全分類作業,並保護超過 10 億名使用者免於受到濫用內容侵害,且不需要將使用者資料傳回 Google 伺服器。這項技術的設計宗旨是遵循 Private Compute Core (PCC) 原則,確保用戶端與虛擬機器 (VM) 之間的通訊透明且能保護隱私,並防止任何使用者資料外洩。這項服務可用於在裝置上啟用濫用行為偵測功能,例如 Play 安全防護即時威脅偵測

在這個用途中,系統會使用受保護的虛擬機器,執行 Play 安全防護即時威脅偵測的模型分類,大幅提升模型和防護措施的安全性。即使在已取得根存取權的裝置上,這項功能也能確保只有經過核准的程式碼會執行,且作業會對外部程序隱藏,防止攻擊者進行反向工程和操控。

高階流程如下:

  1. 即時威脅偵測會 Ping Private Compute Services,啟動 VM。 Private Compute Services 是以隱私權為中心的 PCC 與雲端伺服器中介服務
  2. Private Compute Services 會啟動 VM,並從 VM 取得公開金鑰
  3. Private Compute Services 會將 VM 擁有權移交給 Play 安全防護即時威脅偵測功能
  4. Private Compute Services 會將認證和公開金鑰傳送至伺服器
  5. 伺服器會驗證認證,並使用 VM 公開金鑰加密保護措施
  6. 伺服器接著將加密的保護措施傳回裝置
  7. 接著,裝置上的即時威脅偵測功能就能在 VM 內使用加密保護機制。只有 VM 擁有私密金鑰,可解密保護措施

高階元件如下:

  • 伺服器:加密並將加密防護措施傳送至 VM
  • Private Compute Services:用於啟動 VM、調解與 VM 的通訊,並確保沒有使用者資料透過 Astrea 傳輸至伺服器
  • Play 安全防護即時威脅偵測:
    • 包含並使用裝置端內容安全功能提供的模型分類器
    • 接受 VM 的擁有權,並保留 VM 以供分類使用
    • 視需要啟動及停止 VM。