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