Artisan Numérique

/système/sécurité/pam/ PAM, une clef USB comme mot de passe

L'idée ici est assez simple : utiliser la partition d'un clef usb pour s'authentifier sur un serveur grâce au plugin pam_usb. Ainsi, plus aucun mot de passe n'est demandé.

Sécurité

Ce type d'authentification peut légitimement soulevé des questions de sécurité en cas de recopie de la clef par un tiers. Alors déjà il y a une protection physique au sens où, pour que cela se fasse, il faut que la clef vous soit dérobée, recopiée et remise à sa place. Même risque que pour celle de votre logement en somme, avec la facilité du numérique en plus.

Maintenant pam_usb intègre aussi deux protections intéressantes. Tout d'abord l'UUID de la partition, son label, le modèle de la clef et l'ID du fabriquant sont comparés avec les informations locales. Ceci dit il doit être possible de copier aussi ces données même si je n'ai pas la moindre idée du comment.

La seconde protection s'appelle "One Time Padding". Elle consiste en une poignée d'octets générés aléatoirement, stockée sur la clef et en local. A l'insertion de la clef, ces octets sont comparés avant d'authentifier l'utilisateur. S'ils correspondent, une nouvelle série aléatoire est générée et vient remplacer l'ancienne sur la clef et en local. Et ainsi de suite.

Du coup si quelqu'un vous dérobe la clef, recopie les données toutes les données de la partition contenant les données, arrive à truqer les ID fabriquant et modèle, il faut qu'il l'utilise avant que vous vous soyez reconnecté, car après, ses données sont invalides. Et s'il arrive à le faire, le système va certes le laisser rentrer, mais va aussi regénérer la série d'octets rendant votre clef inopérante. Ce qui constitue un bon indicateur d'intrusion.

Ceci dit, quelqu'un de motivé peut aussi prévoir le coup et remettre les données en place après intrusion, tout est possible mais maintenant vous pourrez choisir cette solution en connaissance de cause.

Préparation de la clef USB

Première étape, préparer le clef usb. Soit vous utilisez une veille clef et vous la dédiez totalement, soit vous pouvez créer sur votre clef de travail une minuscule partition dédiée au stockage des clefs. Dans un cas comme dans l'autre la partition ne peut être formatté qu'en EXT3 ou ext2. Pas de FAT32 donc. C'est pour cela que sur ma clef de 1GO, j'ai formatté une première partition de 1GO-1Mo en FAT32 pour une utilisation classique, et une petite partition de 1Mo (j'ai pas réussi à faire moins) en EXT3 pour mes clefs. A 2ko la clef, cela me semble suffisant ;-)

Pour créer et formatter la ou les partitions, je vous conseille d'utiliser drakdisk. Il vous faut donc supprimer les partitions existantes, en créez deux nouvelles en ne laissant que 1mo à la seconde. Puis enfin formatter la deuxième partition en EXT3 ou Reiser. La première partitions peut quant à elle être formattée selon vos goûts. Tapez sync puis débranchez et rebranchez la clef pour être sur que tout va bien.

Installation de pam usb

Si vous ne savez pas encore ce qu'est PAM, commencez par faire un tour par ici.

La solution adoptée par pam_usb est d'écrire une série de nombre aléatoire sur notre partition de 1Mo. A la connexion, cette série de chiffre (nommée pad) est comparée à celle qui a été copie dans le dossier utilisateur. Si ça colle, l'utilisateur est validé et pam_usb générée une nouvelle série de chiffres qui stock à nouveau sur la clef et dans le dossier utilisateur. Et ainsi de suite. Cette méthode garantie que toute donnée copies deviendra vite caduque à un détail près. En effet, si je débranche ma clef, que quelqu'un la copie, et se reconnecte avant moi, je suis grillé... La solution a donc ses limites qu'il est important de connaître.

Une fois que vous avez installé le paque pam_usb, branchez votre clef USB, et lancez la commande suivante. Il va vous être demandé de choisir parmi les partitions de clef usb présente sur le système celle qui contiendra les données d'authentification. Choisissez la petite partition et tapez Y pour sauver ces informations dans le fichier de configuration /etc/pamusb.conf.

pamusb-conf --add-device maClef

Ensuite nous allons ajouter un utilisateur "authentifiable" sur la clef. Pour cela utilisez la commande suivante en indiquant en paramètre l'utilisateur à rajouter.

pamusb-conf --add-user gaston

Voilà, c'est terminé. Il suffit maintenant d'ajouter dans /etc/pam.d/system-auth la ligne indiquant à PAM que la clef USB est le premier moyen suffisant pour s'authentifier sur ce système :

auth        required      pam_env.so
auth        sufficient    pam_usb.so
auth        sufficient    pam_tcb.so shadow fork nullok prefix=$2a$ count=8
auth        required      pam_deny.so

Il ne reste maintenant plus qu'à tester. Une fois que tout est bon, vous pouvez rendre pam_usb moins bavard en modifiant /etc/pamusb.conf comme suite :

<defaults>
  <option name="debug">false</option>
  <option name="quiet">true</option>
</defaults>

Conclusion

Voilà donc une solution d'authentification utilisant PAM qui est loin d'être compliquée à mettre en oeuvre tout en simplifiant clairement la vie.