Yubikey : la petite clé qui assure (suite) – GeekParadize.Fr – Actualité High-Tech et Geek au Quotidien
Accueil » Yubikey : la petite clé qui assure (suite)
Dossiers

Yubikey : la petite clé qui assure (suite)

Sommaire :

Utilisation avancée

Dans cette partie, un peu plus technique, nous allons aborder la configuration d’une Yubikey et le montage d’un serveur de validation. Mais avant tout …

ATTENTION

La Yubikey est “write-only”. Ceci signifie que lors d’une opération de configuration, les réglages précédents sont irrémédiablement perdus. Notamment, si vous écrasez la configuration par défaut, votre clé ne pourra plus vous identifier auprès de Yubico.
Par ailleurs, si vous décidez de protéger la clé par un code d’accès, et que vous oubliez ce code, vous aurez gagné un joli bout de plastique très décoratif …

Ceci dit, passons aux choses sérieuses.

Configuration de la clé

Sous Linux, le seul outil disponible pour l’instant est en ligne de commande. Si ça vous fait peur, il y a des équivalent pour clicodrome Windows ou Mac OS. Choisissez ici celui qui vous convient le mieux 😉

Le dépôt de l’outil de configuration (ou personalization en anglais) est ici : https://github.com/Yubico/yubikey-personalization.git. Je ne reviens pas sur la procédure d’installation, elle est identique aux précédentes et détaillée sur le wiki du projet. D’ailleurs, si vous avez suivi la partie sur la configuration de PAM, vous l’avez déjà installé 😉

Une fois compilé, je vous engage vivement à jeter un oeil à l’aide en ligne :

<span class="text">ykpersonalize -h</span>

L’option la plus importante à mes yeux est -1 ou -2 : c’est ainsi que l’on choisit la configuration que l’on souhaite modifier. En effet, les Yubikeys version 2.0 et plus possèdent deux “emplacements” différents, contre un seul dans la première version. Par défaut sur une clé 2.0 par exemple, l’emplacement 1 est paramétré pour une identification OTP auprès des serveurs de Yubico, et l’emplacement 2 est vide.

Le paramétrage le plus fréquemment rencontré est d’assigner un mot de passe statique à la configuraion 2, mot de passe qui sera accessible par un contact long (≃ 2s). La manipulation est ici très simple :

[email protected]:~$ sudo ykpersonalize -2
Password:
Firmware version 2.0.2 Touch level 1792 Program sequence 6Passphrase to create AES key: crévindiou
Configuration data to be written to key configuration 2:fixed: m:
uid: h:000000000000
key: h:459b2b6c6f4c511d543919efbad3051a
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags: STATIC_TICKET|STRONG_PW1|STRONG_PW2|MAN_UPDATE
extended_flags:Commit? (y/n) [n]:

Il ne reste plus qu’à valider par un “y” pour sauvegarder la configuration.
Notez que vous n’êtes pas obligés de taper des bêtises (comme mon “crévindiou”) pour créer la clé AES. Le résultat sera ici un mot de passe statique du style :

