Identifier les Hachages Générés par les KDFs
Dans cette étape, vous apprendrez à identifier le format des hachages générés par différents KDFs. Bien que la sortie brute d'un KDF puisse être une chaîne binaire, lorsqu'ils sont stockés dans des systèmes, ils sont souvent encodés (par exemple, Base64 ou hexadécimal) et préfixés par des identifiants qui indiquent le KDF utilisé, le salt, et parfois le nombre d'itérations ou le facteur de coût. Ce format standardisé permet à des outils comme John the Ripper de les reconnaître et de les traiter correctement.
Examinons les formats de hachage courants pour PBKDF2, bcrypt et scrypt.
PBKDF2 :
Les hachages PBKDF2 apparaissent souvent dans un format qui inclut l'algorithme, les itérations, le salt et la clé dérivée. Par exemple, dans les fichiers /etc/shadow sous Linux, les hachages PBKDF2 (spécifiquement SHA512) peuvent ressembler à ceci :
$6$rounds=5000$<salt>$<hash>
Ici, $6$ indique SHA-512, rounds= spécifie les itérations, suivi du salt et du hachage réel.
bcrypt :
Les hachages bcrypt sont facilement reconnaissables par leur préfixe $2a$, $2b$, ou $2y$, suivi du facteur de coût (par exemple, 10), du salt et du hachage.
Exemple : $2a$10$<salt><hash>
scrypt :
Les hachages scrypt commencent généralement par $7$ ou $scrypt$, suivis de paramètres tels que ln, r, p (coût logarithmique, taille du bloc et facteur de parallélisation), du salt et du hachage.
Exemple : $7$<ln>$<r>$<p>$<salt><hash>
Pour démontrer, créons un fichier contenant quelques exemples de hachages KDF. Nous utiliserons un outil appelé mkpasswd (qui fait partie du paquet whois) pour générer un hachage bcrypt, puis nous construirons manuellement un hachage PBKDF2 à titre de démonstration.
Tout d'abord, installez le paquet whois pour obtenir mkpasswd :
sudo apt install -y whois
Maintenant, générons un hachage bcrypt pour le mot de passe "password123" avec un facteur de coût de 10.
mkpasswd -m bcrypt -S $(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16) -s 10 password123
Cette commande génère un hachage bcrypt. L'option -S fournit un salt aléatoire, et -s 10 définit le facteur de coût à 10. La sortie sera une chaîne de hachage bcrypt.
$2a$10$<random_salt_string><hash_string>
Maintenant, créons un fichier nommé kdf_hashes.txt que John the Ripper pourra lire. Nous inclurons un hachage bcrypt et un hachage PBKDF2 créé manuellement.
nano kdf_hashes.txt
Ajoutez le contenu suivant au fichier. Remplacez <YOUR_GENERATED_BCRYPT_HASH> par le hachage bcrypt réel que vous avez généré à l'étape précédente.
user1:$2a$10$<YOUR_GENERATED_BCRYPT_HASH>
user2:$pbkdf2-sha256$100000$c0ffee$a1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcdef
Note : Le hachage PBKDF2 pour user2 est un espace réservé à des fins de démonstration. Ce n'est pas un vrai hachage d'un mot de passe connu, mais il suit le format attendu par John the Ripper pour PBKDF2-SHA256. Le format est $pbkdf2-sha256$<iterations>$<salt_hex>$<hash_hex>.
Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, puis Entrée.
Maintenant, utilisons John the Ripper pour identifier les types de hachage dans kdf_hashes.txt :
john --format=raw-md5 --show kdf_hashes.txt
Note : Nous utilisons --format=raw-md5 comme format factice car John nécessite qu'un format soit spécifié pour --show, même s'il s'agit simplement d'une identification. John détectera automatiquement les formats KDF réels.
La sortie montrera John identifiant les types de hachage :
0 password hashes cracked, 2 left
John identifie correctement qu'il y a deux hachages, et il reconnaîtra leurs types KDF lorsqu'il tentera de les casser. Cette étape se concentre principalement sur la reconnaissance des formats de hachage.