Rootkits en Linux: jugando al escondite (Parte I)

Buenas a todos, hoy hablaremos sobre los Rootkits en Linux. Para empezar, ¿qué es un Rootkit? Muy sencillo, es un malware para infectar y controlar los ordenadores de forma remota, y sobre todo, mantenerse ocultos durante la mayor parte del tiempo. Podemos explicarlo de otra forma, imaginemos que somos un atacante y queremos infectar un sistema. Lo primero que haremos es descubrir una vulnerabilidad que nos permita entrar en el sistema, después escalaremos privilegios hasta ser administradores y es ahora cuando llega la función de nuestro Rootkit, instalar una puerta trasera que nos dé acceso al sistema y sobre todo que nos permita mantenerla “escondida” a los ojos de los sysadmins.

Seguro que muchos de vosotros os preguntaréis cómo es posible que estos “programillas” se mantengan ocultos y que cuando ejecutemos, en Linux, el comando “ps -a” no seamos capaces de encontrar este proceso malicioso. Muchos de estos Rootkits modifican la información disponible en “/proc” afectando, por tanto, a los comandos como “ps”. De esta forma, cuando lo ejecutamos solo veremos lo que el atacante quiera que veamos. Otros Rootkits lo que hacen es modificar el kernel y por tanto, se arriesgan a corromper el sistema y dejarlo inutilizado.

A muchos de vosotros seguro que se os ocurren ideas acerca de cómo detectar estos Rootkits. Yo os voy a explicar uno de los métodos más efectivos, que consiste en hacer fuerza bruta en el espacio de IDs de los procesos. En este post os explicaré la teoría y en el siguiente un caso práctico.

Vamos a ir creando procesos y anotando sus PIDs (Process IDentifier). Para averiguar el PID máximo ,podemos consultar el fichero “/proc/sys/kernel/pid_max”. En nuestro caso es 32768, aunque ejecutando el comando “echo 32768 > /proc/sys/kernel/pid_max” podremos modificarlo.


Una vez que hayamos creado y anotado los PIDs, debemos analizar los resultados. Los PIDs que NO hemos anotado, son aquellos que están siendo usados por otros procesos. Pongamos un ejemplo, imaginemos que el número máximo de PID es 10 y que los PIDs anotados son los siguientes:


Con esto sabemos que los PIDs 1, 2, 3, 5, 9 y 10 están siendo utilizados por otros procesos. Por tanto, si ejecutamos “ps -e” deberíamos tener un resultado similar a este:


Sin embargo, si el resultado fuese este otro, estaríamos ante un posible rootkit cuyo PID es 9.


¿La idea es sencilla verdad? Pues en el próximo artículo pondremos en práctica esta teoría.

¡Saludos!