Este script lo he realizado como prueba de concepto para monitorizar conexiones SSH. Esto puede utilizarse en una máquina de salto y capturar por ejemplo lo que la gente escribe en una conexión ssh abierta desde allí.
No obstante mi finalidad no es la de capturar las contraseñas que la gente escribe para conectar a otras máquinas y si la de simplemente analizar las conexiones si es preciso.
El script se puede obtener de mi repositorio: git.56k.es/fanta/sshMonitor
$ git clone http://git.56k.es/fanta/sshMonitor
He montado de prueba una máquina llamada backups en la red local. Con la IP 192.168.1.177 . He abierto 2 conexiones ssh a la máquina desde mi ordenador portátil.
Posteriormente he ejecutado sshMonitor para ir visualizando lo que allí ocurre.
Te saltarán las opciones y entonces por ejemplo escribes la 2 y pulsas enter.
El log por defecto de la sessión se irá guardando en /tmp/sshMonitor-*
Si el usuario mete la password se irá viendo cada uno de los caracteres de esta por separado. Se podría realizar un reader de ese log para que fuese algo más humano de ver.
Si salta dese allí a otra máquina también veremos lo que teclea.
No obstante funciona.
Aquí puede verse el código:
#!/usr/bin/env bash
fileSSHConnections="/tmp/.sshActualConnections"
logDir="/tmp/"
main(){
checkRoot
haveProgram strace wget lsof awk
printActualSSHConnections
monitoringSocket
}
checkRoot(){
if [ "$(whoami)" != "root" ]; then echo -e "\e[31m\e[1m[NOT OK]\e[0m Run it with root please" && exit ; fi
}
haveProgram(){
for i in $@; do type $i &> /dev/null ; if [ $? == 1 ]; then echo "$i not found. Please install it"; fi ; done
}
printActualSSHConnections(){
lsof -c ssh 2>/dev/null | grep IPv4 | awk '{ print $2,$9 }' | cat -n | tee $fileSSHConnections
}
monitoringSocket(){
if [ $(wc -l $fileSSHConnections | cut -d " " -f 1) != 0 ];then
read -p "Enter option number: " nOption
pidSSH=$(cat $fileSSHConnections | awk '{ print $2 }' | head -n $nOption | tail -n 1)
strace -p $pidSSH | tee -a $logDir/sshMonitor-$pidSSH.log
else
echo "No ssh connection found"
fi
}
main
Un saludo cordial.