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