PAM, une clef USB comme mot de passe
Le 13 October 2008 à 04:47.

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 Wink

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.

Commentaires

Spami, le 18 août, 2007 - 21:34

C'est un exellent tuto !
Mais il ne faut égarer sa clef USB dans ce cas Smiling

Ulhume, le 19 août, 2007 - 00:05

Merci Smiling

Bah sinon, il y a toujours le mot de passe qui continue à fonctionner;-) Le seul truc, c'est qu'à la longue on oublie le fameux mot de passe ...

djib, le 8 novembre, 2007 - 14:52

Intéressant et plutôt cool !

Juke, le 8 novembre, 2007 - 15:11

Salut

Est t'il possible de ne pas avoir à taper le login.
Genre je suis sur gdm, quand je branche ma clé, il se loggue automatiquement avec l'utilisateur correspondant.

A+

Julien

Ulhume, le 8 novembre, 2007 - 16:08

@Juke pas directement non, mais cela doit être jouable en modifiant l'agent (les sources).

Dup, le 8 novembre, 2007 - 22:50

Ce qui pourrait être drôle c'est de configurer l'accès pour root, et d'activer le support de pam_usb dans le fichier /etc/pam.d/sshd Big grin

Ulhume, le 9 novembre, 2007 - 01:33

@Dup LOL Wink Petit malin, rassures toi j'y avais déjà pensé, et chose étrange, si tu fais cela, ssh ne répond plus. Quel que soit l'accès d'ailleurs. Je ne sais pas si c'est fait exprès mais si tu tentes un ssh sur une machine où la clef est branchée, ça t'envoie bouler Smiling

dup, le 9 novembre, 2007 - 09:23

Ah oui tiens je me demande pourquoi ca ne marche pas, ce pourrait-il que le client recherche la clé usb sur le poste initiant la connexion plutôt que le serveur, ce qui me paraît bizarre ? En tous cas je vois je ne suis pas le seul à y avoir pensé.

Ulhume, le 9 novembre, 2007 - 10:06

@dup ben tu sais, dés qu'il y a une conneries à faire Wink

Plus sérieusement je viens de refaire le test avec la dernière version (le coup de l'erreur c'était avec la 0.4.1). Maintenant lorsque je tente une connexion à partir d'une machine distante sur une machine avec pamusb configurée et une clef insérée, le système me demande malgrès tout mon mot de passe. Donc le cas est prévu (heureusement tu me diras Wink et l'erreur devrait être une mauvaise gestion du fallback(pamusb/shadow) dans le même cas de figure.

Donc ça va, c'est safe Smiling

Dup, le 9 novembre, 2007 - 18:51

Bon ca me rassure alors Smiling
Il est vrai que j'ai entendu dire que la version 4.1 est buggé.

Ulhume, le 10 novembre, 2007 - 07:55

C'est un fait, il avait au moins deux bugs, celui-là et une erreur bien casse pied de reconnaissance de partitions, les deux sont réglés à l'évidence.

Anonymous, le 13 octobre, 2008 - 11:26

Et pour une excellente doc, le wiki d'ubuntu-fr. Cette documentation a été mis en place il y a pas très longtemps.

http://doc.ubuntu-fr.org/tutoriel/pam-usb

Navaati, le 14 octobre, 2008 - 21:36

Méheu… je vois pas trop où est la sécurité la dedans, vu qu'on peut très facilement copier la clef à partir de la clef (Big grin), non ?

Ulhume, le 15 octobre, 2008 - 01:39

@Navaati Certes Wink Pour la peine j'ai ajouté un chapitre expliquant pourquoi ce n'est pas si simple.

Maintenant la "vraie" sécurité c'est les fameuses 3 règles : quelque chose que je sais (ex. mot de passe), quelque chose que je possède (ex. clef usb) et quelque chose que je suis (ex. lecteur d'empreinte). Rien ne t'empêche donc d'ajouter la clef USB à la panoplie Wink

Spami, le 15 octobre, 2008 - 08:37

Avec une clef corsair type "pad lock" la securite pourrait etre augmente puisqu'il y a un code a rentre pour activer la clef.

Ulhume, le 15 octobre, 2008 - 08:42

@Spami Yep j'avais pensé à ce type de clef, tu en as testé une "en vrai" ?

Spami, le 15 octobre, 2008 - 09:32

oui j'en ai une a la maison.
C'est sympa, un peu gadget.
Ce qui est bien pense c'est le système d'activation ou non du code.

Apres, je n'utilise pas le code, parce que c'est "lourd" pour une utilisation frequente(plusieur fois par jour)

Ulhume, le 15 octobre, 2008 - 09:36

@Spami
merci du tuyau, je vais aller regarder par là. Au delà de pam_usb, c'est pas trés malin de protéger les données sur son portable et d'avoir toujours l'option de paumer sa clef usb Wink

Navaati, le 15 octobre, 2008 - 14:15

Oh, d'accord, je n'avais pas compris le cadre d'utilisation de cette méthode : elle n'est faite que pour UNE machine déjà secure, pas pour pouvoir se connecter à partir de n'importe où en toute sécurité… Apparemment, pour ça il faut un de ces précieux eTokens de chez Aladdin (entre autre) avec lesquels on est sûr que ce que je possède est bien unique.

Dab, le 18 octobre, 2008 - 14:33

A voir aussi pour plus de fonctionnalités : http://usbauth.delta-xi.net/

Ulhume, le 18 octobre, 2008 - 15:11

@Dab je ne vois pas bien ce que cela apporte de plus en terme fonctionnel. Moi le truc que j'adorerais c'est qu'un mot de passe soit encrypté sur la clef et qu'il soit injecté dans la pile PAM pour servir aux autres modules. Car le problème du "password less" c'est... qu'il n'y a pas de mot de passes, or certains modules (pam_mount, pam_gnome_keyring, etc..) en ont besoin pour déverrouiller leurs stockages.

Ce serait peut être l'occasion d'en écrire un de module pam, du genre

auth [success=1] pam_usb
auth required pam_deny
auth pam_load_pass secrets=/media/usbpass/.secrets
auth pam_mount

SkeRoy, le 21 janvier, 2009 - 15:46

Salut,

et sion veut sécuriser en imposant un mot de passe + présence de la clé, suffit-il de mettre les deux pam_usb et pam_tcb en required ?

Ulhume, le 21 janvier, 2009 - 15:57

Yep, très exactement

Clochette, le 13 octobre, 2009 - 16:24

@ Spami :

dans le cas bien entendu que les partitions ne soit pas crypter ( ce qui est le cas chez moi, il faut donc se prémunir de toute perte de clé usb en notant tout de même sa passe phrase dans un petit carnet "bien planqué mais pas trop Sticking out tongue ) et de démarrer sur un live cd qui va vous permettre d'accéder à PAM_USB afin de pouvoir corriger le tir Wink

Dans ce cas vous pouvez aussi utiliser ces possibilités :

==> Identification par clé uniquement

Il faut modifier le fichier /etc/pam.d/common-auth comme suit :

auth  required  usb_pam.so

et commenter la ligne :

auth  required  pam_unix.so nullok_secure

==> Identification par clé et mot de passe

Il faut comme précédemment ajouter la ligne

auth  required  usb_pam.so

et laisser le reste du fichier tel quel.

==> Identification par clé ou par mot de passe

Ajouter la ligne au fichier /etc/pam.d/common-auth

auth  sufficient  usb_pam.so

"" J'adore ce petit ilot d'astuce en tout genre et de sources d'inspiration ""

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage


Commentaires récents
Porte secrète