Table of Contents
Compilar / Instalar / Configurar Snoopy Logger (+ Bypassing)
Snoopy es una herramienta que permite registrar los comandos introducidos en la terminal (incluidos accesos remotos) en ficheros log, algo a destacar es que no registra shell builtins. Debido a que es fácil evitar su monitoración, se recomienda por tanto para entornos personales o de confianza, al igual que pasa con el otro método basado en PROMPT_COMMAND para Bash.
Snoopy intercepta las ejecuciones de comandos anteponiendo su biblioteca al resto de librerías del sistema, anulando así en una primera instancia las llamadas a las funciones execv() y execve() originales de libc. Esto significa que cada vez que un programa enlazado dinámicamente se ejecuta, se realizan llamadas a execv() y execve() de la biblioteca de Snoopy, este las registra y las pasa de nuevo a las funciones originales de libc para su normal ejecución. Por tanto, son también registrados los comandos que se encuentran en scripts, tareas programadas del sistema (at, crontab,…), alias, etc.
Con Snoopy logger: comando → Snoopy → libc
Sin Snoopy logger: comando → libc
Si se quiere tener un método para monitorizar todo lo que pasa en las terminales, se puede usar PAM, entre otras aplicaciones.
Compilar instalar Snoopy
En sistemas Fedora, RHL y CentOS 6.X.
yum -y groupinstall "Development Tools"
tar -zxvf snoopy-1.9.0.tar.gz cd snoopy-1.9.0 ./configure make make install install -m 755 -d /usr/local/lib install -m 755 snoopy.so /usr/local/lib/snoopy.so Snoopy shared library installed in /usr/local/lib. Run 'make enable' to actually enable snoopy logging.
Leer soporte para filtros en Snoopy: https://github.com/a2o/snoopy/blob/master/README.filtering
Habilitar Snoopy en el sistema
Para una instancia en particular.
export LD_PRELOAD=/usr/local/lib/snoopy.so # default path cat /etc/passwd dmesg ... unset LD_PRELOAD
Para todo el sistema 24/7 (i386 / X86_64) (agrega una linea en /etc/ld.so.preload)
AVISO: No indicado para sistemas multilibrería (multilib) !
# make enable ./enable.sh /usr/local/lib Snoopy is now enabled in /etc/ld.so.preload. Check your syslog files for output.
Para todo el sistema 24/7 (multilib) (agrega una linea en /etc/ld.so.preload)
/usr/local/$LIB/snoopy.so
Ficheros de log
Por defecto Snoopy logger registra los comandos del usuario en alguno de estos ficheros.
- /var/log/auth*
- /var/log/messages
- /var/log/secure
Si se quiere (recomendable) tener los registros generados por Snoopy en un fichero separado, en rsyslog se debería hacer lo siguiente.
Crear el fichero /etc/rsyslog.d/10-snoopy.conf
:programname, isequal, "snoopy" /var/log/snoopy.log & ~
service rsyslog restart
El fichero de logs para Snoopy sería /var/log/snoopy.log
Ejemplo de contenido del fichero log de Snoopy logger
Mar 27 16:51:10 pollux snoopy[7729]: [uid:501 sid:7712 tty:/dev/pts/2 cwd:/home/stallman filename:/bin/ls]: ls --color=auto -lt Mar 27 16:51:27 pollux snoopy[7730]: [uid:0 sid:1948 tty:/dev/pts/1 cwd:/root/snoopy-1.9.0 filename:/usr/bin/tail]: tail -f /var/log/snoopy.log Mar 27 16:52:19 pollux snoopy[7732]: [uid:501 sid:7712 tty:/dev/pts/2 cwd:/home/stallman filename:/bin/dmesg]: dmesg
Deshabilitar Snoopy
Eliminar del fichero /etc/ld.so.preload la linea agregada anteriormente. Si se ha asignado valor a alguna de las variables LD_PRELOAD, LD_PRELOAD_32 o/y LD_PRELOAD_64 se deben liberar.
unset LD_PRELOAD unset LD_PRELOAD_32 unset LD_PRELOAD_64
Detectar Snoopy en un sistema
ldd /bin/dmesg linux-vdso.so.1 => (0x00007fff78b2e000) /usr/local/lib/snoopy.so (0x00007fae84ce6000) libc.so.6 => /lib64/libc.so.6 (0x00007fae8494b000) ...
Saltarse / Bypassear Snoopy looger sin tener privilegios
export LD_PRELOAD=/lib64/libc.so.6 bash
Mejorar la seguridad de Snoopy
Configurar la variable LD_PRELOAD de solo lectura.
echo "readonly LD_PRELOAD" >> /etc/profile
$ export LD_PRELOAD=/lib64/libc.so.6 -bash: LD_PRELOAD: readonly variable