24 enero 2023

Cómo usar Oathtool en Linux para implementar 2FA

Cómo podemos generar códigos de doble factor de autenticación desde la línea de comandos con oathtool, aparte de cifrar la key totp con gpg2 por motivos de seguridad.
Iba a titularlo diferente en realidad, pero era muy largo:
Algunos están desesperados por alcanzar la Seguridad del Inframundo en Sistemas, pero es poco probable que puedan escapar tan fácilmente de su triste Destino.
La Seguridad es un Estado Mental.

Este método viene bien en caso de no querer usar aplicaciones como Google Authenticator o Authy para generar códigos desde nuestros dispositivos.
Vas a ver desde cómo instalar oathtool hasta cómo configurar servicios como cuentas de Google, Twitter u otros para que acepten las claves generadas. También funciona con WSL.

La principal ventaja de este método es poder hacer backups del directorio y las keys. Las claves siempre están cifradas y protegidas por gpg2. Las aplicaciones móviles, por motivos de seguridad, no dejan hacer copias.

Mientras recordemos la contraseña, siempre podremos recuperar las claves en este caso. Si utilizamos alguna de las aplicaciones y perdemos el teléfono no podríamos acceder a las cuentas.
Yo no deseo usar Google Authenticator o la aplicación Authy que genera códigos de verificación de 2 pasos (2AF) en mi teléfono iOS/Android. ¿Hay alguna forma de que yo pueda producir códigos 2AF desde la línea de comandos de Linux para sitios populares como Gmail, Twitter, Facebook, Amazon y más?

La contraseña de un solo uso basada en el tiempo (Time-based One-time Password - TOTP) es un algoritmo informático que genera una contraseña de un solo uso (one-time password - OTP) utilizando aplicaciones CLI o GUI en su sistema. Las aplicaciones móviles generan códigos seguros de verificación de 2 pasos para proteger sus cuentas en línea de los delincuentes informáticos (los chicos malos). Obtenes una capa adicional de seguridad. Además de su contraseña, debe ingresar códigos 2AF para cada inicio de sesión. Esto explica cómo utilizar las OTP (contraseñas de un solo uso) de oathtool en Linux para proteger tu Gmail y otras cuentas en línea. En lugar de esperar mensajes de texto, obtene los códigos de verificación de forma gratuita desde el comando de Linux oathtool.

Cómo instalar la herramienta de línea de comandos de Linux oathtool oathtool es una utilería para generar y validar OTP y gpg2, es una herramienta de cifrado y firma OpenPGP para cifrar claves privadas utilizadas por oathtool. Escribi los comandos según tu distribución de Linux para instalar lo mismo.

Slackware Linux

root@lomaw:[~]# slpkg -s slack gnupg2

root@lomaw:[~]# slpkg -s sbo oath-toolkit


SUSE/OpenSUSE Linux

$ sudo zypper ref

$ sudo zypper in oath-toolkit gpg2


Debes usar una computadora dedicada separada (RPi) o un disco USB para almacenar sus archivos ~/.2fa/. Recorda tu modelo de amenaza. La idea es simple, tanto tu computadora portátil como las llaves ~/.2fa/ no deben verse comprometidas al mismo tiempo. Por lo tanto, se recomiendan dos dispositivos separados.

Verificación de 2 pasos en Linux (2AF) usando oathtool
La sintaxis para generar totp es la siguiente:

oathtool -b --totp 'private_key'

Por lo general, private_key solo se muestra una vez cuando habilita 2AF con servicios en línea como Google/Gmail, Twitter, Facebook, Amazon, PayPal, cuentas bancarias, etc. Debes mantener la clave privada en secreto y nunca compartirla con nadie. Aquí hay una sesión de muestra que crea código para mi cuenta de Twitter.

$ oathtool -b --totp 'N3V3R G0nn4 G1v3 Y0u Up'

Salidas de muestra:

944092

Cómo generar un código de autenticación de dos factores desde su CLI de Linux
Genera un nuevo par de claves para el cifrado si no tenes una clave gpg, ejecuta:

$ gpg2 --full-gen-key


A continuación, crea algunos directorios y scripts de ayuda:

$ mkdir ~/.2fa/

$ cd ~/.2fa/

Podes enumerar las claves GPG, incluida la identificación de usuario y la identificación de clave de GnuPG, ejecuta:

$ gpg --list-secret-keys --keyid-format LONG

Script de Shell auxiliar de script para cifrar el secreto totp (claves)
Crea un script de shell llamado encrypt.key.sh:

#!/bin/bash
# Purpose: Encrypt the totp secret stored in $dir/$service/.key file
# Author: Vivek Gite {https://www.cyberciti.biz/} under GPL v 2.x or above
# --------------------------------------------------------------------------
# Path to gpg2 binary
_gpg2="/usr/bin/gpg2"

## run: gpg --list-secret-keys --keyid-format LONG to get uid and kid ##
# GnuPG user id
uid="YOUR-EMAIL-ID"

# GnuPG key id
kid="YOUR-KEY"

# Directory that stores encrypted key for each service
dir="$HOME/.2fa"

# Now build CLI args
s="$1"
k="${dir}/${s}/.key"
kg="${k}.gpg"

# failsafe stuff
[ "$1" == "" ] && { echo "Usage: $0 service"; exit 1; }
[ ! -f "$k" ] && { echo "$0 - Error: $k file not found."; exit 2; }
[ -f "$kg" ] && { echo "$0 - Error: Encrypted file \"$kg\" exists."; exit 3; }

# Encrypt your service .key file
$_gpg2 -u "${kid}" -r "${uid}" --encrypt "$k" && rm -i "$k"



Script de Shell auxiliar de script para descifrar el secreto totp y generar código 2AF
Crea un script de shell llamado decrypt.key.sh:

#!/bin/bash
# Purpose: Display 2FA code on screen
# Author: Vivek Gite {https://www.cyberciti.biz/} under GPL v 2.x or above
# --------------------------------------------------------------------------
# Path to gpg2 binary
_gpg2="/usr/bin/gpg2"
_oathtool="/usr/bin/oathtool"

## run: gpg --list-secret-keys --keyid-format LONG to get uid and kid ##
# GnuPG user id
uid="YOUR-EMAIL-ID"

# GnuPG key id
kid="YOUR-KEY"

# Directory
dir="$HOME/.2fa"

# Build CLI arg
s="$1"
k="${dir}/${s}/.key"
kg="${k}.gpg"

# failsafe stuff
[ "$1" == "" ] && { echo "Usage: $0 service"; exit 1; }
[ ! -f "$kg" ] && { echo "Error: Encrypted file \"$kg\" not found."; exit 2; }

# Get totp secret for given service
totp=$($_gpg2 --quiet -u "${kid}" -r "${uid}" --decrypt "$kg")

# Generate 2FA totp code and display on screen
echo "Your code for $s is ..."
code=$($_oathtool -b --totp "$totp")
## Copy to clipboard too ##
## if xclip command found on Linux system ##
type -a xclip &>/dev/null
[ $? -eq 0 ] && { echo $code | xclip -sel clip; echo "*** Code copied to clipboard too ***"; }
echo "$code"

# Make sure we don't have .key file in plain text format ever #
[ -f "$k" ] && echo "Warning - Plain text key file \"$k\" found."



2AF usando oathtool en la línea de comandos de Linux para una cuenta de Gmail
Veamos un ejemplo completo para la cuenta de Google/Gmail. Para habilitar la visita e inicio de sesión de 2AF:

https://www.google.com/landing/2step/

Visita Verificación en dos pasos > Comenzar:


Es posible que debas verificar tu número de teléfono móvil. Una vez verificado, desplazate hacia abajo y eligi la aplicación Authenticator:


¿Qué tipo de telefono tenes? Elegi iPhone o Android ya que vamos a usar nuestra aplicación CLI y hace clic en Siguiente:


Asegurate de hacer clic en "NO SE PUEDE ESCANEAR" para ver la clave secreta totp y copiarla:



Cd en el directorio ~/.2fa/ y ejecuta los siguientes comandos:

cd ~/.2fa/
### Step 1. create service directory ###
### vivek@gmail.com also act as service name for encrypt.key.sh ###
mkdir vivek@gmail.com
### Step 2. Store totp secret key ###
echo -n 'hilp zs6i c5qu bx7z akiz q75e wk5z z66b' > ~/.2fa/vivek@gmail.com/.key


Cifra el archivo de clave secreta totp llamado ~/.2fa/vivek@gmail.com/.key con gpg y protejelo con contraseña por razones de seguridad y privacidad usando nuestro script de ayuda encrypt.key.sh:

### Step 3. Secure totp secret key for service named vivek@gmail.com ###
./encrypt.key.sh vivek@gmail.com




Finalmente hace clic en el botón Siguiente:


Es hora de crear tu primer código de 6 dígitos usando el comando oathtool. Sin embargo, automatizamos este proceso usando decrypt.key.sh un script de shell que descifra el secreto totp y genera el código 2FA de 6 dígitos. Simplemente ejecuta:

./decrypt.key.sh vivek@gmail.com

Debes escribir la frase de contraseña gpg para desbloquear la clave secreta para el servicio llamado vivek@gmail.com:


Finalmente, verás el código de 6 dígitos de la siguiente manera en la pantalla:


Dentro de los 30 segundos, tenes que escribir el código 330197 y hacer clic en el botón de verificación:


Y listo:

Cómo agregar otro servicio
La sintaxis es bastante simple:
Inicia sesión en un servicio en línea como Twitter, Facebook, cuenta bancaria y busca la aplicación Authenticator 2AF. Por ejemplo, configuremos la cuenta de Twitter 2AF usando la aplicación de línea de comandos de Linux.
Copia el secreto superior de la cuenta de Twitter.
Crea un nuevo directorio de servicios:

mkdir ~/.2fa/twitter.com/ 

Crea un nuevo archivo .key:

echo -n 'your-twitter-totp-secret-key' > ~/.2fa/twitter.com/.key

Genera un nuevo archivo cifrado con PGP por motivos de seguridad y privacidad:

~/.2fa/encrypt.key.sh twitter.com

Descifra el secreto totp y genera el código 2FA de 6 dígitos cuando necesites iniciar sesión en Twitter:

~/.2fa/decrypt.key.sh twitter.com

Podes repetir el proceso anterior para cualquier servicio que muestre el secreto totp junto con el código QR.

Adición de soporte de autocompletado de Bash para decrypt.key.sh
Edita tu archivo ~/.bash_profile o ~/.bash_aliases y agrega lo siguiente para tener la finalización automática de bash en Linux:

# Add path to your ~/.2fa/ dir
export PATH=$PATH:/home/vivek/.2fa/
_decrypt_key_sh(){
     local services # 2fa services name
    services=$(find "/home/vivek/.2fa/" -type d -printf "%f " | sed 's/.2fa\///')
     complete -W "$services" decrypt.key.sh
     complete -W "$services" ~/.2fa/decrypt.key.sh
}
complete -F _decrypt_key_sh decrypt.key.sh



Ahora podes ejecutarlo de la siguiente manera para obtener los nombres de los servicios:
$ decrypt.key.sh [tab] [tab]
# complete paypal service name for 2fa #
$ decrypt.key.sh pa[tab]

Conclusión
La principal ventaja de la línea de comandos de Linux es que podes hacer una copia de seguridad fácilmente de tu directorio y claves ~/.2fa/. Tus secretos/claves principales siempre están encriptados y protegidos con contraseña por gpg2. Las aplicaciones móviles como Google Authenticator (https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) generalmente no te permiten sincronizar o copiar secretos/claves por razones de seguridad. Entonces, si perdes el teléfono (o cambias de teléfono), no podrá iniciar sesión en la cuenta. Esta configuración es simple y fácil de respaldar/restaurar siempre y cuando recuerdes tu frase de contraseña gpg2. Les recomiendo encarecidamente que también habiliten el cifrado de disco completo (FDE) (https://vampii.blogspot.com/2012/07/instalando-slackware-en-un-lvm-cifrado.html). Este método o las aplicaciones basadas en teléfonos móviles no son 100 % seguras contra malware u otros problemas. Si es compatible, utiliza siempre claves de seguridad de hardware (U2F/claves físicas). Consulta la página del manual de oathtool para obtener más información acá: https://www.nongnu.org/oath-toolkit/man-oathtool.html

Fuente (en inglés):
https://www.cyberciti.biz/faq/use-oathtool-linux-command-line-for-2-step-verification-2fa/

Que te diviertas!

No hay comentarios:

Publicar un comentario