GNU/Linux >> Tutoriels Linux >  >> Linux

Android - Comment désactiver dm-verity sur Android avec une ROM de type build utilisateur ?

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 ou Image.gz en boot.img . Il peut être séparé de gzip archiver en utilisant split-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 en odm 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, puis androidboot.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, ajoutez verify au fs_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 , modifier fstab 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
  • Si en dtbo partition ou en boot.img après la 2ème étape, patch dtb.img et réécrivez sur la partition ou boot.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

Linux
  1. Comment supprimer des comptes d'utilisateurs avec le répertoire personnel sous Linux

  2. Comment bloquer ou désactiver les connexions utilisateur normales sous Linux

  3. Comment chiffrer une partition avec DM-Crypt LUKS sous Linux

  4. Comment installer Nextcloud avec ISPConfig 3.1

  5. Comment gérer les utilisateurs avec useradd sous Linux

Comment définir ou modifier l'agent utilisateur avec curl

Comment fournir à l'utilisateur des privilèges root sur Kali Linux

Comment ajouter un nouvel utilisateur MySQL avec des autorisations GRANT

Comment désactiver la connexion SSH à un utilisateur spécifique sous Linux

Comment désactiver une commande spécifique pour un utilisateur spécifique sous Linux

Comment démarrer un émulateur Android dans Ubuntu 16.04 ?