¿Qué hace kernel-exploitation?
Manual de explotación del kernel de Linux. Útil para explotar vulnerabilidades del kernel (UAF, OOB, condición de carrera, confusión de tipos) para escalar privilegios mediante commit_creds, sobrescritura de modprobe_path o cadenas ROP del kernel en entornos CTF y del mundo real.
Introducción
Este playbook cubre las técnicas más comunes para explotar vulnerabilidades del kernel de Linux. Está diseñado para ser utilizado en laboratorios CTF y en entornos controlados de pruebas de penetración.
Requisitos
- Conocimientos básicos de seguridad informática y explotación de vulnerabilidades.
- Entorno de desarrollo con herramientas como
gcc,gdb,pwntoolsy un kernel Linux de prueba. - Acceso a una máquina virtual o contenedor con permisos para depurar el kernel.
Vulnerabilidades Cubiertas
- Use-After-Free (UAF): Ocurre cuando se accede a memoria previamente liberada. Explotación típica mediante heap spraying.
- Out-of-Bounds (OOB): Acceso a memoria fuera de los límites de un buffer. Permite lectura/escritura arbitraria.
- Condición de Carrera (Race Condition): Vulnerabilidad en operaciones concurrentes que permite corrupción de datos.
- Confusión de Tipos (Type Confusion): Cuando un objeto es tratado como un tipo incorrecto, permitiendo manipular metadatos del kernel.
Técnicas de Explotación
1. commit_creds
Técnica clásica para escalar privilegios. Consiste en llamar a commit_creds(prepare_kernel_cred(0)) para asignar privilegios de root. Ejemplo en C:
void *(*commit_creds)(void *cred);
void *(*prepare_kernel_cred)(void *daemon);
commit_creds = (void *)0xffffffff81000001; // Dirección de ejemplo
prepare_kernel_cred = (void *)0xffffffff81000002;
commit_creds(prepare_kernel_cred(0));
2. Sobrescritura de modprobe_path
Técnica que explota el binario modprobe_path. Al sobrescribir esta ruta con un script malicioso y ejecutar un archivo con formato desconocido, el kernel ejecutará nuestro script como root. Pasos:
- Sobrescribir
/proc/sys/kernel/modprobe_pathcon la ruta de un script. - Crear un script que otorgue privilegios (ej.
chmod 4777 /bin/bash). - Ejecutar un archivo con extensión desconocida para que el kernel invoque
modprobe_path.
3. Cadenas ROP del Kernel (KROP)
Cuando no es posible ejecutar código arbitrario, se utilizan cadenas ROP para redirigir el flujo de control. Ejemplo con pwntools:
from pwn import *
rop = ROP(kernel_elf)
rop.call('commit_creds', [rop.find_gadget(['prepare_kernel_cred'])])
rop.call('swapper_pg_dir', [0])
print(rop.dump())
Herramientas Recomendadas
gdbcon módulokernel_gdbpwntoolspara automatización de exploitsqemupara emular el kernel de forma seguraSYMovmlinux-to-elfpara extraer símbolos del kernel
Ejemplo de Explotación Completa
A continuación se muestra un flujo típico para explotar una vulnerabilidad UAF:
- Identificar la vulnerabilidad en el módulo del kernel.
- Preparar un exploit en C que incluya la técnica
commit_creds. - Compilar el exploit:
gcc -o exploit exploit.c -static. - Transferir el exploit al sistema objetivo (por ejemplo, mediante HTTP).
- Ejecutar:
./exploit. - Verificar privilegios:
iddebe mostraruid=0(root).
$ ./exploit
[+] Exploit ejecutado exitosamente
$ id
uid=0(root) gid=0(root) groups=0(root)
Consejos de Depuración
- Usar
dmesgpara monitorear mensajes del kernel durante la explotación. - Desactivar KASLR en entornos de prueba para facilitar el desarrollo:
nokaslren línea de comandos del kernel. - Si el exploit falla, revisar direcciones de funciones y gadgets ROP.
- Utilizar
gdben modo remoto con QEMU para depurar paso a paso.
Mitigaciones y Evasión
- SMEP/SMAP: Se pueden evitar usando gadgets ROP que no ejecuten en espacio de usuario o mapeando memoria ejecutable en kernel.
- KASLR: Requiere fugas de información para obtener direcciones base.
- CFI: Dificulta la redirección de flujo, pero no es infalible.
Referencias
- Documentación de pwntools: https://docs.pwntools.com
- Guía de explotación del kernel de Linux: https://0xax.gitbooks.io/linux-insides
- CTF Writeups: Varios repositorios en GitHub.
Nota Legal
Este playbook es únicamente con fines educativos y para pruebas de seguridad autorizadas. No utilice estas técnicas en sistemas sin permiso explícito.