Integración fs-verity

fs-verity es una característica del kernel de Linux que permite que el sistema verifique continuamente los archivos APK con certificados digitales confiables. Cuando la plataforma proporciona este mecanismo de verificación en el acceso, con un certificado de confianza de una tienda compatible como Play, la tienda puede instalar archivos APK con una firma fs-verity para una verificación continua. Los archivos protegidos por fs-verity son inmutables y las solicitudes de lectura solo tienen éxito si se verifica el contenido.

Una vez que fs-verity sea compatible con el kernel, los socios pueden colocar el nuevo tipo de certificado de sus almacenes de confianza en la partición del producto /product/etc/security/fsverity ; los certificados se cargan en el conjunto de claves del kernel durante el arranque. En un dispositivo compatible con esta función, la tienda de confianza puede instalar un APK con su firma fs-verity correspondiente.

Implementación

Dispositivos que se inician con Android R

fs-verity es una característica del kernel de Linux mejorada desde 5.4 y se ha adaptado al kernel común de Android 4.14 y superior. Los nuevos dispositivos que usan el kernel común 4.14 o superior y que usan ext4 o f2fs para las particiones de datos de usuario no necesitan realizar ninguna acción, ya que ya son compatibles con fs-verity a través del kernel de Linux .

Dispositivos que se actualizan a Android R

Los parches de fs-verity deben adaptarse al kernel del dispositivo. Para ext4, agregue fsverity al indicador fs_mgr en fstab . Luego, la función se puede habilitar con la siguiente configuración:

ro.apk_verity.mode=2

API

Se ha introducido una nueva API pública para consultar el estado de soporte del dispositivo y determinar si un certificado es de confianza en un dispositivo.

  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;
  }

Validación

Ejecute las siguientes pruebas VTS, CTS y GTS para validar la implementación.

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