Solución:
Voy a dar una descripción general de cómo dm-verity
y las cosas relacionadas funcionan en Android de acuerdo con mi conocimiento limitado. La situación puede diferir en diferentes dispositivos y ROM.
¿CÓMO SE APLICA DM-VERITY?
dm-verity
(Arranque verificado y AVB) así como dm-crypt
(FDE) son objetivos de device-mapper
característica del kernel de Linux. dm-verity
verifica la integridad de cada bloque a medida que se leen desde el dispositivo de bloque; forzado por init_first_stage
según fs_mgr_flags
establecido en fstab (1). En dispositivos de sistema como raíz (A/B
y non-A/B
), el kernel está parcheado para forzar la verdad mientras se monta /system
y /vendor
si verify
/avb
Los indicadores se encuentran en el árbol de dispositivos fstab (dtb).dm-crypt
descifra / cifra los datos de forma transparente cuando se leen / escriben desde / para bloquear el dispositivo. FBE se basa en un marco de kernel diferente fscrypt
; pero ambos son administrados por vold
(que se ejecuta como un servicio nativo) si fs_mgr_flags
Contiene voldmanaged
.
¿DÓNDE ESTÁ FSTAB?
fstab
tradicionalmente ha sido un archivo en Linux para especificar los sistemas de archivos que se montarán en el arranque. Es un componente central de fs_mgr
funcionalidad en Android.
En lanzamientos anteriores a Oreo fstab
estaba en ramdisk
. Con Treble se trasladó a /vendor
(o /system/vendor
) mientras que las entradas fstab para system
y vendor
(y odm
) se mueven a Device Tree Blob (dtb
). Exportaciones de kernel dtb fstab
entradas en el directorio del árbol de dispositivos en /proc/device-tree/firmware/android
.
Algunos OEM también ponen fstab
en odm
o nvdata
particiones.
Fuente: Configuración del dispositivo de almacenamiento Android
¿DÓNDE ESTÁ DTB?
El árbol de dispositivos es una estructura de datos para describir hardware que no es detectable por el kernel. Origen del árbol de dispositivos (dts
) se puede convertir a dtb
(blob binario de DT) y viceversa usando dtc
. El cargador de arranque carga DTB en el momento del arranque y se pasa al kernel para que pueda descubrir hardware y crear nodos de dispositivo en consecuencia.
DTB es:
- Anexado al kernel
zImage
oImage.gz
enboot.img
(2). Se puede dividir degzip
archivar usandosplit-appended-dtb (sadtb)
. -
O en
dtbo
partición como lo hacen algunos OEM. Esto se puede comprobar 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 al final de
boot.img
después de la 2da etapa, o enodm
partición (raro, algunos OEM lo hacen).
Además, si el dispositivo es non-A/B
, dtb
(de boot.img
y / o dtbo
partición) también se agrega a recovery.img
en la sección DTBO después del encabezado, kernel, ramdisk y segunda etapa (3). Sin embargo, esto no importa para un arranque normal. Pero si el dispositivo también es system-as-root
, Magisk debe instalarse en esta partición de recuperación como el boot.img
no contiene ramdisk
(4).
En caso de que DTB no se agregue al kernel, dtb(s)
se convierten a dtb.img
utilizando mkdtimg
. La misma herramienta puede volcar la imagen.
Fuente: Implementación de DTO
¿CÓMO DESHABILITAR DM-VERITY?
Sobre userdebug
ROM, dm-verity
se puede deshabilitar usando adb
. Modifica el número mágico del bloque de metadatos de verdad. (5, 6) que está escrito después del último bloque del sistema de archivos en el dispositivo de bloque (system
o vendor
) (7). Citado de aquí:
la ausencia de este número mágico detendrá el proceso de verificación
En caso de AVB, adb
modifica vbmeta header
para deshabilitar la verificación de la imagen de hashtree (8, 9). Citado de aquí:
Si el
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
la bandera se establece en el vbmeta de nivel superior, luegoandroidboot.veritymode
se establece en discapacitado
Sobre user
construye ro.debuggable
es 0
y adbd
no se está ejecutando como root. También hay otras diferencias como la de ALLOW_ADBD_DISABLE_VERITY
, asi que adb
no deshabilitará dm-verity
. Otro enfoque es eliminar verify
o avb
(10) bandera de fstab
. Citado de aquí:
Para verificar la partición …
…
En la fstab para la entrada relevante, agregueverify
alfs_mgr
banderas.
De manera similar, para eliminar el cifrado, forceencrypt=
, forcefdeorfbe=
o fileencryption=
necesita ser reemplazado con encryptable=
. Sin embargo, el cifrado no se puede eliminar sin restablecer los valores de fábrica (¿FBE también?), Así que desmarcar Preserve force encryption
en la aplicación Magisk no hará nada.
Algunos OEM también utilizan support_scfs
fs_mgr
bandera y ro.config.dmverity=true
propiedad en dispositivos con dm-verity
activado.
También se han descubierto algunas vulnerabilidades en el gestor de arranque y la implementación de adb de algunos OEM que se pueden usar para deshabilitar dm-verity
en los dispositivos afectados. Sin embargo, estas fallas de seguridad generalmente se solucionan con el tiempo con actualizaciones de los OEM.
OPCIÓN 1
Configure las opciones en el archivo de configuración antes de instalar Magisk:
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Si está instalado, después de desmarcar Preserve AVB v2.0/dm-verity
en la aplicación, Magisk debe reinstalarse. Citado de aquí:
en Magisk Manager, “Desinstalar> Restaurar imágenes” para restaurar las imágenes, marque la casilla “Preservar AVB 2.0 / dm-verity” en Configuración avanzada, luego reinstale Magisk a través de la aplicación.
OPCION 2
Usa algo dm-verity
Deshabilitar cremalleras como esta.
OPCION 3
Averigüe dónde fstab
entradas de /system
y /vendor
están en su dispositivo.
Si en ramdisk
(pre-agudos):
- Extraer
ramdisk
, modificarfstab
y reempaquetar. -
O parche
ramdisk
directamente:~# magiskboot cpio ramdisk.cpio 'patch false true'
Si en dtb
:
- Si se agrega al kernel:
- Extraer
boot.img
- División adjunta
dtb(s)
- Parche
dtb(s)
. - Adjuntar
dtb(s)
al kernel - Reempaquetar
boot.img
- Extraer
- Si en
dtbo
partición o enboot.img
después de la 2da etapa, parchedtb.img
y vuelva a escribir en la partición oboot.img
.
¿Cómo desempaquetar / volver a empaquetar la imagen de arranque o recuperación y Ramdisk?
Utilice AIK o magiskboot
.
Cómo parchear dtb
?
Parchear directamente usando magiskboot
o convertir manualmente dtb
para dts
, editar dts
con cualquier editor de texto para eliminar dm-verity
banderas y convertir dts
de regreso dtb
.
RELACIONADO:
- ¿Cómo funciona Magisk?
- Particiones y sistemas de archivos de dispositivos Android
Si guardas algún reparo y disposición de aclarar nuestro reseña eres capaz de ejecutar un paráfrasis y con deseo lo estudiaremos.