Más seguridad a SSH usando claves RSA

Colaborador: Hackbier

En esta ocasión vamos a explicar como configurar servidor y cliente SSH mediante intercambio de claves RSA.

Una conexión «normal» usando el protocolo SSH es de por sí segura (más segura que una conexión no cifrada, como telnet) pero presenta, a grosso modo, dos inconvenientes:

1. La contraseña, aún yendo cifrada, viaja por la red siempre que nos conectamos. Cosa que puede ser peligrosa en el caso que haya alguien capturando el tráfico de nuestra red (sniffing) y fuese capaz de generar fuerza bruta o descifrar nuestra contraseña (algo bastante complicado pero no imposible).

2. En el caso de manejar numerosos servidores y conexiones SSH puede ser muy tedioso tener que estar metiendo contraseñas, almacenandolas, etc. Este método agregaría un plus de comodidad.

Esto se soluciona con claves RSA, que podemos resumirlo en:

  • El cliente envía información sobre su clave pública al servidor.
  • El servidor busca en su base de datos la clave pública del cliente y, cuando la encuentra, le manda al cliente un challenge (desafío), que contiene un número aleatorio generado y cifrado por el servidor usando la clave pública del cliente.
  • El cliente recibe el paquete cifrado, y usa su clave privada para descifrarlo y devolvérselo al servidor.
  • El servidor comprueba que el número devuelto es el que mandó cifrado, por lo tanto el usuario se a autenticado y se le permite la sesión.

Como véis en ningún momento se envían claves por Internet. Por supuesto, si alguien accede a nuestro equipo y nos roba la clave privada podría acceder a todos los equipos a los que tenemos conexión mediante éste método, por lo que es necesario protegerla, para ello generaremos una clave RSA protegida con clave (valga la redundancia).

El primer paso es acceder al fichero de configuración de sshd en el server (/etc/ssh/sshd_config). En este caso el servidor será un equipo Kali y el cliente Archlinux. Buscamos y descomentamos las líneas:

2016-09-29-185432_1920x1080_scrot

De forma que quede de forma similar a la anterior. Ojo al fichero tras %, que indica dónde guardaremos las claves RSA autorizadas. A continuación corroboramos que existe el directorio, en caso de no existir, lo creamos:

imagen2

Con esta simple configuración inicial, llega el momento de crear nuestra pareja de claves. Para ello nos disponemos en el cliente (nuestro Archlinux) y tecleamos el comando «ssh-keygen -t rsa», esto iniciará el breve asistente para la creación de la clave donde elegiremos el directorio donde almacenarlas (podéis tanto personalizarlo como dejarlo por defecto, como he hecho yo) y una posible contraseña (como dije anteriormente, algo importante para protegerla, pero opcional):

rsa

El siguiente paso es copiar la clave pública al servidor, para ello usaremos la herramienta SCP, que pertenece al paquete de SSH y permite copiar contenido usando el protocolo SSH.

seleccion_006
La hemos copiado, como podéis ver, en la carpeta temporal del servidor (/tmp).

seleccion_007
Con esto hemos terminado la confiruación tanto de cliente como de servidor, para poder usar claves RSA al conectarnos. Pero existe un problema, al conectarnos nos sigue pidiendo contraseña; no la contraseña de usuario, ya que SI usa las claves RSA, sino que nos pide la contraseña de la propia clave RSA ¿recordáis que le pusimos contraseña para protegerla?. Hemos añadido una mayor seguridad, pero uno de los inconvenientes que queríamos solventar era ahorrarnos tener que escribir una contraseña, y así vamos a terminar el post, claro.

Para evitar tener que poner la contraseña usaremos la utilidad ssh-agent, que se instala junto a SSH y se ejecuta automáticamente en cada inicio de sesión. Con el comando ssh-add añadiremos la clave para que esté vinculado a la sesión, de forma que SSH no te pedirá a tí la clave, sino que lo hará a SSH-Agent.

seleccion_008

Una vez hecho, podemos comprobar cómo ya no nos pide ningun tipo de contraseña, y el acceso al servidor es prácticamente instantáneo, además de más seguro:

seleccion_009

Para finalizar, un breve apunte: para añadir más seguridad al servidor, y evitar que puedan hacerle fuerza bruta, podemos deshabilitar del fichero sshd_config del servidor el acceso mediante password, quedando así:

seleccion_011

Ojo, haced esto si ninguno de los clientes lo requiera, sino no podrá entrar a no ser que utilice el sistema de parejas RSA o similar. Esto es todo, esperamos que os sirva y os esperamos en Follow the White Rabbit!