fs-verity-Integration

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