Rootkit eBPF a través de un contratista: Detección de filtraciones ocultas de bases de datos en Linux
Un servidor de base de datos ejecutando Ubuntu generaba un 5–10% más de tráfico saliente que entrante durante un mes. Los registros y procesos parecían limpios, y el proveedor confirmó un funcionamiento normal de la red. Una auditoría reveló un rootkit eBPF desplegado a través de un portátil comprometido perteneciente a un contratista DBA. Los atacantes utilizaron la cadena de suministro para instalar un programa que ocultaba procesos y exfiltró datos PII a un servidor C2.
Primera pista: Regla sospechosa en iptables
En /etc/iptables/rules.v4, apareció una regla que permitía conexiones TCP salientes a una IP del grupo VPN del contratista:
-A OUTPUT -d xxx.xxx.xxx.xxx -p tcp --dport YYYY -j ACCEPT
Esta regla no formaba parte de la configuración base. Permitía la transmisión sigilosa de volcados comprimidos de tablas de bases de datos. El análisis de /var/log/auth.log mostró un inicio de sesión con clave SSH del contratista desde una IP del mismo grupo. El acceso al servidor se revocó después del trabajo, pero la VPN permaneció activa.
Discrepancia en /proc apuntaba a un rootkit
El comando ps auxf mostraba procesos estándar, pero el número de directorios en /proc superaba el recuento de PID en uno. Esto indicaba la interceptación de las llamadas al sistema getdents y getdents64. Al revisar /proc/modules y analizar la memoria del kernel con un LiveCD, no se encontraron módulos LKM—la lista coincidía con la línea base.
eBPF como base del rootkit: Detalles de implementación
La utilidad bpftool reveló programas eBPF adjuntos a los puntos kprobe __x64_sys_getdents y __x64_sys_kill. Un programa de socket adicional redirigía el tráfico. En /usr/share/man/man3/, se encontró un binario llamado systemd-snoop, que cargaba eBPF a través de libbpf.
El malware volcaba tablas PII por la noche, las comprimía y las enviaba al servidor C2. eBPF no es visible en la lista de módulos porque se carga a través de la llamada al sistema bpf(). La detección requiere privilegios de root para bpftool o análisis de memoria del kernel. En este caso, los objetos no estaban ocultos.
Escenario del ataque
- Portátil del contratista comprometido.
- Durante el trabajo programado a través de clave SSH—inicio de sesión en el servidor.
- Adición de regla iptables e instalación de
systemd-snoop. - Exfiltración nocturna de datos a través de proxy eBPF.
Métodos para detectar rootkits eBPF
AIDE estándar es ineficaz—eBPF no modifica archivos en /lib/modules. Enfoques recomendados:
- Recopilación periódica de
bpftool prog listybpftool map listcon envío a SIEM. - Auditoría de la llamada al sistema
bpf()a través deauditdoebpf_exporter. - Monitoreo con Falco, Tracee u Osquery para actividad eBPF anómala.
- Análisis de NetFlow para discrepancias de tráfico y correlación con GeoIP.
Protección de la cadena de suministro frente a contratistas
Autenticación y acceso
- 2FA obligatorio para SSH incluso con claves.
- Privilegios mínimos: sin acceso root, solo a través de un host bastión con registro de sesiones.
- Rotación de claves cada 6 meses, revocación en 24 horas tras finalización.
- Sesiones VPN temporales con desconexión automática.
Infraestructura
- GitOps para firewall: cambios en iptables solo vía Ansible con control Git.
- ELK/Graylog centralizado + SIEM para correlacionar registros, NetFlow y GeoIP.
Conclusiones clave
- Los rootkits eBPF ocultan procesos, no son visibles en
/proc/modulesy se detectan mediantebpftool. - Ataque a través de contratista: compromiso del portátil + acceso VPN persistente.
- Síntomas: asimetría de tráfico, discrepancia de PID en
/proc. - Protección: 2FA, host bastión, auditoría de
bpf(), monitoreo de NetFlow. - Herramientas: Falco, Tracee, ebpf_exporter para detección en tiempo de ejecución.
Este caso demuestra cómo una anomalía menor de tráfico descubrió una exfiltración de datos de un año. Implementar monitoreo proactivo de eBPF y control estricto de acceso minimiza los riesgos de equipos externos.
— Editorial Team
Aún no hay comentarios.