GNU/Linux >> Linux Esercitazione >  >> Linux

Android - Come disabilitare dm-verity su Android con ROM di tipo build utente?

Darò una panoramica generale di come dm-verity e le cose correlate funzionano su Android in base alle mie conoscenze limitate. La situazione potrebbe differire su diversi dispositivi e ROM.

COME VIENE APPLICATO DM-VERITY?

dm-verity (Avvio verificato e AVB) così come dm-crypt (FDE) sono obiettivi di device-mapper caratteristica del kernel Linux. dm-verity verifica l'integrità di ciascun blocco man mano che vengono letti dal dispositivo a blocchi; imposto da init_first_stage come da fs_mgr_flags impostato in fstab . Sui dispositivi system-as-root (A/B e non-A/B ), il kernel è aggiornato per forzare la verità durante il montaggio di /system e /vendor se verify /avb i flag si trovano nell'albero dei dispositivi fstab (dtb).
dm-crypt decrittografa/crittografa i dati in modo trasparente quando viene letto/scritto da/a un dispositivo a blocchi. FBE è basato su un diverso framework del kernel fscrypt; ma entrambi sono gestiti da vold (che viene eseguito come servizio nativo) if fs_mgr_flags contenere voldmanaged .

DOVE SI TROVA FSTAB?

fstab è stato tradizionalmente un file su Linux per specificare i filesystem da montare all'avvio. È un componente fondamentale di fs_mgr funzionalità su Android.

Nelle versioni pre-Oreo fstab era in ramdisk . Con Treble è stato spostato in /vendor (o /system/vendor ) mentre le voci fstab per system e vendor (e odm ) vengono spostati in Device Tree Blob (dtb ). Il kernel esporta dtb fstab voci nella directory dell'albero dei dispositivi in ​​/proc/device-tree/firmware/android .

Alcuni OEM inseriscono anche fstab in odm o nvdata partizioni.

Fonte: Configurazione del dispositivo di archiviazione Android

DOVE SI TROVA DTB?

Device Tree è una struttura dati per descrivere l'hardware che non è rilevabile dal kernel. Origine dell'albero dei dispositivi (dts ) può essere convertito in dtb (blob binario di DT) e viceversa usando dtc . DTB viene caricato dal bootloader al momento dell'avvio e passato al kernel in modo che possa rilevare l'hardware e creare i nodi del dispositivo di conseguenza.

DTB è:

  • Aggiunto al kernel zImage o Image.gz in boot.img . Può essere separato da gzip archivia usando split-appended-dtb (sadtb) .
  • O in dtbo partizione come fanno alcuni OEM. Questo può essere verificato con:

    ~# ls -l /dev/block/bootdevice/by-name/dtbo*
    ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
    
  • O alla fine di boot.img dopo la seconda fase o in odm partizione (raro, alcuni OEM lo fanno).

Anche se il dispositivo è non-A/B , dtb (da boot.img e/o dtbo partizione) viene aggiunta anche a recovery.img nella sezione DTBO dopo header, kernel, ramdisk e 2nd stage . Tuttavia questo non ha importanza per l'avvio normale. Ma se il dispositivo è anche system-as-root , Magisk deve essere installato in questa partizione di ripristino come boot.img non contiene ramdisk .

Nel caso in cui DTB non sia aggiunto al kernel, dtb(s) vengono convertiti in dtb.img utilizzando mkdtimg . Lo stesso strumento può eseguire il dump dell'immagine.

Fonte: Implementazione di DTO

COME DISABILITARE DM-VERITY?

Su userdebug ROM, dm-verity può essere disabilitato usando adb . Modifica il numero magico del blocco di metadati di verità che viene scritto dopo l'ultimo blocco del filesystem sul dispositivo a blocchi (system o vendor ). Citato da qui:

l'assenza di questo numero magico interromperà il processo di verifica

