Uvedu obecný přehled toho, jak dm-verity
a související věci fungují na Androidu podle mých omezených znalostí. Situace se může na různých zařízeních a ROM lišit.
JAK SE DM-VERITY VYNUCUJE?
dm-verity
(Ověřené spouštění a AVB) a také dm-crypt
(FDE) jsou cíle device-mapper
vlastnost linuxového jádra. dm-verity
ověřuje integritu každého bloku, když jsou čteny z blokového zařízení; vynuceno init_first_stage
podle fs_mgr_flags
nastavit ve fstab . Na zařízeních typu system-as-root (A/B
a non-A/B
), jádro je opraveno, aby se vynutila pravost při připojování /system
a /vendor
pokud verify
/avb
příznaky se nacházejí ve stromu zařízení fstab (dtb).
dm-crypt
dešifruje/šifruje transparentně data při čtení/zápisu z/do blokového zařízení. FBE je založeno na jiném kernel frameworku fscrypt
; ale oba jsou spravovány vold
(která běží jako nativní služba), pokud fs_mgr_flags
obsahovat voldmanaged
.
KDE JE FSTAB?
fstab
byl v Linuxu tradičně souborem, který specifikoval souborové systémy, které mají být připojeny při bootování. Je to základní součást fs_mgr
funkce v systému Android.
U verzí před vydáním Oreo fstab
byl v ramdisk
. S Treble to bylo přesunuto na /vendor
(nebo /system/vendor
), zatímco fstab položky pro system
a vendor
(a odm
) se přesunou do objektu Blob stromu zařízení (dtb
). Jádro exportuje dtb fstab
záznamy ve stromovém adresáři zařízení na /proc/device-tree/firmware/android
.
Někteří výrobci OEM také uvádějí fstab
v odm
nebo nvdata
oddíly.
Zdroj: Konfigurace úložného zařízení Android
KDE JE DTB?
Strom zařízení je datová struktura pro popis hardwaru, který není pro jádro zjistitelný. Zdroj stromu zařízení (dts
) lze převést na dtb
(binární blob DT) a naopak pomocí dtc
. DTB je načten bootloaderem při bootování a předán jádru, aby mohlo objevit hardware a podle toho vytvořit uzly zařízení.
DTB je buď:
- Přidáno k jádru
zImage
neboImage.gz
vboot.img
. Lze jej rozdělit zgzip
archivovat pomocísplit-appended-dtb (sadtb)
. -
Nebo v
dtbo
oddíl jako někteří výrobci OEM. To lze zkontrolovat pomocí:~# ls -l /dev/block/bootdevice/by-name/dtbo* ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
- Nebo na konci
boot.img
po 2. stupni nebo vodm
oddíl (vzácné, někteří výrobci OEM to dělají).
Také pokud je zařízení non-A/B
, dtb
(z boot.img
a/nebo dtbo
oddíl) je také přidán do recovery.img
v sekci DTBO po hlavičce, jádře, ramdisku a 2. stupni . To však u normálního bootování nevadí. Ale pokud je zařízení také system-as-root
, Magisk musí být nainstalován v tomto oddílu pro obnovení jako boot.img
neobsahuje žádné ramdisk
.
V případě, že DTB není připojeno k jádru, dtb(s)
jsou převedeny na dtb.img
pomocí mkdtimg
. Stejný nástroj může vrátit zpět obrázek.
Zdroj: Implementace DTO
JAK ZAKÁZAT DM-VERITY?
Na userdebug
ROM, dm-verity
lze deaktivovat pomocí adb
. Upravuje magické číslo bloku metadat pravdivosti, který je zapsán za posledním blokem souborového systému na blokovém zařízení (system
nebo vendor
). Citováno odtud:
nepřítomnost tohoto magického čísla zastaví ověřovací proces
V případě AVB adb
upravuje vbmeta header
zakázat ověřování hashtree obrázku . Citováno odtud:
pokud
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
příznak je nastaven v nejvyšší úrovni vbmeta, potéandroidboot.veritymode
je nastaveno na deaktivováno
Na user
sestaví ro.debuggable
je 0
a adbd
neběží jako root. Existují také další rozdíly, jako je ALLOW_ADBD_DISABLE_VERITY
, tedy adb
nezakáže dm-verity
. Jiný přístup je odstranit verify
nebo avb
příznak z fstab
. Citováno odtud:
Chcete-li ověřit oddíl...
...
Ve fstabu pro příslušnou položku přidejteverify
nafs_mgr
příznaky.
Podobně pro odstranění šifrování forceencrypt=
, forcefdeorfbe=
nebo fileencryption=
je třeba nahradit encryptable=
. Šifrování však nelze odstranit bez obnovení továrního nastavení (také FBE?), takže zrušte zaškrtnutí Preserve force encryption
v aplikaci Magisk neudělá nic.
Někteří výrobci OEM také používají support_scfs
fs_mgr
příznak a ro.config.dmverity=true
vlastnost na zařízeních s dm-verity
povoleno.
Existují také některé exploity objevené v implementaci bootloaderu a adb některých výrobců OEM, které lze použít k deaktivaci dm-verity
na postižených zařízeních. Takové bezpečnostní chyby se však obvykle časem opraví pomocí aktualizací od výrobců OEM.
MOŽNOST 1
Před instalací Magisk nastavte možnosti v konfiguračním souboru:
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Pokud je nainstalováno, po zrušení zaškrtnutí Preserve AVB v2.0/dm-verity
v aplikaci je třeba přeinstalovat Magisk. Citováno odtud:
ve Správci Magisk, „Odinstalovat> Obnovit obrázky“ pro obnovení obrázků, zaškrtněte políčko „Zachovat AVB 2.0/dm-verity“ v Pokročilých nastaveních a poté znovu nainstalujte Magisk prostřednictvím aplikace.
MOŽNOST 2
Použijte nějaký dm-verity
deaktivační zipy takto.
MOŽNOST 3
Zjistěte, kde je fstab
položky /system
a /vendor
jsou ve vašem zařízení.
Pokud je v ramdisk
(předvýšky):
- Extrahujte
ramdisk
, upravtefstab
a přebalit. -
Nebo opravte
ramdisk
přímo:~# magiskboot cpio ramdisk.cpio 'patch false true'
Pokud je v dtb
:
- Pokud je připojeno k jádru:
- Extrahujte
boot.img
- Rozdělení připojeno
dtb(s)
- Oprava
dtb(s)
. - Připojit
dtb(s)
do jádra - Znovu zabalte
boot.img
- Extrahujte
- Pokud je v
dtbo
oddílu nebo vboot.img
po 2. fázi opravtedtb.img
a zapište zpět do oddílu neboboot.img
.
Jak rozbalit/znovu zabalit spouštěcí nebo obnovovací obraz a Ramdisk?
Použijte AIK nebo magiskboot
.
Jak opravit dtb
?
Opravte přímo pomocí magiskboot
nebo ručně převeďte dtb
na dts
, upravte dts
pomocí libovolného textového editoru k odstranění dm-verity
příznaky a převeďte dts
zpět na dtb
.
SOUVISEJÍCÍ:
- Jak Magisk funguje?
- Oddíly zařízení Android a systémy souborů