Buenos días, hoy continuaremos con la segunda parte del artículo "Jugando al escondite". En el primer post, vimos la teoría acerca de cómo detectar un rootkit. En este post lo veremos de forma práctica, jugando con un sencillo script que iremos desgranando :)
Lo primero que haremos es abrir el fichero /proc/sys/kernel/pid_max en modo lectura, leemos el PID máximo y lo almacenaremos en la variable máximo. Después, cerraremos el fichero e imprimiremos un mensaje por pantalla.
Reservamos memoria para almacenar todos los posibles PIDs y los inicializamos a cero. Ahora viene lo divertido. Dentro del segundo bucle for, creamos los procesos con la función fork. Esta función duplica el proceso actual, por tanto, ahora mismo tenemos varios procesos ejecutando nuestro código. La función fork devuelve un 0 para el caso del proceso hijo y devuelve el PID del proceso hijo para el caso del padre. Ya sé que suena un poco lioso, quienes no conozcáis esta función os recomiendo mirar la documentación de Linux ejecutando “man fork”. El proceso hijo ejecutará la parte que está en rojo y el proceso padre la parte en azul. Como podéis ver, el proceso hijo no realiza nada, simplemente finaliza su ejecución. El proceso padre guarda el PID del hijo (también os recomiendo echarle un ojo a la función wait).
Si ejecutamos el código que llevamos hasta ahora, tenemos lo siguiente:
Se irán generando procesos hasta el PID máximo, en mi caso 32768. Después probará con los PIDs del 1 al 2906.
La primera imagen de abajo es nuestro programa, y la segunda es el resultado de ejecutar en Linux “ps -e”. Como podéis ver, como el PID 1037 está siendo ocupado por otro proceso llamado “gsd-clipboard”, nuestro programa no puede generar otro proceso con el mismo PID. Por este motivo, genera el proceso con PID 1036 y después salta al 1038. Si os fijáis, ocurre lo mismo con el 1040 y 1042.
Por tanto, para terminar este programa y que sea totalmente funcional, solo quedaría programar estas comparaciones, comentadas en el párrafo de arriba. Esto ya os lo dejamos a vosotros :)
Espero que os haya gustado, ¡hasta la próxima!