GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Android - Wie deaktiviere ich dm-verity auf Android mit User Build Type ROM?

Ich werde einen allgemeinen Überblick darüber geben, wie dm-verity und verwandte Dinge funktionieren nach meinem begrenzten Wissen auf Android. Die Situation kann auf verschiedenen Geräten und ROMs unterschiedlich sein.

WIE WIRD DM-VERITY DURCHGESETZT?

dm-verity (Verified Boot und AVB) sowie dm-crypt (FDE) sind Ziele von device-mapper Funktion des Linux-Kernels. dm-verity verifiziert die Integrität jedes Blocks, wenn sie vom Blockgerät gelesen werden; erzwungen durch init_first_stage gemäß fs_mgr_flags in der fstab einstellen. Auf System-als-Root-Geräten (A/B und non-A/B ), wird der Kernel gepatcht, um beim Mounten von /system Verity zu erzwingen und /vendor wenn verify /avb Flags befinden sich im fstab-Gerätebaum (dtb).
dm-crypt entschlüsselt/verschlüsselt Daten transparent beim Lesen/Schreiben von/auf Blockgerät. FBE basiert auf einem anderen Kernel-Framework fscrypt; aber beide werden von vold verwaltet (der als nativer Dienst ausgeführt wird) wenn fs_mgr_flags enthalten voldmanaged .

WO FSTAB IST?

fstab ist traditionell eine Datei unter Linux, um Dateisysteme anzugeben, die beim Booten gemountet werden sollen. Es ist eine Kernkomponente von fs_mgr Funktionalität auf Android.

Auf Vorversionen von Oreo fstab war in ramdisk . Bei Treble wurde es nach /vendor verschoben (oder /system/vendor ) während die fstab-Einträge für system und vendor (und odm ) werden in das Gerätestruktur-Blob (dtb) verschoben ). Kernel exportiert dtb fstab Einträge im Gerätebaumverzeichnis unter /proc/device-tree/firmware/android .

Einige OEMs setzen auch fstab in odm oder nvdata Partitionen.

Quelle: Konfiguration von Android-Speichergeräten

WO IST DTB?

Der Gerätebaum ist eine Datenstruktur zum Beschreiben von Hardware, die für den Kernel nicht erkennbar ist. Gerätebaumquelle (dts ) kann in dtb konvertiert werden (binärer Blob von DT) und umgekehrt mit dtc . DTB wird beim Booten vom Bootloader geladen und an den Kernel übergeben, damit dieser Hardware erkennen und entsprechende Geräteknoten erstellen kann.

DTB ist entweder:

  • Hinzugefügt an Kernel zImage oder Image.gz in boot.img . Es kann von gzip getrennt werden mit split-appended-dtb (sadtb) archivieren .
  • Oder in dtbo partitionieren, wie es einige OEMs tun. Dies kann überprüft werden mit:

    ~# ls -l /dev/block/bootdevice/by-name/dtbo*
    ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
    
  • Oder am Ende von boot.img nach 2. Stufe oder in odm Partition (selten, einige OEMs).

Auch wenn das Gerät non-A/B ist , dtb (von boot.img und/oder dtbo Partition) wird auch zu recovery.img hinzugefügt im DTBO-Abschnitt nach Header, Kernel, Ramdisk und 2nd Stage . Dies spielt jedoch keine Rolle beim normalen Booten. Aber wenn das Gerät auch system-as-root ist , Magisk muss in dieser Wiederherstellungspartition als boot.img installiert werden enthält kein ramdisk .

Falls DTB nicht an den Kernel angehängt wird, dtb(s) werden in dtb.img umgewandelt mit mkdtimg . Dasselbe Tool kann das Bild zurückgeben.

Quelle: Implementierung von DTO

WIE DEAKTIVIERE ICH DM-VERITY?

Auf userdebug ROMs, dm-verity kann mit adb deaktiviert werden . Es ändert die magische Zahl des Verity-Metadatenblocks, der nach dem letzten Dateisystemblock auf dem Blockgerät geschrieben wird (system oder vendor ) . Zitat von hier:

das Fehlen dieser magischen Zahl stoppt den Verifizierungsprozess

Bei AVB adb ändert vbmeta header zum Deaktivieren der Hashtree-Bildüberprüfung . Zitat von hier:

wenn der AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED Flag wird in der vbmeta der obersten Ebene gesetzt, dann androidboot.veritymode auf deaktiviert gesetzt ist

Auf user baut ro.debuggable ist 0 und adbd läuft nicht als root. Außerdem gibt es noch andere Unterschiede wie den von ALLOW_ADBD_DISABLE_VERITY , also adb wird dm-verity nicht deaktivieren . Ein anderer Ansatz besteht darin, verify zu entfernen oder avb Flagge von fstab . Zitat von hier:

Um die Partition zu überprüfen...
...
Fügen Sie in der fstab für den entsprechenden Eintrag verify hinzu zum fs_mgr Flaggen.

Ähnlich zum Entfernen der Verschlüsselung, forceencrypt= , forcefdeorfbe= oder fileencryption= müssen durch encryptable= ersetzt werden . Die Verschlüsselung kann jedoch nicht ohne Zurücksetzen auf die Werkseinstellungen entfernt werden (FBE auch?), also deaktivieren Sie Preserve force encryption in der Magisk-App wird nichts tun.

Einige OEMs verwenden auch support_scfs fs_mgr Flag und ro.config.dmverity=true -Eigenschaft auf Geräten mit dm-verity aktiviert.

Es wurden auch einige Exploits in der Bootloader- und ADB-Implementierung einiger OEMs entdeckt, die zum Deaktivieren von dm-verity verwendet werden können auf betroffenen Geräten. Solche Sicherheitslücken werden jedoch normalerweise im Laufe der Zeit durch Updates von OEMs behoben.

MÖGLICHKEIT 1
Legen Sie die Optionen in der Konfigurationsdatei fest, bevor Sie Magisk installieren:

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

Falls installiert, nach dem Deaktivieren von Preserve AVB v2.0/dm-verity In der App muss Magisk neu installiert werden. Zitat von hier:

in Magisk Manager „Deinstallieren> Bilder wiederherstellen“, um die Bilder wiederherzustellen, aktivieren Sie das Kontrollkästchen „AVB 2.0/dm-verity beibehalten“ in den erweiterten Einstellungen und installieren Sie dann Magisk über die App neu.

MÖGLICHKEIT 2
Verwenden Sie etwas dm-verity Disabler-Reißverschlüsse wie diese.

OPTION 3
Finden Sie heraus, wo der fstab Einträge von /system und /vendor befinden sich auf Ihrem Gerät.

Wenn in ramdisk (vor Höhen):

  • Extrahieren Sie ramdisk , ändern Sie fstab und umpacken.
  • Oder patche ramdisk direkt:

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

Wenn in dtb :

  • Falls an Kernel angehängt:
    • Extrahieren Sie boot.img
    • Split hat dtb(s) angehängt
    • Patch dtb(s) .
    • Fügen Sie dtb(s) hinzu zum Kernel
    • Packen Sie boot.img neu
  • Wenn in dtbo Partition oder in boot.img nach der 2. Stufe Patch dtb.img und in die Partition zurückschreiben oder boot.img .

Wie werden Boot- oder Wiederherstellungs-Image und Ramdisk entpackt/neu gepackt?
Verwenden Sie AIK oder magiskboot .

So patchen Sie dtb ?
Patchen Sie direkt mit magiskboot oder konvertieren Sie manuell dtb bis dts , bearbeiten Sie dts mit einem beliebigen Texteditor, um dm-verity zu entfernen Flags und konvertieren Sie dts zurück zu dtb .

VERBINDUNG:

  • Wie funktioniert Magisk?
  • Partitionen und Dateisysteme von Android-Geräten

Linux
  1. So löschen Sie Benutzerkonten mit Home-Verzeichnis in Linux

  2. So blockieren oder deaktivieren Sie normale Benutzeranmeldungen in Linux

  3. So verschlüsseln Sie eine Partition mit DM-Crypt LUKS unter Linux

  4. So ändern, entfernen oder deaktivieren Sie das Benutzerkennwort in Linux

  5. Benutzer zu Gruppe in Linux hinzufügen, Anleitung (mit Beispielen)

So stellen oder ändern Sie den Benutzeragenten mit Curl

So erteilen Sie Benutzern Root-Rechte unter Kali Linux

So installieren Sie Nextcloud mit ISPConfig 3.1

So fügen Sie einen neuen MySQL-Benutzer mit GRANT-Berechtigungen hinzu

So deaktivieren Sie die SSH-Anmeldung für einen bestimmten Benutzer in Linux

Wie starte ich einen Android-Emulator in Ubuntu 16.04?