eBPF Malicioso: La Nueva Frontera de los Rootkits Linux
Análisis del uso ofensivo de eBPF (extended Berkeley Packet Filter) en Linux. Rootkits eBPF (TripleCross, ebpfkit), backdoors basados en BPF (BPFDoor), interceptación de credenciales, ocultación de tráfico, y los retos de detección de esta tecnología emergente.
eBPF: una tecnología de doble filo
eBPF es una de las innovaciones más importantes del kernel Linux de la última década. Permite ejecutar programas verificados dentro del kernel sin compilar módulos, sin reiniciar, y con garantías de seguridad (el verificador de eBPF impide crashes, loops infinitos y accesos fuera de límites).
La comunidad de seguridad defensiva usa eBPF extensivamente: Falco (Sysdig) para runtime security, Tetragon (Cilium) para enforcement, Cilium para network policies, y decenas de herramientas de observabilidad.
Pero la misma tecnología que permite monitorizar syscalls para detectar malware puede interceptar syscalls para ocultar malware. La misma capacidad de inspeccionar paquetes de red puede usarse para implementar backdoors invisibles. eBPF es una herramienta poderosa en ambas manos.
Fundamentos de eBPF para seguridad
Qué puede hacer eBPF
| Capacidad | Hook point | Uso defensivo | Uso ofensivo |
|---|---|---|---|
| Interceptar syscalls | tracepoints, kprobes | Detección de comportamiento anómalo | Filtrar/modificar resultados de syscalls (rootkit) |
| Inspeccionar paquetes de red | XDP, TC, socket filters | Network monitoring, DDoS mitigation | Backdoor pasivo, ocultación de tráfico |
| Interceptar funciones del kernel | kprobes, fentry/fexit | Análisis de rendimiento | Interceptar credenciales, manipular datos |
| Interceptar funciones de user-space | uprobes | Tracing de aplicaciones | Interceptar credenciales en PAM, OpenSSL |
| Acceder a mapas de datos compartidos | BPF maps | Compartir datos entre kernel y user-space | C2 channel, almacenamiento de configuración |
Limitaciones del verificador
El verificador de eBPF impone restricciones:
- No puede acceder a memoria arbitraria del kernel (solo helpers aprobados)
- No puede crear loops infinitos (bounded loops obligatorios)
- Tamaño limitado de programa (1M instrucciones máximo)
- No puede llamar a funciones del kernel arbitrarias
- Stack limitado (512 bytes)
Estas restricciones hacen que un rootkit eBPF sea menos potente que un LKM rootkit, pero las helper functions de eBPF (bpf_probe_read, bpf_override_return, bpf_send_signal) proporcionan suficientes capacidades para un rootkit funcional.
BPFDoor: el backdoor que nadie veía
Perfil
| Atributo | Detalle |
|---|---|
| Descubierto por | PwC Threat Intelligence (2022) |
| Atribución | Red Menshen (APT chino) |
| Activo desde | Al menos 2017 (5 años sin ser detectado) |
| Tipo | Backdoor pasivo basado en BPF packet filter |
| Víctimas | Telecomunicaciones, gobierno, logística (principalmente Asia y Medio Oriente) |
Cómo funciona BPFDoor
BPFDoor NO usa eBPF (extended). Usa cBPF (classic BPF), la versión original del Berkeley Packet Filter:
1. BPFDoor se ejecuta como daemon
2. Crea un raw socket y aplica un BPF filter
3. El BPF filter captura TODOS los paquetes que llegan a la máquina
4. Inspecciona cada paquete buscando un "magic byte" en el payload
5. Si encuentra el magic byte:
a. Extrae la IP del remitente del paquete
b. Abre un reverse shell hacia esa IP
6. Si NO encuentra el magic byte: ignora el paquete
Resultado: NO tiene puerto abierto. NO aparece en netstat/ss.
Por qué es invisible
| Aspecto | Visibilidad |
|---|---|
netstat -tnlp | No aparece (no tiene socket listening) |
ss -tnlp | No aparece |
nmap desde exterior | No detecta puertos abiertos |
ps aux | Aparece con nombre disfrazado (ej. /sbin/udevd) |
lsof | Muestra un raw socket pero sin puerto |
El magic packet puede ser cualquier protocolo: TCP, UDP, ICMP. El atacante envía un paquete con los bytes mágicos, BPFDoor lo captura antes de que el stack TCP/IP lo procese, y establece la conexión reversa.
Variantes de BPFDoor
PwC identificó múltiples versiones con evolución:
| Versión | Mejora |
|---|---|
| v1 (2017-2019) | BPF filter básico, sin cifrado |
| v2 (2019-2021) | Cifrado de comunicaciones, password-protected |
| v3 (2021-2022) | Múltiples protocolos de activación, evasión mejorada |
Rootkits eBPF: investigación y PoCs
TripleCross
PoC de rootkit eBPF completo (h3xduck, 2022):
| Capacidad | Implementación |
|---|---|
| Ocultar archivos | Hook en getdents64 via tracepoint, filtra resultados |
| Ocultar procesos | Hook en getdents64 en /proc, filtra PIDs |
| Backdoor de red | XDP program que detecta magic packets |
| Privilege escalation | Modifica cred struct del proceso via bpf_probe_write |
| Interceptar ejecución | Hook en execve para redirigir ejecución |
| Persistencia | Pinned BPF programs + systemd service |
ebpfkit
Framework de rootkit eBPF (Datadog Security Research, 2021):
| Capacidad | Implementación |
|---|---|
| Ocultar tráfico | TC (Traffic Control) program que filtra paquetes |
| Modificar respuestas de red | XDP program que modifica paquetes en tránsito |
| Piping de datos | Redirigir tráfico entre interfaces |
| Ocultar programas eBPF | Hooking de bpf() syscall para filtrar la lista de programas |
Pamspy
PoC de interceptación de credenciales PAM via eBPF (citado en múltiples conferencias):
1. Attach a uprobe en la funcion pam_authenticate de libpam
2. Cuando un usuario hace login (SSH, sudo, su):
pam_authenticate recibe el username y password en claro
3. El programa eBPF intercepta estos parametros
4. Los almacena en un BPF map o los envia a user-space
5. Las credenciales quedan capturadas sin modificar ningun archivo
Impacto: captura credenciales en claro de toda autenticación PAM del sistema. Es un keylogger de credenciales a nivel de kernel, completamente invisible para las herramientas de seguridad estándar.
Detección de eBPF malicioso
El reto
Las herramientas de seguridad defensiva (Falco, Tetragon) usan eBPF. Distinguir un programa eBPF defensivo de uno ofensivo no es trivial. Ambos hookean syscalls, inspeccionan paquetes y acceden a datos del kernel.
Métodos de detección
| Método | Herramienta | Descripción |
|---|---|---|
| Listar programas eBPF | bpftool prog list | Listar todos los programas eBPF cargados. Comparar con baseline |
| Listar mapas eBPF | bpftool map list | Los mapas almacenan datos. Mapas desconocidos = sospechoso |
| Auditar BPF syscall | auditd | Registrar todas las llamadas a bpf() syscall |
| Monitorizar con Tetragon | Cilium Tetragon | Monitorizar carga de programas eBPF |
| Verificar pinned programs | ls /sys/fs/bpf/ | Programas persistentes en el filesystem BPF |
| Buscar raw sockets | ss -aw, lsof | BPFDoor usa raw sockets |
Baseline de programas eBPF
# Capturar baseline de programas eBPF legitimos
bpftool prog list > /root/ebpf_baseline.txt
# Periodicamente comparar
bpftool prog list > /tmp/ebpf_current.txt
diff /root/ebpf_baseline.txt /tmp/ebpf_current.txt
# Diferencias = programas nuevos que necesitan investigacion
auditd rules para BPF
# Registrar todas las llamadas a bpf() syscall
-a always,exit -F arch=b64 -S bpf -k ebpf_activity
# Registrar creacion de raw sockets
-a always,exit -F arch=b64 -S socket -F a0=2 -F a1=3 -k raw_socket
Detección de BPFDoor específicamente
# Buscar procesos con raw sockets
ss -w -p # Listar raw sockets con proceso
# Buscar BPF filters activos
# (requiere herramientas especificas o lectura de /proc/net/)
# Buscar procesos con nombre que no coincide con el binario real
for pid in /proc/[0-9]*/; do
real=$(readlink ${pid}exe 2>/dev/null)
name=$(cat ${pid}comm 2>/dev/null)
if [ ! -z "$real" ] && [ ! -z "$name" ]; then
base=$(basename "$real")
if [ "$base" != "$name" ]; then
echo "PID $(basename $pid): comm=$name, exe=$real (MISMATCH)"
fi
fi
done
El futuro: eBPF ofensivo vs defensivo
La carrera armamentística en eBPF está en sus primeras fases:
| Ofensivo | Defensivo |
|---|---|
| Rootkits eBPF (TripleCross, ebpfkit) | Tetragon, Falco con eBPF |
| Credential stealing (Pamspy) | Detección de uprobes anómalos |
| Network backdoors | Network monitoring con Cilium |
| Ocultación de programas eBPF | Auditoría de bpf() syscall |
La ventaja defensiva: los programas eBPF requieren privilegios de root (CAP_BPF o CAP_SYS_ADMIN) para cargarse. Si el atacante tiene root, ya puede cargar LKM rootkits. eBPF añade otra opción ofensiva pero no cambia fundamentalmente el modelo de amenaza para sistemas donde el atacante ya tiene root.
La preocupación real: eBPF permite ataques más sigilosos que LKM porque no requiere módulos del kernel y opera dentro de un framework legítimo del sistema.
Mapeo MITRE ATT&CK
| Técnica | ID | Contexto eBPF |
|---|---|---|
| Rootkit | T1014 | Rootkits eBPF (TripleCross) |
| Traffic Signaling: Port Knocking | T1205.001 | BPFDoor magic packets |
| Input Capture: Credential API Hooking | T1056.004 | Pamspy (uprobes en PAM) |
| Hide Artifacts | T1564 | Ocultar archivos/procesos via eBPF hooks |
| Non-Application Layer Protocol | T1095 | BPFDoor raw socket communication |
Fuentes y referencias
- Rice, L. "Learning eBPF." O'Reilly Media, 2023.
- h3xduck. "TripleCross: eBPF Rootkit." https://github.com/h3xduck/TripleCross
- Fournier, G. "ebpfkit: Rootkit powered by eBPF." Datadog Security Research, 2021.
- PwC. "BPFDoor: An Active Chinese-Based Threat." PwC Threat Intelligence, 2022.
- Elastic Security Labs. "BPFDoor Analysis." 2022.
- Cilium. "Tetragon: eBPF-based Security Observability." https://github.com/cilium/tetragon
- MITRE ATT&CK. "Rootkit (T1014)." https://attack.mitre.org/techniques/T1014/
- Brendan Gregg. "BPF Performance Tools." Addison-Wesley, 2019.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Rootkits Linux: LKM, eBPF y Técnicas Modernas de Ocultación
Diamorphine, Reptile y Suterusu: Los Rootkits Linux que Debes Estudiar
Análisis de Malware en Linux: Herramientas Esenciales y Metodología
Reglas Sigma: Sintaxis, Estructura y Tu Primer Caso Práctico
Sigma para Lateral Movement: 8 Reglas de Detección de Movimiento Lateral
Sigma para Ransomware: 10 Reglas que Todo SOC Necesita Desplegadas
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.