AvanzadoLinuxrootkitsDiamorphineReptileSuterusuLKM

Diamorphine, Reptile y Suterusu: Los Rootkits Linux que Debes Estudiar

Análisis técnico de los tres rootkits LKM más referenciados en el ecosistema Linux. Diamorphine (minimalista), Reptile (feature-rich con backdoor), Suterusu (técnica avanzada). Código fuente, capacidades, detección y uso como referencia educativa.

MalwareIntel Research··9 min lectura
Serie: Malware en Linux — Parte 4

Tres rootkits, tres filosofías

Estos tres rootkits representan tres enfoques diferentes del mismo problema: cómo ocultar actividad maliciosa en un sistema Linux comprometido.

Diamorphine es el rootkit minimalista: hace pocas cosas pero las hace bien. Menos de 300 líneas de código. Ideal para entender los fundamentos del hooking de syscalls en el kernel Linux.

Reptile es el rootkit completo: incluye todo lo que un atacante necesita (ocultación, backdoor, persistencia, port knocking). Es el "Cobalt Strike de los rootkits Linux".

Suterusu es el rootkit técnicamente avanzado: usa hooking de VFS (Virtual File System) en vez de la sys_call_table, una técnica más sigilosa y más difícil de detectar.

Diamorphine

Perfil

AtributoDetalle
GitHubm0nad/Diamorphine
LenguajeC (kernel module)
TamañoMenos de 300 líneas de código
Kernels soportados2.6.x a 6.x (mantenido activamente)
LicenciaGPL
Uso en ataques realesDocumentado por CrowdStrike, Trend Micro

Capacidades

CapacidadMecanismoActivación
Ocultar archivos/directoriosHook de getdents/getdents64Archivos que empiezan con prefijo configurable
Ocultar procesosHook de getdents en /procEnviar señal 31 al proceso
Otorgar root a un procesoHook de killEnviar señal 64 al proceso
Auto-ocultarse/revelarseManipulación de module listEnviar señal 63 al proceso (toggle)
Ocultar de lsmodEliminación de list entryAutomático al cargar

Señales mágicas

Diamorphine usa señales Unix como interfaz de control:

SeñalEfecto
kill -31 [PID]Toggle visibilidad del proceso (ocultar/mostrar)
kill -63 [PID]Toggle visibilidad del módulo del kernel
kill -64 [PID]Otorgar privilegios root al proceso

Estas señales (31, 63, 64) no son señales estándar de Unix, por lo que no interfieren con operaciones normales.

Técnica de hooking

Diamorphine localiza la sys_call_table escaneando memoria del kernel y hookea getdents y getdents64:

// Simplificado del codigo real de Diamorphine
// Hook de getdents64 para filtrar entradas de directorio
asmlinkage long hacked_getdents64(unsigned int fd,
    struct linux_dirent64 __user *dirent, unsigned int count)
{
    long ret = orig_getdents64(fd, dirent, count);
    // ... iterar por las entradas
    // Si el nombre empieza con MAGIC_PREFIX: eliminar la entrada
    // Si es un PID oculto en /proc: eliminar la entrada
    return ret;
}

Compilación

git clone https://github.com/m0nad/Diamorphine
cd Diamorphine
make
# Genera diamorphine.ko

# Cargar (requiere root)
insmod diamorphine.ko

# El modulo se auto-oculta inmediatamente
lsmod | grep diamorphine   # No aparece

Detección

# 1. Buscar en memoria del kernel
cat /proc/kallsyms | grep diamorphine
# Si hay simbolos de diamorphine: rootkit cargado

# 2. Verificar sys_call_table
# Comparar punteros de syscalls con los esperados

# 3. Volatility
vol3 -f memory.lime linux.hidden_modules
vol3 -f memory.lime linux.check_syscall

# 4. Buscar señales inusuales
# Monitorizar uso de kill con señales 31, 63, 64
# (auditd puede registrar esto)

Reptile

Perfil

AtributoDetalle
GitHubf0rb1dd3n/Reptile
LenguajeC (kernel module + userland tools)
Tamaño~2000 líneas kernel + herramientas userland
Kernels soportados2.6.x a 5.x+
LicenciaGPL
Uso en ataques realesDocumentado por múltiples vendors

