Implementar un segundo factor de autenticación 2FA en servicios SSH sin duda es una muy buena opción de seguridad no solo para servidores expuestos a internet sino para aquellos usuarios que pueden elevarse a un contexto privilegiado de sudo y servidores críticos en una red interna corporativa.
Con este mecanismo de autenticación en dos pasos se estaría reduciendo en gran medida la superficie de ataque de los vectores de entrada a estos sistemas por parte de un posible atacante.
Implementación 2FA en SSH (Google Authenticator)
Instalar el paquete del módulo PAM para 2FA libpam-google-authenticator de Google Authenticator, también se instalará el paquete libqrencode4 que permite generar códigos QR en la propia terminal.
sudo apt install libpam-google-authenticator -y
Configurar SSH para que haga uso de este módulo PAM. Añadir la siguiente línea en el fichero /etc/pam.d/sshd.
auth required pam_google_authenticator.so
Habilitar esta configuración el fichero de configuración del servicio de SSH /etc/ssh/sshd_config. Añadimos o modificamos si ya existe la siguiente política a un valor "yes".
ChallengeResponseAuthentication yes
Reiniciamos el servicio sshd para aplicar los cambios realizados en el servicio de SSH.
sudo systemctl restart sshd
Finalmente vinculamos la cuenta de usuario en la que queremos habilitar 2FA. Se nos mostrará un código QR el cual debemos vincular con nuestra App de doble factor, ya sea Google Authenticator u otra que utilicemos para generar códigos de un solo uso basado en tiempo TOTP.
google-authenticator
Se lanzará el asistente de configuración donde asociaremos la clave secreta con nuestra App de segundo factor. También se generarán "5 códigos de emergencia de un solo uso" los cuales los almacenaremos de forma segura en caso de perder el acceso a nuestra App de TOTP instalada en un dispositivo físico.
Figura 1: Creación de código QR - Asistente de vinculación para habilitar 2FA. |
Una vez finalizado el asistente de vinculación. Si nos intentamos autenticar en el servidor nos solicitará la contraseña de usuario y un código de verificación TOTP.
Figura 2: Verificación del uso de 2FA en la autenticación SSH al servidor. |
En este caso se ha vinculado con la App de Google Authenticator donde cada 30 segundos se generará un nuevo código TOTP.
Figura 3: Código TOTP en la App de Google Authenticator. |
Paranoid Mode 3FA: Combinar autenticación SSH Public Key + Password + TOTP
¿Qué pasa si previamente tenemos configurado una autenticación de clave pública en nuestro servicio de conexión SSH hacia el servidor y añadimos 2FA TOTP?
Si ya tenemos configurado un tipo de autenticación asimétrico de clave pública y añadimos un segundo factor bastado en TOTP a priori con esta configuración actual, no nos funcionará.
Si queremos combinar un tipo de factor TOTP junto con nuestra autenticación de clave pública en SSH debemos añadir la siguiente política en el fichero de configuración del servicio de SSH /etc/ssh/sshd_config.
AuthenticationMethods publickey,keyboard-interactive
Reiniciamos el servicio SSH para aplicar los cambios.
sudo systemctl restart sshd
De este modo cuando nos conectamos al servidor SSH no solo estaremos combinando SSH Public Key y TOTP sino que también debemos introducir la contraseña de usuario. Por lo que estaremos usando tres factores de autenticación (3FA) para acceder al servidor vía SSH.
- Autenticación con clave pública/privada.
- Autenticación password de la cuenta de usuario.
- Autenticación con código de verificación TOTP.
Figura 4: Verificación del uso de 3FA en la autenticación SSH al servidor. |
Podemos añadir el valor nullock a la siguiente directiva del módulo de PAM editando el fichero /etc/pam.d/sshd.
auth required pam_google_authenticator.so nullok
Saludos!
No hay comentarios
Publicar un comentario