KeePass : comment protéger l'accès avec une Yubikey et le plugin KeeChallenge

KeePass : comment protéger l’accès avec une Yubikey et le plugin KeeChallenge

Tu plug ou tu plug pas ?

Avatar de l'auteur
David Legrand

Publié dans

Logiciel

15/02/2017 7 minutes
38

KeePass : comment protéger l'accès avec une Yubikey et le plugin KeeChallenge

KeePass ne propose pas nativement de dispositif de double authentification exploitant le standard U2F. Mais avec des plugins comme KeeChallenge, il est possible de renforcer la connexion en exigeant la présence d'une clef de sécurité.

Depuis quelques temps maintenant, les gestionnaires de mot de passe tels que Dashlane ou LastPass permettent de protéger l'accès à leur client avec une clef de sécurité. Pour cela, ils se reposent sur le standard de connexion à deux facteurs U2F de la FIDO Alliance. Pour faire simple, en plus de votre identifiant et de votre mot de passe, il faut aussi disposer d'une clef USB compatible U2F et la connecter à l'ordinateur.

KeePass compatible avec les Yubikey via KeeChallenge

Yubico propose de tels produits avec ses Yubikey. Elles permettent de faire office de smart cardde stocker une clef via GPG, ou encore de renforcer la sécurité de vos comptes DropboxGitHubGoogle, etc. Elles peuvent aussi déverrouiller une session macOS ou Windows et générer des mots de passe à la demande (OTP, OATH-HOTP/TOTP).

Ainsi, elles peuvent fonctionner avec de nombreux services, dont KeePass. Le célèbre gestionnaire de mots de passe open source propose déjà une connexion à plusieurs facteurs, mais n'intègre pas encore nativement le support de l'U2F ou la gestion de clefs de sécurité. Il dispose néanmoins de nombreux plugins qui pourront lui adjoindre des fonctionnalités supplémentaires.

C'est notamment le cas de KeeChallenge, qui autorise l'utilisation d'une Yubikey comme élément matériel, assurant la sécurité de votre base de mots de passe (via son mode HMAC-SHA1, voir plus bas). Open source, son code est disponible sur GitHub sous licence GPL v3.

Les modèles compatibles avec ce plugin sont les NeoNeo-n4 et 4 Nano. Ces deux derniers se distinguent par une certification FIPS 140 et le support de RSA 4096 / ECC p384, leur permettant d'être supportés par Docker, ce qui n'est pas le cas des modèles inférieurs.

Préparation et installation du plugin

Passons à la pratique et la préparation de la machine. Outre une Yubikey compatible, vous devrez disposer d'une version à jour de KeePass 2.x, du plugin KeeChallenge et de l'outil de gestion de Yubico pour votre OS. Ceux-ci peuvent être téléchargés aux adresses suivantes :

Installez ensuite KeePass et YubiKey Personalization Tool. Le plugin se récupère sous forme d'une archive ZIP qui contient un répertoire. Ce dernier sera à placer dans celui dédié aux plugins de KeePass. Dans notre cas :

C:\Program Files (x86)\KeePass Password Safe 2\Plugins

Une fois le dossier copié, il n'y a rien d'autre à faire. Il faudra néanmoins vérifier que tout s'est bien passé en se rendant dans le menu Tools de KeePass puis dans Plugins

Créez ensuite une nouvelle base de données de mots de passe, ou ouvrez-en une existante. Dans ce second cas, il faudra se rendre dans le menu File, puis cliquer sur Change Master Key. Une fenêtre s'affichera alors pour entrer les différents élements de sécurité. Par défaut, ceux-ci peuvent être de trois types : un mot de passe maître, une clef ou votre identifiant Windows. Pour utiliser la Yubikey il faut cocher Key file / provider puis Yubikey Challenge Response.

Il est recommandé de ne pas utiliser cette seule méthode pour se connecter, mais plutôt d'en faire une solution complémentaire d'un mot de passe maître fort. Dans le cas contraire, n'importe qui ayant accès à votre Yubikey pourra ouvrir votre base de mots de passe (évitez donc aussi de le générer en utilisant son mode statique).

Yubikey KeePass HMAC-SHA1Yubikey KeePass HMAC-SHA1

