Saltar al contenido

Android – ¿Cómo deshabilitar dm-verity en Android con una ROM de tipo de compilación de “usuario”?

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 o Image.gz en boot.img(2). Se puede dividir de gzip archivar usando split-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 en odm 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, luego androidboot.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, agregue verify al fs_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_scfsfs_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, modificar fstab 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
  • Si en dtbo partición o en boot.img después de la 2da etapa, parche dtb.img y vuelva a escribir en la partición o boot.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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *