Autenticación de dos factores para SSH

«Shell seguro» SSH es un protocolo de red para establecer una conexión segura entre hosts, normalmente a través del puerto 22 (que es mejor cambiar). Los clientes SSH y los servidores SSH están disponibles para la mayoría de los sistemas operativos. Dentro de SSH funciona prácticamente cualquier otro protocolo de red, es decir, se puede trabajar de forma remota en otra computadora, transmitir flujos de audio o video a través de un canal cifrado, etc. Además, a través de un proxy SOCKS en un host remoto, se puede conectar a otros hosts ya en nombre de ese host remoto.

La autenticación se realiza mediante contraseña, pero los desarrolladores y administradores de sistemas tradicionalmente utilizan claves SSH. El problema es que la clave secreta puede ser robada. Agregar una frase de contraseña protege teóricamente contra el robo de la clave secreta, pero en la práctica, al hacer forwarding y caching de las claves, éstas aún pueden usarse sin confirmación,. La autenticación de dos factores resuelve este problema.

Cómo implementar la autenticación de dos factores

Los desarrolladores de la empresa Honeycomb recientemente publicaron una guía detallada, sobre cómo implementar la infraestructura correspondiente en el cliente y en el servidor.

La guía asume que tienes un host básico, expuesto a Internet (bastión). Quieres conectarte a este host desde computadoras portátiles o de escritorio a través de Internet y acceder a todos los demás dispositivos que se encuentran detrás de él. La 2FA garantiza que un atacante no podrá hacer lo mismo, incluso si obtiene acceso a tu portátil, por ejemplo, instalando malware.

La primera opción es OTP.

OTP son contraseñas digitales de un solo uso que en este caso se utilizarán para la autenticación SSH junto con la clave. Los desarrolladores señalan que esta no es una opción ideal, porque un atacante podría levantar un bastión falso, interceptar tu OTP y usarlo. Pero es mejor que nada.

En este caso, del lado del servidor en la configuración de Chef se escriben las siguientes líneas:

  • metadata.rb
  • attributes/default.rb (de attributes.rb)
  • files/sshd
  • recipes/default.rb (copia de recipe.rb)
  • templates/default/users.oath.erb

Del lado del cliente se instala cualquier aplicación OTP: Google Authenticator, Authy, Duo, Lastpass, se instala brew install oath-toolkit o apt install oathtool openssl, luego se genera una cadena aleatoria base16 (clave). Se convierte al formato Base32 que utilizan los autenticadores móviles y se importa directamente en la aplicación.

Al final, puedes conectarte al bastión y asegurarte de que ahora requiere no solo una frase de contraseña, sino también un código OTP para la autenticación:

➜ ssh -A bastion
Ingrese la frase de contraseña para la clave '[snip]': 
Contraseña de un solo uso (OATH) para '[user]': 
Bienvenido a Ubuntu 18.04.1 LTS...

La segunda opción es la autenticación hardware

En este caso, no se requiere que el usuario ingrese el código OTP cada vez, ya que el segundo factor se convierte en un dispositivo físico o biometría.

Aquí la configuración de Chef es un poco más compleja, y la configuración de los clientes depende del sistema operativo. Sin embargo, después de realizar todas las acciones, los clientes en MacOS pueden confirmar la autenticación en SSH con la frase de contraseña y al aplicar el dedo al sensor (el segundo factor).

Los propietarios de iOS y Android confirman el inicio de sesión presionando un botón en el smartphone. Esta es una tecnología especial de Krypt.co, que es incluso más segura que OTP.

En Linux/ChromeOS hay una opción para trabajar con los tokens USB YubiKey. Por supuesto, un atacante puede robar tu token, pero aún así no sabe la frase de contraseña.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster