fs-verity ist eine Linux-Kernel-Funktion, die es dem System ermöglicht, APK-Dateien kontinuierlich mit vertrauenswürdigen digitalen Zertifikaten zu überprüfen. Wenn die Plattform diesen On-Access-Überprüfungsmechanismus mit einem vertrauenswürdigen Zertifikat von einem unterstützten Store wie Play bereitstellt, kann der Store APK-Dateien mit einer fs-verity-Signatur zur kontinuierlichen Überprüfung installieren. Durch fs-verity geschützte Dateien sind unveränderlich und Leseanforderungen sind nur erfolgreich, wenn der Inhalt überprüft wird.
Sobald fs-verity im Kernel unterstützt wird, können Partner den neuen Zertifikatstyp aus ihren vertrauenswürdigen Speichern in der Produktpartition /product/etc/security/fsverity
, die Zertifikate werden während des Bootens in den Schlüsselbund des Kernels geladen. Auf einem Gerät, das diese Funktion unterstützt, kann der vertrauenswürdige Store ein APK mit der entsprechenden fs-verity-Signatur installieren.
Implementierung
Geräte, die mit Android R gestartet werden
fs-verity ist eine seit 5.4 hochgeladene Linux-Kernel-Funktion , die auf den gemeinsamen Android-Kernel 4.14 und höher zurückportiert wurde. Neue Geräte, die den gemeinsamen Kernel 4.14 oder höher verwenden und ext4 oder f2fs für Benutzerdatenpartitionen verwenden, müssen nichts unternehmen, da sie fs-verity bereits über den Linux-Kernel unterstützen.
Geräte, die auf Android R aktualisieren
fs-verity-Patches müssen in den Gerätekern zurückportiert werden. Fügen Sie für ext4 fsverity
zum Flag fs_mgr
in fstab
hinzu. Anschließend kann das Feature mit folgender Einstellung aktiviert werden:
ro.apk_verity.mode=2
API
Eine neue öffentliche API wurde eingeführt, um den Supportstatus des Geräts abzufragen und festzustellen, ob einem Zertifikat auf einem Gerät vertraut wird.
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; }
Validierung
Führen Sie die folgenden VTS-, CTS- und GTS-Tests aus, um die Implementierung zu validieren.
- [VTS] ApkVerityTest
- [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest
- [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
- [GTS] GtsPlayFsiTestCases & GtsPlayFsiHostTestCases