Cómo generar y usar llaves SSH Fido2 de forma segura con tu Onlykey o Yubikey

yubikey onlykey fido2

Aclaración: Este es un blog sobre software para tiendas físicas, pero he querido publicar este artículo no solo para mostrar cuanto cuidamos la seguridad en catinfog, sino también para devolver a la comunidad de internet algo de lo mucho que nos ha dado.

Hasta hace poco era una tradición entre los usarios de llaves hardware usar gpg para conectarse de forma segura por ssh con sus servidores. Solo el que ha usado gpg-agent o similar sabe la cantidad de fallos que da y lo engorroso que era de configurar.

Ahora con Fido2 todo es extremadamente sencillo y seguro. Podemos usar una llave ssh con el agente por defecto de linux, windows o mac. Se pueden generar llaves con un solo comando, descargarlas de tu llave usb con otro comando en cualquier ordenador por inseguro que sea y conectarnos con nuestro servidor sin peligro de robo de llaves.

Las llaves ssh Fido2 puedes usarlas para lo mismo que unas tradicionales: Conectar con github o con servidores, etc…

Las únicas condiciónes para llevar a cabo este tutorial son:

  • Que tanto tu ordenador como tu servidor tenga una versión openssh 8.3 como poco.
  • Que dispongas de una llave de hardware como Onlykey o Yubikey.
  • Un entorno seguro podría ser tu ordenador desconectado de internet. Pero si lo quieres hacer perfecto necesitas un airgap con Tails. Para ello necesitas:
    • Un airgap (un ordenador que no tenga conexión a internet o bluetooth, también es normal quitarle o desconectarle el disco duro, y si nos ponemos en plan paranoicos podemos usar un Thinkpad x230 con libreboot.)
    • Un pendrive con Tails cargado. Ya sabes, descarga la iso desde aquí, conecta un pendrive nuevo y con balena etcher carga la ido en el pendrive.

Índice

Resumen

Este artículo es una guía paso a paso, pero si ya sabes usar tu Onlykey o tu Yubikey y solo necesitas los comandos esenciales, aquí los tienes.

Este comando genera y mete dentro de tu Onlykey o Yubikey una llave fido2:

ssh-keygen -t ed25519-sk -O resident -O application=ssh:test2 -f ~/.ssh/rsa_id_test2 -P ""

Este comando descarga las llaves de tu Onlykey o Yubikey en la carpeta .ssh

cd ~/.ssh && ssh-keygen -K

Configuración necesaria de tu llave hardware usb

Configuración necesaria de tu Onlykey

La llave debe tener los 2 pin generales y el pin de fido. Pero den configurarse en un entorno seguro.

  • Si ya has usado onlykey pero quieres empezar de nuevo, conecta tu onlykey a un ordenador cualquiera y pulsa 10 veces un pin erróneo.
  • Arranca Tails en el ordenador airgap, abre un bloc de notas, conecta la onlykey al puerto usb y pulsa la tecla 3 (de onlykey) durante 3 segundos o mas. Suelta la tecla y verás como se escribe un texto que te invita a crear 3 pin: el del primer perfil, el del seguno perfil y un pin para resetear de fábrica la onlykey.
  • El primer pin es el del primero de los 2 perfiles que puedes tener. Escribe 2 veces el pin.
  • El segundo pin es el del segundo perfil. Escribe 2 veces el pin.
  • Por último te pide que escribas un pin para restaurar de fábrica la onlykey.
  • La Onlykey se iluminará con un verde fijo.
Onlykey desbloquear luz verde
  • Desconecta la llave y ve a un ordenador con tu ubuntu.
  • El pin de fido lo tienes que configurar en un ubuntu y no en tails porque hay que usar una aplicación que no está en Tails de forma nativa.
  • Abre un terminal e instala onlykey-cli
sudo apt update -y && sudo apt upgrade sudo apt install python3-pip python3-tk libusb-1.0-0-dev libudev-dev
pip3 install onlykey 
wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules 
sudo cp 49-onlykey.rules /etc/udev/rules.d/ 
#Este último comando hay que correrlo siendo usuario root. 
sudo su sudo udevadm control --reload-rules && udevadm trigger
  • Desconecta el ordenador de internet.
  • Conecta la Onlykey en el tu ordenador. Pulsa el pin del primer perfil. Si lo has hecho bien se iluminará el led verde de forma continua.
  • Escribe en tu terminal este comando. Si se ilumna un instante de color azul, todo va bien.
    En caso contrario desconecta la onlykey, vuelve a conectarla, pulsa el pin y vuelve a escribir de nuevo el comando.
onlykey-cli wink
  • Escribe este comando en el terminal. Cuando te lo solicite escribe con el teclado de tu ordenador el pin que escojas para las claves fido2.
onlykey-cli idletimeout 0 
onlykey-cli set-pin
  • Cierra el terminal, desconecta la onlykey.

Configuración necesaria de tu Yubikey

Si dispones de una Yubikey, el proceso de configuración inicial sería el siguiente:

  • Instala el programa ykman y alguna utilidad necesaria
sudo apt-add-repository ppa:yubico/stable
sudo apt update
sudo apt install scdaemon yubikey-manager libpam-yubico libpam-u2f libu2f-udev
  • Cambia el pin a la aplicación Fido
ykman fido access change-pin

