Conexión SSH a Una máquina por Primera Vez

SSH utiliza cifrado de clave pública para autentificar la máquina remota y permitir a la máquina remota la autentificación del usuario.

El Fichero .ssh/known_hosts

En SSH1 y OpenSSH las claves de máquinas se mantienen en etc/ssh_knownhosts y en el directorio del usuario ~/.ssh/known_hosts. Es posible cambiar la ubicación de estos ficheros usando en el fichero de configuración ~/.ssh/config la opción UserKnownHostsFile.

Al establecer por primera vez una conexión con ssh o sftp se nos avisa de la posibilidad de que la máquina no sea quien aparenta:

nereida:~> sftp user@machine.ull.es
Connecting to machine.ull.es...
The authenticity of host 'machine.ull.es (193.312.112.190)' can't be established.
RSA key fingerprint is a4:1e:f1:35:0d:b1:6c:7d:5c:3e:86:ef:4c:17:8a:a9.
Are you sure you want to continue connecting (yes/no)? yes
Si respondemos yes la conexión continúa:
Warning: Permanently added 'machine.ull.es' (RSA) to the list of known hosts.
user@machine.ull.es's password:
sftp> bye

Algoritmo de Autentificación de las Máquinas

Esta precaución se toma por si el adversario subvierte el servidor de nombre para que machine.ull.es sea resuelta a su máquina. A continuación puede hacer un forward de la conexión solicitada a la verdadera máquina machine.ull.es. Este es un caso de man-in-the-middle-attack.

El cliente ssh mantiene en ~/.ssh/known_hosts una base de datos conteniendo las máquinas a las que el usuario se ha conectado. Cualquier nuevo hosts es añadido al fichero del usuario:

nereida:~> grep 'machine.ull.es' ~/.ssh/known_hosts
machine.ull.es ssh-rsa KEY.....

Borrando una Entrada de .ssh/known_hosts

Si la relación entre la IP de la máquina y su nombre cambian ssh nos avisa. Si confiamos en el cambio podemos borrar la entrada en el fichero ~/.ssh/known_hosts. De otro modo ssh se negará a efectuar la conexión. Podemos borrarla manualmente o con el comando:

casiano@cc116:~$ ssh-keygen -R rala
/home/casiano/.ssh/known_hosts updated.
Original contents retained as /home/casiano/.ssh/known_hosts.old

Hashing

Supongamos que el atacante ha descubierto nuestra clave y ha entrado en nuestro servidor: ahora puede hacer cat ~/.ssh/known_hosts y deducir que otros servidores solemos visitar. Es incluso probable que la clave sea la misma o que tengamos un sistema de autentificación sin passphrase.

Si se quiere proteger el fichero known_hosts se puede usar la opción -H de ssh-keygen :

casiano@cc116:~/.ssh$ ssh-keygen -H
/home/casiano/.ssh/known_hosts updated.
Original contents retained as /home/casiano/.ssh/known_hosts.old
WARNING: /home/casiano/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames

Este comando reemplaza los nombres de los servidores y las direcciones con representaciones hash. Estas versiones hash pueden ser usadas por ssh pero son ilegibles para un humano. Es posible usar un fichero con una combinacion de entradas hash y entradas legibles.

La opción HashKnownHosts permite en los ficheros de configuración permite indicarle a ssh que debe hacer hashing sobre los nombres y las direcciones en ~/.ssh/known_hosts. Esto no afecta a las ya existentens en el fichero.

Es posible asociar varios nombres/direcciones con la misma clave (o repetirlas):

foo1,foo,192.168.1.1,192.168.1.10 ssh-rsa AAAAB3Nsomething[...]
foo2,foo,192.168.1.2,192.168.1.10 ssh-rsa AAAAB3Nsomethingelse[...]

Búsqueda de Entradas Hash

Es posible encontrar las entradas en un fichero hash con la opción -F

casiano@cc116:~/.ssh$ ssh-keygen -F millo
# Host millo found: line 10 type RSA
|1|BXG98oZImAlC02AQMAmuDb0jadQ=...

Ejercicios con known_hosts

Ejercicio 84.2.1   Elimine una entrada en el fichero si existe e intente la conexión ¿que ocurre?

Ejercicio 84.2.2   Pase a modo hashed su fichero

Ejercicio 84.2.3   Busque por una entrada en el fichero hashed



Subsecciones
Casiano Rodriguez León 2015-01-07