Cómo configurar la autenticación de dos factores para proteger SSH usando Authy

Captura

Durante el proceso de autenticación existen tres factores o técnicas para gestionar un acceso:

  • Empleando “algo que yo se” (something you know – SYK): como una contraseña, un PIN o un passcode.
  • Empleando “algo que yo tengo” (something you have -SYH): como una tarjeta, una llave, un teléfono móvil, un certificado digital o un token físico.
  • Empleando “algo que yo soy” (something you are – SYA): como una huella digital, la información del iris, de la retina, de la distribución de venas en las manos, reconocimiento facial, de voz, etc.

Por lo general, el más usado es la contraseña, al ser la más reconocida y más fácil de usar por los usuarios. En este modelo, solamente se está usando un solo factor (SYK) y por lo tanto el elemento de autenticación suele ser más susceptible a problemas (en el caso de la contraseña: captura de tráfico (sniffing), captura de teclas (keylogging), shoulder surfing, etc.)

Para minimizar el impacto potencial del compromiso de este elemento de autenticación, se debe emplear la combinación de dos o más factores, de tal forma que – adicional a la seguridad de autenticación – esta combinación nos provee un elemento clave en la seguridad de la información: El No Repudio, que garantiza que un usuario no pueda negar que ha sido él quien ha accedido con las credenciales provistas.

Siendo así, un criterio básico en seguridad de la información es el uso del doble factor de autenticación. Esto permite que si un factor de la autenticación es comprometido (una contraseña, por ejemplo), el segundo factor es requerido obligatoriamente para completar el acceso, por lo que el atacante no podrá ingresar al sistema si no tiene comprometidos los dos factores, lo cual incrementa la dificultad del ataque

En este árticulo se describirá de forma rápida un proceso para implementar autenticación de dos factores en un servicio SSH (Secure Shell) empleando contraseñas (SYK) y OTP (One-Time Passwords) en un dispositivo (teléfono móvil) que solamente tiene el usuario autorizado (SYH) a través de Authy.

Pasos para activar la autenticación de dos factores en SSH empleando Authy

1. Crear una cuenta en Authy: El primer paso es crear una cuenta en el portal de Authy. Al estar creada la cuenta se enviará un correo electrónico para asociarla y validarla.

Posteriormente, al crear la cuenta se requiere ingresar al portal de Desarrolladores y dar clic en el enlace “New Application“:

authy3

Rellenar los datos que se piden, en donde se vincula el uso de esta API a un número de teléfono y usuario en particular (los datos del paso 2):

authy6

Al finalizar la creación de la aplicación se desplegará una ventana con el código de la API que se empleará en pasos posteriores.

authy4

2. Instalar la aplicación de Authy en el teléfono móvil: Para implementar la autenticación de dos factores, se empleará un teléfono móvil, ya sea para obtener el código de autenticación (OTP) a través de una aplicación o vía SMS. Siendo así, se necesita instalar la aplicación de Authy en el teléfono móvil asociado con los datos del paso 1.

phones

3. Descargar el código e instalarlo en el servidor: En mi caso, instalaré Authy en la Raspberry Pi, aunque se puede instalar en cualquier distribución de GNU/Linux (Ubuntu, Debian, RedHat, Fedora Core y SuSE) o Unix:

root@raspberrypi ~ #curl -O 'https://raw.githubusercontent.com/authy/authy-ssh/master/authy-ssh'

Después de descargado el paquete, se procede con su instalación:

root@raspberrypi / # bash authy-ssh install /usr/local/bin
Copying authy-ssh to /usr/local/bin/authy-ssh...
Setting up permissions...
Enter the Authy API key: <API>
Default action when api.authy.com cannot be contacted:

  1. Disable two factor authentication until api.authy.com is back
  2. Don't allow logins until api.authy.com is back

type 1 or 2 to select the option: 1
Generating initial config on /usr/local/bin/authy-ssh.conf...
Adding 'ForceCommand /usr/local/bin/authy-ssh login' to /etc/ssh/sshd_config

    MAKE SURE YOU DO NOT MOVE/REMOVE /usr/local/bin/authy-ssh BEFORE UNINSTALLING AUTHY SSH

To enable two-factor authentication on your account type the following command:

   sudo /usr/local/bin/authy-ssh enable root <your-email> <your-numeric-country-code> <your-cellphone>
   Example: sudo authy-ssh enable root [email protected] 1 401-390-9987

To enable two-factor authentication on user account type:

   sudo /usr/local/bin/authy-ssh enable <local-username> <user-email> <user-cellphone-country-code> <user-cellphone>

To uninstall Authy SSH type:

   sudo /usr/local/bin/authy-ssh uninstall

      Restart the SSH server to apply changes

root@raspberrypi / #

Este script preguntará dos cosas:

  1. La API a ser usada, cuyo número debió haber sido generado en el paso 1.
  2. La acción en el caso que el servicio de Authy no pueda ser contactado. En este caso, la recomendación es emplear la opción 1 (fail open), en la cual se regresa a la autenticación con un único factor. Sin embargo, dependiendo de las necesidades y de la seguridad del servicio se puede analizar la opción 2 en la cual no se permiten autenticaciones hasta que el servicio pueda ser contactado (fail close).

Durante este proceso se modifica la directiva ForceCommand del fichero de configuración de SSH /etc/ssh/sshd_config, indicándole que cuando se requiera una autenticación se ejecute la subrutina de Authy:

root@raspberrypi / # more /etc/ssh/sshd_config | grep Force
ForceCommand /usr/local/bin/authy-ssh login

Para que los cambios sean aplicados, se requiere reiniciar el servicio de SSH:

root@raspberrypi / # service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

4. Configurar una cuenta para que use autenticación de dos factores: La autenticación de dos factores estará disponible en el sistema pero se requiere indicarle a Authy de forma explícita qué usuarios requerirán este control para su autenticación a través del siguiente comando:

root@raspberrypi / #/usr/local/bin/authy-ssh enable <cuenta> <email> <código de pais> <número de teléfono>

5. Probar que todo vaya bien: En este punto, desde la cuenta del usuario que se vinculó al servicio se ejecuta el comando:

usuario@raspberrypi ~ $ authy-ssh test
Authy Token (type 'sms' to request a SMS token): 9596428
Good job! You've securely logged in with Authy.

Se debe ingresar el código que aparece en la pantalla de la aplicación de Authy:

authy

Si todo sale bien se debería recibir el mensaje “Good job! You’ve securely logged in with Authy“. Si no, siempre se puede pedir un código de acceso mediante SMS, que será enviado al número de teléfono registrado.

5. Realizar una autenticación empleando el OTP de Authy: Finalmente, se ingresa vía SSH con la cuenta configurada para validar su funcionamiento:

login as: usuario
servers's password:
Authy Token (type 'sms' to request a SMS token): 3418012
Good job! You've securely logged in with Authy.
usuario@raspberrypi ~ $

En este vídeo se demuestra todo el proceso de instalación de la solución:

En caso de problemas…

Si ocurre algún problema, se puede proceder de la siguiente manera:

1. Editar el fichero “/usr/local/bin/authy-ssh.conf” que es en donde se encuentra la configuración de Authy. Aquí se encuentran los datos de los usuarios asociados y el código de la API.

root@raspberrypi /tmp # more /usr/local/bin/authy-ssh.conf
banner=Good job! You've securely logged in with Authy.
api_key=4A564gc69QN0QRFDshNibQ6kU0NEtf5
default_verify_action=disable
user=usuario:8713666

2. Desinstalar el servicio de Authy: Si definitivamente las cosas no van bien, se puede proceder con la desinstalación del servicio:

root@raspberrypi / #authy-ssh uninstall

Finalmente, reiniciar el servicio de SSH:

root@raspberrypi / # service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

Para más información, visitar este sitio.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.