domingo, 27 de febrero de 2022

2FA, TOTP, Generar código de autenticación de segundo factor desde el pc con Debian

Hoy en día, todas las tiendas, web privadas y muchas aplicaciones (gmail, facebook, telegram, etc) usan 2FA (two-Factor Authentication o Segundo Factor de Autenticación). Actualmente no viene activada por defecto y es el propio usuario quien voluntariamente añade esta capa de protección adicional. 

 

Por defecto, sin 2FA activado

 

 

Con 2FA activado


- 2FA (two-Factor Authentication o Segundo Factor de Autenticación o verificación en dos pasos), es un método que confirma que un usuario es quien dice ser, utilizando algo que conocen (nombre de usuario y contraseña) y un Segundo Factor de Autenticación (TOTP) que no conocen.

- TOTP (Time-based One-Time Password o contraseña basada en el tiempo) es una contraseña que usa un algoritmo llamado OTP (One-Time Password o Contraseña de un solo uso) que genera un código numérico aleatorio, que utiliza la hora actual como única fuente, es de un solo uso y solo es valido durante un periodo de tiempo desde el momento en el que se genera dicho código. El código lo genera un programa, y puede ser enviado al usuario en un sms, o usar un programa en el teléfono móvil (smartphone) o en el pc. Si el código es generado y enviado por sms, normalmente tiene una validez de 5 minutos desde que se generó el código, y si es desde una aplicación de teléfono inteligente (smartphone) o desde nuestro pc, normalmente tiene una validez de 30 segundos desde que se generó el código.

Algunas aplicaciones TOTP para nuestro teléfono inteligente (smartphone):

- Google Authenticator
- FreeOTP
- FreeOTP+
- Aegis Authenticator Free
- andOTP
- mOTP
- OneTimePass
- KeyPass

Algunas aplicaciones TOTP para nuestro PC:

- OTPClient
- NitrokeyAuthenticator
- Gnome Authenticator
- oathtool
- glewlwyd
- otpclient-cli


Que pasa cuando pierdes el móvil o se te avería o te lo roban

Esto es un gran problema. En condiciones normales, si no tienes una copia de seguridad no podrás acceder a dicha cuenta, ya no puedes usar el 2FA (two-Factor Authentication o Segundo Factor de Autenticación o verificación en dos pasos). Pero en este manual vamos a explicarte como tener una copia en tu ordenador de casa, en tu portátil o sobremesa, por si fallase el primero. En este manual explico cómo obtener la clave secreta 2FA en nuestro ordenador con Debian GNU/Linux, para luego generar el código OTP


 

1- Instalamos los programas que vamos a necesitar

Como siempre hacemos en este blog y con la ayuda del programa synaptic, instalamos los siguientes programas: zbar-tools, oathtool

# apt install zbar-tools oathtool

 





2- Obtener la Clave Secreta de tu cuenta

La autenticación 2FA utiliza el algoritmo TOTP. Este algoritmo usa un código alfanumérico (único y secreto) para cada cuenta, y este código se usará en la segunda autenticación. Por tanto necesitamos obtener ese código secreto para usarlo con nuestra aplicación de Linux.

Generalmente las cuentas de usuario te dan el código alfanumérico. También lo insertan dentro de un código QR que deberemos escanear con nuestro teléfono móvil para obtenerlo, y que a su vez el solo se copia y se inserta en el programa.

 

Como podemos observar, nos da todos los datos necesarios para introducirlo manualmente en el programa FreeOTP (o cualquier otro programa) que nos generará el código de 6 digitos.

 

En este ejemplo es:

Cuenta: usuariodebian@192.168.1.10

Clave o Código: VLVRD43CKGNWTMF7

 

Ejemplo en la imagen inferior.

 



Con la cámara de fotos del teléfono móvil es muy sencillo scanear y leer el código QR. En Linux deberemos usar un programa que escanee el código QR usando la webcam, o un programa al que le pasaremos un fichero de imagen en formato .png que tenga una captura de pantalla con el código QR. No es necesario recortar el código QR de la captura de pantalla, aunque la captura de pantalla sea al 100% de la pantalla y el código QR sea muy pequeño, el programa lo va a encontrar y va a escanear el código QR sin problemas.

En este manual vamos a usar el programa de linea de comando llamado: zbarimg


3- vamos a buscar el código secreto dentro de la captura de pantalla que contiene el código QR.


Lo hacemos como usuario normal, usaremos el siguiente comando: zbarimg seguido del nombre del fichero que contiene la captura de pantalla, (en este manual se llama: 1-captura_codigo_qr.png

 

A continuación vemos el fichero que contine el código QR, llamado: 1-captura_codigo_qr.png

 


  

OBSERVACIÓN: El código secreto que nos interesa va despues de la palabra secret=. En muchas ocasiones el código que nos interesa va a continuación de la palabra: secret= y puede contener espacios entre el código alfanumerico, y termina antes de &issuer=, aunque la estructura cambia un poco, el algoritmo no varia. Ejemplo: secret=KAZ0I52KWMLA12M34S 00MM11LÑD456K57X 789H2D1AAHRJD70YT9&issuer=UsuarioDebian


El comando es el siguiente, y tambien veremos lo que nos devuelve.


$ zbarimg 1-captura_codigo_qr.png
 

QR-Code:otpauth://totp/usuariodebian@192.168.1.10?secret=VLVRD43CKGNWTMF7
scanned 1 barcode symbols from 1 images in 0,04 seconds

El código secreto es la cadena de caracteres que va detrás de secret=VLVRD43CKGNWTMF7 

 
NOTA: Podemos seleccionar y lo guardamos en un lugar seguro el código numérico, también podemos guardar la imagen que contiene el código QR, para usarlo como copia de seguridad, para el caso en que se averie nuestro smartphone o nuestro pc.

 




 




4- Obtener el segundo código de autenticación

En este manual vamos a usar el programa de linea de comandos llamado: oathtool

Con este programa vamos a generar la contraseña OTP para usar en la autenticación en la tienda o web privada.

Lo hacemos como usuario normal, usaremos el siguiente comando: oathtool con los parametros: --top --base32 y por ultimo le ponemos el codigo secreto del paso anterior. (En este manual es: VLVRD43CKGNWTMF7) Si el código contiene espacios tenemos que encerrar el código entre comillas " "

Y nos devuelve el 2FA (segundo factor de autenticación): 123456. que por defecto es un código numérico de 6 digitos de un solo uso, y que es válido durante 30 segundos desde que se generó.

$ oathtool --base32 --totp VLVRD43CKGNWTMF7
123456


 

 

 
 


Ejemplo