
Prueba de concepto que demuestra la evasión del cifrado de disco LUKS vinculado a TPM en sistemas Linux, extrayendo las claves de volumen mediante un ataque personalizado al sistema de archivos raíz.
Este repositorio contiene un código de prueba de concepto simple que explota una debilidad común descrita originalmente hace más de un año en https://oddlama.org/blog/bypassing-disk-encryption-with-tpm2-unlock/. Aunque se dirige específicamente a IncusOS, el ataque es bastante genérico contra la mayoría de los sistemas Linux modernos.
Si estás vinculando tu cifrado LUKS a un TPM, asegúrate de establecer también un PIN para el TPM.
Esta es una PoC rápida y sucia. No está completamente pulida y tiene algunos bordes ásperos. No hay soporte y no planeo ningún desarrollo adicional.
Yo, como la mayoría de la gente, asumí que configurar el cifrado de disco LUKS vinculado al chip TPM de mi portátil sería seguro y evitaría que un atacante pudiera extraer la clave de volumen LUKS (también conocida como clave maestra). Resulta que es casi deprimentemente fácil de hacer y no deja rastro del ataque.
Sí, el problema es que un atacante puede proporcionar un sistema de archivos raíz personalizado, y después de que tu sistema arranque, el TPM estará en un estado "bueno" conocido donde desbloqueará felizmente tu volumen LUKS. El atacante puede entonces hacer lo que quiera y cubrir fácilmente cualquier evidencia del ataque.
Pero un atacante preparado literalmente solo necesita tener tu computadora en su poder durante un par de minutos y estás comprometido. ¿Dejas tu portátil en la habitación del hotel mientras sales a cenar? ¿Qué tal un puesto de control de seguridad donde te apartan para interrogarte? Sí, esto no es bueno.
El script ./prepare.sh ejecuta los pasos necesarios para comprometer la VM objetivo. Los mismos pasos se pueden ejecutar fácilmente contra un disco duro real que se haya extraído temporalmente de su carcasa normal.
El "exploit" real extraerá la clave de volumen LUKS original, que se puede ver consultando el registro del journal de attack.service. Son posibles muchas variaciones de este ataque.
Ejecuta ./restore.sh para borrar toda evidencia de tus acciones mientras te llevas la clave de volumen LUKS de tu víctima.