One Time Password avec Opie sous Linux Debian Squeeze
Par Rémi TAUPIN le mardi 12 juillet 2011, - Lien permanent
Pour travailler sur un serveur linux
distant en ligne de commande, rien ne vaut ssh avec une authentification
par clé. Cependant, cette technique ne peut être employée que si on se
connecte à partir d'un PC reconnu par le serveur distant. Si on est amené à
travailler régulièrement depuis des machines non reconnues ou dans un
environnement non sécurisé comme par exemple un cyber café, il faut utiliser
une authentification par mot de passe jetable, ou One Time Password. Ainsi, si
le mot de passe est capturé par un keylogger, il ne sera plus utilisable.
Voici une petite procédure pour installer un système OTP sous Linux avec
Opie.
Le principe
Le principe d'un mot de passe jetable est très simple :
- L'utilisateur tente une connexion sur le serveur à partir de sa station de
travail.
- Le serveur lui répond par une question ou une suite de caractères que l'on
appelle le challenge.
- L'utilisateur utilise alors un client OTP dans lequel il va entrer le
challenge donné par le serveur. Dans la plupart des cas ce sera un petit soft
en java installé sur un téléphone portable. En plus du challenge, l’utilisateur
devra donner une passphrase que lui seul connait et qui a déjà été entré sur le
serveur une bonne fois pour toutes.
- Une fois que le client OTP a calculé la réponse au challenge, il l'a rentre
sur le serveur.
- Le serveur vérifie la réponse et donne la connexion. Ou pas...
Installation
On commence par installer le serveur Opie :
serveur:~# aptitude install opie-server
Ensuite, il faut initialiser le mot de passe partagé avec la commande opiepasswd :
serveur:~# opiepasswd -cf
Adding root:
Only use this method from the console; NEVER from remote. If you are
using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase: **********
Again new secret pass phrase: **********
ID root OTP key is 499 vp3782
SEA KNOB TOTO HACK BIERE WINK
L'option -cf demande de rentrer le mot de passe directement au clavier au lieu d'utiliser une calculatrice Opie. Il ne faut utiliser cette option qu'a partir d'un terminal sécurisé.
Note : pour initialiser la mot de passe de l'utilisateur "toto", il faudra utiliser la commande :
serveur:~# opiepasswd -cf toto
Maintenant que la base est installée, on modifie la configuration de pamd pour que Opie soit pris en charge :
Editer le fichier /etc/pam.d/ et rajouter les lignes suivantes à la fin du fichier :
auth sufficient pam_opie.so
auth required pam_deny.so
Toujours dans le même fichier, commenter la ligne suivante pour que l'authentification par mot de passe simple soit désactivée :
#@include common-auth
Note: sur mon serveur, j'avais déjà désactivé l'authentification par mot de passe en mettant le paramètre PasswordAuthentication à no dans le fichier /etc/ssh/sshd_config. Cependant aprés avoir installé Opie je me suis rendu compte que les mots de passe normaux étaient de nouveau acceptés. Il est donc nécessaire de commenter la ligne @include common-auth.
Si on ne veut plus du tout utiliser les mots de passes normaux et ce quel que soit le service, il faut commenter toutes les lignes du fichier /etc/pam.d/common-auth.
Il faut ensuite éditer le fichier /etc/ssh/sshd_config et mettre la paramètre ChallengeResponseAuthentication à yes :
serveur:~# vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
Redémarrer ssh
serveur:~# /etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.
Test de la connexion
Pour pouvoir se connecter, il faut utiliser une calculatrice Opie qui va pouvoir résoudre les challenges proposés par le serveur. En voici une petite liste :
Client Windows :
ftp://ftp.cs.ait.ac.th/pub/security/opie/WinKey.exe
Clients mac :
http://www.orange-carb.org/SkeyCalc/
http://blee.org/Ski/
Client java (pour tél portable par exemple) :
http://fatsquirrel.org/software/vejotp/
Client web :
http://math.berkeley.edu/~vojta/opiekey.html
http://www.cs.umd.edu/~harry/jotp/
Si on ne possède pas de calculatrice Opie, il est toujours possible calculer une liste de réponses que l'on pourra utiliser plus tard. Par exemple pour calculer les 10 prochaines réponses à partir du challenge actuel, utiliser la commande :
serveur:~# opiekey -n 10 496 vp3782
Il faudra alors imprimer les réponses et les conserver précieusement à l'abris des regards indiscrets...
Tout est maintenant pret pour tester OTP sur le serveur distant. Bien sûr on ne peux pas faire le test en se connectant depuis une machine déjà configurée avec une paire de clé...
Macbook:~# ssh serveur.net
otp-md5 496 vp3782 ext, Response: **** **** **** **** ****
Dans la réponse du serveur, 496 est le n° de séquence à entrer dans la calculatrice Opie. On remarquera au fil des connexions que les n° de séquences décroissent.
Si tout est correct, le serveur autorise la connexion...