KeePass : comment protéger l’accès avec une Yubikey et le plugin KeeChallenge
Tu plug ou tu plug pas ?
Le 15 février 2017 à 08h30
7 min
Logiciel
Logiciel
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 card, de stocker une clef via GPG, ou encore de renforcer la sécurité de vos comptes Dropbox, GitHub, Google, 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 Neo, Neo-n, 4 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).
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 Tools > KeeChallenge 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.
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.
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/PEuHh1w2oU3 h/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é.
KeePass : comment protéger l’accès avec une Yubikey et le plugin KeeChallenge
-
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 ?
Commentaires (37)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 16/02/2017 à 06h47
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 :
Next INpact
Le 16/02/2017 à 06h50
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).
Le 16/02/2017 à 08h47
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.
Le 16/02/2017 à 09h30
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 :
YouTube
Le 16/02/2017 à 10h04
Le 15/02/2017 à 10h44
Le 15/02/2017 à 12h06
" />
Le 15/02/2017 à 12h15
Le 15/02/2017 à 13h31
Le 15/02/2017 à 13h42
" /> 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…
Le 15/02/2017 à 13h53
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.
Le 15/02/2017 à 14h20
Le 15/02/2017 à 15h58
infinite cryptographic loop
Le 15/02/2017 à 16h13
Le 15/02/2017 à 17h10
J’ai pas compris un point.
Si:
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 15/02/2017 à 17h32
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) " />
Le 15/02/2017 à 17h49
Le 15/02/2017 à 19h19
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 :)
Le 15/02/2017 à 21h51
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 ?
Le 15/02/2017 à 22h39
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.
Le 15/02/2017 à 22h40
Le 15/02/2017 à 08h46
Super ce tuto, merci !
Cependant, si j’ai bien compris c’est de l’U2F.
La Yubikey U2F de base n’est pas citée comme compatible, pourquoi ?
Le 15/02/2017 à 08h57
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
Le 15/02/2017 à 09h00
bien vu " />
Le 15/02/2017 à 09h06
Comme expliqué dans le tuto, cela n’utilise pas le standard U2F. De fait les clefs U2F ne sont pas compatibles ;)
Le 15/02/2017 à 09h09
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.
Le 15/02/2017 à 09h14
Ok, vu. Dans l’intro on commence à parler U2F et je suis resté avec ce standard en tête dans le reste du tuto :)
Le 15/02/2017 à 09h20
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 " />
Le 15/02/2017 à 09h21
J’ai l’impression que ceci n’est pas applicable à la version portable de Keepass. (version que j’utilise sur une clef chiffrée)
Le 15/02/2017 à 09h32
Et si je veut accéder a ma base keepass sur mon tel, ça marche aussi ?
Le 15/02/2017 à 09h37
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 ?
Le 15/02/2017 à 09h40
“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
Le 15/02/2017 à 09h42
Le 15/02/2017 à 09h48
Le 15/02/2017 à 09h54
Le 15/02/2017 à 10h37
Le 15/02/2017 à 10h38
Vu que je n’ai jamais réussi à faire fonctionner ce truc, ce n’est pas prévu " />