Qu’est-ce que OTP ?
OTP signifie « One Time Password » ou Mot de passe a Usage Unique. C’est un mot de passe valable pour une seul session.
Pourquoi OTP ?
Le principal avantage de cette méthode est qu’elle ne permet pas de mettre en place de attaques par rejeux. C’est-à-dire que si quelqu’un enregistre le traffic entre le client et le serveur puis rejoue ce traffic dans le but de s’authentifier, ce dernier ne pourra pas le pass n’etant valide que pour une session qui a déjà été consommé vu qu’il a pu l’enregistrer. OTP tire parti de nombres aléatoires afin de ne pas pouvoir prédire les OTP. (A l’inverse des Sequence Number sous NT4 par exemple).
Comment fonctionne OTP ?
Il y a 3 approches principales :
- OTP basé sur la synchronisation entre le serveur et le client (valide pour une seule periode de temp).
- La génération mathématique du password selon le précédent password.
- L’utilisation de challenge et d’algorithmes mathématique et/ou un compteur.
Il y a plusieurs manières de faire parvenir au client le prochain OTP, avec des token electronique, un client web, d’autre avec un daemon qui tourne sur le mobile du client ou enfin, la plus simple, les OTP sont ecris sur une feuille emporté avec la machine. (La plus connue, mais la plus risqué !! )
Installation
Voici les paquets à installer pour faire fonctionner l’OTP sur Debian.
apt-get install libpam-opie opie-server opie-client
Configuration
Configuration OTP
Il est fortement recommandé de générer les OTP et les challenges en local sur la machine. En effet, si au moment de la création, via ssh par exemple, de vos OTP un hacker sniff votre communication, il récupère alors les OTP, malgré le SSL dessus qui peut être Spoofé.
Nous allons maintenant générer un challenge OTP associé à votre compte avec un password.
debian:~# opiepasswd –c root
Updating root:
Using MD5 to compute reponses.
Enter new secret pass phrase : passwordopie
Again new secret pass phrase : passwordopieID root OTP key is 499 de8236
SLOB HOLM NARY MARE BOLO TORN
debian:~#
J’ai ici créé mon challenge pour me connecter. Mon password opie est « passwordopie » et mon password système est « password ». On vas ensuite généré 50 OTP pour root.
debian:~#
opiekey -n 50 499 de8236
debian:~#
Using the MD5 algorithm to compute response.
Enter secret pass phrase : passwordopie
490 … ICI la liste des OTP
Nous avons maintenant créé nos OTP. Il ne nous reste plus qu’a intégré cela avec pam dans l’authentification SSH.
Configuration SSH
Pour permettre a ssh d’employer des OTP il faut modifier le fichier /etc/pam.d/sshd. On doit rajouter la ligne : auth sufficient pam_opie.so
Voici a quoi ressemble le mien :
debian:~# cat /etc/pam.d/sshd
# PAM configuration for the Secure Shell service
auth sufficient pam_opie.so
auth required pam_unix.so
auth required pam_deny.so
session required pam_limits.so # Limits
session optional pam_motd.so # MOTD
session optional pam_mail.so standard noenv # MAILBOX
debian:~#
Se connecter
Un fois cela fait, redémarrez ssh et tentez de vous loguer en SSH.
login as: root
Password: password #celui du système
otp-md5 497 de8236 ext, Response: NIBS COME JILL BEAU ED MOB
Welcome Home Manu ^^
Last login: Fri Jan 7 00:12:11 2011 from 192.168.0.103
debian:~#
OTP Generator
Coté client j’utilise une petite applet java OTPGenerator qui est un s/Key Generator en Java et respecte le RFC 2289. Il dérive du projet JOTP de Harry Mantakos et reprend certaines de ses sources. Un lien vers le logiciel est fourni a la fin du howto. L’applet se trouve dans bin.
Dans password je renseigne passwordopie, le password donné lors de la création du challenge. Ensuite je renseigne la Sequence et le challenge que j’ai pour me connecter. Le hash doit être en MD5 (par defaut, le MD5 est utilisé). En fois cliqué sur calculé nous obtenons la clef a renseigné au serveur. Ici : NIBS COME JILL BEAU ED MOB
jsOTP(404)
jsOTP est un projet sous licence BSD de Jeremy Lin se composant de librairies javascript permettant de calculer ses Token en MD5, MD4, sha-1, ripemd-160 et de les traiter par lots.
Voici une implémentation que j’ai réalisé qui correspond a notre besoin en MD5 avec un format 6 mots. http://manu404.dyndns-home.com/jsotp404/
Il fonctionne en JavaScript avec JqueryUI. Une archive est disponible dans les ressources.
Référence
Logiciels
- OTP Generator Bin : http://sourceforge.net/projects/otp-java/
- jsOTP 404 : http://manu404.dyndns-home.com/jsotp404/
Documents
- Version PDF : http://manu404.dyndns-home.com/blogdoc/HowtoOTP.pdf
- Version Docx : http://manu404.dyndns-home.com/blogdoc/HowtoOTP.docx
Liens
- Newsgroup : http://mail.linux.ie/pipermail/ilug/2005-August/083131.html
- Wiki : http://en.wikipedia.org/wiki/One-time_password
- OTP Generator website : http://otp-java.sourceforge.net/
- Licence GNU FDL : http://www.gnu.org/licenses/fdl-1.2.html
License
Copyright (c) 2011 Istace Emmanuel.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant sections, with Front-Cover Texts : “Howto : OTP pour SSH sous Debian GNU/Linux”, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.
Copyright (c) 2011 Istace Emmanuel.
Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.2 ou ultérieure publiée par la Free Software Foundation ; avec aucune section altérable, Avec le texte de première page de couverture suivant : « Howto : OTP pour SSH sous Debian GNU/Linux », sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée « GNU Free Documentation License » de ce document.
Tremendous things here. I am very happy to look your article.
Thanks so much and I’m looking forward to contact you. Will you please drop me a e-mail?