Ir al contenido

Herramientas, automatización y NSE para SSH

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

El workflow de SSH separa banner, negociación, host key, autenticación y capacidades posteriores. OpenSSH es el control principal porque permite observar cada fase con verbosidad.

Ncat permite conservar únicamente la línea de identificación antes de iniciar una negociación SSH. En -nv, -n desactiva la resolución de nombres y -v muestra el resultado de la conexión:

Leer la identificación del servidor
ncat -nv FQDN PORT

-vvv aumenta la verbosidad. -p fija el puerto. PreferredAuthentications=none intenta llegar hasta la oferta de métodos sin usar una credencial:

Ventana de terminal
ssh -vvv -p PORT \
-o PreferredAuthentications=none \
USERNAME@FQDN

El servidor puede revelar métodos distintos según el usuario. Una respuesta Permission denied no confirma que la cuenta exista.

Una comprobación repetible debe evitar identidades y reintentos heredados de la configuración local. -o ConnectTimeout=5 limita el establecimiento de la conexión. -o ConnectionAttempts=1 evita nuevos intentos TCP. -o IdentitiesOnly=yes impide ofrecer claves adicionales del agente. -o BatchMode=yes desactiva prompts. -E FILE guarda el debug:

Observar autenticación sin prompts ni claves implícitas
ssh -vvv -E evidence/ssh-debug.log \
-p PORT \
-o ConnectTimeout=5 \
-o ConnectionAttempts=1 \
-o IdentitiesOnly=yes \
-o BatchMode=yes \
-o PreferredAuthentications=none \
USERNAME@FQDN

El fichero registra algoritmos, host keys, métodos ofrecidos y configuración aplicada. También puede revelar nombres locales de claves y usuarios, por lo que se sanea antes de compartirlo.

ssh -G muestra la configuración efectiva del cliente sin conectar:

Ventana de terminal
ssh -G -p PORT USERNAME@FQDN

Esto ayuda a detectar ProxyJump, identidades, algoritmos o opciones heredadas de ~/.ssh/config.

-J JUMP_USER@JUMP_HOST crea un salto mediante ProxyJump. El destino ve la conexión desde el jump host, mientras que la negociación SSH de extremo a extremo sigue ocurriendo con el destino:

Comparar SSH desde una posición de salto
ssh -J JUMP_USER@JUMP_HOST \
-p PORT \
-o ConnectTimeout=5 \
-o ConnectionAttempts=1 \
-o IdentitiesOnly=yes \
USERNAME@FQDN

Registra las host keys de ambos saltos y no confundas un fallo en el jump host con un fallo del destino. ssh -G muestra la configuración final después de aplicar Host, Match, ProxyJump y opciones de línea de comandos.

ssh-keyscan recupera claves sin verificar identidad:

Ventana de terminal
ssh-keyscan -p PORT -T 5 FQDN > evidence/hostkeys
ssh-keygen -lf evidence/hostkeys

-T 5 limita la espera a cinco segundos. Compara fingerprints con una fuente independiente. Guardar una clave en known_hosts no la convierte en confiable por sí solo.

ssh-audit enumera banners, algoritmos y recomendaciones:

Ventana de terminal
ssh-audit FQDN:PORT

Las conclusiones dependen de la versión de la herramienta y de su política. Conserva el inventario de algoritmos y valida los elementos relevantes con OpenSSH:

Ventana de terminal
ssh -Q cipher
ssh -Q kex
ssh -Q key

ssh -Q muestra capacidades del cliente local, no del servidor.

ssh-hostkey obtiene host keys. ssh2-enum-algos enumera algoritmos. ssh-auth-methods prueba métodos para un usuario y puede producir una autenticación fallida:

Ventana de terminal
sudo nmap -sV -n -Pn -p PORT \
--script ssh-hostkey,ssh2-enum-algos \
TARGET_IP
Ventana de terminal
sudo nmap -sV -n -Pn -p PORT \
--script ssh-auth-methods \
--script-args ssh.user=USERNAME \
TARGET_IP

Separa ssh-brute de estas consultas. Antes de autenticar repetidamente, registra política de bloqueo, listas y tasa.

Con acceso local, sshd -T resuelve los valores predeterminados y las directivas Include:

Ventana de terminal
sudo sshd -T
sudo sshd -T -C user=USERNAME,host=FQDN,addr=CLIENT_IP

La segunda forma aplica bloques Match. El archivo principal por sí solo puede ocultar la configuración que recibe un usuario concreto.