Présentation
Le crack de mot de passe consiste à tenter de retrouver un mot de passe à partir de son empreinte.Sous Unix, les mots de passe des utilisateurs de la machine sont cryptés avec un algorithme de cryptage à sens unique (md5 ou sha) sauvegardés sous cette forme afin d'éviter qu'un pirate puisse lire directement tous les mots de passe des utilisateurs. Ces hashs sont enregistrés dans les fichiers /etc/passwd et /etc/shadow.
/etc/passwd
Ce fichier peut être lu par tout le monde et contient les noms d'utilisateur, l'id d'utilisateur, l'id de groupe, le shell d'ouverture de session, et les informations sur les comptes (nom complet, etc...).Sur d'anciens systèmes, ce fichier contient aussi le mot de passe encrypté. Voici la structure de ce fichier:
me:x:1002:1002:,,,:/home/me:/bin/bash
- me
- Nom d'utilisateur
- x
- Mot de passe crypté. Si ce champ contient x, le mot de passe est situé dans /etc/shadow
- 1002
- Numéro d'utilisateur UID (gestion des droits)
- 1002
- Numéro de groupe GID (gestion des droits)
- ,,,
- Informations supplémentaires de compte (dans l'ordre: nom complet, numéro de bureau, numéro de téléphone du bureau, numéro de téléphone personnel, autres). Si aucun des champs n'a été renseigné, ce champ est composé de 3 virgules.
- /home/me
- Répertoire de home de l'utilisateur
- /bin/bash
- Programme d'ouverture de session
/etc/shadow
Ce fichier contient notamment les mots de passe cryptés des utilisateurs du système ainsi que les dates de validité des comptes. La structure de ce fichier est comparable à celle de /etc/passwd, il existe une ligne de 9 champs par compte. Voici la structure de ce fichier:me:$1$GXJzVR5J$vS4wC7AW6hV8TvLu6Dtxt.:14619:0:99999:7:::
- me
- nom d'utilisateur
- $1$GXJzVR5J$vS4wC7AW6hV8TvLu6Dtxt.
- cryptage utilisé, salt, mot de passe crypté (séparés par le signe "$"
- 14619
- Nombre de jours entre le 1er janvier 1970 et la date de dernier changement du mot de passe
- 0
- Nombre de jours avant que le mot de passe ne puisse être changé.
- 99999
- Nombre de jours après quoi le mot de passe doit être modifié (99999 par défaut).
- 7
- Nombre de jours pour lequel un utilisateur est averti que son mot de passe expirera
Le mot de passe peut être crypté en md5 (valeur $1$), sha256 (valeur $5$) ou sha512 (valeur $6$). Dans la ligne donnée en exemple, le mot de passe est crypté en md5. Il n'est pas crypté seul, pour renforcer la résistance aux attaques, il est crypté en utilisant un "salt", valeur ajoutée au mot de passe qui permet de ne jamais obtenir la même empreinte même si le mot de passe est le même. Dans mon exemple, le salt vaut GXJzVR5J.
Les algorithmes utilisés pour créer les empreintes donnent des résultats à taille fixe. Ainsi, quelle que soit la taille du mot de passe, l'empreinte fait la même taille et ne donne pas d'indication quand à la longueur du pass.
Explication des techniques
Il existe différentes techniques de crack des mots de passe:- bruteforce incrémental
- attaque par dictionnaire
- rainbow table
Pour cracker les mots de passe avec John, il est nécessaire de combiner les fichiers /etc/passwd et /etc/shadow. Pour ce faire, utiliser la commande unshadow de la suite logicielle john de cette manière:
unshadow /etc/passwd /etc/shadow > pass
Bruteforce Incrémental
Cette technique consiste à tenter toutes les combinaisons de caractères possibles. Cette technique est extrêmement couteuse en ressources et en temps. C'est la technique de dernier recours au cas où toutes les autres méthodes auraient échouées.John reconnait différents modes de bruteforce incrémental:
- Alpha
- Digits
- Alnum
- LanMan
- All
Pour lancer cette attaque avec john, il faut le lancer avec le paramètre -incremental:MODE, par exemple:
john --incremental:All pass
Bruteforce par dictionnaire
Les attaques par dictionnaires sont les plus courantes. Avec cette attaque, on utilise un dictionnaire (fichier contenant une liste de mots) afin de rechercher le mot de passe. Cette attaque visent à faire tomber les mots de passes les plus faibles dans le temps le plus court possible.Si vous manipulez vos fichiers dictionnaires, il est possible que ceux-ci contiennent plusieurs fois les mêmes mots. Il est possible de "nettoyer" vos fichiers dictionnaires des doublons en utilisant les commandes cat, sort et uniq de cette manière:
cat dictionnaire.txt | sort | uniq > clean_dic.txt
Cette attaque doit être la première à être lancée car elle est la plus rapide (la durée est évidemment fonction du nombre de mots contenus dans votre fichier.
john dispose de son propre dictionnaire mais il est bien entendu possible de spécifier un autre dictionnaire (ce qui est préférable du fait de la pauvreté du dictionnaire d'origine).
Vous pouvez trouver de bons dictionnaires sur le site packetstormsecurity.org
Pour lancer cette attaque avec john, il faut le lancer avec le paramètre --wordlist=fichier, par exemple:
john --wordlist=dic.txt pass
Attaque par Rainbow tables
Les rainbow tables (ou tables arc en ciel) sont des fichiers contenant les mots de passes suivis de leur hash ce qui permet de réduire les temps de calcul de manière considérable (du fait qu'il n'y ait pas besoin de hasher les pass et de l'utilisation de recherches de collisions).C'est pour contrer ce genre d'attaque que les mots de passe sont hashés avec un salt. Le salt étant chaque fois différent, les tables sont plus difficiles à mettre en oeuvre.
Il n'est pas possible de lancer une attaque par rainbow table avec john the ripper mais il est possible de le faire avec OphCrack ou sous Windows avec le logiciel Cain&Abel.
Vous pouvez aussi télécharger des tables sur le site www.freerainbowtables.com
Aucun commentaire :
Enregistrer un commentaire