Tester la fiabilite de son mot de passe
Cet article traite essentiellement de la sécurité de nos mots de passe, des techniques pour les tester et des erreurs à ne pas commettre.
1. Installation de John The Ripper
John The Ripper est un logiciel libre spécialisé dans le cassage de mots de passe en tout genre. On va pouvoir l'installer simplement via la commande suivante (sous Fedora) :
yum install john
2. Utilisation
On créé un nouvel utilisateur sur notre système pour le test, qui se nommera toto et on lui attribut le mot de passe 'pass12' :
adduser toto
passwd toto
On récupère son mot de passe crypté depuis le fichier /etc/shadow :
cat /etc/shadow | grep toto > /tmp/john.tmp
On lance john pour qu'il trouve le password :
john /tmp/john.tmp
Ici, il aura fallu pas moins de 3 minutes 27 secondes à John pour trouver la solution :
Loaded 1 password hash (FreeBSD MD5 [32/32])
pass12 (toto)
guesses: 1 time: 0:00:03:27 (3) c/s: 5850 trying: pass12
Cette méthode fonctionne aussi pour les mots de passe codés en Traditional DES, utilisés dans les fichiers .htpasswd par exemple :
# htpasswd -cb /tmp/john.tmp toto pass12
Adding password for user toto
# john /tmp/john.tmp
Loaded 1 password hash (Traditional DES [24/32 4K])
pass12 (toto)
guesses: 1 time: 0:00:00:08 (3) c/s: 149111 trying: ph34321 - pastin
On pourra aussi utiliser un dictionnaire de mots, afin de trouver le mot de passe plus rapidement. Cette méthode consiste à tester une liste de mots prédéfinis dans un fichier texte :
john --wordlist=/usr/share/dict/words /tmp/john.tmp
Au passage, on notera que lorsque le décodage est long, on peut appuyer à tout moment sur le touche entrée, afin de voir ou en est le logiciel.
3. Les tables de hashages
Les hashs, contrairement au cryptage, sont des techniques permettant de crypter un message qui ne pourra être décrypté. Le logiciel john n'est donc pas capable de crypter des mots de passe étant "hashés".
Cela n'arrêtera pas des personnes mal intentionnées pour autant. En effet, il existe des techniques pour en venir à bout. On pourra prendre l'exemple des attaques par dictionnaire, qui consiste à crypter une liste de mots afin de les comparer au mot de passe illisible à l'oeil nu.
J'ai implémenté cette idée à l'aide d'un petit script php qui se nomme generer-cryptage.php.
Imaginons que j'arrive à récupérer le hash md5 suivant :
f71dbe52628a3f83a77ab494817525c6
Exemple d'utilisation du script :
# wget www.tux-planet.fr/public/hack/bruteforce/generer-cryptage.phps
# mv generer-cryptage.phps generer-cryptage.php
# php generer-cryptage.php > /tmp/maliste
# cat /tmp/maliste | grep f71dbe526
toto:hash_md5:f71dbe52628a3f83a77ab494817525c6
Un autre exemple, sera l'attaque par brute force. Dave Hope a écrit un petit programme en c permettant d'utiliser cette méthode.
Voici un exemple d'utilisation :
# yum install openssl-devel
# wget www.tux-planet.fr/public/hack/bruteforce/md5force.c
# gcc -lssl -o md5force md5force.c
# ./md5force to f71dbe52628a3f83a77ab494817525c6 4
Found: toto <==> f71dbe52628a3f83a77ab494817525c6
On pourra également générer des hashs avec beaucoup plus de caractères :
./md5force 0123456789abcdefghijklmnopqrstuvwxyz. f71dbe52628a3f83a77ab494817525c6 6
Ici, l'exploitation de ces méthodes reste assez limitées. Mais depuis quelques temps, on voit apparaître des sites spécialisés dans la constitution de bases de données contenant plusieurs milliers de hashs : exemple.
4. Les erreurs à éviter
Citation : For example, if the login name is "abc", then "abc", "cba", and "abcabc" are excellent candidates for passwords. [Grampp and Morris, "UNIX Operating System Security"]
Cette citation nous montre que dans la plupart des cas, l'utilisateur utilisera son login pour construire son mot de passe. J'ai donc codé un petit programme en c, qui respecte les contraintes de cette citation, afin de voir le résultat. Le code source de ce dernier est disponible ici : devine-password.c.
Exemple d'utilisation du programme :
# gcc -o devine-password devine-password.c
# ./devine-password
Veuillez saisir le login (max 128 caracteres) : john
Liste de mot de passe possible :
john
nhoj
johnjohn
johnnhoj
nhojjohn
John
Nhoj
JohnJohn
JohnNhoj
NhojJohn
La création d'un mot de passe à partir de son login est donc très fortement déconseillée.
On devra également éviter le mot de passe composé que de chiffres. En effet, leur décodage est très rapide. Pour le démonter, j'ai écrit un autre programme en c, qui est capable de générer une liste de nombres en fonction des paramètres qu'on lui donne. Ce dernier est disponible ici : generer-nombre.c.
Attribution du mot de passe '1234567' à toto et recopiage de la chaîne cryptée dans le fichier temporaire :
passwd toto
cat /etc/shadow | grep toto > /tmp/john.tmp
Exemple d'utilisation du programme, ici on génère une liste de chiffres allant de 0 à 9999999 :
gcc -o generer-nombre generer-nombre.c
./generer-nombre -d 0 -f 9999999 > /tmp/liste-nombre.tmp
Il ne reste plus qu'à lancer le décodage via john, en lui précisant de charger la liste de nombre :
# john --wordlist=/tmp/liste-nombre.tmp /tmp/john.tmp
Loaded 1 password hash (FreeBSD MD5 [32/32])
1234567 (toto)
guesses: 1 time: 0:00:04:21 100% c/s: 4716 trying: 1234567
5. Les solutions
Une solution pour parer toutes ces techniques, est donc d'utiliser un mot de passe long comportant une multitude de caractères différents.
On devra également multiplier le nombre de mots de passe. En effet, utiliser le même et unique mot de passe pour protéger toutes ces données est fortement déconseillé. Des logiciels comme Revelation sous linux, permettent de les générer et vous enlèvent le souci de les retenir.
7 Commentaires pour "Tester la fiabilite de son mot de passe"
Flux des commentaires de cet article Ajouter un commentaireSympa comme article, même si ca manque un peu de rigueur tout ça (cf. définitions de crypter vs chiffrer, le hash n'est pas du chiffrement... :P)
Sinon, John The Ripper fait du brute-force si on lui donne pas de dictionnaire ? Parce que c'est un peu bizarre ce qu'il fait, il cherche des mots de 6 lettres, puis de 8, puis de 7, puis à nouveau de 6... tout ça sans ordre "alphanumerique" apparent...
Du coup, après 1h41min il a pas réussi à me casser mes mots de passe user et root
Sinon, continue ta série d'articles sur la sécurite, c'est toujours intéressant à lire
@Bochecha : les définitions ne sont peu être pas forcement exactes, je suis pas vraiment un expert dans le domaine ...
Pour John The Ripper, je pense qu'il à été écrit de façon à décrypter les mots de passe le plus rapidement possible, d'où quelques procédures de fonctionnement un peu bizarre.
Ouais j'ai regarde dans le log, je m'attendais a ce qu'il fasse du :
- try "a"
- try "b"
....
- try "z"
- try "ab"
- try "ac"
.....
En fait il gère ça avec des expressions rationnelles et c'est vachement plus compliqué que ce à quoi je m'attendais. D'où un fonctionnement en apparence aléatoire, mais certainement des combinaisons de caractères optimisées par différents moyens.
En tout cas, mes mots de passe doivent pas être trop mauvais puisque ça fait maintenant 3h qu'il tourne et il a rien trouvé ^^
Peut être qu'avec un dictionnaire...
A ce propos, il me semble que seul le dictionnaire anglais est disponible par défaut, tu sais pas où en recupérer d'autres ?
Ok pas mal
Bonjour je cherche à decriptet le code suivant:
86ff5cdea17cafce25ad3b83fa6627c7
Mais sans succes... Quelqu'un a t il une solution?
D'avance merci.
Bonjour Pti-Seb,
Merci avant tout pour ce blog. Je ne suis vraiment pas un professionnel de l'informatique mais c'est quelque chose qui m'intéresse beaucoup. Tes articles sont très intéressants et compréhensibles même par des newbees comme moi donc continue.
Je voulais savoir si John peut trouver des mots de passe Windows alors qu'il est installé sous Linux.
Merci.
@CoReY : merci pour tes encouragements. Johne The Ripper est plus spécialisé password Unix/Linux.
Pour ce qui est des paswords Windows, je te conseille plutôt la lecture de cet article :
Cracker des mots de passe Windows avec Ophcrack