Yubikey / Linux / SSH

La yubikey est une clef usb qui intègre une puce cryptographique. Elles est capable de:

  • stocker un mot de passe
  • générer des mots de passe à usage unique (OTP: One-time password)
  • générer des HMAC, pour s’authentifier par défi-réponse
Yubikey

Yubikey

En ce qui me concerne c’est la partie OTP avec SSH qui m’intéresse. Je veux mettre en place une authentification par mot de passe + Yubikey pour un compte, et que les autres comptes de la machine utilisent toujours mot de passe + clef ssh. Vous pouvez « personnaliser » le contenu / comportement de la yubikey avec yubikey-personalization et yubikey-personalization-gui présents dans quasiment toutes les distributions.

OTP c’est quoi?

Avec OTP  le mot de passe change à chaque génération en fonction de la clé privée présente sur le Yubikey et de la synchronisation temporelle entre client /serveur. Le mot de passe est composé d’une partie statique au début qui identifie la clef, et de la partie dynamique. Et utilisant le mode d’authentification classique (login + mot de passe) et OTP on met en place une authentification à deux facteurs (Two Factor Authentification). Le fait de saisir un login + un password + OTP rend quasiment impossible l’usurpation d’identité: il y a le savoir/secret avec le login /password et la possession d’un bien matériel pour s’authentifier.

Une authentification avec un OTP est insensible:

  • aux keyloggers ou à un œil indiscret
  • aux attaques par dictionnaire

Mise en place

La validation de l’OTP se fait à travers les serveurs de YubiCo, pensez à ouvrir votre firwall vers leurs serveurs.

Obtention d’une clef d’API

La première étape est d’obtenir une clef d’api pour votre machine. Pour cela rendez vous sur Yubico Get API Key, suivez les instructions pour obtenir une clef. Voici l’écran final:

YubiKey - Get API Key

YubiKey – Get API Key

Notez bien le « client ID » et la clef  sécrète.

Installation et configuration

Installation des logiciels

Deux paquets sont nécessaires pour pouvoir utiliser la Yubikey avec SSH (pour être exact avec PAM):

  • libpam-yubico: two-factor password and YubiKey OTP PAM module
  • libyubikey0: Yubikey OTP handling library runtime

Configuration PAM

Avant de commencer la configuration ouvrez un terminal sur la machine qui héberge le server SSH et gardez le ouvert. En effet si vous faites une erreur (ou si les infos que je vous donne sont moisies, vous les suivez à vos risques et périls), vous allez vous enfermer dehors.

Dans un autre terminal, on commence par créer un groupe d’utilisateur qui ne peut que s’authentifier qu’en utilisant login + mot de passe + Yubikey. Ensuite on ajoute à ce groupe l’utilisateur concerné.

sudo groupadd yubikey
sudo usermod -aG yubikey yubiuser

Ensuite il faut créer un fichier qui liste pour chaque compte utilisant la yubikey pour s’authentifier, l’identifiant de la clef. L’identifiant de la clef est les douze premiers caractères qui apparaissent quand vous pressez la clef pour générer un mot de passe. Pour les feignants:

  •  Yubico met à disposition cette interface Modehex Calculator (choisir OTP et pressez la Yubikey), l’identifiant apparaît dans le champ Modhex encoded
  • Cette ligne de shell vous donne l’information:
read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s:0:12}

Donc une fois que vous avez l’identifiant on peut créer le fichier /etc/yubikeys avec le format suivant

compte_linux:identifiant_yubikey:indentifiant_yubikey
yubiuser:XXXXXXXXXXXX:123456789012

Ce fichier permet de faire le lien entre le compte Linux, et les Yubikey autorisées à s’authentifier.

PAM

Maintenant la configuration de PAM. Éditer le fichier /etc/pam/sshd, en dessous de la ligne @include common-auth ajouter:


# Yubikey
auth [success=1 default=ignore] pam_succeed_if.so quiet user notingroup yubikey
auth required pam_yubico.so authfile=/etc/yubikeys id=XXXXX key=ZZZZZZZZZZZZZZZZZZZZZZZZZZZ= debug url=http://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s
auth required pam_unix.so try_first_pass

Dans le champ id, il faut mettre votre « clientId » et dans key la clef sécrète.

Rappelez vous d’ouvrir votre firewall vers yubico.com si vous voulez que cela fonctionne. Donc là on explique à PAM que les utilisateurs appartenant au groupe yubikey doivent s’authentifier en utilisant le login + pass + Yubikey. Et uniquement ceux appartenant à ce groupe. La directive debug est optionnelle, elle permet de suivre ce qui se passe dans le fichier /var/run/pam-debug.log

J’espère que vous avez toujours votre shell d’ouvert, c’est votre bouée de secours en cas de problème !

C’est l’heure d’essayer, normalement en effectuant un ssh vers la machine cible, avec un utilisateur dans le groupe yubikey vous devriez avoir à saisir: login + mot de passe + Yubikey.

A vous les connexions SSH depuis les environnements « hostiles ».