Une fois validé, il faudra entrer une clef secrète. C'est l'application YubiKey Personalization Tool qui permet de l'obtenir. Rendez-vous dans l'onglet Challenge-response puis cliquez sur HMAC-SHA1. Il faut alors effectuer les opérations suivantes :

  • Sélectionnez le Configuration slot 2
  • Cochez la case Require user input
  • Sélectionnez le mode Fixed 64 byte input

Notez qu'il est possible de passer par le slot 1 de la Yubikey. Pour cela il faudra modifier paramètre du plugin dans KeePass via l'onglet ToolsKeeChallenge Settings.

Cliquez sur Generate plusieurs fois, sélectionnez et copiez le résultat. Pensez à sauvegarder cette clef secrète de manière à pouvoir la récupérer en cas de problème. Attention, elle ne doit pas être accessible à tous, n'hésitez donc pas à la protéger par un mot de passe avec un outil tel que 7-Zip ou VeraCrypt par exemple.

Yubikey KeePass HMAC-SHA1

Cliquez sur Write Configuration, annulez l'enregistrement du fichier log, c'est terminé. Fermez l'application et collez la clef privée dans la fenêtre KeePass. Validez. Appuyez alors sur le bouton de la Yubikey. Si tout s'est bien passé, un message vous en informera.

Une fois la base de données fermée, la Yubikey devra être connectée à la machine pour l'ouvrir. Un tel dispositif a néanmoins des limites puisque s'il est parfaitement adapté à un usage personnel depuis un ordinateur, il ne permettra pas de proposer un accès depuis un appareil mobile par exemple.

Que faire en cas de problème ?

Et si la clef était cassée ou qu'elle n'était pas temporairement à votre disposition ? Lors de l'ouverture de votre base de données, si aucune clef n'est connectée à la machine, le plugin propose d'utiliser un Recovery mode. Il consiste simplement à taper la clef secrète afin de pouvoir accéder aux données. 

Cette clef doit donc être sauvegardée préciseusement comme nous l'expliquions précédemment. Elle doit aussi être protégée afin de ne pas pouvoir être trouvée par le premier venu.

Yubikey KeePass HMAC-SHA1

HMAC-SHA1, AES 256 : KeeChallenge, comment ça marche ?

Pour fonctionner de pair avec la Yubikey, le plugin KeeChallenge utilise une identification de type « défi-réponse » HMAC-SHA1. Pour faire simple, l'application et la clef partagent une clef secrète et vont tenter de communiquer ensemble. Un défi va être envoyée à la Yubikey par l'application, celle-ci fournira alors une réponse. Si la valeur correspond à celle attendue et à la clef privée, la connexion est possible. Sinon, c'est qu'il y a un problème.

Dans ce contexte, un HMAC (Hash-based message authentication code) correspond à ce qui permet de s'assurer à la fois de l'intégrité et de l'authenticité des messages transmis. Pour cela, il combine la clef priveé et la fonction de hash SHA-1. 

Dans sa documentation, le développeur de KeeChallenge indique que « la clef secrète est utilisée pour chiffrer la base de données. Afin d'éviter d'avoir à stocker cette clef, on génère une paire défi-réponse en amont. Le défi est stocké et sera utilisé lors de la prochaine connexion alors que la réponse est utilisée comme clef AES256 pour chiffrer la clef secrète. Toutes les données utiles sont stockées dans un fichier XML situé dans le même répertoire que votre base de données ».

Et effectivement, on trouve bien un fichier XML composé de la manière suivante : 

<?xml version="1.0" encoding="utf-8"?>
<data>
<aes>
<encrypted>+GFzy7wTM7uGrnjGLYMxNdmVL5NmCXaJ7M=</encrypted>
<iv>trMcqf7MDK7bqYr1iSAg==</iv>
</aes>
<challenge>Otci/No/vbaKyOMHeL5i2mpqhSE5/vZ22u/kJXqTdlFxh/PEuHh1w2oU3h/Zg==</challenge>
<verification>EOW9Wdl08CG/j5F4EsiiYGK5c0PXk75NCKOM=</verification>
<lt64>False</lt64>
</data>

