Je vais donner un aperçu général de la façon dont dm-verity et les choses connexes fonctionnent sur Android selon mes connaissances limitées. La situation peut différer selon les appareils et les ROM.
COMMENT DM-VERITY EST-IL APPLIQUÉ ?
dm-verity (Démarrage vérifié et AVB) ainsi que dm-crypt (FDE) sont des cibles de device-mapper fonctionnalité du noyau Linux. dm-verity vérifie l'intégrité de chaque bloc au fur et à mesure qu'ils sont lus à partir du périphérique de bloc ; appliqué par init_first_stage selon fs_mgr_flags défini dans fstab . Sur les appareils système en tant que root (A/B et non-A/B ), le noyau est corrigé pour forcer la vérité lors du montage de /system et /vendor si verify /avb les drapeaux se trouvent dans l'arborescence des périphériques fstab (dtb).
dm-crypt déchiffre/chiffre les données de manière transparente lorsqu'elles sont lues/écrites depuis/vers l'appareil de blocage. FBE est basé sur un framework de noyau différent fscrypt; mais les deux sont gérés par vold (qui s'exécute en tant que service natif) si fs_mgr_flags contient voldmanaged .
OÙ SE TROUVE FSTAB ?
fstab a traditionnellement été un fichier sous Linux pour spécifier les systèmes de fichiers à monter au démarrage. C'est un composant central de fs_mgr fonctionnalité sur Android.
Sur les versions pré-Oreo fstab était en ramdisk . Avec Treble, il a été déplacé vers /vendor (ou /system/vendor ) tandis que les entrées fstab pour system et vendor (et odm ) sont déplacés vers Device Tree Blob (dtb ). Le noyau exporte dtb fstab entrées dans le répertoire de l'arborescence des périphériques à /proc/device-tree/firmware/android .
Certains OEM mettent également fstab en odm ou nvdata partitions.
Source : Configuration du périphérique de stockage Android
OÙ SE TROUVE DTB ?
L'arborescence des périphériques est une structure de données décrivant le matériel qui n'est pas détectable par le noyau. Source de l'arborescence des appareils (dts ) peut être converti en dtb (blob binaire de DT) et vice versa en utilisant dtc . DTB est chargé par le chargeur de démarrage au démarrage et transmis au noyau afin qu'il puisse découvrir le matériel et créer des nœuds de périphérique en conséquence.
DTB est soit :
- Ajouté au noyau
zImageouImage.gzenboot.img. Il peut être séparé degziparchiver en utilisantsplit-appended-dtb (sadtb). -
Ou en
dtbopartition comme le font certains OEM. Cela peut être vérifié avec :~# ls -l /dev/block/bootdevice/by-name/dtbo* ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|' - Ou à la fin de
boot.imgaprès la 2ème étape, ou enodmpartition (rare, certains OEM le font).
Aussi si l'appareil est non-A/B , dtb (à partir de boot.img et/ou dtbo partition) est également ajouté à recovery.img dans la section DTBO après header, kernel, ramdisk et 2nd stage . Cependant, cela n'a pas d'importance pour un démarrage normal. Mais si l'appareil est également system-as-root , Magisk doit être installé dans cette partition de récupération en tant que boot.img ne contient pas de ramdisk .
Dans le cas où DTB n'est pas ajouté au noyau, dtb(s) sont convertis en dtb.img en utilisant mkdtimg . Le même outil peut restituer l'image.
Source : Mise en œuvre du DTO
COMMENT DÉSACTIVER DM-VERITY ?
Sur userdebug ROM, dm-verity peut être désactivé en utilisant adb . Il modifie le numéro magique du bloc de métadonnées Verity qui est écrit après le dernier bloc de système de fichiers sur le périphérique de bloc (system ou vendor ). Citation d'ici :
l'absence de ce nombre magique interrompra le processus de vérification
En cas d'AVB, adb modifie vbmeta header pour désactiver la vérification d'image hashtree. Citation d'ici :
si le
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLEDl'indicateur est défini dans le vbmeta de niveau supérieur, puisandroidboot.veritymodeest défini sur désactivé
Le user construit ro.debuggable est 0 et adbd ne s'exécute pas en tant que root. Il existe également d'autres différences comme celle de ALLOW_ADBD_DISABLE_VERITY , donc adb ne désactivera pas dm-verity . Une autre approche consiste à supprimer verify ou avb drapeau de fstab . Citation d'ici :
Pour vérifier la partition...
...
Dans le fstab de l'entrée correspondante, ajoutezverifyaufs_mgrdrapeaux.
De même pour supprimer le chiffrement, forceencrypt= , forcefdeorfbe= ou fileencryption= doit être remplacé par encryptable= . Cependant, le cryptage ne peut pas être supprimé sans réinitialisation d'usine (FBE aussi ?), donc décochez Preserve force encryption dans l'application Magisk ne fera rien.
Certains OEM utilisent également support_scfs fs_mgr drapeau et ro.config.dmverity=true propriété sur les appareils avec dm-verity activé.
Il existe également des exploits découverts dans l'implémentation du chargeur de démarrage et de l'adb de certains OEM qui peuvent être utilisés pour désactiver dm-verity sur les appareils concernés. Cependant, ces failles de sécurité sont généralement corrigées au fil du temps grâce aux mises à jour des OEM.
OPTION 1
Définissez les options dans le fichier de configuration avant d'installer Magisk :
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Si installé, après avoir décoché Preserve AVB v2.0/dm-verity dans l'application, Magisk doit être réinstallé. Citation d'ici :
dans Magisk Manager, "Désinstaller> Restaurer les images" pour restaurer les images, cochez la case "Conserver AVB 2.0/dm-verity" dans les paramètres avancés, puis réinstallez Magisk via l'application.
OPTION 2
Utilisez du dm-verity désactiver les zips comme celui-ci.
OPTION 3
Déterminez où se trouve le fstab entrées de /system et /vendor sont sur votre appareil.
Si en ramdisk (pré-aigu):
- Extraire
ramdisk, modifierfstabet remballer. -
Ou patch
ramdiskdirectement :~# magiskboot cpio ramdisk.cpio 'patch false true'
Si en dtb :
- Si ajouté au noyau :
- Extraire
boot.img - Split ajouté
dtb(s) - Correctif
dtb(s). - Ajouter
dtb(s)au noyau - Reconditionner
boot.img
- Extraire
- Si en
dtbopartition ou enboot.imgaprès la 2ème étape, patchdtb.imget réécrivez sur la partition ouboot.img.
Comment décompresser/recompresser l'image de démarrage ou de récupération et le disque RAM ?
Utilisez AIK ou magiskboot .
Comment appliquer le correctif dtb ?
Corrigez directement en utilisant magiskboot ou convertir manuellement dtb à dts , éditez dts avec n'importe quel éditeur de texte pour supprimer dm-verity flags, et convertir dts retour à dtb .
CONNEXE :
- Comment fonctionne Magisk ?
- Partitions et systèmes de fichiers des appareils Android