Alors ça si c’est pas du titre bien poilu 😀
Le but de billet est de vous montrer comment mettre en oeuvre une Authentification forte via OTP et un téléphone portable qui générera des mots de passes aléatoires et jetables toutes les 60 secondes. Ces mots de passes étant bien sur, en plus du secret partagé, générés en fonction du temps UTC entre le serveur et le téléphone (ce qu’on appelle un token basé sur le temps).
Oui, je sais, ça tue… 😀
Si vous travaillez (allez travailler 😉 ) dans un grosse société qui vous offre un accès VPN externe, il y a de fortes chances que vous rencontriez ce genre de joujou :
ou plus proche de notre époque 😉 celui ci :
On appelle cela des « OTP Token basé sur le temps réel ».
NB: j’ignore si ses images sont libres de droits, et si tel n’est pas le cas, merci de m’avertir (en même temps je fais de la pub pour RSA SecurID alors bon…)
Je ne vais pas détailler ici que qu’est l’Authentification forte et les tokens basés sur le temps car il existe un excellent article sur Wikipédia qui vous expliquera tout et que je vous invite fortement a lire avant de continuer. Lire ICI.
Ce schéma résume l’ensemble :
Pour simplifier, lorsque vous vous connectez, vous devez taper le mot de passe qu’affiche le Token dans les 60 secondes avant qu’il change. Une fois utilisé, ce mot de passe n’est plus valable.
Utilisant ce produit professionnellement, je me demandais si je pouvais monter la même chose à titre personnel.
La première question était « Qu’est ce qui pourrait bien remplacer l’afficheur Token, qui ne soit pas trop encombrant que j’ai toujours sur moi ?… » Réponse : mon téléphone portable.
Ni une, ni deux, fouille laborieuse du nain ternet ou je trouvais quelques projets dont le plus important : Mobile OTP.
J’utilise déja l’authentification OTP chez moi (via OPIE) et ce programme s’en rapproche mais je voulais encore plus ressemblant au clé RSA SecurID.
Ce projet existe et s’appelle FreeAuth.
La seule chose que l’on peut reprocher est son manque de documentation et d’explication.
Voici donc un petit tuto pour mettre en place cette solution.
D’abord, le plus important, synchroniser l’heure du serveur et du téléphone via NTP.
- Synchronisation NTP du serveur
La partie surement la plus simple. Installer le package ntpdate. Puis une crontab « ntpdate serveur de temps ». (exemple : ntpdate fr.pool.ntp.org)
- Synchronisation NTP du téléphone
Après quelques recherches sur le net, j’ai découvert un logiciel permettant une synchronisation NTP d’un téléphone équipé de Symbian S60 r3.
Ce soft s’appelle FreeTimeSync et vous le trouverez sur le site du développeur ICI .
Par contre son installation demande quelques manipulations, le logiciel étant toujours en développement.
– Télécharger l’application.
Ensuite il vous faut signer l’application (Certificat Symbian Open Signed).
– Rendez vous sur le site de Symbiansigned :
https://www.symbiansigned.com/app/page/public/openSignedOnline.do
– Récupérer le numéro IMEI de votre téléphone (séquence *#06# sur la plupart des téléphones).
– Renseigner un email valide, puis le chemin où vous avez sauvegarder l’appli.
– Dans le champ « Capability information » , cliquez sur « select all »
Puis enfin, taper les lettres aléatoires qui s’affichent (une horreur 🙁 complètement illisible et j’ai du essayer 4 ou 5 fois avant d’avoir bon).
Vous recevrez un email de confirmation avec une URL qu’il faudra valider et quelques minutes plus tard, vous recevrez un nouvel email avec le lien pour télécharger votre application signée.
ATTENTION : la synchronisation NTP ne peut se faire qu’en WiFi, par un accès Data ou GPS, le WAP ne laisse pas passer les requètes NTP.
Quelques captures d’écrans :
- Installation de FreeAuth sur le nokia e65
Télécharger le programme FreeAuth MIDLet sur le site :
http://www.freeauth.org/site/wiki/FreeAuth%20MIDLet
Personnellement, j’ai téléchargé le .JAD et le .JAR sur :
Puis j’ai édité le .JAR (qui est un fichier de paramètres) ou j’ai remplacer « networking Y » par « N ».
Il existe une solution de backup/restore en MD5 intégré à l’application mais j’ai du mal a saisir son fonctionnement en mode backup. En mode DB Restore, en traçant les trames réseaux, je le vois bien essayer de recuperer le fichier .bin sur le serveur que j’ai mis en paramètres dans le .JAD mais il échoue (je n’ai pas trop compris la mise en forme de la clé RSA privée 🙁 )
Ayant peu fouillé cette fonctionnalité, je n’en parlerais pas ici, bien qu’elle me paraisse fortement prometteuse et intéressante.
Ensuite, transférer les 2 fichiers sur le nokia e65 (via bluetooth, wifi, cable usb… ce que vous voulez quoi) et avec le navigateur de fichiers du téléphone, lancer le FreeAuth.JAD.
L’installation se passe sans soucis et vous pouvez lancer le programme (options, Next pour la page suivante) :
Tout d’abord entrer un code pin qui vous servira a protéger votre configuration :
Vous devez maintener taper aléatoirement 20 fois sur différentes touches afin de génerer l’entropie de cryptage :
Donner un nom de configuration :
Le programme affiche maintenant le code d’initialisation :
On reste à cette étape pour l’instant !!!
- Installation de FreeAuth sur le Serveur Linux
Il vous faut les headers pam (libpam-dev)
apt-get install libpam0g-dev
Récupérer ensuite pam_freeauth sur le site :
wget http://www.freeauth.org/images/pam_freeauth.tgz tar xzvf pam_freeauth.tgz
cd pam_freeauth make clean make install
Cela installe le module pam freeauth dans /lib/security.
Copier le fichier de conf :
cp -a freeauth.conf /etc/security chmod 600 /etc/security/freeauth.conf
Créer un répertoire de cache
mkdir -p /var/cache/freeauth/ chmod 700 /var/cache/freeauth/
Ensuite dans /etc/pam.d, modifier le service PAM associé (ici SSH):
– commenter « @include common-auth »
– Ajouter
auth required pam_freeauth.so
Je vous laisse peaufiner votre configuration PAM (google est votre ami…), si vous préférer directement modifier votre common-auth et common-password, c’est vous qui voyez.
Modifier le /etc/sshd_config pour positionner la variable ChallengeResponseAuthentication avec YES
Redémarrer le service SSH.
Ensuite, avec le code d’initialisation donné par le nokia e65 plus haut, éditer le fichier :
/etc/security/freeauth.conf
Virer la ligne de test et remplacer par vos valeurs :
user code_initialisation
Exemple ici :
root D58]Nmaa-vdZ-m!P
Pour le compte root (vous pouvez avoir plusieurs code d’initialisation pour un utilisateur, utile si vous avez plusieurs FreeAuth 😉 )
Sur le téléphone, on peut lancer les séquences :
Connectez vous en ssh sur le serveur:
ssh root@192.168.0.111
passcode:
Il vous reste qu’à taper le code afficher sur le téléphone 😀
La classe 😀 😀
Si cela ne fonctionne pas, vérifier que le serveur et le télephone nokia sont à la même heure UTC (en Epoch time) :
Sur le serveur :
echo « `date +%s` / 60 » | bc
20261111
Sinon, modifier UTC en + ou en – et surtout mettez vous à l’heure NTP (entre nous, rien ne vous interdit d’être en UTC+12 🙂 )
Et voila comment monter un système d’authentification forte digne d’une offre commerciale chère avec « peu » de moyens 😀
Ne vous méprenez pas, cette solution est largement aussi satisfaisante pour peu que vous construisiez votre architecture en conséquence.
Si maintenant je vous annonce que l’on peut coupler tout cela avec un serveur RADIUS… (avec XTRadius que vous trouverez ICI ) vous vous dites « omg » et je vous comprends…
Vous verrez qu’a force de fouiller le sujet, les possiblités sont nombreuses.
NB: Il subsiste encore quelques bugs dans l’appli FreeAuth sur le nokia e65, surtout pour le backup. La bidouille que j’ai trouver est de toujours cliquer sur « About » avant de faire un « DB backup » et surtout, être cool….