Cómo generar llaves Fido2 y meterlas en la llave de hardware

  • Ve a un ordenador airgap con Tails.
  • Conecta la Llave de hardware. En el caso de Yubikey solo conéctala, en el caso de Onlykey conéctala y pulsa el pin. Se iluminará de verde.
  • Abre un terminal y escribe este comando. Como ves he llamado a la llave test2 y la estoy guardando en la carpeta .ssh con el nombre rsa_id_test2. Eso lo puedes cambiar a tu gusto. -P «» quiere decir que no quieres indicar una passphrasse, así que si lo borras te pedirá escribir un passphrasse. En el caso de Yubikey, puedes añadir al comando «-O verify-required» (Si lo añades a Onlykey te dará un error cuando uses la llave).
ssh-keygen -t ed25519-sk -O resident -O application=ssh:test2 -f ~/.ssh/rsa_id_test2 -P "" 

Al correr el comando en la Onlykey se iluminará de color azul. Debes pulsar cualquier tecla de tu onlykey.

onlykey fido2 led azul

Al correr el comando en la Yubikey, se iluminará el led y debes pulsarla.

yubikey fido2 led

Éxito. La llave se ha guardado en tu llave de hardware.

Desconecta la llave de hardware y ya puedes ir a tu ordenador habitual con ubuntu.

Cómo ver y borrar las llaves Fido2

Cómo ver y borrar las llaves Fido2 de la Onlykey

  • Conecta la llave y pulsa tu pin. Se iluminará de verde.
  • Abre un terminal y escribe. Verás todas las llaves que tiene dentro tu onlykey. Caben 12 llaves por perfil.
onlykey-cli credential ls
  • Para borrar cualquiera de las llaves tienes que correr este comando poniendo la id de la llave que quieres borrar.
onlykey-cli credential rm eu7LPI9SDG899DF8GD98FGDG9D8GSUSKFJSHDF99S0FUSFRJKSFSKnBL60+Yx+6hxSUYS1uxX9+AA==

Cómo ver y borrar las llaves Fido2 de la Yubikey

Puedo ver el listado de llaves fido en la yubikey así

ykman fido credentials list

Puedes eliminar llaves fido así. sj1 sería en nombre de la llave a borrar, y puedes verlo si listas las llaves:

ykman fido credentials list
ykman fido credentials delete -f sj1

Cómo descargar las llaves SSH de tu llave de hardware en cualquier ordenador

La llave de hardware contiene las llaves, pero podemos descargarnos una clave pública y una privada (no es la llave completa, solo una porción que hace referencia a la llave privada que contiene la llave de harware, y por lo tanto no pasa nada si la exponemos).

  • Conecta la Onlykey o Yubikey a tu ordenador. En el caso de la Onlykey pulsa el pin para desbloquearla y se iluminará de verde.
  • Corre este comando y todas las llaves Fido2 se descargarán en tu ordenador.
cd ~/.ssh && ssh-keygen -K
  • Puedes ver las llaves publica y privada (parcial) en ~/.ssh
ls ~/.ssh
  • Lee tu copia tu llave pública
cat ~/.ssh/rsa_id_test2.pub

Ahora puedes llevar tu clave pública a tu servidor editando ~/.ssh/authorized_keys y pegando la llave pública en una nueva línea

nano ~/.ssh/authorized_keys

Cómo conectar por SSH con tu servidor con la llave Fido2

En realidad es igual que con cualquier otra llave ssh pero cuando conectes te pedirá que toques la llave de hardware para verificar «que estás ahí». De esta forma un hacker no podría robarte las llaves y usarlas, puesto que necesita no solo la otra parte de la llave privada y que no se puede sacar de la llave de hardware, sino que también tendría que venir y pulsarla físicamente. El comando de conexión es como suele hacere siempre

ssh -i ~/.ssh/rsa_id_test2 user@ip-del-servidor

La Onlykey se iluminará de azul y al tocarla conectarás con el servidor. Así de fácil.

onlykey fido2 led azul


La Yubikey se iluminará y debes tocarla

yubikey fido2 led

También puedes usar un alias editando ~/.ssh/config. Pero en este caso, para que funcione perfecto tienes que añadir un par de líneas de configuración.

## Configuraciones SSH
StrictHostKeyChecking no
XAuthLocation /opt/X11/bin/xauth
ForwardAgent yes

Host *
IdentitiesOnly=yes
PreferredAuthentications=publickey


## Servidor 1
Host miservidor
Hostname 73.47.149.280
User user
IdentityFile ~/.ssh/rsa_id_test2

Ahora ya puedes conectarte de manera más humana

ssh miservidor

Cómo conectar con Github por SSH con Fido2

Fido2 también se puede usar para conectar con github.

Ve a github.com e inicia sesión. En settings y en «SSH and GPG keys» añade una nueva llave. Pega la llave pública y guarda. Para ver tu llave pública puedes correr un comando como este

cat ~/.ssh/rsa_id_test2.pub

Ahora puedes crear un alias para conectar de forma más «humana»

nano ~/.ssh/config

Escribe el alias

############################
Github
############################
Host miusuariodegithub
HostName github.com
IdentityFile ~/.ssh/rsa_id_test2

Ahora ya puedes conectar por ssh con github El comando tendría esta estructura: git@alias: Al correr el comando me pide que toque físicamente la llave de hardware

git clone git@miusuariodegithub:miusuariodegithub/configtpv.git /home/miuser/Desktop/


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *