> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-22-ssh.md).

# Puerto 22: SSH

**SSH (Secure Shell)** es un protocolo de red que proporciona una conexión segura para acceder y gestionar servidores remotos. SSH cifra todos los datos transferidos entre el cliente y el servidor, ofreciendo una capa de seguridad que protege contra la interceptación de datos y ataques de red. Opera típicamente en el puerto 22.

## <mark style="color:green;">Descripción de SSH</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> SSH utiliza el protocolo TCP y opera en el puerto 22.
* <mark style="color:green;">**Cifrado**</mark><mark style="color:green;">:</mark> Todos los datos, incluyendo credenciales y comandos, se cifran, protegiendo la comunicación contra escuchas y ataques de intermediario (MITM).
* <mark style="color:green;">**Autenticación**</mark><mark style="color:green;">:</mark> SSH puede utilizar autenticación basada en contraseñas, claves públicas y otros métodos avanzados como Kerberos.
* <mark style="color:green;">**Túneles Seguros**</mark><mark style="color:green;">:</mark> SSH puede crear túneles cifrados para otros protocolos (port forwarding), permitiendo conexiones seguras a servicios no seguros.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de SSH en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> Aunque SSH es seguro, su correcta configuración es crucial. Los pentesters buscan configuraciones incorrectas y vulnerabilidades explotables.
* <mark style="color:green;">**Fuerza Bruta**</mark><mark style="color:green;">:</mark> Los ataques de fuerza bruta contra SSH pueden tener éxito si se utilizan contraseñas débiles o por defecto.
* <mark style="color:green;">**Acceso No Autorizado**</mark><mark style="color:green;">:</mark> Identificar credenciales débiles o comprometidas puede permitir a un pentester obtener acceso no autorizado a sistemas remotos.
* <mark style="color:green;">**Forwarding de Puertos**</mark><mark style="color:green;">:</mark> SSH puede ser utilizado para redirigir tráfico de red, lo cual puede ser útil tanto para pentesters como para administradores de sistemas.

### <mark style="color:green;">Ejemplo de Escaneo de SSH con Nmap</mark>

Para identificar sistemas que tienen el servicio SSH activo y recopilar información adicional sobre el servidor SSH, se puede utilizar Nmap. El siguiente comando escanea el puerto 22 y ejecuta scripts NSE específicos para SSH.

**Comando Nmap**

```bash
nmap -p 22 --script ssh-hostkey,ssh-auth-methods,ssh-brute target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 22`: Especifica que Nmap debe escanear el puerto 22, el puerto predeterminado para SSH.
* `--script ssh-hostkey,ssh-auth-methods,ssh-brute`: Utiliza scripts NSE para recopilar información sobre el servicio SSH.
  * `ssh-hostkey`: Recupera y muestra las claves públicas del servidor SSH.
  * `ssh-auth-methods`: Enumera los métodos de autenticación soportados por el servidor SSH.
  * `ssh-brute`: Realiza un ataque de fuerza bruta para intentar encontrar credenciales válidas.
* `target-ip`: Especifica la dirección IP del objetivo.

### <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 14:23 UTC
Nmap scan report for 192.168.1.20
Host is up (0.0011s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-hostkey:
|   2048 f4:92:50:47:a1:25:b6:07:4c:73:3d:8b:77:85:3b:47 (RSA)
|   256 e8:11:14:3a:c8:26:d7:41:a1:b5:c2:91:25:53:1c:41 (ECDSA)
|_  256 b7:0d:3b:4f:8d:9c:8a:e1:5c:44:65:2d:73:4d:6b:4b (ED25519)
| ssh-auth-methods:
|   Supported authentication methods:
|     publickey
|     password
|_    keyboard-interactive
| ssh-brute:
|   Accounts:
|     admin:admin - Valid credentials
|_    test:test - Valid credentials

Nmap done: 1 IP address (1 host up) scanned in 8.54 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**22/tcp open ssh**</mark><mark style="color:green;">:</mark> El puerto 22 está abierto y el servicio SSH está activo.
* <mark style="color:green;">**ssh-hostkey**</mark><mark style="color:green;">:</mark> Muestra las claves públicas del servidor SSH, que pueden ser utilizadas para identificar la autenticidad del servidor.
  * <mark style="color:green;">**RSA**</mark><mark style="color:green;">:</mark> Tipo de clave RSA y su huella digital.
  * <mark style="color:green;">**ECDSA**</mark><mark style="color:green;">:</mark> Tipo de clave ECDSA y su huella digital.
  * <mark style="color:green;">**ED25519**</mark><mark style="color:green;">:</mark> Tipo de clave ED25519 y su huella digital.
* <mark style="color:green;">**ssh-auth-methods**</mark><mark style="color:green;">:</mark> Enumera los métodos de autenticación soportados por el servidor SSH.
  * <mark style="color:green;">**publickey**</mark><mark style="color:green;">:</mark> Autenticación basada en claves públicas.
  * <mark style="color:green;">**password**</mark><mark style="color:green;">:</mark> Autenticación basada en contraseñas.
  * <mark style="color:green;">**keyboard-interactive**</mark><mark style="color:green;">:</mark> Autenticación interactiva por teclado.
* <mark style="color:green;">**ssh-brute**</mark><mark style="color:green;">:</mark> Resultados de un ataque de fuerza bruta, mostrando las credenciales válidas encontradas.
  * <mark style="color:green;">**admin:admin**</mark> <mark style="color:green;"></mark><mark style="color:green;">y</mark> <mark style="color:green;"></mark><mark style="color:green;">**test:test**</mark><mark style="color:green;">:</mark> Credenciales válidas que permiten el acceso al servidor SSH.
