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
oderImage.gz
inboot.img
. Es kann vongzip
getrennt werden mitsplit-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 inodm
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 Siefstab
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
- Extrahieren Sie
- Wenn in
dtbo
Partition oder inboot.img
nach der 2. Stufe Patchdtb.img
und 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