Capacidades

Reptile incluye todo lo de Diamorphine y mucho más:

CapacidadDescripción
Ocultar archivos/directoriosPrefijo configurable (default: reptile)
Ocultar procesosPor PID o nombre
Ocultar conexiones de redFiltra /proc/net/tcp, /proc/net/tcp6, /proc/net/udp
Ocultar el móduloAuto-ocultación de lsmod y /proc/modules
Backdoor de redShell reverso activado por magic packet
Port knockingSecuencia de puertos para activar el backdoor
PersistenciaSe reinstala automáticamente al reiniciar
Otorgar rootComando desde userland
Ocultar de iptablesFiltra reglas de iptables que podrían bloquear el backdoor

Backdoor de red

Reptile incluye un backdoor de red basado en magic packets:

  1. Reptile escucha TODO el tráfico de red a nivel de kernel (no necesita un socket)
  2. Cuando detecta un paquete con un "magic byte" específico, activa el backdoor
  3. El backdoor establece una conexión reversa (reverse shell) al IP del paquete mágico
  4. La conexión no aparece en netstat/ss porque el rootkit la oculta
Atacante envía magic packet → Reptile lo detecta → Shell reverso al atacante
                                                     (invisible para el admin)

Port knocking

Alternativa al magic packet: el atacante envía paquetes a una secuencia de puertos. Cuando la secuencia es correcta, Reptile activa el backdoor:

Atacante: SYN a puerto 1234 → SYN a puerto 5678 → SYN a puerto 9012
Reptile detecta la secuencia → Activa backdoor → Shell reverso

Los paquetes de port knocking no generan respuesta (los puertos no están "abiertos"), por lo que son invisibles para herramientas de escaneo como nmap.

Instalación

git clone https://github.com/f0rb1dd3n/Reptile
cd Reptile
# Configurar (magic bytes, puertos, passwords)
./setup.sh
# Compilar e instalar
make
make install

Detección de Reptile

# 1. Buscar archivos con prefijo "reptile"
find / -name "*reptile*" 2>/dev/null

# 2. Buscar el directorio oculto de Reptile
ls -la /reptile/  # Podria estar oculto por el rootkit
# Alternativa: acceder directamente
cat /reptile/reptile_cmd 2>/dev/null

# 3. Buscar en memoria del kernel
cat /proc/kallsyms | grep reptile

# 4. Verificar modulos ocultos
# Comparar /proc/modules con /sys/module/
ls /sys/module/ > sysmod.txt
cat /proc/modules | awk '{print $1}' > procmod.txt
diff sysmod.txt procmod.txt

# 5. Network: buscar magic packet listeners
# Dificil de detectar desde el sistema comprometido
# Analisis de trafico externo puede detectar patrones de port knocking

# 6. Volatility
vol3 -f memory.lime linux.hidden_modules

Suterusu

Perfil

AtributoDetalle
OrigenFork/evolución de rootkits LKM clásicos
LenguajeC (kernel module)
Técnica diferenciadoraVFS hooking en vez de sys_call_table
Kernels2.6.x a 4.x
EstadoMenos mantenido que Diamorphine/Reptile

Técnica: VFS hooking

En vez de modificar la sys_call_table (que está protegida en kernels modernos), Suterusu hookea las operaciones del Virtual File System:

// En vez de hookear la syscall getdents64:
// Suterusu hookea la operacion readdir del VFS

// Cada filesystem (ext4, proc, tmpfs) tiene una estructura file_operations
// con punteros a funciones como readdir/iterate
// Suterusu modifica estos punteros en los filesystems especificos

struct file_operations *proc_fops = get_proc_fops();
original_iterate = proc_fops->iterate_shared;
proc_fops->iterate_shared = hooked_iterate;

Ventajas del VFS hooking

Aspectosys_call_table hookingVFS hooking
Superficie de hookGlobal (una syscall)Por filesystem
Protecciones del kernelcr0 write protection, KASLRMenos protegido
DetecciónVerificar sys_call_tableVerificar cada file_operations struct
GranularidadTodas las llamadas a getdentsSolo en filesystems específicos (/proc, /)
EstabilidadPuede causar issues si otro módulo hookeaMás estable

