GNU/Linux >> Tutoriales Linux >  >> Linux

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

Voy a dar una descripción general de cómo dm-verity y las cosas relacionadas funcionan en Android según 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 bloques; aplicado por init_first_stage según fs_mgr_flags configurado en fstab. En dispositivos del sistema como raíz (A/B y non-A/B ), el núcleo está parcheado para forzar la veracidad mientras se monta /system y /vendor si verify /avb las banderas se encuentran en el árbol de dispositivos fstab (dtb).
dm-crypt descifra/cifra los datos de forma transparente cuando se leen/escriben desde/hacia el dispositivo de bloqueo. 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 ha sido tradicionalmente 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 versiones anteriores a Oreo fstab estaba en ramdisk . Con Treble se movió a /vendor (o /system/vendor ) mientras que las entradas de fstab para system y vendor (y odm ) se mueven a Device Tree Blob (dtb ). Exportaciones del núcleo 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 de Android

¿DÓNDE ESTÁ DTB?

Device Tree es una estructura de datos para describir hardware que no es detectable por el kernel. Fuente del árbol de dispositivos (dts ) se puede convertir a dtb (blob binario de DT) y viceversa usando dtc . El gestor de arranque carga DTB en el momento del arranque y lo pasa al núcleo para que pueda descubrir el hardware y crear nodos de dispositivos en consecuencia.

DTB es:

  • Agregado al kernel zImage o Image.gz en boot.img . Se puede dividir desde 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 2ª etapa, o en odm partición (raro, algunos OEM lo hacen).

También 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 2da etapa. Sin embargo, esto no importa para el arranque normal. Pero si el dispositivo también es system-as-root , Magisk debe instalarse en esta partición de recuperación como boot.img no contiene ramdisk .

En caso de que DTB no se agregue al kernel, dtb(s) se convierten a dtb.img usando mkdtimg . La misma herramienta puede volcar la imagen.

Fuente: Implementando DTO

¿CÓMO DESACTIVAR DM-VERITY?

En userdebug ROM, dm-verity se puede deshabilitar usando adb . Modifica el número mágico del bloque de metadatos de verdad que se escribe después del último bloque del sistema de archivos en el dispositivo de bloque (system o vendor ) . Citado de aquí:

la ausencia de este número mágico detendrá el proceso de verificación

En caso de BAV, adb modifica vbmeta header para deshabilitar la verificación de imagen hashtree. Citado de aquí:

si el AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED el indicador se establece en el vbmeta de nivel superior, luego androidboot.veritymode está configurado como deshabilitado

En user compila ro.debuggable es 0 y adbd no se está ejecutando como root. También hay otras diferencias como la de ALLOW_ADBD_DISABLE_VERITY , entonces adb no deshabilitará dm-verity . Otro enfoque es eliminar verify o avb bandera de fstab . Citado de aquí:

Para verificar la partición...
...
En el 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 desmarque Preserve force encryption en la aplicación Magisk no hará nada.

Algunos OEM también usan support_scfs fs_mgr bandera y ro.config.dmverity=true propiedad en dispositivos con dm-verity activado.

También se han descubierto algunos exploits en el cargador de arranque y en la implementación adb de algunos OEM que se pueden usar para deshabilitar dm-verity en los dispositivos afectados. Sin embargo, tales 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 necesita ser reinstalado. Citado de aquí:

en Magisk Manager, "Desinstalar> Restaurar imágenes" para restaurar las imágenes, marque la casilla "Conservar AVB 2.0/dm-verity" en Configuración avanzada, luego reinstale Magisk a través de la aplicación.

OPCIÓN 2
Usa algo de dm-verity zips desactivadores como este.

OPCIÓN 3
Averigua dónde está el fstab entradas de /system y /vendor están en su dispositivo.

Si en ramdisk (antes de los agudos):

  • Extraer ramdisk , modificar fstab y reempacar.
  • O parche ramdisk directamente:

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

Si en dtb :

  • Si se adjunta al kernel:
    • Extraer boot.img
    • Dividir adjunto dtb(s)
    • Parche dtb(s) .
    • Anexar dtb(s) al núcleo
    • Reempaquetar boot.img
  • Si está en dtbo partición o en boot.img después de la segunda etapa, parche dtb.img y volver a escribir en la partición o boot.img .

¿Cómo desempaquetar/reempaquetar la imagen de arranque o recuperación y el disco RAM?
Usa AIK o magiskboot .

Cómo parchear dtb ?
Parchear directamente usando magiskboot o convertir manualmente dtb a dts , edite dts con cualquier editor de texto para eliminar dm-verity banderas y convertir dts volver a dtb .

RELACIONADO:

  • ¿Cómo funciona Magisk?
  • Particiones de dispositivos Android y sistemas de archivos

Linux
  1. Cómo deshabilitar el inicio de sesión del usuario raíz a través de SSH

  2. ¿Cómo crear un nuevo usuario con acceso Ssh?

  3. Cómo deshabilitar el registro de usuarios en Joomla

  4. Cómo deshabilitar el inicio de sesión SSH con contraseña

  5. Cómo deshabilitar un comando específico para un usuario específico en Linux

Cómo configurar o cambiar el agente de usuario con curl

Cómo proporcionar al usuario privilegios de root en Kali Linux

Cómo agregar un nuevo usuario de MySQL con permisos GRANT

Cómo deshabilitar el inicio de sesión SSH para un usuario específico en Linux

UNIX/Linux:Cómo bloquear o deshabilitar una cuenta de usuario

¿Cómo iniciar un emulador de Android en ubuntu 16.04?