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
zImageoderImage.gzinboot.img. Es kann vongzipgetrennt werden mitsplit-appended-dtb (sadtb)archivieren . -
Oder in
dtbopartitionieren, 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.imgnach 2. Stufe oder inodmPartition (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 Siefstabund umpacken. -
Oder patche
ramdiskdirekt:~# 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.imgneu
- Extrahieren Sie
- Wenn in
dtboPartition oder inboot.imgnach der 2. Stufe Patchdtb.imgund in die Partition zurückschreiben oderboot.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