Tester la fiabilite de son mot de passe


cadena
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 commentaire
  •  

    Sympa 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 :-D

    Sinon, continue ta série d'articles sur la sécurite, c'est toujours intéressant à lire :-)

    RépondreRépondre
    bochecha , le 7 février 2007 à 22:31
  •  

    @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.

    RépondreRépondre
    pti-seb , le 7 février 2007 à 23:18
  •  

    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 ?

    RépondreRépondre
    bochecha , le 7 février 2007 à 23:51
  •  

    Ok pas mal

    RépondreRépondre
    rem , le 15 mai 2007 à 04:40
  •  

    Bonjour je cherche à decriptet le code suivant:
    86ff5cdea17cafce25ad3b83fa6627c7
    Mais sans succes... Quelqu'un a t il une solution?
    D'avance merci.

    RépondreRépondre
    bagheera , le 4 mai 2008 à 12:57
  •  

    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.

    RépondreRépondre
    CoReY , le 9 juin 2008 à 23:34
  •  

    @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

    RépondreRépondre
    pti-seb , le 10 juin 2008 à 00:00
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum