AvanzadoLinuxeBPFrootkitsBPFDoorkerneldetección

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.

MalwareIntel Research··8 min lectura
Serie: Malware en Linux — Parte 10

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

CapacidadHook pointUso defensivoUso ofensivo
Interceptar syscallstracepoints, kprobesDetección de comportamiento anómaloFiltrar/modificar resultados de syscalls (rootkit)
Inspeccionar paquetes de redXDP, TC, socket filtersNetwork monitoring, DDoS mitigationBackdoor pasivo, ocultación de tráfico
Interceptar funciones del kernelkprobes, fentry/fexitAnálisis de rendimientoInterceptar credenciales, manipular datos
Interceptar funciones de user-spaceuprobesTracing de aplicacionesInterceptar credenciales en PAM, OpenSSL
Acceder a mapas de datos compartidosBPF mapsCompartir datos entre kernel y user-spaceC2 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

AtributoDetalle
Descubierto porPwC Threat Intelligence (2022)
AtribuciónRed Menshen (APT chino)
Activo desdeAl menos 2017 (5 años sin ser detectado)
TipoBackdoor pasivo basado en BPF packet filter
VíctimasTelecomunicaciones, 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

AspectoVisibilidad
netstat -tnlpNo aparece (no tiene socket listening)
ss -tnlpNo aparece
nmap desde exteriorNo detecta puertos abiertos
ps auxAparece con nombre disfrazado (ej. /sbin/udevd)
lsofMuestra 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ónMejora
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):

CapacidadImplementación
Ocultar archivosHook en getdents64 via tracepoint, filtra resultados
Ocultar procesosHook en getdents64 en /proc, filtra PIDs
Backdoor de redXDP program que detecta magic packets
Privilege escalationModifica cred struct del proceso via bpf_probe_write
Interceptar ejecuciónHook en execve para redirigir ejecución
PersistenciaPinned BPF programs + systemd service

ebpfkit

Framework de rootkit eBPF (Datadog Security Research, 2021):

CapacidadImplementación
Ocultar tráficoTC (Traffic Control) program que filtra paquetes
Modificar respuestas de redXDP program que modifica paquetes en tránsito
Piping de datosRedirigir tráfico entre interfaces
Ocultar programas eBPFHooking 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étodoHerramientaDescripción
Listar programas eBPFbpftool prog listListar todos los programas eBPF cargados. Comparar con baseline
Listar mapas eBPFbpftool map listLos mapas almacenan datos. Mapas desconocidos = sospechoso
Auditar BPF syscallauditdRegistrar todas las llamadas a bpf() syscall
Monitorizar con TetragonCilium TetragonMonitorizar carga de programas eBPF
Verificar pinned programsls /sys/fs/bpf/Programas persistentes en el filesystem BPF
Buscar raw socketsss -aw, lsofBPFDoor 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:

OfensivoDefensivo
Rootkits eBPF (TripleCross, ebpfkit)Tetragon, Falco con eBPF
Credential stealing (Pamspy)Detección de uprobes anómalos
Network backdoorsNetwork monitoring con Cilium
Ocultación de programas eBPFAuditorí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écnicaIDContexto eBPF
RootkitT1014Rootkits eBPF (TripleCross)
Traffic Signaling: Port KnockingT1205.001BPFDoor magic packets
Input Capture: Credential API HookingT1056.004Pamspy (uprobes en PAM)
Hide ArtifactsT1564Ocultar archivos/procesos via eBPF hooks
Non-Application Layer ProtocolT1095BPFDoor raw socket communication

Fuentes y referencias

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.