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
zImage
ouImage.gz
enboot.img
. Il peut être séparé degzip
archiver en utilisantsplit-appended-dtb (sadtb)
. -
Ou en
dtbo
partition 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.img
après la 2ème étape, ou enodm
partition (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_DISABLED
l'indicateur est défini dans le vbmeta de niveau supérieur, puisandroidboot.veritymode
est 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, ajoutezverify
aufs_mgr
drapeaux.
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
, modifierfstab
et remballer. -
Ou patch
ramdisk
directement :~# 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
dtbo
partition ou enboot.img
après la 2ème étape, patchdtb.img
et 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