Nuevo rootkit engaña simultáneamente a cortafuegos y sistemas de monitorización
Los investigadores de Synacktiv describieron un nuevo rootkit LinkPro para GNU/Linux, descubierto durante la investigación de una intrusión en la infraestructura de AWS. El ataque comenzó con la explotación de un Jenkins vulnerable, tras lo cual los atacantes desplegaron una imagen Docker maliciosa en clústeres de Kubernetes. Como resultado, en los sistemas se instaló la puerta trasera vShell y el rootkit LinkPro, que se oculta mediante eBPF y se activa con un paquete TCP especial.
El punto de entrada fue un servidor Jenkins vulnerable con la vulnerabilidad conocida CVE-2024-23897. Tras obtener acceso a los nodos, los atacantes ejecutaron la imagen Docker "kvlnt/vv" basada en Kali Linux con tres componentes en el directorio "app": el script start.sh para iniciar SSH y configurar el entorno, el programa link (software abierto vnt que funciona como proxy VPN y se conecta a vnt.wherewego[.]top:29872) y el cargador app — la herramienta vGet en Rust, que descarga el VShell cifrado desde S3 y se comunica con el servidor de comando por WebSocket en 56.155.98[.]37.
Paralelamente, a los nodos de Kubernetes se entregó un instalador con una copia adicional de VShell y el propio rootkit LinkPro, escrito en Go. Opera en dos modos: pasivo (inverso), cuando espera una señal externa, y activo (directo), en el que establece la conexión por sí mismo. En el modo activo admite HTTP, WebSocket, UDP, TCP y DNS; en el modo pasivo, solo HTTP.
El ocultamiento lo proporciona el módulo eBPF Hide, que supervisa eventos del sistema y oculta procesos y actividad de red. Si no se pudo cargar Hide, LinkPro utiliza la entrada "libld.so" en "/etc/ld.so.preload" para interceptar llamadas al sistema en el espacio de usuario. Para activar el canal pasivo se emplea un segundo módulo eBPF, Knock, que funciona con XDP y TC.
Knock detecta un paquete TCP "mágico" con tamaño de ventana 54321. Al recibir un paquete así, el módulo recuerda la dirección IP de origen y le concede acceso durante una hora. Durante ese periodo, el tráfico entrante desde esa dirección se redirige al puerto 2333, donde escucha LinkPro, y las respuestas salientes se camuflan como si provinieran del puerto 2233. Este esquema permite eludir cortafuegos a través de cualquier puerto permitido y dificulta correlacionar los registros.
Para persistir, LinkPro crea un servicio de systemd, y al terminar por las señales SIGHUP, SIGINT o SIGTERM elimina cuidadosamente los módulos eBPF, restaura "/etc/libld.so" y borra sus huellas. La puerta trasera puede ejecutar "/bin/bash" en un pseudoterminal, ejecutar comandos, trabajar con archivos y directorios, descargar datos y levantar un túnel SOCKS5. En núcleos con CONFIG_BPF_KPROBE_OVERRIDE, el rootkit intercepta getdents para ocultar archivos y sys_bpf para camuflar sus programas eBPF.
La combinación del sigilo eBPF, la activación por paquete "mágico" y la sustitución de puertos convierte a LinkPro en un adversario difícil para las herramientas de monitorización habituales, ya que todos los indicadores externos en los registros apuntan a un servicio autorizado, mientras que el control se realiza por un canal oculto. Para proteger entornos Kubernetes en la nube se requiere controlar las cargas eBPF en los nodos, verificar la integridad de "/etc/ld.so.preload", monitorizar los servicios systemd y analizar valores anómalos de la ventana TCP.