Registrar actividad en sesión ssh

29 Agosto 2011 at 22:32 by Adrián Pérez

spy
Imaginemos que queremos un método para registrar todo lo que un determinado usuario realiza durante su sesión ssh. Por lo tanto, lo que se busca es guardar el log de la actividad del usuario en el propio equipo al que se conecta, y por supuesto, no se quiere que el usuario pueda modificar o eliminar este archivo de log.

Opción 1

Una primera opción, es complicarse la vida, montando este entorno a mano.

Para ello,se deberá modificar el fichero profile del usuario, que encontraremos en su home.

vim /home/user/.bash_profile

A este fichero, se le añadirán las siguientes líneas:

script -q -a "/log/secure$RANDOM.log"

if [ $1=="exit" ]; then
exit
exit
fi

El comando script realiza una copia de los comandos que se le pasan al shell, y en este caso, lo ejecuta en modo silencioso (-q) y lo guarda en un fichero (-a). La peculiaridad, es que el nombre del fichero (en el ejemplo) incluye la variable de bash $RANDOM, la cual genera un número entre 0 y 32767, con lo que en la práctica, el nombre del fichero de log, será en mayor o menor medida, aleatorio.

Con esto, además se conseguirá tener un fichero diferente por cada sesión ssh.

El "if" se encargará de finalizar la sesión ssh cuando el usuario teclee "exit". Sin este "if", se finalizaría la ejecución del comando "script" con el primer "exit" del usuario, y éste aun quedaría con la sesión ssh abierta, y sin posibilidad de registrar su actividad.

 

Se puede cambiar la propiedad del fichero profile para que el usuario no pueda modificarlo. Sin embargo, el usuario deberá tener permisos de lectura sobre él, ya que en caso contrario, los comandos ahí definidos no podrían ejecutarse.

chown root:root .bash_profile

 

El directorio que albergará los ficheros de log, deberá permitir la escritura y la ejecución al usuario, pero no la lectura. Con esto, se conseguirá que el usuario no pueda hacer "ls" y por tanto, no pueda ver los archivos que contiene.

chmod 730 /log
chown root:user /log

 

Finalmente, se deberá prevenir el uso del comando "ps" por parte del usuario, con tal de evitar que consiga conocer el nombre de los ficheros de log. Si el usuario se hiciera con el nombre del fichero de logs, éste podría ser capaz de eliminarlo, o modificarlo a su antojo, así que cuanto más difícil se lo pongamos, mejor.

/bin/ps -> Moverlo a /sbin/ps, para evitar que el usuario pueda ejecutar ps. Si aun así el usuario puede ejecutar ps, se le podrá cambiar el nombre al comando.

 

Los inconvenientes de esta solución, son que el usuario tiene permisos completos sobre los ficheros de log, con lo que si fuera capaz de conocer su nombre y ubicación, podría llegar a eliminarlos o modificarlos. Las medidas de seguridad adoptadas, pretenden poner trabas para evitar este tipo de situaciones.

Opción 2

La segunda opción, es usar una solución ya existente, como por ejemplo rootsh.

En primer lugar, se deberá instalar rootsh

yum install rootsh.x86_64

 

Posteriormente, se deberá modificar el fichero profile del usuario, igual que con la primera opción, para ejecutar la aplicación a la que el usuario inicie sesión.

vim /home/user/.bash_profile

rootsh -f "/log/rootsh$RANDOM.log"
if [ $1=="exit" ]; then
exit
exit
fi

En esta ocasión, se le pasará la ruta del fichero de logs, mediante la opción "-f", usando de nuevo $RANDOM para generar el nombre del archivo de logs. Al ejecutarse rootsh sin "sudo", el usuario no cogerá privilegios de root, y únicamente usará rootsh para registrar su actividad.

 

Si se quiere incrementar la seguridad, se puede usar algunos de los métodos indicados en la primera opción.

mkdir /log
chown root:user /log
chmod 730 /log

 

Opción 3

Una tercera opción, que a mi no me ha funcionado, consiste en habilitar el logueo modificando el fichero /etc/pam.d/system-auth, al cual se le debe añadir una línea como la siguiente, sustituyendo username por el nombre de usuario al que se quiere auditar:

session required pam_tty_audit.so disable=* enable=username

 

Una vez finalizada la sesión del usuario, bastaría con ejecutar el siguiente comando, para revisar sus acciones:

aureport --tty -ts today

Fuente: http://www.slashzero.com/2009/11/shell-session-logging/

Flickr! Foto por Anonymous9000

Tags: