fs-verity est une fonctionnalité du noyau Linux qui permet au système de vérifier en permanence les fichiers APK avec des certificats numériques de confiance. Lorsque la plate-forme fournit ce mécanisme de vérification à l'accès, avec un certificat de confiance d'un magasin pris en charge comme Play, le magasin peut installer des fichiers APK avec une signature fs-verity pour une vérification continue. Les fichiers protégés par fs-verity sont immuables et les demandes de lecture ne réussissent que si le contenu est vérifié.
Une fois que fs-verity est pris en charge dans le noyau, les partenaires peuvent placer le nouveau type de certificat de leurs magasins de confiance dans la partition /product/etc/security/fsverity
, les certificats sont chargés dans le trousseau de clés du noyau au démarrage. Sur un appareil prenant en charge cette fonctionnalité, le magasin de confiance peut installer un APK avec sa signature fs-verity correspondante.
Mise en œuvre
Appareils lancés avec Android R
fs-verity est une fonctionnalité du noyau Linux en amont depuis la version 5.4 et a été rétroportée vers le noyau commun Android 4.14 et supérieur. Les nouveaux périphériques utilisant le noyau commun 4.14 ou supérieur et utilisant ext4 ou f2fs pour les partitions de données utilisateur n'ont pas besoin de prendre de mesures car ils prennent déjà en charge fs-verity via le noyau Linux .
Appareils mis à niveau vers Android R
Les correctifs fs-verity doivent être rétroportés vers le noyau de l'appareil. Pour ext4, ajoutez fsverity
à l'indicateur fs_mgr
dans fstab
. Ensuite, la fonctionnalité peut être activée avec le paramètre suivant :
ro.apk_verity.mode=2
API
Une nouvelle API publique a été introduite pour interroger l'état de prise en charge de l'appareil et déterminer si un certificat est approuvé sur un appareil.
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; }
Validation
Exécutez les tests VTS, CTS et GTS suivants pour valider l'implémentation.
- [VTS] ApkVerityTest
- [CTS] CtsAppSecurityHostTestCases : android.appsecurity.cts.ApkVerityInstallTest
- [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
- [GTS] GtsPlayFsiTestCases & GtsPlayFsiHostTestCases