Una de las formas de mejorar la seguridad de un sistema y que ha cobrado muchísima fuerza son los mecanismos MFA , Multi Factor Authentication. Consisten en que no sólo es necesario introducir correctamente nuestro usuario y contraseña, sino que además es necesario validar el inicio de sesión de manera adicional. Los códigos OTP , One Time Password , son bien conocidos, y proveedores como Google y Microsoft ofrecen aplicaciones como Google Authenticator y Microsoft Authenticator , que generarán un código numérico (nuestro segundo factor) que va a cambiar cada cierto tiempo que es configurable. Es decir, el código que nos permite el login en este momento, cambiará dentro de, por ejemplo 30 segundos inutilizándolo. Si alguien se hiciese con ese código, ya no podría usarlo aunque lo conociese.

Desde la parte del sistema operativo que queremos protejer, necesitamos utilizar las librerías PAM , Pluggable Authentication Modules , que complementarán los mecanismos de autenticación por defecto, y en nuestro caso nos permitirán exigir este segundo factor de protección.

2FA para SSH en Linux

Instalación de dependencias

En este caso, Linux-PAM es la librería que utilizaremos.

apt install libpam-google-authenticator

Configuración para el usuario

google-authenticator

Este comando inicia la configuración del segundo factor para el usuario con el que hemos inciado sesión.

Y respondemos a las preguntas que se nos presentan y que sirven para establecer el comportamiento del autenticador.

##### Do you want authentication tokens to be time-based (y/n)

PAM permite elegir códigos basados en secuencias o en tiempo. La segunda opción hace que el código entero cambie cada cierto tiempo. Las app autenticadoras están diseñadas para esta segunda opción.

Se nos presentará el código QR que habremos de escanear con la app , para obtener la cuenta de creación de OTP s que estaremos utilizando. Además se nos dará la opción alfanumérica en caso que tengamos algún problema con la cámara del móvil.

1

##### Enter code from app (-1 to skip):

##### Do you want me to update your "/root/.google_authenticator" file? (y/n)

Esto va a guardar las opciones de configuración del usuario para el segundo factor. Ni que decir tiene que es fundamental hacerlo.

##### Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)

Es una protección contra ataques de repetición. El código que se utilice una vez, ya no podrá reusarse por nadie más.

##### By default, a new token is generated every 30 seconds by the mobile app. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n)

Aquí por seguridad se recomienda responder que **no** , ya que limitará a 8 códigos válidos cada 4 minutos.

##### If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting? (y/n)

Si no disponemos de más protección contra fuerza bruta, se recomienda responder yes.

Configuración de SSH

Para el servicio, tenemos que establecer como requisito el uso de este módulo, de forma que se nos pregunte el OTP que nos proporciona la aplicación, y rechace los inicios de sesión que no se completen con el mismo.

Agregaremos la siguiente línea en la sección auth del fichero /etc/pam.d/sshd.

auth required pam_google_authenticator.so

Reinicio del servicio

2FA para SSH en FreeBSD

Instalación de sus dependencias

Para sistemas BSD , OpenPAM es nuestra librería.

pkg install pam_google_authenticator

Configuración del usuario

Esta sección es exactamente igual a la que hemos revisado para Linux. Configuramos el segundo factor para el usuario.

google-authenticator

2 3 4 5 6 7

Configuración del componente PAM en SSH

Igualmente, configuramos la autenticación de SSH para que establezca como obligatorio el segundo factor. Sobre el mismo fichero que en la sección de Linux , /etc/pam.d/sshd , misma línea de configuración.

auth required pam_google_authenticator.so

Reiniciamos el demonio SSHD.

Configuración de Google o Microsoft Authenticator

Esta sección es única para cualquier sistema en el que implementemos este control, y como depende exclusivamente del dispositivo móvil en que la instalemos, no se cubrirá en este post.

Solamente recalcar que necesitaremos inrtoducir el código proporcionado por la salida del comando google-authenticator, o la lectura del código QR que nos presenta (equivalente al código alfanumérico).

Inicio de sesión con SSH y 2FA

Si hemos realizado todos estos pasos correctamente, deberíamos ser preguntados por el OTP tras introducir la contraseña de nuestro usuario.