Ainsi, la clef privée est uniquement stockée dans la Yubikey, dont elle ne peut pas être extraite. De cette manière, un attaquant ne peut pas la retrouver par ce biais, ou même en accédant à la machine. Mais ces deux éléments combinés permettent une connexion en toute sécurité.

38

Écrit par David Legrand

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

KeePass compatible avec les Yubikey via KeeChallenge

Préparation et installation du plugin

Que faire en cas de problème ?

HMAC-SHA1, AES 256 : KeeChallenge, comment ça marche ?

Le brief de ce matin n'est pas encore là

Partez acheter vos croissants
Et faites chauffer votre bouilloire,
Le brief arrive dans un instant,
Tout frais du matin, gardez espoir.

Commentaires (38)


Super ce tuto, merci !



Cependant, si j’ai bien compris c’est de l’U2F.

&nbsp;La Yubikey U2F de base n’est pas citée comme compatible, pourquoi ?


Je me posais la même question mais en regardant la page sur YubiKey Personalization Tool : page

This tool works on all Yubico devices except for the FIDO U2F Security Key


bien vu <img data-src=" />


Comme expliqué dans le tuto, cela n’utilise pas le standard U2F. De fait les clefs U2F ne sont pas compatibles ;)


C’est dommage keepass est code en .net et donc utilise mono sous linux. L’equivalent c++ est keepassx mais avec bien moins de fonctionnalites.


Ok, vu. Dans l’intro on commence à parler U2F et je suis resté avec ce standard en tête dans le reste du tuto :)


En fait comme expliqué, c’est un standard qui est utilisé par un nombre croissant de services. Ce n’est pas le cas de KeePass. Par contre dans les plugins il y a des solutions plus spécifiques, comme ici KeeChallenge qui utilise HMAC-SHA1. D’où le fait que le fonctionnement soit spécifique à la Yubikey <img data-src=" />


J’ai l’impression que ceci n’est pas applicable à la version portable de Keepass. (version que j’utilise sur une clef chiffrée)


Et si je veut accéder a ma base keepass sur mon tel, ça marche aussi ?


J’ai vu qu’il existe aussi une autre façon d’associer Keepass avec une Yubikey, via le système OATH HOTP.



Le plug-in OptKeyProv est nécessaire.



https://www.yubico.com/why-yubico/for-individuals/password-managers/keepass/



Est-ce que vous avez prévu d’aborder cette autre méthode dans vos colonnes ?


“Une fois la&nbsp;base de données fermée, la&nbsp;Yubikey&nbsp;devra

être connectée à la machine pour l’ouvrir. Un tel dispositif a

néanmoins des limites puisque s’il est parfaitement adapté à un usage

personnel depuis un ordinateur, il ne permettra pas de proposer un accès&nbsp;depuis un appareil mobile par exemple.”



Ceci dit, l’autre méthode que j’ai linké au dessus semble compatible avec keepass2Android via la yubikey NFC Neo








Carpette a écrit :



C’est dommage keepass est code en .net et donc utilise mono sous linux. L’equivalent c++ est keepassx mais avec bien moins de fonctionnalites.





https://keepassxc.org/project









keralan a écrit :



“Une fois la base de données fermée, la Yubikey devra

être connectée à la machine pour l’ouvrir. Un tel dispositif a

néanmoins des limites puisque s’il est parfaitement adapté à un usage

personnel depuis un ordinateur, il ne permettra pas de proposer un accès depuis un appareil mobile par exemple.”



Ceci dit, l’autre méthode que j’ai linké au dessus semble compatible avec keepass2Android via la yubikey NFC Neo





Au fait, c’était une question rhétorique, j’ai oublier le “pfffffffffffffffffffffffffffffffff” a la fin.









Oviked a écrit :



https://keepassxc.org/project





Super, je me demande comment j’ai fait pour ne pas en entendre parler. Je ne l’utiliserai pas tout de suite car pas de depot deb mais je le garde en tete.









Gilbert_Gosseyn a écrit :



J’ai l’impression que ceci n’est pas applicable à la version portable de Keepass. (version que j’utilise sur une clef chiffrée)









DUNplus a écrit :



Et si je veut accéder a ma base keepass sur mon tel, ça marche aussi ?





Un jour on mettra des fessées à tous ceux qui commentent sans avoir lu <img data-src=" />



