15 novembre 2012

Crack de mots de passe

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
Il existe un ligne pour chacun des comptes présents sur le système. Les différents champs sont séparés par le symbole ":".
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
Je passe sous silence les derniers champs qui concernent notamment les dates d'expiration de mots de passe et n'ont pas d'intérêt dans le crack de mots de passe.
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, j'utilise John the ripper, excellent perceur de mots de passe sous licence GPL. Vous pouvez retrouver ce logiciel dans la partie outils du site.
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
Vous obtenez alors le fichier pass contenant tout ce qui est nécessaire à john pour cracker les mots de passe.

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
Chacun de ces modes permet de spécifier le jeu de caractères à utiliser. Si vous ne savez pas lequel utiliser, choisissez le mode incremental: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
Dans cet exemple, je crée un fichier clean_dic.txt, copie de dictionnaire.txt sans doublons. Cette astuce est rapide à mettre en oeuvre et peut faire gagner beaucoup de temps.
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

Contre mesures

Accès aux fichiers

L'accès aux mots de passe doit être strictement contrôlé. Sur les premieres versions d'Unix, le mot de passe se trouvait directement dans /etc/passwd qui est accessible en lecture par tout le monde. C'est pourquoi le système de shadow password à été mis en place.

Salt

Le salt est une mesure prise contre les attaques par rainbow tables. De cette manière, pour percer un mot de passe il est nécessaire de posséder la table correspondant au hash employé.

Mots de passe forts

Il est important d'utiliser un mot de passe ne se trouvant pas dans un dictionnaire et composé de chiffres, lettres, symboles, majuscules et minuscules.

Durée de vie des mots de passe

Les mots de passe doivent être changés régulièrement. La durée de vie du mot de passe peut être fonction de la sensibilité du compte qu'il protège.

Mots de passe par défaut

Il est d'une importance capitale de ne jamais laisser les mots de passe par défaut des équipements car ces mots de passes sont connus de tous et forment la liste de base de tout dictionnaire.

Aucun commentaire :

Enregistrer un commentaire