Capacidades

CapacidadImplementación
Ocultar archivosVFS hook en readdir del filesystem root
Ocultar procesosVFS hook en readdir de /proc
Ocultar conexionesVFS hook en read de /proc/net/*
Ocultar móduloManipulación de listas del kernel
BackdoorSocket raw para recibir comandos

Comparativa de los tres rootkits

CaracterísticaDiamorphineReptileSuterusu
Líneas de código~300~2000+~1000
Hooking methodsys_call_tablesys_call_tableVFS operations
Ocultar archivosSí (prefijo)Sí (prefijo)
Ocultar procesosSí (señal)
Ocultar conexionesNo
Backdoor de redNoSí (magic packet + port knocking)Básico
PersistenciaNo (manual)Sí (automática)No (manual)
Root privilege grantSí (señal 64)
Mantenimiento activoParcial
Dificultad de detecciónMediaMedia-AltaAlta (VFS hooks)
Uso educativoExcelente (simple)Bueno (feature-rich)Bueno (técnica avanzada)

Detección genérica de rootkits LKM

Checklist de detección

# 1. Verificar integridad de binarios del sistema
debsums -c  # Debian/Ubuntu
rpm -Va     # RHEL/CentOS

# 2. Buscar discrepancias en listas de procesos
ls /proc | grep -E '^[0-9]+$' | sort -n > from_proc.txt
ps -eo pid --no-headers | sort -n > from_ps.txt
diff from_proc.txt from_ps.txt

# 3. Buscar modulos ocultos
ls /sys/module/ | sort > sysmod.txt
lsmod | awk '{print $1}' | sort > lsmod.txt
diff sysmod.txt lsmod.txt

# 4. Buscar hooks en sys_call_table
cat /proc/kallsyms | grep sys_call_table
# Verificar que las direcciones apuntan a funciones esperadas

# 5. Verificar /etc/ld.so.preload
cat /etc/ld.so.preload
ls -la /etc/ld.so.preload

# 6. Buscar eBPF programs
bpftool prog list
bpftool map list

# 7. Ejecutar rkhunter
rkhunter --check --skip-keypress

# 8. Ejecutar chkrootkit
chkrootkit

# 9. Buscar strings de rootkits conocidos
grep -r "diamorphine\|reptile\|suterusu" /proc/kallsyms
dmesg | grep -i rootkit

# 10. Memory forensics (mas fiable)
# Capturar con LiME, analizar con Volatility

auditd rules para detectar carga de módulos

# Detectar insmod/modprobe
-w /sbin/insmod -p x -k kernel_module_load
-w /sbin/modprobe -p x -k kernel_module_load
-w /sbin/rmmod -p x -k kernel_module_load
-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_module_load
-a always,exit -F arch=b64 -S delete_module -k kernel_module_unload

Mapeo MITRE ATT&CK

TécnicaIDRootkit
RootkitT1014Los tres
Kernel Modules and ExtensionsT1547.006Los tres (carga via insmod)
Hide Artifacts: Hidden Files and DirectoriesT1564.001Los tres
Hide Artifacts: Hidden UsersT1564.002Los tres (procesos ocultos)
Ingress Tool TransferT1105Reptile (backdoor de red)
Non-Standard PortT1571Reptile (port knocking)

Fuentes y referencias

  • m0nad. "Diamorphine: LKM rootkit." https://github.com/m0nad/Diamorphine
  • f0rb1dd3n. "Reptile: Linux LKM rootkit." https://github.com/f0rb1dd3n/Reptile
  • CrowdStrike. "Diamorphine and Reptile in Real-World Attacks." CrowdStrike Intelligence.
  • Trend Micro. "Linux Rootkits in the Wild." Trend Micro Research, 2023.
  • Matrosov, A. et al. "Rootkits and Bootkits." No Starch Press, 2019.
  • Love, R. "Linux Kernel Development." Addison-Wesley, 2010.
  • MITRE ATT&CK. "Rootkit (T1014)." https://attack.mitre.org/techniques/T1014/
  • Volatility Foundation. "Linux Rootkit Detection Plugins." Volatility 3.

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.