Authentification à deux facteurs Yubikey Cryptage complet du disque via LUKS

27

J'ai récemment acquis un Yubikey Neo - un astucieux petit dispositif d'authentification de second facteur matériel. Il est principalement destiné à être utilisé avec des mots de passe à usage unique et le protocole U2F émergent - mais depuis la version 2 de Yubikey, il prend également en charge l'authentification par défi-réponse HMAC-SHA1. HMAC-SHA1 combine une clé secrète (stockée à l'intérieur du Yubikey) et la combine avec une phrase secrète pour générer une réponse.

Comment puis-je combiner le Yubikey avec ma configuration Ubuntu FDE pour utiliser 2FA avec mon disque dur chiffré?

seanlano
la source

Réponses:

30

Un groupe appelé PrivacyIdea a créé un petit package pour ajouter une routine de réponse au défi HMAC-SHA1 aux initramfs, ce qui signifie qu'Ubuntu peut vous demander un défi à passer au Yubikey, puis utiliser la réponse pour déverrouiller le volume LUKS. Pour la plupart, je suis ces instructions , avec quelques commentaires ajoutés. Le processus est en fait très facile à faire.

J'ai testé cela sur Ubuntu 14.04, 16.04 et 18.04; en utilisant un Yubikey Neo. Il devrait fonctionner avec n'importe quel Yubikey récent, avec le firmware 2.0+ et avec n'importe quelle version d'Ubuntu après le 14.04. J'ai également testé Ubuntu 19.04 avec un Yubikey 5C, un travail supplémentaire était nécessaire mais il peut fonctionner. Il pourrait également y avoir d'autres dispositifs matériels de réponse aux défis HMAC-SHA1 avec lesquels cela fonctionne, mais je n'en connais aucun qui existe. Comme toujours, assurez-vous d'avoir une sauvegarde de vos données avant de continuer - il ne devrait pas y avoir de problème ici, mais il y a toujours la possibilité que cela détruise tout sur votre ordinateur. Ces instructions sont livrées sans garantie.

Mise à jour: depuis Ubuntu 16.04, les packages nécessaires sont dans les référentiels principaux et aucun PPA n'est nécessaire.

Ajoutez un commentaire si vous avez des questions!


0. Prérequis

Pour que cela fonctionne, vous devrez déjà configurer et travailler le chiffrement LUKS du disque complet. Vous pouvez le faire en sélectionnant l'option appropriée lors de l'installation d'Ubuntu. Pour une sécurité maximale, vous devez avoir une phrase de passe très forte choisie lors de l'installation. Si votre phrase secrète n'est pas à la hauteur, vous devriez la changer en une meilleure avant de continuer ( des instructions plus détaillées ici ).

La méthode ci-dessous ne remplacera aucune phrase de passe existante, mais ajoutera à la place une autre phrase de passe à l'un des emplacements LUKS. Par conséquent, si vous perdez votre Yubikey, vous pouvez toujours déverrouiller votre ordinateur à l'aide d'une phrase secrète existante - je vous suggère de le noter et de le cacher dans un endroit sûr - vous en aurez également besoin plusieurs fois au cours de cette procédure. Votre nouvelle phrase secrète de défi Yubikey devrait toujours être assez solide, mais ne doit pas être aussi longue que la phrase secrète que vous avez utilisée lors de l'installation d'Ubuntu.


1. Ajoutez PrivacyIdea PPA et installez le package

Sur Ubuntu 14.04

Ouvrez un terminal et exécutez la commande suivante:

sudo add-apt-repository ppa:privacyidea/privacyidea 

Appuyez sur Entrée lorsque vous y êtes invité, puis exécutez:

sudo apt-get update

Installez ensuite le package avec:

sudo apt-get install yubikey-luks

Sur Ubuntu 16.04, 18.04

Il n'y a pas besoin de PPA, vous pouvez installer le package avec:

sudo apt-get install yubikey-luks

Sur Ubuntu 19.04

Voir cette réponse pour savoir comment construire le yubikey-lukspackage à partir des sources pour Ubuntu 19.04.


2. Installez le logiciel Yubikey

Si vous utilisez la fonctionnalité HMAC-SHA1 du Yubikey pour autre chose, vous pouvez ignorer cette section. Il effacera toute configuration dans le deuxième emplacement Yubikey, donc n'effectuez pas cette étape si vous utilisez HMAC-SHA1 à d'autres fins avec ce Yubikey.

Vous devrez configurer votre Yubikey pour qu'il fonctionne avec Ubuntu en installant le logiciel requis, soit à partir du PPA Yubico sur Ubuntu 14.04, soit à partir du référentiel Ubuntu principal le 16.04 et versions ultérieures.

Sur Ubuntu 14.04

Si vous ne l'avez pas déjà fait, ajoutez le PPA et installez le package avec:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

Sur Ubuntu 16.04, 18.04 (et versions ultérieures)

sudo apt-get install yubikey-personalization

3. Initialiser l'emplacement Yubikey pour HMAC-SHA1

Maintenant, nous devons programmer le deuxième emplacement du Yubikey avec une configuration HMAC-SHA1. Cela effacera votre configuration de slot précédente, qui est vide par défaut. Encore une fois, si vous utilisez HMAC-SHA1 pour autre chose, n'émettez pas cette commande - cela effacera votre configuration. Vous pouvez utiliser en toute sécurité la même clé secrète à l'intérieur du Yubikey pour cette configuration LUKS que pour vos autres utilisations. (Par exemple, avec un autre ordinateur utilisant LUKS + Yubikey).

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Le terminal affichera des informations sur les modifications apportées. Vous n'avez pas besoin de noter cela, mais cela montrera la clé secrète utilisée par le Yubikey dans l'algorithme HMAC-SHA1 pour calculer la réponse en cas de défi.


4. Inscrire Yubikey à l'emplacement LUKS

Nous allons maintenant modifier la configuration LUKS pour ajouter la réponse du Yubikey comme l'une des clés de déchiffrement.

La partition que nous devons spécifier dépend de si vous utilisez le BIOS ou l'UEFI pour démarrer votre machine. Pour le BIOS, le volume chiffré est à /dev/sda5par défaut, pour UEFI il est à /dev/sda3. Vous pouvez le vérifier en ouvrant l' disksutilitaire et en confirmant le chemin de la partition - il doit être sda3ou sda5. REMARQUE: sur les ordinateurs plus récents dotés de disques NVMe, le chemin d'accès ressemblera à quelque chose /dev/nvme0n1p3.

Exécutez ceci dans un terminal:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

Cela va écrire dans l'emplacement 7 de la configuration LUKS, suivez les invites du programme d'installation (elles varient légèrement en fonction de la version que vous utilisez).

Alors vous avez terminé! Vous devriez pouvoir redémarrer votre ordinateur et si votre Yubikey est inséré, vous pouvez saisir votre mot de passe de défi et utiliser le Yubikey comme deuxième facteur pour déverrouiller la partition LUKS et démarrer le système. Une fois que vous avez décrypté le disque dur, vous pouvez retirer le Yubikey.

Si vous perdez votre Yubikey, vous pouvez toujours saisir votre phrase secrète d'origine (espérons-le, très longue) pour décrypter le disque dur, puis vous pouvez à nouveau suivre cette procédure pour enregistrer un nouveau Yubikey.


Modification de la phrase secrète du défi de chiffrement

Changer le mot de passe à une date ultérieure est assez simple, utilisez simplement cette commande pour réinitialiser la clé secrète. Il n'est pas entièrement nécessaire de réinitialiser la clé secrète, mais cela ne fera pas de mal. Gardez à l'esprit que cela détruira la clé secrète précédente, ne le faites pas si vous utilisez HMAC-SHA1 pour autre chose avec ce Yubikey. (Par exemple, avec un autre ordinateur utilisant LUKS + Yubikey).

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Ensuite, comme à l' étape 4 ci-dessus, pour inscrire un nouveau mot de passe dans l'emplacement de clé LUKS, sauf opter pour effacer l'emplacement 7 avec cette commande:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

