8 votes

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

J'ai un appareil Android OnePlus 6T qui a une ROM de type de build user. Cet appareil est rooté avec Magisk et je veux désactiver dm-verity sur cet appareil. J'ai essayé d'exécuter adb disable-verity mais j'ai reçu une erreur disant la vérification ne peut pas être désactivée / activée - construction USER

Y a-t-il un moyen de le désactiver?

Objectif: Je veux placer un fichier sepolicy personnalisé sous le répertoire system_root. J'ai essayé de le faire avec les commandes suivantes:

C:\Users\GPU-Test>adb shell
OnePlus6T:/ $ su
OnePlus6T:/ # mount -o rw,remount /system_root
OnePlus6T:/ # cp /sdcard/selinux_policy_modified /system_root/sepolicy
cp: /system_root/sepolicy: Permission denied
1|OnePlus6T:/ # cp -f /sdcard/selinux_policy_modified /system_root/sepolicy
cp: /system_root/sepolicy: Aucun fichier ou dossier de ce type
1|OnePlus6T:/ # ^C
130|OnePlus6T:/ # exit
130|OnePlus6T:/ $ exit

C:\Users\GPU-Test>adb disable-verity
la vérification ne peut pas être désactivée / activée - construction USER

J'ai également essayé de désactiver la case à cocher Préserver le chiffrement forcé et Préserver AVB 2.0/dm-verity mais les commandes ci-dessus donnent toujours le même résultat. De plus, lors du redémarrage, ces cases à cocher se réactivent automatiquement.

0 votes

Pouvez-vous être plus précis sur la cible de votre question, car vous avez généralement déjà patché votre appareil contre dm-verity (Magisk Manager a une case à cocher pour cela) ?

0 votes

J'ai ajouté plus de détails concernant pourquoi je veux faire cela et ce que j'ai essayé.

0 votes

Pourquoi ne pas utiliser / à la place de /system_root?

15voto

Irfan Latif Points 16863

Je vais donner un aperçu général de la façon dont dm-verity et les choses connexes fonctionnent sur Android d'après mes connaissances limitées. La situation peut varier selon les appareils et les ROMs.

COMMENT LA VERITE DES DM EST-ELLE ASSUREE ?

dm-verity ( Botte vérifiée y AVB ) ainsi que dm-crypt ( FDE ) sont des cibles de device-mapper du noyau Linux. dm-verity vérifie l'intégrité de chaque bloc lorsqu'il est lu à partir du périphérique de bloc ; cette vérification est assurée par init_first_stage selon fs_mgr_flags défini dans fstab ( 1 ) . Sur système-as-Root les dispositifs ( A/B y non-A/B ), le noyau est corrigé pour forcer la véracité lors du montage /system y /vendor si verify / avb sont trouvés dans l'arbre des périphériques fstab (dtb).
dm-crypt décrypte/chiffre les données de manière transparente lors de la lecture/écriture depuis/vers le périphérique de bloc. FBE est basé sur un cadre de noyau différent fscrypt mais les deux sont gérés par vold (qui fonctionne comme un service natif) si fs_mgr_flags contiennent 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 essentiel de fs_mgr sur Android.

Sur les versions pré-Oreo fstab était en ramdisk . Avec Treble, il a été déplacé vers /vendor (ou /system/vendor ) alors que les entrées fstab pour system y vendor (et odm ) sont déplacés vers le Device Tree Blob ( dtb ). Exportations de noyaux dtb fstab dans le répertoire de l'arborescence du dispositif à /proc/device-tree/firmware/android .

Certains équipementiers mettent aussi fstab en odm o nvdata les partitions.

Source : Configuration du dispositif de stockage Android

OÙ EST DTB ?

