Table of Contents

Autenticación SSH de doble factor con Google Authenticator en Arch GNU/linux

El doble factor de autenticación es una medida de seguridad que solicita un código de acceso, además de nuestra password habitual, a la hora de acceder a un determinado servicio. Vendría a ser como la hoja de coordenadas que algunos bancos emiten para que sus clientes utilicen banca online. Habitualmente los códigos son generados mediante un programa en el teléfono móvil del usuario.

A nivel técnico, la autenticación de doble factor estándar, usa una llave / token / hash que queda instalado en el servidor y de la cual se derivan después esos códigos de verificación que debe introducir el usuario. Las únicas partes que pueden derivar esos códigos son las que tengan conocimiento de esa llave. La llave (se le puede llamar de mil maneras, llave, token, hash, código,..) es generada a la hora de instalar el software de doble autenticación en el servidor y posteriormente también instalada en el/los dispositivo/s móvil/es (de forma escrita o mediante un código QR).

Lo explicado en esta guía sobre es perfectamente aplicable a cualquier distribución de GNU/Linux, no solo a Arch GNU/Linux.

Estándares de doble factor de autenticación: HOTP y TOTP.

Instalar libpam-google-authenticator (Arch).

yaourt -S libpam-google-authenticator

Editar modulo PAM del servidor SSH: /etc/pam.d/sshd (Se deben agregar las lineas al principio).

#%PAM-1.0
#auth     required  pam_securetty.so     #disable remote root
###### Autenticacion de doble factor SSH (google authenticator)
auth            required        pam_google_authenticator.so
auth            required        pam_unix.so
auth            required        pam_env.so
###### 
auth      include   system-remote-login
account   include   system-remote-login
password  include   system-remote-login
session   include   system-remote-login

Editar la configuración del servidor SSHD (/etc/ssh/sshd_config) para que se pueda utilizar el doble factor.

# ChallengeResponseAuthentication no
ChallengeResponseAuthentication yes

Generar la clave para google-authenticator en la cuenta del usuario que se desea acceso mediante doble factor. Se mostrará un código QR para facilitar la configuración del Token.

google-authenticator
 
Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/superman@cacotas.com%3Fsecret%3XBUIMTJF7QXH2TEGC
 
[CODIGO QR]
 
Your new secret key is: XBUIMTJF7QXH2TEGC
Your verification code is 126102
Your emergency scratch codes are:
  91190032
  19049720
  45080968
  77125674
  15290405
 
Do you want me to update your "/home/XXXX/.google_authenticator" file (y/n) y
 
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) y
 
By default, tokens are good for 30 seconds and 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. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
 
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) n

Bases de HTOP y TOTP.

  1. Counter-based (HOTP) verification: El token de acceso es válido hasta que se genere el siguiente.
  2. Time-based (TOTP) verification: El token de acceso es válido solo un determinado tiempo

Recomendaciones.

Escanear el código QR con FreeOTP o bien introducir manualmente el “secret key” con FreeOTP u otra aplicación que siga los estándares. A partir de este momento se pueden generar ya desde el móvil los token de acceso que nos solicitará el servicio sshd al querer abrir una sesión SSH.

Reiniciar o recargar el servicio sshd y probar su funcionamiento.

systemctl reload sshd
ssh superman@cacotas.com
Verification code: 
Password: 
Last login: Tue Apr 14 23:51:13 2010 from ::1

Usar la misma clave para el doble factor en múltiples servidores

Si se tiene configurado un servidor sshd con doble factor y no se desea tener que utilizar otros tokens en otras implementaciones, se puede utilizar fácilmente el mismo token en múltiples cuentas / servidores copiando $HOME/.google_authenticator.

Acceso mediante llaves SSH y doble factor

Actualmente no se puede tener el acceso configurado mediante llaves SSH y que además se solicite el código de verificación de doble factor. Si se quiere tener acceso mediante llave ssh y cuando no se disponga de la misma, utilizar el doble factor, se debe configurar de esta manera el servidor sshd (/etc/ssh/sshd_config).

ChallengeResponseAuthentication yes
AuthenticationMethods publickey keyboard-interactive:pam

Instalar Google Authenticator en la Raspberry (ARM)

Descargar código fuente: https://github.com/google/google-authenticator/

Compilar e instalar google-authenticator

unzip google-authenticator-master.zip 
cd google-authenticator-master
cd libpam/
./bootstrap.sh
./configure --prefix=/usr
make
make install