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
zImageoImage.gzinboot.img. Può essere separato dagziparchivia usandosplit-appended-dtb (sadtb). -
O in
dtbopartizione 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.imgdopo la seconda fase o inodmpartizione (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_DISABLEDflag è impostato nel vbmeta di primo livello, quindiandroidboot.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, aggiungiverifyalfs_mgrflag.
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, modificafstabe reimballare. -
O patch
ramdiskdirettamente:~# 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
- Estrai
- Se in
dtbopartizione o inboot.imgdopo la seconda fase, patchdtb.imge riscrivi nella partizione oboot.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