Análisis de Rootkits de Kernel Linux
Resumen
Los rootkits de kernel Linux operan en el anillo 0 (ring 0), modificando estructuras de datos del kernel para ocultar procesos, archivos, conexiones de red y módulos del kernel de las herramientas de espacio de usuario. La detección requiere análisis forense de memoria (analizando volcados de memoria física con Volatility3) o análisis de vista cruzada (comparando /proc, /sys y estructuras de datos del kernel en busca de incoherencias). Esta habilidad cubre el uso de plugins de Volatility3 para Linux para detectar enganches en la tabla de syscalls, módulos ocultos del kernel y punteros de función modificados, complementado con escaneo en vivo del sistema mediante rkhunter y chkrootkit.
Cuándo Usarlo
- Cuando se investigan incidentes de seguridad que requieren analizar rootkits de kernel Linux
- Cuando se construyen reglas de detección o consultas de caza de amenazas para este dominio
- Cuando los analistas de SOC necesitan procedimientos estructurados para este tipo de análisis
- Cuando se valida la cobertura de monitoreo de seguridad para técnicas de ataque relacionadas
Prerrequisitos
- Volatility3 instalado (
pip install volatility3) - Volcado de memoria Linux (adquirido mediante LiME, AVML o
/proc/kcore) - Tabla de símbolos de Volatility3 para Linux (ISF) que coincida con la versión del kernel objetivo
rkhunterychkrootkitpara el escaneo en vivo del sistema- Imagen de kernel conocida como buena para comparación
Pasos
Paso 1: Adquirir el Volcado de Memoria
Capture la memoria física de Linux usando el módulo del kernel LiME o AVML para instancias en la nube.
Paso 2: Analizar con Volatility3
Ejecute los plugins linux.check_syscall, linux.lsmod, linux.hidden_modules y linux.check_idt para detectar artefactos de rootkits.
Paso 3: Análisis de Vista Cruzada
Compare las listas de módulos de /proc/modules, lsmod y /sys/module para identificar módulos ocultos desde una vista pero presentes en otra.
Paso 4: Escaneo en Vivo del Sistema
Ejecute rkhunter y chkrootkit para detectar firmas conocidas de rootkits, archivos sospechosos y binarios del sistema modificados.
Salida Esperada
Informe JSON que contiene enganches de syscalls detectados, módulos ocultos del kernel, entradas IDT modificadas, discrepancias sospechosas en /proc y hallazgos de rkhunter.
Ejemplo de Salida
$ sudo python3 rootkit_analyzer.py --memory /evidence/linux-mem.lime --profile Ubuntu2204
Informe de Análisis de Rootkit de Kernel Linux
================================================
Imagen de Memoria: /evidence/linux-mem.lime
Versión del Kernel: 5.15.0-91-generic (Ubuntu 22.04 LTS)
Hora del Análisis: 2024-01-18 09:15:32 UTC
[+] Escaneando tabla de syscalls en busca de enganches...
Base de la Tabla de Syscalls: 0xffffffff82200300
Total de syscalls verificadas: 449
ENGANCHES DE SYSCALLS DETECTADOS:
┌─────────┬──────────────────┬──────────────────────┬──────────────────────┐
│ NR │ Syscall │ Dirección Esperada │ Dirección Actual │
├─────────┼──────────────────┼──────────────────────┼──────────────────────┤
│ 0 │ sys_read │ 0xffffffff8139a0e0 │ 0xffffffffc0a12000 │
│ 2 │ sys_open │ 0xffffffff8139b340 │ 0xffffffffc0a12180 │
│ 78 │ sys_getdents64 │ 0xffffffff813f5210 │ 0xffffffffc0a12300 │
│ 62 │ sys_kill │ 0xffffffff8110c4a0 │ 0xffffffffc0a12480 │
└─────────┴──────────────────┴──────────────────────┴──────────────────────┘
ADVERTENCIA: 4 enganches de syscalls detectados - se confirma comportamiento de rootkit
[+] Verificando módulos ocultos del kernel...
Módulos cargados (lsmod): 147
Módulos en lista kobject: 149
MÓDULOS OCULTOS:
- "netfilter_helper" en 0xffffffffc0a10000 (tamaño: 12288)
- "kworker_sched" en 0xffffffffc0a14000 (tamaño: 8192)
[+] Escaneando /proc en busca de discrepancias...
Procesos en lista task_struct: 234
Procesos visibles en /proc: 231
PROCESOS OCULTOS:
- PID 31337 cmd: "[kworker/0:3]" (disfrazado como hilo del kernel)
- PID 31442 cmd: "rsyslogd" (falso, el rsyslogd real es PID 892)
- PID 31500 cmd: "" (proceso sin nombre)
[+] Verificando entradas IDT...
Entradas IDT escaneadas: 256
Entradas modificadas: 0 (limpio)
[+] Ejecutando escaneo de rkhunter...
Verificando rootkits conocidos: 68 variantes verificadas
Rootkit Diamorphine: ADVERTENCIA - las firmas coinciden
Verificaciones de binarios del sistema:
/usr/bin/ps: MODIFICADO (SHA-256 no coincide)
/usr/bin/netstat: MODIFICADO (SHA-256 no coincide)
/usr/bin/ls: MODIFICADO (SHA-256 no coincide)
/usr/sbin/ss: OK
[+] Análisis de red...
Conexiones ocultas (no en /proc/net/tcp):
ESTABLECIDA 0.0.0.0:0 -> 198.51.100.47:4443 (PID 31337)
ESTABLECIDA 0.0.0.0:0 -> 198.51.100.47:8080 (PID 31442)
Resumen:
Tipo de Rootkit: Módulo de Kernel Cargable (LKM)
Familia Probable: Variante de Diamorphine
Enganches de Syscalls: 4 (read, open, getdents64, kill)
Módulos Ocultos: 2
Procesos Ocultos: 3
Conexiones Ocultas: 2 (C2: 198.51.100.47)
Binarios Modificados: 3 (/usr/bin/ps, netstat, ls)
Nivel de Riesgo: CRÍTICO