Arbre des dispositifs est une structure de données pour décrire le matériel qui ne peut pas être découvert par le noyau. Device Tree Source ( 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 moment du démarrage et transmis au noyau pour qu'il puisse découvrir le matériel et créer des nœuds de périphérique en conséquence.

DTB est l'un ou l'autre :

  • Annexé au noyau zImage o Image.gz en boot.img ( 2 ) . Il peut être séparé de gzip archives utilisant split-appended-dtb (sadtb) .

  • Ou dans 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 2e étape, ou en odm partition (rare, certains OEM le font).

De même, si l'appareil est non-A/B , dtb (de boot.img et/ou dtbo ) est également ajouté à recovery.img dans la section DTBO après l'en-tête, le noyau, le disque virtuel et le deuxième étage. ( 3 ) . Cependant, cela n'a pas d'importance pour un démarrage normal. Mais si le périphérique est également system-as-root Magisk doit être installé sur cette partition de récupération en tant qu'outil de gestion des données. boot.img ne contient pas ramdisk ( 4 ) .

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 récupérer l'image.

Source : Mise en œuvre de DTO

COMMENT DÉSAC DÉSAC DÉSAC DÉSACTIVER DM-VÉRITÉ ?

En userdebug ROMs, dm-verity peut être désactivé en utilisant adb . Il modifie le nombre magique du bloc de métadonnées de vérification. ( 5 , 6 ) qui est écrit après le dernier bloc du système de fichiers sur le périphérique de bloc ( system o vendor ) ( 7 ) . Cité dans aquí :

l'absence de ce chiffre magique interrompra le processus de vérification.

En cas d'AVB, adb modifie vbmeta header pour désactiver la vérification des images de hashtree ( 8 , 9 ) . Cité dans aquí :

si le AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED est activé dans le vbmeta de premier niveau, alors androidboot.veritymode est réglé sur désactivé

En user construit ro.debuggable es 0 y adbd ne fonctionne pas comme Root. Il y a aussi d'autres différences comme celle de ALLOW_ADBD_DISABLE_VERITY donc adb ne désactivera pas dm-verity . L'autre approche consiste à supprimer verify o avb ( 10 ) drapeau de fstab . Cité dans aquí :

Pour vérifier la partition...
...
Dans le fstab de l'entrée concernée, ajoutez verify à la fs_mgr drapeaux.

De même, pour supprimer le cryptage, forceencrypt= , forcefdeorfbe= o fileencryption= doivent être remplacés par encryptable= . Cependant, le cryptage ne peut pas être supprimé sans réinitialisation d'usine (FBE aussi ?), donc décocher la case Preserve force encryption dans l'application Magisk ne fera rien.

Certains OEM utilisent également support_scfs fs_mgr et ro.config.dmverity=true sur les appareils avec dm-verity activé.

Il y a aussi des exploits découvert dans chargeur de démarrage y adb de certains fabricants d'équipements d'origine, qui peut être utilisé pour désactiver dm-verity sur les appareils concernés. Toutefois, ces failles de sécurité sont généralement corrigées au fil du temps par les mises à jour des équipementiers.

OPTION 1
Définir les options dans le fichier de configuration avant d'installer Magisk :

~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk

Si elle est installée, après avoir décoché Preserve AVB v2.0/dm-verity dans l'application, Magisk doit être réinstallé. Cité par aquí :

dans Magisk Manager, "Uninstall > Restore Images" pour restaurer les images, cochez la case "Preserve AVB 2.0/dm-verity" dans Advanced Settings, puis réinstallez Magisk via l'application.

OPTION 2
Utilisez quelques dm-verity disabler zips comme ce .

OPTION 3
Trouvez où le fstab les entrées de /system y /vendor sont sur votre appareil.

Si en ramdisk (pré-Treble) :

  • Extrait ramdisk , modifier fstab et remballer.
  • Ou patch ramdisk directement :

    ~# magiskboot cpio ramdisk.cpio 'patch false true'

Si en dtb :

  • Si elle est annexée au noyau :
    • Extrait boot.img
    • Split annexé dtb(s)
    • Patch dtb(s) .
    • Ajouter dtb(s) au noyau
    • Repack boot.img
  • Si en dtbo ou dans boot.img après la 2e étape, patch dtb.img et réécrire sur la partition ou boot.img .

Comment décompresser / repacker l'image de démarrage ou de récupération et le Ramdisk ?
Utilisez AIK o magiskboot .

Comment faire un patch dtb ?
Patch directement en utilisant magiskboot ou convertir manuellement dtb a dts , modifier dts avec n'importe quel éditeur de texte pour supprimer dm-verity et convertir dts retour à dtb .

RELATED :

0 votes

Dans les appareils SAR lancés avec Android 10, j'ai construit un noyau avec les drapeaux AVB (aucun drapeau de vérification trouvé) supprimé des entrées fsmgr_flags et rendu le tout permissif. J'ai également vidé le vbmeta avec le drapeau de vérification désactivé. Est-ce suffisant pour désactiver dm-verity? (Je ne peux pas le tester car twrp n'est pas mis à jour vers Android 10 et je ne sais pas encore comment monter la partition dynamique avec un shell adb rooté en mode récupération)

0 votes

@VatishSharma Désolé, je n'ai pas testé avec Android 10, donc je ne peux rien dire avec certitude.

0 votes

Avez-vous une idée de comment monter des partitions dynamiques (j'ai installé twrp et obtenu un shell adb root mais oui, il n'est pas mis à jour pour les partitions dynamiques et donc manque de fonctionnalités de montage) ?

1voto

user145453 Points 11

Vous pouvez simplement modifier le package de root Magisk pour désactiver UNIQUEMENT le drapeau dm-verity. Il suffit littéralement de commenter quelques lignes de scripts Magisk, car la fonctionnalité est intrinsèquement présente dans Magisk. Voici le lien vers un tel package : Télécharger magisk-onlynoveritypatch.zip Démarrez en twrp, installez à partir du zip et sélectionnez ce zip.

0 votes

Merci pour le partage. Malheureusement, seuls les utilisateurs inscrits peuvent télécharger. Et il est difficile de s'inscrire car il n'y a pas de captcha en anglais :(

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X