Seguridad

Refuerzo de la seguridad del servicio openSSH con las claves de cifrado SSH

La contraseña es un mecanismo débil: genere claves SSH, autorícelas en el servidor, desactive la contraseña y aplique las recomendaciones de la ANSSI.

· 3 min de lectura · nivel intermedio

La autenticación por contraseña se considera un mecanismo débil. Puede ser objeto de distintos tipos de ataque, como los de diccionario, de fuerza bruta o incluso de Man In The Middle, como hemos visto anteriormente.

Se recomienda encarecidamente configurar una autenticación más robusta cuando se configura el servicio SSH, mediante claves de cifrado o mediante doble factor (2FA).

Etapa 1: configuración de la autenticación por claves en el servicio SSH

Para empezar es necesario autorizar las claves SSH en el archivo de configuración:

sudo nano /etc/ssh/sshd_config

Habrá que buscar y añadir el valor yes a " PubkeyAuthentication ":

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Para que los cambios surtan efecto es necesario reiniciar SSH:

service ssh restart

Etapa 2: generación de las claves SSH en el cliente

En la máquina cliente vamos a tener que generar una clave pública y una clave privada para poder autenticarse en el servidor SSH:

ssh-keygen -b 256 -t ecdsa
Illustration 1 — Renforcement de la sécurité du service openSSH avec les clés de chiffrement SSH

El comando ssh-keygen ha generado dos claves:

  • Una clave privada en $home/.ssh/id_ecdsa, a la que solo usted debe tener acceso
  • Una clave pública en $home/.ssh/id_ecdsa.pub, que se puede compartir

Ahora vamos a autorizar explícitamente a la máquina cliente a acceder al servidor por SSH. Hay que añadir la clave pública (id_ecdsa.pub) en el archivo authorized_keys del directorio .ssh del usuario que se elija para conectarse (por ejemplo: /home/$user/.ssh).

El método más sencillo es utilizar el comando ssh-copy-id, pero no está disponible por defecto en Windows. Por lo tanto, utilizaremos los comandos siguientes en Windows, lo que copiará la clave en el archivo authorized_keys de su usuario linux (~/.ssh/authorized_keys), aunque este no exista previamente. Sin embargo, es fundamental que la carpeta .ssh ya esté creada. Puede crearla con mkdir si es necesario.

Copia de la clave pública del cliente Windows hacia el Linux:

type %userprofile%\.ssh\id_ecdsa.pub | ssh user@192.168.8.128 "cat >> .ssh/authorized_keys"

Para ir más lejos, es posible desactivar la autenticación por contraseña para conservar únicamente la de claves.

¡Atención! Si se desactiva la autenticación por contraseña, hay que asegurarse de que la autenticación por clave es operativa, so pena de no poder acceder en absoluto a la máquina remota.

En el archivo de configuración /etc/ssh/sshd_config hay que descomentar la directiva PasswordAuthentication y luego aplicar el parámetro no.

sudo nano /etc/ssh/sshd_config
PasswordAuthentication no

Una vez guardado el archivo, todavía habrá que reiniciar el servicio para que el cambio sea efectivo.

service ssh restart

Las indicaciones siguientes proceden de las recomendaciones publicadas por la ANSSI, la agencia francesa de ciberseguridad:

  1. Comprobar que las claves privadas de cifrado presentes en el directorio /etc/ssh/ pertenecen al usuario root, solo en lectura y escritura
  2. Asegurarse de que se utiliza efectivamente la versión 2 del protocolo SSH
  3. El servidor SSH debe escuchar en un puerto distinto del 22/TCP
  4. Comprobar que los permisos sobre los archivos son aplicados de manera estricta por SSH
  5. El acceso SSH por el usuario root debe estar prohibido
  6. Aplicar una separación de privilegios mediante un entorno aislado (sandbox)
  7. Prohibir el acceso remoto a las cuentas que no dispongan de contraseña
  8. Autorizar 3 intentos de conexión sucesivos en caso de error en la contraseña
  9. El servicio debe mostrar al usuario la información de la última conexión cuando este se conecta
  10. Autorizar únicamente a los usuarios destinados a conectarse al servidor.