Obtener información de procesos sin privilegios de root en Linux con pspy
Dentro de las auditorias de seguridad en sistemas operativos Linux se pasan por alto las debilidades más sencillas y tontas. Muchas veces descubrir argumentos que se pasan a procesos, nos pueden dar pistas de como comprometer un sistema. Para auxiliarnos en esta tarea, hemos encontrado la herramienta pspy, que permite obtener información de procesos sin tener de privilegios de root en sistemas operativos Linux.
Con pspy podemos obtener comandos ejecutados por otros usuarios, cron jobs, argumentos pasados a los comandos, etc. La información obtenida se muestra en pantalla con diferentes colores e incorporando detalles como la hora, fecha, UID, PID, etc. Existen otras herramientas para listar procesos como Htop o incluso podemos usar lsof
para listar los archivos abiertos por un proceso, pero requieren de permisos exclusivos para obtener información sensible. Con pspy todo se simplifica, minimizando los permisos requeridos y poder examinar información sensible sin restricciones.
Cómo instalar pspy para obtener información de procesos sin permisos de root.
La instalación de pspy es muy sencilla, ya que el propio desarrollador pone a nuestra disposición los binarios compilados y listos para usar. Aun así, podemos compilarlos por nosotros mismos, ya que el proyecto es de código abierto y lo podemos examinar en la web https://github.com/DominicBreuker/pspy.
Disponemos de diferentes binarios precompilados, por un lado los binarios estáticos para sistemas de 32bit y sistemas de 64bit. Si el tamaño de los binarios estáticos (mayor a 4MB) es un problema, podemos emplear los binarios que dependen de libc, que tiene un tamaño menor (cerca de 1MB) y además están comprimidos con UPX. La gran ventaja de emplear los binarios estáticos es que deberían de funcionar en cualquier distribución Linux.
Cómo funciona pspy y en que se basa para conseguir la información de los procesos.
Pspy obtiene la información de los procesos gracias al escaneo de procfs (sistema de ficheros de procesos de Linux). Para esto, se recurre a la API de inotify, que no necesita permisos de root, por lo que podemos usarla sin restricciones. Con esta API, podemos obtener notificaciones cuando algún archivo es creado, modificado o eliminado.
Combinando todo lo anterior, Pspy monitoriza con la API inotify el contenido de la carpeta del sistema /proc
para tratar de capturar los procesos que se crean. Hay procesos que se mantienen vivos milisegundos, por lo que Pspy no nos garantiza capturar la totalidad de procesos del sistema (aunque he de reconocer que su efectividad es muy alta).
Al usar esta API, también nos garantiza que no hará un uso intensivo de la CPU y que el programa funcionará de un modo más discreto, sin llamar la atención.
Ejemplos de uso de Pspy para capturar procesos en Linux sin privilegios.
Una vez descargado el binario adecuado para nuestro sistema, debemos asegurarnos que tiene permisos de ejecución. Para esto, nada mejor que ejecutar el comando chmod +x pspy64
.
El comando de uso más habitual es ./pspy64 -pf -i 1000
, el cual nos permite monitorizar los eventos del sistema de archivos y los eventos de la API inotify con un intervalo de 1000 milisegundos (1 segundo).
Ahora ya podemos ejecutar el comando ./pspy64 --help
para ver la ayuda en pantalla y elaborar el comando con los modificadores que mejor se adapten a nuestras necesidades.