Authentification passwordless sur Kali Linux avec FIDO U2F et la yubikey 5
I. Introduction
Cela fait plusieurs années que j’utilise une yubikey pour m’authentifier sur mes PC personnels sous GNU/Linux avec la méthode “Challenge-Response” propre à yubico reposant sur HMAC-SHA1.
Sur ma machine actuelle tournant sur Kali Linux, j’ai décidé de mettre en place une authentification “passwordless” utilisant la norme ouverte FIDO U2F. J’ai recherché si une implémentation de FIDO 2 existait pour PAM. À priori, c’est dans les cartons, mais cela reste encore un projet en cours de développement.
II. U2F et PAM
Comment fonctionne, dans les grands principes, l’authentification U2F avec la yubikey sur le système GNU/Linux ?
-
Grâce à la commande pamu2fcfg, une paire de clés publique/privée est générée. La clé publique (associée à un utilisateur précis) sera publiée dans un fichier de configuration présent dans le répertoire personnel de l’utilisateur (/home/bilbo/.config/Yubico/u2f_keys) sur le système GNU/Linux. La clé privée (associée au même utilisateur) sera conservée sur la clé de sécurité physique USB.
-
Le système d’exploitation envoie un challenge concernant l’utilisateur qui souhaite s’authentifier à la clé de sécurité matérielle via USB.
-
La clé de sécurité signe ce challenge à l’aide de la clé privée qu’elle possède.
-
Le système d’exploitation va alors vérifier le challenge signé à l’aide de la clé publique qui a été associée précédemment à l’utilisateur concerné (l’OS assurera également d’autres contrôles permettant d’éviter les attaques MITM ou par rejeu).
-
L’utilisateur concerné peut ensuite finaliser l’authentification U2F en appuyant sur la touche prévue à cet effet sur la clé de sécurité physique.
II. Mise en oeuvre
Installer les paquets permettant à PAM de prendre en compte l’authentification U2F mais également l’outil de configuration lié à cette norme.
Insérer la yubikey et vérifier si celle-ci est bien compatible U2F (il n’y a normalement aucun problème).
Générer un fichier de configuration pour l’utilisateur concerné par l’authentification “passwordless”
Modifier le fichier de configuration PAM lié au gestionnaire de sessions de la distribution GNU/Linux utilisée (ici lightdm). La ligne importante à ajouter est : auth sufficient pam_u2f.so. Elle se place en amont de la ligne concernant l’authentification par mot de passe.
L’utilisation de la méthode sufficient permet de dire que ce type d’authentification (ici U2F) n’est pas obligatoire et qu’en cas d’absence ou d’échec lié à U2F, il sera tout de même possible d’utiliser un mot de passe traditionnel.
Il suffit ensuite de fermer la session et de se réauthentifier. Entrer l’identifiant, insérer la yubikey, appuyer sur le touche “y” et enjoy. :D
III. Conclusion
L’authentification U2F avec une yubikey et PAM est relativement triviale à mettre en place. Si vous souhaitez l’étendre à l’usage de sudo par exemple, il faudra ajouter la même ligne spécifique dans le fichier de configuration PAM correspondant (/etc/pam.d/sudo).
En termes de robustesse, Challenge-Response et U2F se valent mais FIDO U2F a l’avantage d’être une norme ouverte et un standard compatible avec n’importe quel type de clé de sécurité matérielle quand l’authentification “Challenge-Response” reste spécifique à la yubikey.
FIDO 2 étant le remplaçant de U2F, j’attends avec impatience l’intégration de cette norme au niveau du service d’authentification PAM de façon stable.
IV. Sources
https://wiki.debian.org/Security/U2F