La interacción de SSH al iniciar un intento de conexión confirma si el ordenador reconoce la huella de clave pública del servidor. El posible recibir un ataque MITM en esta fase porque no hay manera de saber si esa es la clave pública del servidor al que estamos intentando conectarnos o una conexión interceptada. Si le das a que sí, próximamente te conectará de manera silenciosa al haber guardado ya la clave.
Autentificando un Cliente
Una vez que hemos confirmado que estamos hablando con el servidor correcto, necesitamos identificarnos a nosotros mismos y autentificarnos.
Una manera de realizar esta autentificación es con un usuario y contraseña, pero no es de las mejores prácticas. Es aquí donde entra la clave pública y privada que verifican que un usuario es legítimo en el servidor. Por defecto, las claves SSH son RSA aunque puedes elegir qué algoritmo usar para la creación de la clave.
ssh-keygen es el comando que se suele utilizar para dicho fin. Algunos de los algoritmos son:
- DSA (Digital Signature Algorithm): Algoritmo de criptografía pública diseñado específicamente para firmas digitales.
- ECDSA (Elliptic Curve Digital Signature Algorith): Variante del DSA que usa criptografía de curva elíptica para dar claves más cortas con seguridad equivalente.
- ECDSA-SK (ECDSA with Security Key): Extensión de la ECDSA con claves basadas en hardware para mejorar la seguridad.
- Ed25519: Es un sistema de clave pública que usa EdDSA (Edwards-curve Digital Signature Algorithm) con Curve25519.
- Ed25519-SK (Ed25519 with Security Key): Usa la misma clave basada en hardware que ECDSA-SK pero con Ed25519.
Para generar el par: ssk-keygen -t ed25519, por ejemplo.
Claves Privadas SSH
Como ya hemos mencionado, debemos tratar las claves privadas como contraseñas. Es muy importante mencionar que la frase de paso (passphrase) nunca se transmite ni deja tu sistema, sólo desencripta la clave SSH.
Usar herramientas como John The Ripper es una manera de atacar estas claves privadas para conseguir la passphrase.
Los permisos deben estar correctamente proporcionados para que el servidor acepte la clave SSH. Si no, la ignorará. Estos permisos en octal son 600; o lo que es lo mismo, rw-------, o más estrictos.
Para usar la clave para registrarte en un servidor, debes ejecutar: ssh -i clavePrivada usuario@host.
Claves confiadas por el Host Remoto
El fichero ~/.ssh es el lugar por defecto donde se guardan las claves de OpenSSH. Las authorized_keys es el archivo en este directorio que tiene las claves públicas confiadas para acceder al servidor, siempre que el key authentication esté activado.
Usando Claves SSH para obtener una "Consola Mejor"
Durante CTFs, penetration testing y ejercicios de Red Teaming, las claves SSH son una manera excelente de mejorar una reverse shell, asumiendo que el inicio de sesión de usuarios ha sido activado. Date cuenta que www-data normalmente no permite esto pero usuarios normales y root funcionarán. Dejar una llave SSH en el archivo authorized_keys de una máquina puede ser una backdoor importante.
