fs-verity 集成

fs-verity是一個 Linux 內核功能,它允許系統使用受信任的數字證書不斷驗證 APK 文件。當平台提供這種即時驗證機制時,使用來自受支持商店(如 Play)的受信任證書,商店可以安裝具有 fs-verity 簽名的 APK 文件以進行持續驗證。受 fs-verity 保護的文件是不可變的,讀取請求只有在內容驗證後才會成功。

一旦內核支持 fs-verity,合作夥伴可以將新類型的證書從其受信任的存儲中放入產品分區/product/etc/security/fsverity ,證書在啟動時加載到內核密鑰環中。在支持此功能的設備上,受信任的商店可以安裝帶有相應 fs-verity 簽名的 APK。

執行

搭載 Android R 的設備

fs-verity 是自 5.4 起上游的Linux 內核功能,並已向後移植到Android 通用內核4.14 及更高版本。使用通用內核 4.14 或更高版本並使用 ext4 或 f2fs 作為用戶數據分區的新設備不需要採取任何措施,因為它們已經通過Linux 內核支持 fs-verity。

升級到 Android R 的設備

fs-verity 補丁需要反向移植到設備內核。對於 ext4,將fsverity添加到fstab中的fs_mgr標誌。然後可以使用以下設置啟用該功能:

ro.apk_verity.mode=2

API

引入了新的公共 API 來查詢設備的支持狀態並確定證書是否在設備上受信任。

  public final class FileIntegrityManager {
    public boolean isApkVeritySupported();
    @RequiresPermission(anyOf={
        android.Manifest.permission.INSTALL_PACKAGES,
        android.Manifest.permission.REQUEST_INSTALL_PACKAGES})
    public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate)
            throws java.security.cert.CertificateEncodingException;
  }

驗證

運行以下 VTS、CTS 和 GTS 測試以驗證實施。

  • [VTS] ApkVerityTest
  • [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest
  • [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
  • [GTS] GtsPlayFsiTestCases & GtsPlayFsiHostTestCases