Vu que je n’ai jamais réussi à faire fonctionner ce truc, ce n’est pas prévu <img data-src=" />








David_L a écrit :



Un jour on mettra des fessées à tous ceux qui commentent sans avoir lu <img data-src=" />





Et toi qui n’a pas lu mon 2eme commentaire. Xp









David_L a écrit :



Un jour on mettra des fessées à tous ceux qui commentent sans avoir lu <img data-src=" />



Fais gaffe avec ce genre de phrases, tu pourrais justement avoir une recrudescence du nombre de commentateurs qui n’ont pas lu si c’est appliqué… <img data-src=" />









David_L a écrit :



Un jour on mettra des fessées à tous ceux qui commentent sans avoir lu <img data-src=" />









Oh oui <img data-src=" /><img data-src=" />



<img data-src=" /> mmmmm KeePass 2.1 est certifié (par l’Anssi), y a des clés certifiées FIPS. Mais qui certifie le plugin ?



Autre point négatif : en cas de perte ou destruction, il ne reste que le recovery mode, qui demande la clé secrète. A stocker donc qqpart et c’est là que les ennuis vont commencer : ou ? comment ? avec quel outil ? 7-zip (je suppose avec qqch du genre AES) demandera un mot de passe…



Autant la solution Yubikey peut s’avérer pratique pour alléger un peu le mot de passe maître, autant cela rajoute du secret à stocker qqpart ailleurs. Je me demande si un bon mot de passe bien costaud mais qui n’est que dans ma tête n’est pas finalement la solution la plus simple…


Un bon mot de passe est un élément important, mais ça reste une composante connue à l’avance et fixe. D’où l’intérêt des dispositifs de 2FA. Après il y a toujours une backup à avoir. On peut compter sur un unique mot de passe que l’on retient, mais ça limite toujours un peu la “force” de celui-ci.








janiko a écrit :



&nbsp;



Autre point négatif : en cas de perte ou destruction, il ne reste que le recovery mode, qui demande la clé secrète. A stocker donc qqpart et c’est là que les ennuis vont commencer : ou ? comment ? avec quel outil ? 7-zip (je suppose avec qqch du genre AES) demandera un mot de passe…





Sauvegarde là dans keepass…



<img data-src=" />



infinite cryptographic loop








Patch a écrit :



Fais gaffe avec ce genre de phrases, tu pourrais justement avoir une recrudescence du nombre de commentateurs qui n’ont pas lu si c’est appliqué… <img data-src=" />





Surtout si c’est la belle rousse de ton avatar qui me l’applique la fessée :p.



J’ai pas compris un point.



Si:




  • on est sur une base de challenge réponse

  • la réponse du challenge EST la clé de déchiffrement

  • il n’est pas possible de stocker quoi que ce soit de secret dans le KeePass locké, donc pas de secret partagé



    Alors deux solutions:

    1/ le challenge est toujours le même. Et donc la réponse toujours la même. Donc si on me vole temporairement ma yubikey le temps de faire lui demander la réponse à l’unique challenge. On peut dupliquer l’objet



    Ou



    2/ le challenge change apres chaque ouverture du fichier. Maisj’ai pas l’impression que ce soit le cas.



    Il y a un truc qui m’échappe.


Le challenge change à chaque réponse (tu le vois dans le code mais ça se vérifie aussi dans la pratique, le contenu du XML étant modifié à chaque fermeture/ouverture de la DB) <img data-src=" />








David_L a écrit :



Le challenge change à chaque réponse (tu le vois dans le code mais ça se vérifie aussi dans la pratique, le contenu du XML étant modifié à chaque fermeture/ouverture de la DB) <img data-src=" />







Ok la clé symétrique est rechiffré a chaque fois.



C’est un peu une bidouille pour faire style “dual factor” ce plugin. Même si finalement, ca fait le boulot.



dual factor, c’est le fait d’utiliser un élément complémentaire au mot de passe. Là c’est surtout qu’un utilise une clef avec un élément de sécurité pour stocker la clef privée d’un challenge-response qui importe :)


Euh, juste pour voir…



&nbsp;Peut-on protéger sa session Windows 10 via l’API client Yubikey avec la même clé qu’on aurait créée pour ce tuto ?


