Yubikey

Posted on ven. 09 août 2019 in security

Présentation

yubikey

Yubikey est l'un des dispositif d'authentification U2F (Universal Second Factor) les plus connus. Ce protocole est porté par l'alliance FIDO. Il se veut ouvert à tous. De nombreuses autres clés prenant en charger cette norme existe : Key-ID FIDO U2F, Keydo FIDO U2F...

Yubikey a l'avantage d'avoir de nombreuses documentation disponibles pour couvrir l'ensemble des usages possibles : PAM, KeePass, GPG...

Je vous propose un récapitulatif des différentes documentations que j'ai pu utilisé pour configurer la clé et les applications ou services.

Si vous souhaitez apporter un complément ou un nouvel usage, n'hésitez pas à me contacter.

Configuration

PAM

# https://developers.yubico.com/pam-u2f/
pacaur -S pam-2uf
pamu2fcfg > /etc/u2f_mappings
cat /etc/u2f_mappings

Il faut ensuite éditer le fichier /etc/pam.d/system-auth afin de rajouter l'u2f comme nouvelle méthode d'authentification PAM. Voilà la configuration par défaut sur Manjaro :

auth      required    pam_unix.so     try_first_pass nullok
auth      optional    pam_permit.so
auth      required    pam_env.so

En fonction de votre besoin, la seconde valeur peut prendre les valeur suivante :

  • sufficient : l'authentification est alors autorisé et l'ensemble des autres règles n'est pas interprété.
  • required : l'authentification est obligatoire et l'ensemble des autres règles est également interprété. Même si l'un des modules échoué, tant que l'ensemble n'est pas fini, l'authentification se poursuit.
  • requisite : idem que pour required mais l'utilisateur est avertit immédiatement de l'échec.
  • optional : l'échec ou le succès de ce module n'influe pas sur l'authentification.

Suivant votre choix pour sufficient, l'emplacement de la nouvelle ligne importe :

  • si elle est placée au dessus de pam_unix.so (la première ligne par défaut), la clé seule suffit mais le mot de passe est toujours possible si vous n'avez pas la clé.
  • si elle est placée au dessous, le mot de passe devra être saisi et la clé présente.

LUKS

LUKS (Linux Unified Key Setup) est une implémentation de chiffrement considérant comme le standard associé à Linux. Son implémentation de référence est cryptsetup avec dm-crypt pour le chiffrement de volumes (projet git). Lorsque vous choisissez de chiffrer votre disque lors de l'installation, LUKS est quasiment systématiquement utilisé.

Pour avoir l'état de votre partition :

sudo cryptsetup luksDump /dev/nvme0n1p2
# https://github.com/agherzan/yubikey-full-disk-encryption
pacaur -S yubikey-full-disk-encryption-git
vim /etc/ykfde.conf
sudo ykfde-enroll -d /dev/nvme0n1p2 -s 3
sudo cryptsetup luksOpen --test-passphrase /dev/nvme0n1p2 --key-slot=3 -v

Si la dernière commande vous renvoie Key slot 3 unlocked, votre slot est alors configuré correctement et vous devriez être en mesure de déchiffrer votre LUSK avec la passphrase et la clé.

GPG

L'avantage est d'avoir sa clé GPG toujours avec soi :). La clé ne sera plus protégée par mot de passe mais par le code pin qui sera défini sur la clé. Par défaut, le code admin est 12345678 et le code simple et 123456. Il est donc important de changer ces deux pin.

Les clés seront alors effacées depuis le trousseau GPG. Il faudra importer de nouveau la clé publique (et seulement publique) dans le trousseau pour que les clés privées ainsi transférées soient reconnues.

gpg --card-edit
admin
passwd
# PIN
1
# Admin bin
3
# Reset code
4
verify
quit

Génération des clés GPG

# 8 (RSA)
# E
# 4096bits
# None
# Your email
# Your passphare
gpg --expert --full-gen-key
gpg --expert --edit-key <longid>
gpg> addkey
# select S and E
gpg> addkey

Envoie sur la clé

gpg --card-edit --expert
gpg> toggle
gpg> keytocard
gpg> key 1
gpg> keytocard
gpg> save

SSH

Il est possible de configurer sa clé comme pour PAM sur le même principe. Il sera alors possible de se connecter en utilisant la clé comme on le ferait avec le système de clé publique/privée.

Il faut installer un paquet afin de prendre en charge cette nouvelle méthode d'authentification :

apt install libpam-yubico
touch /etc/ssh/authorized_yubikeys
# Get `YUBIKEY_ID` with `read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s:0:12}`
cat 'USER:YUBIKEY_ID' >> /etc/ssh/authorized_yubikeys

Cependant, il est nécessaire d'utiliser l'API de Yubico pour qu'elle fonctionne. Il n'est pas nécessaire de faire un compte. Une adresse mail et un token généré par la clé est demandé. Vous aurez alors un ID et la KEY correspondante.

/etc/pam.d/sshd

auth sufficient pam_yubico.so id=ID key=KEY authfile=/etc/ssh/authorized_yubikeys

Avec GPG

GPG comme SSH utilise le chiffrement RSA. Il est alors possible d'utiliser sa clé privée GPG comme clé SSH.

echo $SSH_AUTH_SOCK
> /run/user/1000/gnupg/S.gpg-agent.ssh
ssh-add -l
ssh-add -L | grep "cardno:000605553211" > ~/.ssh/id_rsa_yubikey.pub
cat ~/.ssh/id_rsa_yubikey.pub

Vous n'avez plus qu'à copier cette clé publique sur les serveurs que vous souhaitez utiliser avec votre Yubikey.

Si la clé n'est pas présente, elle vous sera alors demandée explicitement ainsi que le PIN.

Windows

La Yubikey 5 n'est actuellement pas pris en charge pleiment pas Windows. La configuration se faisait au travers de l'application Hello disponible sur le Store par Microsoft. La documentation est disponible ici

NOTE: Many customers have reached out to us asking why the YubiKey for Windows Hello app is not compatible with the YubiKey 5 Series and when the application will be updated to support the YubiKey 5 Series. The short answer is - it won't be. The YubiKey for Windows Hello app will no longer be receiving updates and will soon be removed from the Microsoft Store.