GNU/Linux >> Znalost Linux >  >> Linux

Android - Jak deaktivovat dm-verity na Androidu s uživatelským typem sestavení ROM?

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 nebo Image.gz v boot.img . Lze jej rozdělit z gzip 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 v odm 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řidejte verify na fs_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 , upravte fstab 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
  • Pokud je v dtbo oddílu nebo v boot.img po 2. fázi opravte dtb.img a zapište zpět do oddílu nebo boot.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ů

Linux
  1. Jak spravovat uživatele pomocí useradd v linuxu

  2. Jak zakázat přihlášení uživatele root přes SSH

  3. Jak zakázat registraci uživatele v Joomla

  1. Jak zablokovat nebo zakázat normální přihlášení uživatele v Linuxu

  2. Jak zakázat konkrétní příkaz pro konkrétního uživatele v Linuxu

  3. Android – Jak zjistím, že moje zařízení ADB na Linuxu detekuje?

  1. Jak zašifrovat oddíl pomocí DM-Crypt LUKS na Linuxu

  2. Jak nainstalovat Nextcloud s ISPConfig 3.1

  3. Jak změnit, odebrat nebo zakázat uživatelské heslo v systému Linux