Ouais :) mais…..



Littéralement, c’est juste. Quand je dis bidouille, c’est peut plus le fait de la temporalité qui m’embête. Je m’explique:



jour 1: Je récupère une copie d’une version du keepass avec le xml. J’ai donc le challenge qui est fixe.



jour 10: Je prépare mon coup, et j’attends d’avoir la yubikey 10s (le gars va au toilette par exemple) pour résoudre LE challenge qui ne change jamais pour la version que j’ai du fichier keypass



jour 20: Je zieute son mot de passe quand il le tape.



Et voilà, le jour 20, sans avoir sa yubikey, j’ai réussi à ouvrir le fichier.



Ce qui m’embête finalement, c’est que c’est bien du multi factor authentication, sauf qu’on est pas obligé d’avoir les factor en même temps.



Contrairement à un site web (genre google) avec 2FA et secret partagé (qui n’est pas possible avec un fichier keepass local). Pour se connecter, il faut le password ET le token en même temps. Le challenge change à chaque tentative.



Bon ouais je suis relou et tatillon, littéralement c’est bien du 2FA je pense, mais ça me chagrine, il fallait que je m’exprime!



En tout cas merci pour la précision du challenge qui change à chaque fois.








Alan a écrit :



Euh, juste pour voir…



 Peut-on protéger sa session Windows 10 via l’API client Yubikey avec la même clé qu’on aurait créée pour ce tuto ?







T’as 2 slots dans une yubikey (appui bref et appui long). A ma connaissance ça doit fonctionner en utilisant les 2 slots.



Windows 10 n’utilise pas un slot particulier, mais une app et sans doute l’U2F. Du coup ça ne change rien. Comme indiqué dans le sommaire du dossier, il y a déjà un guide sur le sujet :&nbsp;



https://www.nextinpact.com/news/99448-yubikey-et-windows-10-comment-se-connecter…


Je n’ai rien compris à ta démonstration et en quoi la situation est différente selon toi d’une connexion 2FA chez Google ou autre (du moment où l’on active un mot de passe maitre sur le fichier KP).


Pour faire simplement:



Un 2FA Google, à chaque tentative, le challenge change. Donc à chaque tentative, il faut le password + yubikey en même temps.



Sur un fichier keepass precis. Le challenge ne change pas à chaque tentative. Donc on peut récupérer la réponse au challenge par un moyen un moment donné. Puis le mot de passe par un autre moyen a un autre moment donné.



C’est beaucoup plus discret que de devoir tout faire en “live”. Il y a moins de chance que l’utilisateur s’apercoive qu’on lui a emrpunter pendant quelques seconde sa yubikey, que de devoir lui “voler” pendant tout le temps du cassage du mot de passe.



Dit autrement,



Le but d’un cryptotoken, c’est de ne pas pouvoir le dupliquer. Hors la, pour une version donné d’un fichier keepass, étant donné que le challenge est connu par avance et ne change pas, on peut “discrètement” emprunter la yubikey le temps de résoudre l’unique challenge.



Donc oui on a pas dupliquer la yubikey (car ce n’est pas possible) mais on a la réponse à l’unique challenge, donc plus besoin physiquement de la yubikey pour casser le password.



Encore dit différemment,



En tant qu’utilisateur de yubikey, je me dis que tant que le factor “que je possède” est toujours accroché à mon porte clé, je ne craint rien. Hors il suffit qu’on m’emprunte discrement ma yubikey quelques secondes pour connaître l’unique réponse à l’unique question de mon fichier keepass.

L’attaquant peut donc maintenant tranquillement “travailler” sur le second factor (le mot de passe) sans avoir besoin physiquement de ma yubikey.





Donc oui, je suis d’accord, on peut dire que c’est du 2FA. Mais c’est pas aussi sec’ que du 2FA Google par exemple.


Oui d’accord, mais je ne parlai pas de l’authentification via Windows Hello, mais par Yubikey Logon Administration.

A priori, ça ne devrait pas poser de souci d’utiliser la clé en même temps pour les deux (Keepass et Windows) puisqu’il s’agit d’U2F, comme ci-dessous :



https://www.youtube.com/watch?v=s-4XSW4iQuk








