Qu'est-ce que c'est ?
De nombreux systèmes informatiques se basent sur une authentification faible de type login/mot de passe. Ce type d'authentification a de nombreuses contraintes :
- Un mot de passe choisi par l'utilisateur est souvent simple à retenir. Il peut donc être attaqué par dictionnaire.
- Un mot de passe "classique" a une durée de vie généralement longue (plusieurs semaines au minimum). Même si le mot de passe est correctement choisi pour être difficile à trouver, il reste néanmoins attaquable par la méthode de force brute.
- Souvent les mots de passe sont transférés en clair sur le réseau. Par un sniffer, il est possible de récupérer certains mots de passe.
- Si un mot de passe est chiffré avant d'être transmis sur le réseau, avec un sniffer, on peut récupérer le mot de passe chiffré, et faire une attaque par force brute sur le chiffré.
Les mots de passe à usage unique (one time password ou OTP en anglais) sont un système d'authentification forte basés sur le principe de challenge/réponse. Le concept est simple : Utiliser un mot de passe pour une et une seule session. De plus, le mot de passe n'est plus choisi par l'utilisateur mais généré automatiquement par une méthode de précalculé (c'est à dire que l'on précalcule un certain nombre de mot de passe qui seront utilisés ultérieurement). Cela supprime les contraintes de :
- Longévité du mot de passe. Le mot de passe est utilisé une seule fois
- Simplicité du mot de passe. Le mot de passe est calculé par l'ordinateur et non pas choisi par un utilisateur
- Attaque par dictionnaire ou par force brute : Pourquoi essayer de cracker un mot de passe obsolète ?
- Sniffer et chiffrement du mot de passe : Le mot de passe à usage unique peut être envoyé en clair sur le réseau : Lorsqu'un sniffer en détecte un, il est déjà trop tard, car il est utilisé, et non réexpoitable.
Comment cela fonctionne-t-il ?
D'un point de vue du serveur
L'administrateur du serveur (c'est à dire de l'ordinateur qui va recevoir la connexion et qui va déclencher le processus d'authentification) doit utiliser un outil qui va permettre de générer un certain nombre de mot de passe à usage unique.
Ensuite, il utilisera des outils adaptés à cette méthode d'authentification, par exemple il remplacera les programmes
login ou
su sous Unix,
ftp, etc... Ces OTP générés sont calculés à partir de trois données :
- Une donnée publique (mot ou phrase courte par exemple), choisie par l'administrateur. On appèle cela aussi la semence, ou seed en anglais.
- Un numéro de séquence : C'est un nombre relatif au numéro de connexion. C'est un compteur, tout simplement. C'est ce paramètre qui rend le mot de passe unique : L'OTP de la connexion n°587 n'est pas le même que la connexion n°586 ou 588.
- Un mot de passe utilisateur, connu de lui seul, qui servira à l'authentifier.
Voici comment cela se passe :
L'utilisateur exécute le programme
opiepasswd.
Le système lui demande son mot de passe, et ensuite il lui demande de calculer le premier challenge.
scrap $ /usr/local/bin/opiepasswd
Adding scrap:
You need the response from an OTP generator.
New secret pass phrase:
otp-md5 499 ge8086
Response:
|
L'utilisateur va alors calculer le challenge avec un logiciel :
Calcul de la réponse au challenge avec Winkey
L'utilisateur fait ensuite un copier/coller, et les OTP sont générés. Le système est opérationnel.
scrap $ /usr/local/bin/opiepasswd
Adding scrap:
You need the response from an OTP generator.
New secret pass phrase:
otp-md5 499 ge8086
Response:KURT SLOW HINT BODE ART HERB
ID mint OTP key is 499 ge8086
KURT SLOW HINT BODE ART HERB
scrap $
|
D'un point de vue du client
L'utilisateur va se connecter normalement sur le système distant (telnet, ftp, etc...)
Ensuite, il recevra un challenge à résoudre :
Trying 212.43.230.175...
Connected to securiteinfo.com.
Escape character is '^]'.
Red Hat Linux release 4.2 (Biltmore)
Kernel 2.0.32 on an i386
login: scrap
otp-md5 498 ge8086 ext
Response:
|
L'utilisateur va ensuite utiliser un programme pour résoudre ce challenge : Il y rentre le challenge en question, et entre son mot de passe personnel.
Calcul de la réponse au challenge avec Winkey.
L'utilisateur n'a plus qu'à copier/coller l'OTP généré pour s'authentifier.
Trying 212.43.230.175...
Connected to securiteinfo.com.
Escape character is '^]'.
Red Hat Linux release 4.2 (Biltmore)
Kernel 2.0.32 on an i386
login: scrap
otp-md5 498 ge8086 ext
Response: RIO AMOS SLAT NOOK ROD SLAT
scrap #
|
D'un point de vue technique
Le principe des OTP repose sur une fonction de hachage sécurisée. Ce hachage ne peut être "remonté" pour revenir à l'original. Une fonction de hachage permet d'obtenir une information sur 64 bits. Généralement les mots de passe à usage uniques sont générés à partir des fonctions de hachage
MD4 et
MD5.
Génération des OTP
La génération des OTP se font en trois étapes :
- Une préparation, qui va prendre en compte toutes les données utilisateurs : la semence, et le mot de passe.
- La génération, qui consiste à appliquer la fonction de hachage n fois sur elle même, n étant le nombre de séquences.
- Le formatage du résultat, qui transforme la donnée obtenue de longueur égale à 64 bits en un mot de passe à base
de caractères ASCII, c'est à dire lisible par l'homme.
Calcul des mots de passe à usage unique.
Vérification des OTP : Authentification de l'utilisateur
Comme nous l'avons vu dans l'exemple utilisateur, le challenge en lui même (généré par le serveur) est composé de trois parties :
- otp-md5 : indique que c'est un OTP calculé en MD5.
- 498 : c'est le numéro de séquence actuelle.
- ge8086 : c'est la semence.
L'utilisateur doit donc calculer la réponse au challenge grâce à un programme (par exemple WinKey). Il envoie ensuite le résultat de son calcul au serveur.
Du côté serveur, le système a un fichier qui contient, pour chaque utilisateur, le dernier OTP valide utilisé pour une authentification. Sur les systèmes Unix, ce fichier est
/etc/skeykeys. Pour vérifier la validité de l'OTP utilisateur, le serveur a une astuce : Le numéro de séquence (498 dans notre exemple) est
décrémenté à chaque authentification valide. Aussi, si le client calcule pour un numéro d'itération
n, le serveur, lui, a
n+1 stocké dans son fichier. Dans notre exemple, le serveur a donc stocké l'OTP correspondant au numéro de séquence 499. Le système n'a donc plus qu'une tâche à effectuer : Calculer le hachage de l'OTP que l'utilisateur vient de lui envoyer. Si le résultat est égal au résultat
n+1 stocké dans le fichier, l'utilisateur est authentifié.
Les failles des mots de passe à usage unique
Malgré tout, les mots de passe à usage unique comportent des failles exploitables. Elles sont présentées par ordre croissant de difficulté pour l'attaquant :
Social engineering, trashing, etc...
L'utilisateur, l'éternelle faiblesse. Quelquefois, il est possible de récupérer le mot de passe de l'utilisateur en regardant sous le clavier, dans ses tiroirs, ou même en fouillant ses poubelles... Une fois que vous avez le mot de passe, vous pouvez répondre au challenge...
Une autre technique : Certains programmes, comme WinKey, comportent un trou de sécurité : Tant que le programme de calcul n'est pas fermé, celui-ci garde en mémoire le mot de passe, visible sous forme d'étoiles. (voir photos d'ecrans ci-dessus). Il existent des programmes dans l'environnement Win32 qui permettent de rendre clair le contenu des étoiles. Cinq minutes d'inattention suffisent...
Attaque par cheval de Troie et keylogger
Il "suffit" de mettre un cheval de Troie ou un keylogger sur le poste de l'utilisateur victime, pour essayer de récupérer le mot de passe de celui-ci.
Le fichier skeykeys
Si le hacker a la main sur le serveur, il est possible qu'il exploite une faille : Si le fichier
/etc/skeykeys est disponible en lecture pour le hacker, voici ce qu'il y trouve :
| login |
numéro de séquence |
semence |
Représentation hexa de la réponse du challenge (le dernier OTP utilisé) |
Date |
Heure |
| victime |
985 |
xv 5235b |
5b3c89552aa09435 |
Jun 25, 2001 |
05:30:15 |
L'attaquant récupère alors : Le login et la représentation hexa de l'OTP. Avec cette représentation, il peut créer un outil qui générera la réponse au challenge en fonction d'un dictionnaire, ou par force brute (voir ci dessous).
Pour contrer cette attaque, vérifiez que ce fichier n'est pas en lecture pour tout le monde (encore moins en écriture !).
Attaque par sniffing
L'OTP est envoyé vers le serveur en clair. Il est donc possible de récupérer la réponse du challenge et de faire une attaque par dictionnaire ou par force brute (voir ci-dessous).
Attaque par dictionnaire
L'attaque par dictionnaire permet de calculer la réponse au challenge en fonction d'un nombre de mots préalablement stockés dans un gros fichier. Ces mots serons utilisés comme mot de passe de l'utilisateur. Si le résultat du calcul est identique à la réponse d'un challenge passé, alors c'est que le mot utilisé dans le dictionnaire est le mot de passe de l'utilisateur.
Attaque par force brute
Exactement le même principe que pour l'attaque par dictionnaire. C'est plus long, mais cela reste toujours possible...
Attaque par le milieu
Cette attaque consiste pour l'attaquant à avoir la main sur une machine qui transmet l'authentification de la session. C'est une machine intermédiaire. Dans ce cas, l'attaquant peut écouter les trames qui transitent et repérer le challenge et la réponse du challenge. Là aussi il devra utiliser le cracking par dictionnaire ou par brute force. Cette méthode revient à du sniffing.
Attaque par le milieu
Attaque par spoofing
La technique du spoofing, dans ce cas, est de se faire passer pour le serveur. C'est une attaque par le milieu (voir ci-dessus), mais un peu plus évolué. En effet, il faut en plus simuler exactement le comportement du serveur. On récupère ainsi le compteur (numéro de séquence) et la réponse au challenge Il est alors possible d'exploiter cela par deux techniques différentes :
- Soit essayer de trouver le mot de passe utilisateur par dictionnaire et brute force
- Soit l'attaquant a utilisé sciemment un numéro de séquence inférieur à ce qu'attend vraiment le serveur. Dans ce cas, l'attaquant peut alors utilisé un nombre de connexion, au détriment de l'utilisateur, égal à la différence entre le vrai numéro de séquence serveur, et le faux numéro de séquence de l'attaquant.
Cette attaque est facilement décelable pour l'utilisateur victime, car il se rend compte que le serveur ne fonctionne pas correctement. Par contre, pour l'attaquant, les données récupérées sont
directement exploitables. Cette attaque est donc à prendre très au serieux, d'autant plus qu'elle n'est pas très difficile à réaliser.
Attaque par faille temps réel
Il se peut qu'il y ait un problème dans l'implémentation d'un OTP. Il est possible que, lorsque deux ouverture de session arrivent
en même temps sur le serveur, celui-ci ne sache pas comment les gérer. C'est un problème purement temps réel. Il y a alors trois cas de figures :
- Le serveur rejette les deux connexions. L'attaquant n'a aucune chance d'avoir accès. L'utilisateur non plus ! Ce cas est peu probable.
- Le serveur accepte une connexion (la première arrivée en général), et refuse la seconde. Dans ce cas, l'attaquant a 50% de chance de réussir. Ce cas est probable par l'utilisation d'une sémaphore.
- Le serveur accepte les deux connexions. L'attaquant a 100% de chance de réussir. Ce cas est peu probable.
Attaque par Hi-Jacking
L'authentification se fait au moment de la connexion. Passé cette authentification, il n'y a plus d'autres moyens de vérifier si l'authentification est toujours correcte.
Aussi, il est possible de détourner la communication TCP/IP. C'est une attaque de type Hi-jacking. Une fois le détournement effectué, le serveur dialogue avec l'attaquant,et l'attaquant utilise la session de la victime.
Conclusion
Le maillon faible des OTP est le mot de passe utilisateur. Comme on l'a vu, il y a divers moyens pour le récupérer. Les mots de passe à usage uniques ne sont donc pas fiables à 100%
Ceci dit, cette méthode est tout de même beaucoup plus sécurisée que la méthode traditionnelle login/password.
De plus il est possible de l'implémenter sans avoir de coûts excessifs. Il faudrat néanmoins penser à former les utilisateurs, qui n'ont pas l'habitude de manipuler un logiciel de chiffrement pour se loguer :)
Références
- La RFC 1760 : The S/KEY One-Time Password System
- La RFC 1321 : The MD5 Message-Digest Algorithm
- La RFC 1320 : The MD4 Message-Digest Algorithm
Tags
AUTHENTIFICATION
MOT DE PASSE
Inscription à notre lettre d'information
Inscrivez-vous à notre
lettre d'information pour vous tenir au courant de nos actualités et de nos dernières trouvailles.