Howto : OTP pour SSH sous Debian GNU/Linux

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 : passwordopie

ID 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
Using the MD5 algorithm to compute response.
Enter secret pass phrase : passwordopie
490 … ICI la liste des OTP
debian:~#

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

Documents

Liens

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.

One thought on “Howto : OTP pour SSH sous Debian GNU/Linux

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s