Lorsque vous y Enter any remaining passphraseêtes invité , utilisez votre phrase secrète de sauvegarde - et non la phrase secrète du défi Yubikey. Entrez ensuite une nouvelle phrase secrète de défi Yubikey, deux fois, puis vous devrez enfin saisir la phrase secrète de sauvegarde une dernière fois.

Maintenant, votre ancienne phrase secrète de défi Yubikey a été supprimée et seule la nouvelle déchiffrera le disque dur. Votre phrase secrète de sauvegarde précédente sera toujours la même. Vous pouvez modifier cette phrase secrète en suivant les liens de l' étape 0 .


Remarque sur les implications pour la sécurité

L'ajout d'un Yubikey ajoutera un certain niveau de sécurité à votre système - quelqu'un doit connaître à la fois la phrase secrète du défi et avoir votre Yubikey pour pouvoir déverrouiller votre disque dur (ou trouver votre phrase secrète initiale, que vous utilisez maintenant comme sauvegarde) . Cependant, il est techniquement possible pour un attaquant de décrypter le disque dur s'il connaît votre phrase secrète de défi (par exemple, en vous «surfant sur l'épaule» pendant que vous le saisissez) et ne peut accéder à votre Yubikey que très peu de temps. En utilisant la phrase secrète de défi, ils pouvaient obtenir la réponse du Yubikey et la stocker, puis l'utiliser pour décrypter le disque dur à tout moment sans le Yubikey. Ou encore, si un attaquant ou un logiciel malveillant connaissait votre phrase secrète et était capable d'exécuter du code sur une machine connectée à votre Yubikey, il pouvait également lancer le défi et stocker la réponse. Il est donc toujours extrêmement important d'être vigilant lors de la saisie de votre phrase secrète de défi et de vous assurer que vous avez toujours le Yubikey dans un endroit sûr. Vous ne devez également le brancher que sur une machine en laquelle vous avez confiance. Si vous perdez la trace de votre Yubikey et suspectez que quelqu'un l'ait utilisé pour essayer d'apprendre la clé de déchiffrement, répétez les étapes 2 et 3 pour réinitialiser la clé secrète à l'intérieur du Yubikey et choisissez une nouvelle phrase secrète de défi. Notez que si un adversaire a réussi à apprendre l'une de vos phrases secrètes (soit la réponse HMAC-SHA1 du Yubikey, soit votre sauvegarde), il pourrait faire une sauvegarde de la clé principale LUKS, puis l'utiliser pour déchiffrer votre disque dur même si vous changez la phrase secrète à l'avenir. et pour vous assurer que vous avez toujours le Yubikey dans un endroit sûr. Vous ne devez également le brancher que sur une machine en laquelle vous avez confiance. Si vous perdez la trace de votre Yubikey et suspectez que quelqu'un l'ait utilisé pour essayer d'apprendre la clé de déchiffrement, répétez les étapes 2 et 3 pour réinitialiser la clé secrète à l'intérieur du Yubikey et choisissez une nouvelle phrase secrète de défi. Notez que si un adversaire a réussi à apprendre l'une de vos phrases secrètes (soit la réponse HMAC-SHA1 du Yubikey, soit votre sauvegarde), il pourrait faire une sauvegarde de la clé principale LUKS, puis l'utiliser pour déchiffrer votre disque dur même si vous changez la phrase secrète à l'avenir. et pour vous assurer que vous avez toujours le Yubikey dans un endroit sûr. Vous ne devez également le brancher que sur une machine en laquelle vous avez confiance. Si vous perdez la trace de votre Yubikey et suspectez que quelqu'un l'ait utilisé pour essayer d'apprendre la clé de déchiffrement, répétez les étapes 2 et 3 pour réinitialiser la clé secrète à l'intérieur du Yubikey et choisissez une nouvelle phrase secrète de défi. Notez que si un adversaire a réussi à apprendre l'une de vos phrases secrètes (soit la réponse HMAC-SHA1 du Yubikey, soit votre sauvegarde), il pourrait faire une sauvegarde de la clé principale LUKS, puis l'utiliser pour déchiffrer votre disque dur même si vous changez la phrase secrète à l'avenir. effectuez à nouveau les étapes 2 et 3 pour réinitialiser la clé secrète à l'intérieur du Yubikey et choisissez une nouvelle phrase secrète de défi. Notez que si un adversaire a réussi à apprendre l'une de vos phrases secrètes (soit la réponse HMAC-SHA1 du Yubikey, soit votre sauvegarde), il pourrait faire une sauvegarde de la clé principale LUKS, puis l'utiliser pour déchiffrer votre disque dur même si vous changez la phrase secrète à l'avenir. effectuez à nouveau les étapes 2 et 3 pour réinitialiser la clé secrète à l'intérieur du Yubikey et choisissez une nouvelle phrase secrète de défi. Notez que si un adversaire a réussi à apprendre l'une de vos phrases secrètes (soit la réponse HMAC-SHA1 du Yubikey, soit votre sauvegarde), il pourrait faire une sauvegarde de la clé principale LUKS, puis l'utiliser pour déchiffrer votre disque dur même si vous changez la phrase secrète à l'avenir.La page de manuel de cryptsetup explique cela, consultez la section luksHeaderBackup . Si vous pensez que cela s'est produit, vous devez créer un volume LUKS entièrement nouveau pour protéger vos données.

seanlano
la source
Mise à jour: J'ai également essayé cela avec 15.04, il semble que le PPA n'ait pas de build du package requis, donc je dois changer la ligne DEB dans les sources de logiciel pour utiliser le référentiel "fidèle" au lieu de "vif" ". Après avoir effectué cette modification, ma configuration LUKS + Yubikey fonctionne désormais le 15.04.
seanlano
4
N'utilisez plus le repo privacyidea! Le paquet est maintenant contenu dans Debian en amont!
cornelinux
1
Il existe un moyen d'éviter la connexion sans yubikey: changez le mot de passe luks à chaque fois que l'utilisateur se connecte. Il y a une implémentation pour Gentoo ici: github.com/flowolf/initramfs_ykfde Il peut être adapté pour Ubuntu en peu de temps.
Unnamed_1
1
Je suppose que la même procédure fonctionne pour la nouvelle version 18.04 LTS?
Mark Veenstra
2
J'ai essayé avec Ubuntu 18.04 et cela fonctionne très bien.
jetole
0

Mise à jour pour Ubuntu 19.04:

Il semble que depuis Ubuntu 19.04 (et peut-être 18.10, je n'ai pas essayé cette version), il cryptsetupa juste assez changé pour briser la façon dont il yubikey-luksfonctionnait. Cette validation à partir du référentiel en amont semble implémenter un correctif, mais le référentiel d'origine ne semble pas avoir été mis à jour depuis octobre 2018. J'ai trouvé cette fourchette du référentiel qui a le correctif, ainsi que quelques autres éléments de rangement - et a réussi à construire un paquet qui fonctionne le 19.04.

Étant donné que je n'ai pas pu trouver une version existante de la fourche mise à jour, la méthode pour yubikey-lukstravailler implique d'obtenir le code source et de construire le package DEB localement, puis de l'installer.

Suivez les étapes de ma réponse précédente , sauf remplacez l'étape 1 par la suivante:


1. Récupérer la source yubikey-luks, construire et installer le package

Installez les dépendances de build avec:

sudo apt install dh-exec devscripts expect yubikey-personalization

Ensuite, téléchargez et extrayez l'archive source:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

Créez le package avec:

make builddeb NO_SIGN=1

Installez-le ensuite:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

Continuez ensuite à suivre le reste des étapes de ma première réponse.

Espérons que d'ici à 19.10, la version de yubikey-luksdans l'archive principale d'Ubuntu puisse être mise à jour afin que la construction manuelle ne soit pas requise.

En prime, la nouvelle version dispose d'un fichier de configuration, que vous pouvez trouver sur /etc/ykluks.cfg. Le message affiché au démarrage peut être configuré dans ce fichier.

seanlano
la source