Los investigadores de ARMO han demostrado la capacidad de crear rootkits que no utilizan llamadas de sistema específicas para realizar operaciones comunes como leer/escribir archivos y recibir comandos de un servidor externo. En lugar de llamadas al sistema para realizar operaciones de red y archivos, se propone utilizar la interfaz de entrada/salida asíncrona io_uring, compatible desde el kernel de Linux 5.1.
La esencia del método es que en lugar de llamadas de sistema separadas para acceder a archivos y realizar operaciones de red (leer/escribir, recibir/enviar/conectar/vincular/escuchar), puede utilizar llamadas de sistema io_uring generales (io_uring_enter, io_uring_setup, io_uring_register, etc.), que no son analizadas por herramientas estándar para detectar actividad maliciosa. La interfaz io_uring admite aproximadamente 60 operaciones diferentes. Se está desarrollando una función que permite iniciar nuevos procesos a través de io_uring.
Para demostrar el funcionamiento del método, se preparó un prototipo del rootkit Curing, el cual realiza acciones como recibir comandos de un servidor externo y transferir/modificar archivos. La demostración implicó enviar una solicitud al puerto TCP 8888 de un host externo y enviar el contenido del archivo "/etc/shadow". Se supone que después de comprometer con éxito el sistema y obtener derechos de root, el atacante instala un rootkit para consolidar su presencia en el sistema pirateado.
En el experimento, la actividad del rootkit Curing no fue detectada por las herramientas de monitoreo Falco y Tetragon utilizadas para detectar anomalías relacionadas con la seguridad en hosts y contenedores (se admite la integración con la infraestructura basada en Kubernetes). Estas herramientas utilizan la interceptación de llamadas del sistema para analizar eventos como el inicio de procesos, la actividad de la red y la manipulación de archivos, pero no tienen en cuenta la posibilidad de utilizar el subsistema io_uring para dichas operaciones. La mayoría de los sistemas comerciales de detección y respuesta a incidentes de seguridad disponibles para Linux también se basan en la interceptación de llamadas del sistema.
Para evitar eludir las herramientas de monitoreo de actividad de archivos y de red, en lugar de interceptar llamadas del sistema, se recomienda utilizar el mecanismo KRSI (Kernel Runtime Security Instrumentation), que apareció en el kernel de Linux 5.7 y permite adjuntar programas BPF a cualquier gancho LSM. Por ejemplo, KRSI en el nivel de gancho LSM permite rastrear operaciones de archivos, acceso a la red y lanzamientos de procesos, independientemente de si estas operaciones se inician a través de llamadas de sistema específicas o mediante io_uring.
El subsistema io_uring ha sido anteriormente objeto de críticas debido a serias vulnerabilidades que surgen periódicamente. En respuesta a las solicitudes de los usuarios de una herramienta simple para deshabilitar io_uring sin reconstruir el kernel, se agregó sysctl io_uring_disabled al kernel de Linux 6.6. Google ha desactivado io_uring de forma predeterminada en ChromeOS, Android y sus servidores, explicando que la mala situación de seguridad con io_uring supera los beneficios de rendimiento de su uso.
Fuente: opennet.ru