<span class="text">è(IFejhdkkjnvrtbdeggeffvbknvbulg</span>

.

Note : Pourquoi sudo ? tout simplement parce que les permissions de /dev/bus/usb/xxx/yyy n’autorisent en général pas l’utilisateur lambda à écrire sur un port USB.

Il est également possible de créer une configuration “OTP Yubikey” similaire à la configuration par défaut. Je fais ici le choix d’utiliser l’emplacement 2, afin de conserver la configuration d’origine dans l’emplacement 1. Or, l’outil ykpersonalize considère par défaut que l’option -2 va de pair avec une configuration statique ; il faut donc désactiver les options liées au mot de passe statique pour écrire une configuration OTP dans l’emplacement 2 (d’où les 4 options -o-xxx). Si ce n’est pas clair, faites tourner “à vide” (sans écrire) ykpersonalize avec -1 et -2, et observez les différents config_flags. Ici, ça nous donne :

[email protected]:~/tmp/yubiserve$ sudo ykpersonalize -2 -o-static-ticket -o-strong-pw1 -o-strong-pw2  -o-man-update -ofixed=cccccccccccc
Firmware version 2.0.2 Touch level 1792 Program sequence 6Passphrase to create AES key:
Configuration data to be written to key configuration 2:fixed: m:cccccccccccc
uid: h:000000000000
key: h:8ebfe5cd3dad48f2c5008d686ea5b384
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags:
extended_flags:Commit? (y/n) [n]: y
[email protected]:~/tmp/yubiserve$

La configuration 2 de la clé est donc faite pour l’identité cccccccccccc et avec la clé AES 8ebfe5cd3dad48f2c5008d686ea5b384. Nous allons voir maintenant comment utiliser cette configuration avec un serveur de validation maison.

Serveur de validation “maison”

Comme me le faisait remarquer un certain Spyou, confier à un tiers la vérification du droit d’accès à son infrastructure n’est probablement pas l’idée du siècle. Mon infrastructure se limite à peu de choses, mais tant qu’à faire, autant garder la vérification en interne. Il s’agit donc maintenant de monter son propre serveur de vérification. Yubico en référence quelques-uns, je vais ici détailler l’installation et la configuration du plus simple, YubiServe. Et quand je dis simple, je pèse mes mots : le tout tient en 2 scripts Python 🙂

Avant tout, je vous recommande d’éviter la version 3.1, qui (chez moi en tout cas) contient des “?” partout là où on attend des tabulations. Je vais donc partir du trunk svn :

svn checkout http://yubico-yubiserve.googlecode.com/svn/trunk/ yubiserve

Ceci fait, suivons les instructions du README.
Tout d’abord, on crée un certificat SSL :

openssl req -new -x509 -keyout yubiserve.pem -out yubiserve.pem -days 365 -nodes

Ensuite, si vous avez installé Python 2 et 3 sur votre système, il vous faudra peut-être modifier un peu les scripts dbconf.py et yubiserve.py : soit pour faire pointer l’interpréteur vers python2, soit pour modifier l’appel au module sqlite en sqlite3. Par défaut, YubiServe utilisera une base sqlite (déjà présente d’origine), mais il suffit de modifier le fichier de configuration (yubiserve.cfg) pour utiliser une base MySQL à la place.

Il est temps maintenant d’ajouter une clé au serveur. Utilisons donc dbconf.py, qui prend en arguments un “nickname” permettant d’identifier facilement la clé, ainsi que l’uid et la clé AES utilisés lors du paramétrage (cf. plus haut).

[email protected]:~/tmp/yubiserve$ ./dbconf.py -ya smokey cccccccccccc 000000000000 8ebfe5cd3dad48f2c5008d686ea5b384
Key ‘smokey’ added to database.
[email protected]:~/tmp/yubiserve$

On en profite pour ajouter aussi l’identité cccccccccccc dans le /home/utilisateur/.yubico/authorized_yubikeys qui va bien.

Lançons le serveur :

[email protected]:~/tmp/yubiserve$ ./yubiserve.py
HTTP Server is running.

Il ne reste plus qu’à essayer le tout, en faisant pointer un navigateur sur http://127.0.0.1:8000/, ce qui donne normalement ceci :

Il suffit alors d’envoyer l’OTP dans le champ prévu à cet effet pour obtenir le résultat :

Ça fonctionne ! Mais comment faire en sorte d’interroger ce serveur ? Nous allons voir le cas du module PAM, configuré dans la partie précédente.

PAM + Serveur de validation maison

Rappelez-vous, la configuration ressemblait à ça :

auth       required     pam_yubico.so id=16

Nous allons la transformer en ça :

auth       required     pam_yubico.so id=1 debug url=http://127.0.0.1:8000/wsapi/2.0/verify?id=%d&otp=%s

Par ailleurs, vous aurez remarqué que l’on a précisé un id en argument à pam_yubico. Cet id numérique sera passé via l’URL au serveur de validation : il faut donc qu’il soit défini côté serveur. Nous allons donc ajouter une clé d’API :

[email protected]:~/tmp/yubiserve$ ./dbconf.py -aa test-ssh
New API Key for ‘test2’: ‘WGZydWozbHQyVW9BM092cy9nMTk=’
Your API Key ID is: 1

Bien entendu, notre “API Key ID” est 1 seulement si c’est le premier à être créé ; l’important est qu’il existe.

C’est fini ! On peut maintenant s’identifier auprès de PAM avec la clé re-configurée par nos soins.

A propos de l'auteur

Sébastien T.

Sébastien T.

Passionné depuis toujours par l'informatique et les jeux vidéos, je transforme ma passion en expertise. J'utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l'utilisation des OS Debian et Archlinux.

Ajouter un commentaire

Cliquez ici pour poster un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Suivez nous sur les réseaux sociaux !

Rejoignez vous sur Teamspeak

Abonnez-vous à notre newsletter

Recevez par email toute l'actualité High-Tech chaque matin
Abonnez-vous à notre newsletter et rejoignez les 977 autres abonnés.

Tester votre débit

Oui Non

Rapport de faute d’orthographe

Le texte suivant sera envoyé à nos rédacteurs :