Integração fs-verity

fs-verity é um recurso do kernel do Linux que permite que o sistema verifique continuamente arquivos APK com certificados digitais confiáveis. Quando a plataforma fornece esse mecanismo de verificação no acesso, com um certificado confiável de uma loja compatível como o Play, a loja pode instalar arquivos APK com uma assinatura fs-verity para verificação contínua. Os arquivos protegidos por fs-verity são imutáveis ​​e as solicitações de leitura só são bem-sucedidas se o conteúdo for verificado.

Uma vez que o fs-verity é suportado no kernel, os parceiros podem colocar o novo tipo de certificado de seus armazenamentos confiáveis ​​na partição do produto /product/etc/security/fsverity , os certificados são carregados no chaveiro do kernel durante o tempo de inicialização. Em um dispositivo compatível com esse recurso, a loja confiável pode instalar um APK com a assinatura fs-verity correspondente.

Implementação

Dispositivos lançados com Android R

fs-verity é um recurso do kernel Linux atualizado desde a versão 5.4 e foi retroportado para o kernel comum do Android 4.14 e superior. Novos dispositivos usando kernel comum 4.14 ou superior e usando ext4 ou f2fs para partições userdata não precisam realizar nenhuma ação, pois já suportam fs-verity por meio do kernel Linux .

Dispositivos atualizando para Android R

Os patches fs-verity precisam ser retroportados para o kernel do dispositivo. Para ext4, adicione fsverity ao sinalizador fs_mgr em fstab . Em seguida, o recurso pode ser ativado com a seguinte configuração:

ro.apk_verity.mode=2

API

Uma nova API pública foi introduzida para consultar o estado de suporte do dispositivo e determinar se um certificado é confiável em um 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;
  }

Validação

Execute os seguintes testes VTS, CTS e GTS para validar a implementação.

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