In caso di AVB, adb modifica vbmeta header per disabilitare la verifica dell'immagine hashtree . Citato da qui:

se AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED flag è impostato nel vbmeta di primo livello, quindi androidboot.veritymode è impostato su disabilitato

Su user costruisce ro.debuggable è 0 e adbd non è in esecuzione come root. Inoltre ci sono altre differenze come quella di ALLOW_ADBD_DISABLE_VERITY , quindi adb non disabiliterà dm-verity . Un altro approccio consiste nel rimuovere verify o avb flag da fstab . Citato da qui:

Per verificare la partizione...
...
Nel fstab per la voce pertinente, aggiungi verify al fs_mgr flag.

Allo stesso modo per rimuovere la crittografia, forceencrypt= , forcefdeorfbe= o fileencryption= deve essere sostituito con encryptable= . Tuttavia, la crittografia non può essere rimossa senza il ripristino delle impostazioni di fabbrica (anche FBE?), quindi deselezionando Preserve force encryption nell'app Magisk non farà nulla.

Alcuni OEM usano anche support_scfs fs_mgr flag e ro.config.dmverity=true property sui dispositivi con dm-verity abilitato.

Ci sono anche alcuni exploit scoperti nel bootloader e nell'implementazione adb di alcuni OEM che possono essere usati per disabilitare dm-verity sui dispositivi interessati. Tuttavia, tali difetti di sicurezza di solito vengono risolti nel tempo con gli aggiornamenti degli OEM.

OPZIONE 1
Imposta le opzioni nel file di configurazione prima di installare Magisk:

~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk

Se installato, dopo aver deselezionato Preserve AVB v2.0/dm-verity nell'app, Magisk deve essere reinstallato. Citato da qui:

in Magisk Manager, "Disinstalla> Ripristina immagini" per ripristinare le immagini, seleziona la casella "Preserve AVB 2.0/dm-verity" in Impostazioni avanzate, quindi reinstalla Magisk tramite l'app.

OPZIONE 2
Usa un po' di dm-verity zip di disattivazione come questa.

OPZIONE 3
Scopri dove si trova fstab voci di /system e /vendor sono sul tuo dispositivo.

Se in ramdisk (pre-acuti):

  • Estrai ramdisk , modifica fstab e reimballare.
  • O patch ramdisk direttamente:

    ~# magiskboot cpio ramdisk.cpio 'patch false true'
    

Se in dtb :

  • Se aggiunto al kernel:
    • Estrai boot.img
    • Split aggiunto dtb(s)
    • Patch dtb(s) .
    • Aggiungi dtb(s) al kernel
    • Riconfeziona boot.img
  • Se in dtbo partizione o in boot.img dopo la seconda fase, patch dtb.img e riscrivi nella partizione o boot.img .

Come decomprimere/reimballare l'immagine di avvio o di ripristino e il Ramdisk?
Usa AIK o magiskboot .

Come patchare dtb ?
Patch direttamente usando magiskboot o convertire manualmente dtb a dts , modifica dts con qualsiasi editor di testo per rimuovere dm-verity flags e convertire dts torna a dtb .

RELAZIONATO:

  • Come funziona Magisk?
  • Partizioni e file system del dispositivo Android

Linux
  1. Come bloccare o disabilitare i normali accessi utente in Linux

  2. Come creare un nuovo utente con accesso Ssh?

  3. Come disabilitare l'accesso SSH con password

  4. UNIX / Linux:come bloccare o disabilitare un account utente

  5. Come disabilitare un comando specifico per un utente specifico in Linux

Come impostare o modificare l'agente utente con curl

Come fornire all'utente i privilegi di root su Kali Linux

Come aggiungere un nuovo utente MySQL con autorizzazioni GRANT

Come disabilitare l'accesso SSH a un utente specifico in Linux

Come avviare un emulatore Android in Ubuntu 16.04?

Android - Come posso far rilevare il mio dispositivo da ADB su Linux?