1. Introducción al Kernel Lockdown
El Kernel Lockdown es una característica de seguridad del kernel Linux, integrada formalmente a partir de la versión 5.4, que busca fortalecer la frontera entre el usuario root y el código que se ejecuta en el espacio del kernel (Ring 0). En distribuciones como Ubuntu, esta característica se activa automáticamente cuando el sistema detecta que el UEFI Secure Boot está habilitado.
El objetivo fundamental es evitar que incluso un atacante con privilegios de superusuario pueda modificar la imagen del kernel en ejecución o extraer secretos sensibles de la memoria del kernel. Sin embargo, para un auditor de seguridad, entender cómo evadir estas restricciones es vital para evaluar la robustez de un entorno blindado.
2. Modos de Operación y Restricciones
Existen dos niveles principales de "Lockdown":
2.1. Integrity Mode (integrity)
En este modo, se bloquean las características que permiten a los procesos de usuario modificar el kernel en ejecución. Esto incluye:
- Bloqueo de escritura en
/dev/mem,/dev/kmemy/dev/port. - Restricción de acceso a registros específicos del procesador (MSR).
- Verificación obligatoria de firmas en módulos del kernel (insmod/modprobe).
- Deshabilitación de la hibernación (ya que la imagen de swap podría ser alterada).
2.2. Confidentiality Mode (confidentiality)
Además de las restricciones de integridad, este modo impide que el usuario root extraiga información sensible:
- Bloqueo de lectura de
/dev/memy/dev/kmem. - Restricciones en el acceso a estructuras de datos internas a través de interfaces de depuración.
3. El Vector de Ataque: Manipulación de Tablas ACPI
El artículo de referencia destaca uno de los métodos más sofisticados para bypass: la manipulación de las tablas ACPI (Advanced Configuration and Power Interface).
3.1. ¿Por qué ACPI?
ACPI no es solo una base de datos estática; incluye un lenguaje de interpretación llamado AML (ACPI Machine Language). El kernel de Linux carga y ejecuta AML para interactuar con el hardware. Si un auditor logra "inyectar" una tabla ACPI maliciosa antes de que el kernel bloquee las interfaces, puede obtener ejecución de código o manipulación de memoria.
3.2. Mecanismo de Bypass: ACPI_TABLE_UPGRADE
El kernel de Linux permite actualizar las tablas ACPI a través de un archivo CPIO cargado mediante el initrd. Cuando el kernel arranca, busca tablas personalizadas en el initrd antes de finalizar la inicialización del Lockdown.
Pasos para el Bypass mediante ACPI:
- Extracción de tablas originales:
sudo cat /sys/kernel/config/acpi/table/DSDT > dsdt.dat - Descompilación (IASL):
iasl -d dsdt.dat - Inyección de código AML: Se modifica el archivo .dsl para incluir métodos que interactúen con regiones de memoria protegidas o que aprovechen vulnerabilidades en el driver ACPI del kernel.
- Recompilación y empaquetado: Se genera el nuevo .aml y se introduce en un archivo CPIO que el bootloader (GRUB) cargará al inicio.
Este método es efectivo porque el kernel confía en el initrd como una extensión del firmware, y si el atacante puede modificar la partición /boot, puede comprometer la integridad del kernel antes de que el cerrojo se cierre.
4. Bypass mediante la Firma de Módulos (MOK)
En Ubuntu, la forma "oficial" de evadir el Lockdown es mediante el uso de Machine Owner Keys (MOK). Aunque es un mecanismo legítimo, un auditor debe conocer cómo un atacante podría abusar de él si obtiene acceso físico o persistencia.
Procedimiento de Auditoría:
Si necesitamos cargar un módulo no firmado (por ejemplo, un rootkit de auditoría o un driver custom):
- Generar el par de claves:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=Auditor Key/" - Firmar el módulo (.ko):
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.key ./MOK.crt my_module.ko - Importar la clave al firmware:
sudo mokutil --import MOK.crt - Reinicio y Enrolamiento: Tras reiniciar, el sistema presentará el menú azul de "Shim UEFI", donde se debe introducir la contraseña creada en el paso anterior para registrar la clave en la NVRAM.
Desde una perspectiva ofensiva, si el auditor puede inducir al usuario a realizar este proceso, el Lockdown queda efectivamente neutralizado para cualquier código firmado con esa clave.
5. Explotación de Vulnerabilidades en Drivers
Incluso con Lockdown activo, el kernel debe interactuar con drivers complejos. Vulnerabilidades de tipo Out-of-Bounds o Integer Overflow en drivers que manejan DMA (Direct Memory Access) pueden ser utilizadas para saltar las restricciones de /dev/mem.
Caso de estudio: Drivers de GPU y DMA
Los drivers de video suelen requerir grandes mapeos de memoria. Si un auditor identifica una vulnerabilidad en cómo el driver gestiona las peticiones de usuario, podría usar el hardware de la GPU para escribir en la memoria protegida del kernel, realizando un bypass de integridad "por hardware".
6. Verificación de Estado y Endurecimiento
Como auditores, debemos validar el estado actual del sistema. En Ubuntu, esto se hace consultando:
cat /sys/kernel/security/lockdown
- Si la salida es
none [integrity] confidentiality, significa que el modo Integridad está activo. - Si la salida es
none integrity [confidentiality], el sistema está en su nivel máximo de restricción.
Desactivación temporal (Entornos de Debugging)
Si el hardware lo permite y no se requiere Secure Boot, se puede desactivar mediante el
bootloader añadiendo el parámetro: sysrq_always_enabled=1 o intentando forzar
lockdown=none en la línea del kernel en /etc/default/grub, aunque en kernels de
distro compilados con CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE desactivado, esto será ignorado si
Secure Boot está ON.
7. Conclusiones para la Auditoría
El Kernel Lockdown no es una solución mágica. Sus debilidades residen en:
- La cadena de confianza inicial: Si el initrd o el grub.cfg no están protegidos por firmas verificadas (más allá del shim inicial), son vectores de inyección.
- Configuraciones de Firmware: BIOS/UEFI mal protegidas permiten desactivar Secure Boot o resetear las claves MOK.
- Superficie de ataque ACPI: La complejidad de AML sigue siendo un punto ciego para muchas implementaciones de seguridad.
En un entorno de alta seguridad, se recomienda no solo confiar en Lockdown, sino implementar IMA (Integrity Measurement Architecture) para verificar cada archivo ejecutado en el espacio de usuario, cerrando así el círculo de confianza.