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
zImageneboImage.gzvboot.img. Lze jej rozdělit zgziparchivovat pomocísplit-appended-dtb (sadtb). -
Nebo v
dtbooddí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.imgpo 2. stupni nebo vodmoddí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_DISABLEDpříznak je nastaven v nejvyšší úrovni vbmeta, potéandroidboot.veritymodeje 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řidejteverifynafs_mgrpří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, upravtefstaba přebalit. -
Nebo opravte
ramdiskpří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
dtbooddílu nebo vboot.imgpo 2. fázi opravtedtb.imga 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ů