ForceRouge a écrit :





  • Pour faire simplement:



    Un 2FA Google, à chaque tentative, le challenge change. Donc à chaque tentative, il faut le password + yubikey en même temps.



    &gt;&gt;&gt; Oui



    Sur un fichier keepass precis. Le challenge ne change pas à chaque tentative.&nbsp;



    &gt;&gt;&gt;&nbsp;Le challenge change à chaque fois qu’on ferme/ouvre le fichier de la DB, et à chaque fois il faut entrer les éléments de sécurité (mot de passe, clef si tu l’as configuré comme tel). Google ne te demande de te reconnecter + 2FA que si tu te déconnectes. &nbsp;



    Donc on peut récupérer la réponse au challenge par un moyen un moment donné. Puis le mot de passe par un autre moyen a un autre moment donné.&nbsp;



    Je ne comprends pas ce que tu entends par là. Même si tu arrives à récupérer le mot de passe, comment tu veux récupérer la réponse au challenge qui vient d’être généré sans disposer de la clef privée qui est dans la Yubikey ?

    &nbsp;



    • C’est beaucoup plus discret que de devoir tout faire en “live”. Il y a moins de chance que l’utilisateur s’apercoive qu’on lui a emrpunter pendant quelques seconde sa yubikey, que de devoir lui “voler” pendant tout le temps du cassage du mot de passe.



      &gt;&gt;&gt; &nbsp;Même si tu empruntes une Yubikey, tu comptes faire quoi avec ? Invoquer le Dieu du piratage ?



    • Dit autrement,



      Le but d’un cryptotoken, c’est de ne pas pouvoir le dupliquer. Hors la, pour une version donné d’un fichier keepass, étant donné que le challenge est connu par avance et ne change pas, on peut “discrètement” emprunter la yubikey le temps de résoudre l’unique challenge.



      &gt;&gt;&gt;&nbsp;Un challenge est un challenge. Il est public parce qu’il ne sert à rien sans la clef privée. Dire ça c’est comme dire “Ah ah, j’ai la clef publique de bidule, le temps de décrypter l’email envoyé via GPG sur du RSA 4096, et hop, je peux le lire !”&nbsp;&nbsp;

      &nbsp;

      Après, si tu as une méthode pour trouver la réponse à un challenge sans la clef privée dépose le brevet ;)&nbsp;&nbsp;

      &nbsp;

      Maintenant si ton propos est de dire “si je récupère le dossier KeePass + la clef et que je connais le mot de passe, je peux ouvrir la DB. La réponse est : oui. M’enfin si un attaquant en arrive à là, c’est que t’as un vrai problème de gestion de ta sécu, pas que le soft que tu utilises a un problème.



      PS : on peut ouvrir ton compte Google avec ton pass + 2FA, sachant qu’il y a toujours un fallback sur une clef U2F. Et une fois connecté, il n’y a pas besoin de se reconnecter tous les 4 matins, à moins que l’utilisateur “piraté” ne s’en apercoive et fasse couper toutes les sessions du compte.



    • Donc oui on a pas dupliquer la yubikey (car ce n’est pas possible) mais on a la réponse à l’unique challenge, donc plus besoin physiquement de la yubikey pour casser le password.



      Encore dit différemment,



      En tant qu’utilisateur de yubikey, je me dis que tant que le factor “que je possède” est toujours accroché à mon porte clé, je ne craint rien. Hors il suffit qu’on m’emprunte discrement ma yubikey quelques secondes pour connaître l’unique réponse à l’unique question de mon fichier keepass.

      L’attaquant peut donc maintenant tranquillement “travailler” sur le second factor (le mot de passe) sans avoir besoin physiquement de ma yubikey.



      &gt;&gt;&gt;&nbsp;Et avec ton compte Google, un attaquant peut travailler ton mot de passe, et une fois trouvé te piquer ta Yubikey et se connecter. What else ?

      &nbsp;

    • Donc oui, je suis d’accord, on peut dire que c’est du 2FA. Mais c’est pas aussi sec’ que du 2FA Google par exemple.

      &nbsp;

      &gt;&gt;&gt;&nbsp;Il n’y a aucune différence, en fait. Après si ça te rassures de penser qu’un compte Google est plus en sécurité avec de l’U2F, soit :p