ASÍ ATACAN EL CIFRADO DE DISCO EN LINUX

alzze1 pts0 comments

así atacan el cifrado de disco en linux

ASÍ ATACAN EL CIFRADO DE DISCO EN LINUX

Hoy en día llevamos prácticamente toda nuestra vida con nosotros: móviles, portátiles, cuentas y comunicaciones. Gran parte de nuestra información está almacenada en estos dispositivos y, aunque la mayoría incluyen full disk encryption, la policía puede desbloquear muchos de ellos.

En este artículo vamos a explorar un Evil Maid Attack contra el cifrado de disco en Linux. Básicamente, se trata de un ataque en el que un atacante necesita acceso físico a tu equipo para poder modificarlo sin que lo notes, alterando el proceso de arranque para ejecutar código malicioso. Es el clásico escenario: dejas tu portátil en un hotel y, mientras no estás, alguien lo manipula sin que te des cuenta.

Hay que tener en cuenta que el problema no es el cifrado de Linux, sino la incorrecta implementación del arranque.

¿Cómo funciona el arranque en Linux?

Antes de entrar en cómo se lleva a cabo este ataque, vamos a ver cómo funciona el arranque en Linux. En términos generales, podemos resumirlo de la siguiente manera:

[Encendido] → [UEFI] → [Bootloader] → [Kernel+Initrd] → [Init system] → [Login]

Al encender el equipo, el firmware UEFI se ejecuta y toma el control realizando una serie de comprobaciones para asegurarse de que el hardware está bien. Una vez finalizadas, consulta las entradas de arranque almacenadas en la NVRAM. Cada una de estas entradas contiene la ruta completa a un binario EFI (normalmente un bootloader) ubicado en la partición EFI. Dado que UEFI es capaz de leer sistemas de archivos FAT, puede localizar estos binarios, cargarlos en memoria y transferirles la ejecución.

Ejecutando el comando sudo efibootmgr podemos ver qué aplicación EFI se va a ejecutar al iniciar el sistema:

BootCurrent: 0008<br>Boot0008* debian HD(1,GPT,75a8d3c7-0bb8-47ff-8f65-68a0d25b71ab,0x800,0x3c800)/File(\EFI\debian\shimx64.efi)

En este caso, UEFI arrancará el archivo shimx64.efi de Debian, un bootloader intermedio firmado por Microsoft que permite iniciar Linux con Secure Boot habilitado. Este bootloader transfiere la ejecución al bootloader real , que normalmente es GRUB (grubx64.efi).

Una vez que se ejecuta GRUB, este accede a la partición boot y lee su archivo de configuración grub.cfg. Si existen varias opciones de kernel o sistemas operativos, muestra un menú de arranque y aplica los parámetros de kernel definidos en la configuración. Para terminar, GRUB carga tanto el kernel de Linux como el initrd en memoria y deriva la ejecución del arranque al kernel.

/boot/initrd.img-6.12.74+deb13+1-amd64<br>/boot/vmlinuz-6.12.74+deb13+1-amd64

En este punto, el kernel aún está comprimido, por lo que lo primero que hace al ejecutarse es descomprimirse e inicializarse , configurando el entorno básico de hardware: CPU, memoria RAM, buses y dispositivos esenciales. Para continuar, el kernel debe montar la partición raíz , pero este no tiene soporte integrado para todas las configuraciones posibles de almacenamiento como, RAID, LVM, discos cifrados, distintos sistemas de archivos, etc.

Por ello, el kernel monta el initrd , un sistema de archivos comprimido cargado en RAM, que contiene todos los módulos y utilidades necesarios para el hardware específico del sistema. En esta fase, se ejecutan scripts que permiten, por ejemplo, desencriptar discos , montar volúmenes RAID o LVM y preparar todo lo necesario para finalmente montar el sistema de archivos raíz (/) y continuar con el arranque del sistema operativo.

Una vez montada la partición raíz, se ejecuta el proceso init o systemd. Este proceso inicializa todos los servicios del sistema, como el montaje de otras particiones, la configuración de red, el inicio de demonios y servicios esenciales, y el arranque de la interfaz gráfica si aplica.

Backdoor a partición de arranque sin cifrar

Al habilitar la opción de cifrado de disco en la mayoría de los instaladores de Linux, estos suelen crear el mismo esquema de particiones: una partición EFI para los bootloaders, una partición de arranque que contiene el kernel, el initrd y la configuración de GRUB, y la partición raíz cifrada.

vda 254:0 0 5G 0 disk<br>├─vda1 254:1 0 121M 0 part /boot/efi<br>├─vda2 254:2 0 488M 0 part /boot<br>└─vda3 254:3 0 4,4G 0 part<br>└─vda3_crypt 253:0 0 4,4G 0 crypt /

Como hemos visto, el kernel para descifrar las particiones necesita unos scripts y módulos que se encuentran en el initrd. La idea es modificar estos scripts para añadir código que nos permita crear un backdoor en el sistema una vez esté descifrado.

Como no tenemos acceso al sistema, arrancamos mediante un live cd y montamos la partición boot en el entorno en vivo. Para realizar el ataque vamos a obtener el archivo initrd y vamos a descomprimirlo con la utilidad unmkinitramfs.

alzze@ubuntu:$ ./unmkinitramfs -v initrd.img-6.12.74+deb13+1-amd64 extracted-initrd<br>kernel<br>kernel/x86<br>kernel/x86/microcode<br>kernel/x86/microcode/AuthenticAMD.bin

Una vez descomprimido, vemos que contiene un...

kernel para arranque linux initrd partici

Related Articles