Retrouver le mot de passe d'un compte sur Mac OS X 10.6

Date de publication : — dernière modification :

Un oubli de mot de passe, ça arrive vite. Sur un site web, ce n'est en général pas un problème. En effet, il y a généralement un mécanisme de récupération du mot de passe. En revanche, pour retrouver le mot de passe d'un Mac, c'est tout de suite plus compliqué.

Sous Snow Leopard, les mots de passe ne sont pas stockés en clair. Ils sont salés puis hashés en sha1. Les fonctions de hash ne permettant pas de retourner aux données initiales, il va donc falloir bruteforcer le hash pour retrouver le mot de passe original.

La récupération du mot de passe de la machine va s'effectuer en deux étapes. Pour la première nous allons avoir besoin d'un accès physique à la machine, pour pouvoir récupérer le hash. La seconde étape s'effectuera sur un autre ordinateur.

Récupérer le hash

Il nous faut un accès physique à la machine ou un moyen de s'y connecter en root. Je détaillerai ici la méthode utilisée si on a un accès physique à la machine, et pas de compte root utilisable sur la machine.

On va démarrer la machine en Single User Mode, en appuyant au démarrage de la machine simultanément sur les touches Cmd et S. Cela nous permettera d'accéder à un shell avec les privilèges dont nous avons besoin. Il est important de noter qu'en Single User Mode, votre clavier sera configuré en QWERTY.

Une fois qu'on a accès au shell, on va lister les noms d'utilisateurs :

:/ root# ls /Users/
.localized Shared johndoe

Dans cet exemple, nous avons qu'un seul compte utilisateur : johndoe.

On va a présent monter le système de fichier en écriture, ce qui est nécessaire pour lancer les Directory Services :

:/ root# mount -uw /

Puis on charge les Directory Services, qui permettent d'authentifier les utilisateurs :

:/ root# launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist

A présent nous allons chercher l'identifiant de l'utilisateur johndoe (GUID) à l'aide de dscl :

:/ root# dscl localhost -read /Search/Users/johndoe | grep GeneratedUID | cut -c15-

Vous allez obtenir une clée du format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. On va en avoir besoin pour savoir quel hash prendre :

:/ root# cat /var/db/shadow/hash/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX | cut -c169-216
05C77FC4798EE542025EE67C7E25DEF2B96D45A25C67C170

Vous pouvez éteindre à présent la machine cible, nous allons effectuer le brute force sur une autre machine.

Bruteforcer le hash pour retrouver le mot de passe original

Pour bruteforcer le hash, nous allons utiliser un logiciel nommé John The Ripper. Ce programme va tester tous les mots de passe possibles jusqu'à trouver le bon. Si le mot de passe de la machine est compliqué (beaucoup de caractères, utilisations de caractères spéciaux), le bruteforce va durer beaucoup plus longtemps.

Il est important de noter qu'il faut télécharger la version community-enhanced de John The Ripper, surnommée jumbo. Je n'ai pas réussi avec la version officielle à faire reconnaître mon hash.

Nous allons créer un fichier texte pour indiquer à John The Ripper quel hash doit-il cracker. On va l'appeller hash.txt, et il contiendra ceci :

johndoe:05C77FC4798EE542025EE67C7E25DEF2B96D45A25C67C170

On va ensuite lancer le bruteforce avec John The Ripper. Il est important de noter ici que j'utilise un dictionnaire, ce qui accélère sensiblement la vitesse de bruteforce.

$ ./john --wordlist=passwords.txt hash.txt
Loaded 1 password hash (Mac OS X 10.4 - 10.6 salted SHA-1 [128/128 SSE2 intrinsics 8x])
helloworld       (johndoe)
guesses: 1  time: 0:00:00:00 DONE (Sun Sep  8 15:18:20 2013)  c/s: 2822K  trying: hellowisdom - helloworld

Vous l'aurez peut-être deviné, le mot de passe de la session johndoe était helloworld.

Conclusion

Récupérer un mot de passe sous Snow Leopard est une opération plus simple qu'il ne parait. La seule étape qui prend du temps est le bruteforce. On peut bien entendu réduire ce temps de bruteforce en utilisant une machine plus puissante, ainsi qu'un dictionnaire, mais si l'utilisateur a choisi un mot de passe compliqué, l'opération peut durer très longtemps.

Dans ce cas, il ne vous reste plus qu'à espérer qu'un chercheur en cryptographie découvre une faille dans l'algorithme sha1 ...