Pour ce premier post qui parle d’informatique, je vais vous presenter la YubiKey : c’est une clé d’authentification forte a base d’One-Time Password (ou mot de passe jetable), empêchant les attaques par rejout. On peut utiliser cette clé avec une double authentification: dans ce cas, le possesseur doit également saisir un autre mot de passe traditionnel, permettant une securite encore plus forte.

Malheureusement, il y a un défaut, cette cle est vu comme un peripherique de saisie standart ( HID ), ce qui ne cadrait pas avec mon utilisation de la clé : je voulais pouvoir modifier l’état d’un service (wifi ou surveillance vidéo par exemple) sans avoir a ouvrir une session, ou dans le cas d’un routeur a base de firmware nihiliste extremiste libre, sans avoir a se connecter a une interface web).

Après un peu de recherche, lors de l’insertion de la clé, grace a une règle udev, je lance mon programme :

ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0010", KERNEL=="event*", RUN+="/bin/yubico"

Je réclame ensuite le péripherique indiqué par la variable d’environnement DEVNAME:

fd = open( getenv("DEVNAME"), O_RDONLY );

A ce stade, j’obtiens copie de tout les évènenements claviers de la clé, mais cette dernière reste attaché a l’entrée standart du PC. Il faut alors réclamer le péripherique (un plongeon dans /usr/include/linux/input.h a été necessaire).

ioctl( fd, EVIOCGRAB, 1 );

A ce stade, il suffit d’attendre une structure input_event (toujours le même fichier input.h ainsi que Documentation/input/input.h). Une gestion de tampon et de timeout et me voilà prêt a vérifier l’OTP.

A ce stade, j’ai joué la solution de facilité et j’attaque le WebService de Yubico pour vérifier la clé OTP fourni par la clé. J’ai prévu trois hooks : en cas de succès, en cas d’échec et lorsque la cle est retiré, le programme quitte automatiquement.

La suite du travail se passera sur une Alix PC-Engines avec OpenWRT pour verifier si tout marche correctement avec mdev, le remplacement d’udev fourni par BusyBox. Il reste aussi plusieurs bricoles comme indiqué dans l’archive.

Le progamme est téléchargeable a http://www.murlock.org/utils/yubikey.tar.bz2. Ma machine, un Aspire One, tourne sur une Debian (mi testing / mi stable) avec le noyau 2.6.32.