
Existen distintos métodos para esta tarea, desde demonios que funcionan como keyloggers hasta truquitos en bash, pero yo personalmente prefiero parchear la shell.
Aunque realmente un usuario cabroncete, podría subirse su propia shell y ejecutar todo de forma que no quedase huella. La idea realmente no es espiar ni utilizar esta información como evidencia de nada. Es más bien una bitácora donde nosotros mismos podremos consultar que ejecutamos un día determinado y cosas similares.
Queda claro entonces que la intención y medida tiene importantes problemas de seguridad que serían saltados de
Para instalar este parche, es tan sencillo como llevar a cabo los siguientes pasos:
1.- Descargar código fuente de bash:
2.- Descomprimir el código[aramosf@malygos tmp]$ wget ftp://ftp.cwru.edu/pub/bash/bash-4.0.tar.gz --2009-03-06 21:02:02-- ftp://ftp.cwru.edu/pub/bash/bash-4.0.tar.gz => `bash-4.0.tar.gz.1' Resolving ftp.cwru.edu... 129.22.8.159, 129.22.9.240 Connecting to ftp.cwru.edu|129.22.8.159|:21... connected. [...]
[aramosf@malygos tmp]$ gzip -dc bash-4.0.tar.gz | tar -x
3.- Descargar y aplicar el siguiente parche de Javier Olascoaga que he actualizado para que se pueda usar en la versión 4.0.[aramosf@malygos tmp]$ wget -q http://www2.unsec.net/bash-4.0-syslog.patch -O - | patch -p0 patching file bash-4.0/bashhist.c patching file bash-4.0/lib/readline/histexpand.c patching file bash-4.0/lib/readline/histfile.c patching file bash-4.0/lib/readline/history.c patching file bash-4.0/lib/readline/history.h
4.- Instalar.[aramosf@malygos tmp]$ cd bash-4.0 [aramosf@malygos bash-4.0]$./configure checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for emacs... no checking for xemacs... no [...] [aramosf@malygos bash-4.0]$ make rm -f mksyntax gcc -DPROGRAM='"bash"' -DCONF_HOSTTYPE='"i686"' -DCONF_OSTYPE='"linux-gnu"' -DCONF_MACHTYPE='"i686-pc-linux-gnu"' -DCONF_VENDOR='"pc"' -DLOCALEDIR='"/usr/local/share/locale"' -DPACKAGE='"bash"' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -g -o mksyntax ./mksyntax.c rm -f syntax.c ./mksyntax -o syntax.c [..]
Tal y como está desarrollado el parche, los eventos llegarán a syslog como local5.info[aramosf@malygos bash-4.0]$ sudo make install ( cd ./po/ ; make DESTDIR= installdirs ) make[1]: Entering directory `/tmp/bash-4.0/po' [...]
syslog(LOG_LOCAL5| LOG_INFO, "history: [pid:%d uid:%d] %s(++TRUNC)",
Para lo que deberemos configurar nuestro syslog, especificando donde queremos envíar estos eventos. Por ejemplo añadiendo la siguiente línea al archivo /etc/syslog.conf
local5.* /var/log/User.log
Finalizando, si queremos que cada usuario tenga su propio fichero, simulando un bash_history, pero con fecha. Se puede
[aramosf@malygos bash-4.0]$ sudo mkdir /var/log/users
Y ejecutando el siguiente script:
Dejo pendiente escribir sobre las distintas variables del la shell para asuntos similares, y como se pueden añadir capas de seguridad adicionales...
5 comments :
"Bourne Shell" y BASH son dos cosas distintas. Un poquito de por favor...
Gracias Pepe por el apunte, como bien matizas me he dejado el "Again", seguramente también me haya dejado algún GNU delante de Linux. Date prisa, seguro que si lees el blog entero lo encuentras y puedes comentarlo.
Un saludo!
Muy interesante el artículo.
Me he puesto a probarlo, he parcheado, incluído la línea en mi syslog.conf y reiniciado el servicio.
Pero no me loguea nada, algo se me escapa?
Gran blog, un saludo.
Buenas Mariano,
Primero, comprueba que ejecutando:
logger -p local5.info prueba
Aparece en el log donde hayas configurado el syslog una nueva linea, eso significaría que tienes correctamente el syslog configurado.
La segunda prueba, es comprobar que usas la 4.0 mediante:
bash --version
Debería mostrar la versión 4.0 que has compilado.
Un saludo y suerte.
Un monton de meses tarde...
Hay que hacer logout de la bash actual.
El logging solo estara disponible a partir de la siguiente ejecucion de bash.
Publicar un comentario