14/04/2011

Yubikey : la petite clé qui assure

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 : ykpersonalize -h

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 :

smokey@moira:~$ sudo ykpersonalize -2
Password:
Firmware version 2.0.2 Touch level 1792 Program sequence 6

Passphrase 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 :
è(IFejhdkkjnvrtbdeggeffvbknvbulg.

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 :

smokey@moira:~/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 6

Passphrase 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
smokey@moira:~/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).

smokey@moira:~/tmp/yubiserve$ ./dbconf.py -ya smokey cccccccccccc 000000000000 8ebfe5cd3dad48f2c5008d686ea5b384
Key 'smokey' added to database.
smokey@moira:~/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 :

smokey@moira:~/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 :
YubiServe

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 :

smokey@moira:~/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.

  1. | #1

    Hey smokey, on peut se la procurer ou cette clée ?
    J’en veux une moi !

  2. LeCoyote
    | #2

    Sur le site de Yubico 🙂 Le mieux serait d’organiser une commande groupée, ça reviendrait un poil moins cher à tout le monde …

  3. | #3

    +1 pour la commande groupée !
    J’en suis !

  4. | #4

    Yop,

    Dis-moi, tu ne serais pas par hasard passé aux journées FedeRez toi? 🙂

    Sinon, pour ceux qui sont intéressés, j’ai donné quelques détails sur mon site à propos du verrouillage de poste avec Yubikey que j’avais présenté à cette occasion (url en trackback si je comprend comment ça marche!)

  5. okhin
    | #5

    Need!!! Il m’en faut une aussi

  6. Cosaque
    | #6

    Je suis intéresse par au moins 1 yubikey également !

  7. LeCoyote
    | #7

    Ah pas du tout non 🙂 J’ai cette petite clé depuis un bon moment, je voulais juste faire un petit retour d’expérience.
    J’aime bien l’idée d’utiliser la clé pour déverrouiller le poste en tout cas 🙂

  8. neuronne-1337
    | #8

    +3 pour moi.

  9. LeCoyote
    | #9

    Et je lance une commande 🙂

  10. | #10

    Hey !!

    Moi aussi j’en veut une !!!
    J’espère que la commande n’est pas déjà partie !!

    pour un p’tit jour de retard :s

  11. LeCoyote
    | #11

    J’ai fait une commande de 20 clés, on verra ce qui reste 😉

  12. LeCoyote
    | #12

    Ayé ! Je suis en possession des 20 clés 🙂 Rendez-vous sur http://piratepad.net/TGr2tWSBLQ pour l’état des “commandes” et pour discuter d’un mode de livraison qui va bien

  13. zda
    | #13

    Bref, toujours aussi marrant de voir des gens aussi sûr (ou presque).

    Non sincérement, ou ce trouve la preuve dans votre cerveau, qui prouve que AES est un cryptage sécurisé et qui prouve que le gouvernement utilise bien ce cryptage? Vous allez me parler d’expert, la encore des expert que vous ne connaissez que depuis le net. Et puis, des expert, j’en est connu y’a 150000ans qui disait que la terre était plate alors que même aujourd’hui tout le monde croit quel est rond, hors qu’est-ce vous en savez vous tout de suite? (une photo pour moi c’est pas une preuves, il y a la physique et bien d’autres.) vous vous laisser berné par tout ce qu’on vous dit sans preuve. Vue que 1milliard de personne vous disent la terre est ronde sa veut dire quel l’ai (-_-) ! J’dit pas le contraire ceci dit, j’approuve pas non plus n’aillant aucune preuve exacte. (a vrai dire je pense quel est ronde bien-sûr, ceci dit j’évite de dire sa car j’ai vue une photo d’une planète ronde et qu’on me dit que c’est ma planète vue de haut alors que rien me prouve que c’est bien ma planète. Pourquoi ferait-il sa? ho, plein de chose)

    Donc voilà, ne faites pas confiance à n’importe qui est faite selon vos compétence (le mieux aussi c’est de vouloir des compétence) sinon sa sert à rien sa c’est clair.

    Un coffre de bank si tu le surveille pas, il y a un nombre infinie de possibilité pour ouvrir ce coffre (c’est comme sa la matière (matière ou pas d’ailleurs))
    Tout comme il y a un nombre infinie de possibilité d’ouvrir le coffre si tu le surveille. Seulement tu est la, donc une intélligence réel pour intervenir, contré ou patché à tout moment un problème, ou pas.

    Je pense arrêter la 🙂

  14. | #14

    Comme supprimer et modérer le commentaire ci-avant de zda rendrait service à celui-ci nous choisissons avec l’équipe Geekfault de laisser celui-ci en ligne, pour la bonne poilade qu’il nous a procuré.
    Dans un esprit de partage (qui caractérise Geekfault), je pense qu’il faut vraiment laisser celui-ci en ligne.
    zda merci !

  15. Jerome
    | #15

    @zda
    Pour commencer, quand on veut se la raconter, on dit “chiffrement” et pas “cryptage” 🙂

    (Et on apprend les bases de l’orthographe avant celles de la cryptographie)

  16. mouai
    | #16

    @Jerome, si tu avais dis ça à Einstein il aurait certainement bien ris de toi.

  17. | #17

    Dites les cops, utiliser une clé USB pour en combinant ses caractéristiques générer une longue liste de caractères majuscules, minuscules, chiffres, signes, en tout cas suffisamment abscons pour être utilisée comme un mot de passe n’est pas en soit une mauvaise idée et peu se révéler très pratique.
    Elle possède les propriétés suivantes suffisamment longue 24 caractères, ne pas pouvoir s’en souvenir, ne pas la stocker, ne pas avoir à la taper, bien construite, pas de caractères à double, pas de caractères répétitifs, répondant aux tests durs (Passwordmeter.com), pour des simples utilsateurs comme nous c’est déjà pas mal. J’ai un petit soft Windows à disposition qui transforme n’importe quelle clé usb flash disk. example: Ju2.Gz3[At0-Ch1%

  18. Denis
    | #18

    Oh ben il est pas tout jeune ce post. Mais comme je l’ai trouvé sur le sujet des Yubikeys, sachez que suite à un projet terminé il m’en reste quelques unes (5 -6) à céder à des geeks qui se respectent à prix très raisonnable.
    On ne peut plus s’en passer une fois adoptée – et par ailleurs depuis ce sujet les applis ont bien grandi en nombre 😉

  19. WTF
    | #19

    @zda
    Sors de ce corps Jean-claude Van Damme ! Et, pitié, vraiment pitié, achètes toi un Bescherelle …

  20. | #20

    Nice post at Ruth A. Remple: Pass the Fair Elections Now Act | Daily Camera: Letters to the Editor. I was checking continuously this blog and I’m impressed! Very helpful information particularly the last part I care for such info much. I was looking for this particular information for a long time. Thank you and best of luck.

  21. | #21

    9o6vtr

  1. | #1
  2. | #2
  3. | #3