Tutoriel - Cracker le mot de passe d'un fichier .zip

[Tutoriel] Cracker le mot de passe d’un .zip avec John the Ripper

Difficulté
Moyenne.
La durée du processus est très aléatoire et dépend de la complexité du mot de passe.

Prérequis
Un PC sous Linux – et oui ! Il faut savoir ce que vous voulez.

Attention
Bien qu’il existe une variante de John the Ripper sous Windows, je ne vous recommande pas d’utiliser Windows pour tout ce qui touche au hacking. C’est comme si vous vouliez danser de la K-Pop avec les quatre membres dans le plâtre. Si vraiment vous n’êtes pas prêts à passer sous Linux, vous pouvez utiliser un logiciel de machine virtuelle pour vous entraîner – bonne nouvelle, c’est gratuit et c’est libre.

Contexte
On vous demande tout le temps de mettre des mots de passe compliqués et ça vous emmerde ! Et vous n’avez jamais compris pourquoi. Allez, je vous la fais courte. L’immense majorité des victimes de mots de passe piratés se situe dans des villages ou des zones reculées et le coupable est une personne de leur entourage. Dès que le coupable connait sa victime, ce n’est pas très compliqué : il va essayer le nom de la fille, le nom de la petite-fille, le nom du chien ou du chat, le nom du village… Même pas besoin d’utiliser John dans ces cas de figure.


Un peu de patience !

Ce tutoriel va vous placer dans le cas de figure d’un pirate informatique qui a récupéré d’une façon ou d’une autre un fichier .zip vous concernant. Il est confidentiel, vous l’avez protégé par un mot de passe ! Mais il existe des outils pour le retrouver sans avoir à tester toutes les combinaisons possibles à la main. Alors mettons-nous au travail.

Pour les besoins de ce tutoriel, créez deux fichers zip, peu importe leur contenu, et protégez-les par un mot de passe. Le premier fichier zip devra être protégé par une série de huit chiffes. Le deuxième fichier zip sera protégé par un mot de passe qui est en fait un mot dans une langue étrangère. Vous êtes prêts ?

Théorie : les mots de passe sont cryptés


Oui, je sais, la théorie ça vous enquiquine. Mais on doit connaitre les outils avec lesquels on travaille, c’est ce qui fait la différence entre les vrais hackers et les script kiddies qui lancent des scripts sans savoir comment ils fonctionnent. Je vais simplement survoler cette étape parce que la cryptographie est un sujet à part entière qui ne peut se résumer en un simple tutoriel. Grosso modo, ce que vous devez savoir, c’est que les mots de passe ne sont jamais stockés tels quels. Ils sont cryptés – il y a différentes méthodes de cryptage, telles que md5 et sha256, aux niveaux de sécurité variable. Et le cryptage se fait de manière asymétrique. Cela signifie qu’à partir du mot de passe en clair, on peut retrouver le mot de passe crypté, mais ce n’est pas possible de déchiffrer le mot de passe crypté pour retrouver le mot de passe clair.

Cela signifie par exemple que quand vous vous connectez quelque part sur internet, vous tapez votre login et votre mot de passe. Le serveur distant ne connait pas votre mot de passe, il connait seulement la version cryptée du mot de passe. Lorsqu’il va vérifier que les mots de passe correspondent, ce ne sont pas les mots de passe que la machine va comparer, il va simplement comparer si les versions cryptées (les hashes) correspondent. Ah oui, on comprend mieux pourquoi quand on oublie son mot de passe il faut le réinitialiser, hein ?

Théorie : ce que va faire John


Grosso modo, John va essayer trois techniques. La première, dans le cas où il essaie de déchiffrer un mot de passe associé au login – ce qui n’est pas le cas de figure de ce tutoriel – c’est de tout bêtement essayer le login – Et oui, beaucoup de gens font cette erreur, et si vous êtes dans ce cas de figure, terminez la lecture de ce tutoriel. Ensuite, il va essayer les variations du login – avec des lettres en majuscules, en minuscules, le login de droite à gauche, etc.
Si ça ne marche pas, John va procéder à une attaque par dictionnaire. C’est-à-dire qu’il va essayer tous les mots du dictionnaire un par un. Beaucoup de gens mettent un nom commun en mot de passe et c’est une erreur grave, nous y reviendrons. Attention, ici, « dictionnaire » est une liste de mots et un même dictionnaire peut contenir des mots de plusieurs langues.
Si les deux méthodes au-dessus ne marchent pas, alors john va tenter toutes les combinaisons possibles, faites de chiffres, de lettres et de caractères spéciaux. Nous pouvons toutefois passer une commande pour lui indiquer par exemple de ne travailler qu’avec des chiffres, nous y reviendrons.

Je vais taper sur tous les miroirs en même temps, comme ça je serai sur de taper sur le bon !
Naruto dit : « Je vais taper sur tous les miroirs en même temps, comme ça je serai sur de taper sur le bon ! »

Encore une fois, john ne peut pas retrouver directement le mot de passe en clair, sinon tout le monde le saurait. Il va comparer une par une toutes les combinaisons cryptées. S’il y en a une qui correspond, alors john va vous dire le mot de passe en clair qui a été utilisé.

Pratique : installer John

Si l’anglais ne vous fait pas peur, voici la documentation de John the Ripper.
https://www.openwall.com/john/doc/

Si votre distribution est Kali Linux, alors il y a de fortes chances que John soit déjà installé sur votre PC et vous pouvez passer au chapitre suivant. Pour les autres, bien qu’il soit possible d’installer john avec le gestionnaire de paquets en ligne de commande (sudo apt-get install et équivalents), cette méthode n’est pas recommandée.
Nous allons cloner le répertoire Git de John, développé par openwall. Dans un terminal, placez-vous dans un dossier à part où vous voulez installer john et tapez ceci.

$ git clone https://github.com/openwall/john

Ensuite, nous allons compiler le code source. Il est situé dans le sous-répertoire src, nous allons donc nous y diriger.

$ cd john/src
$ ./configure
$ make

Si le make vous a craché une erreur, c’est qu’il vous manque des dépendances. Vous devez installer ces dépendances – et ça, pour le coup, vous pouvez le faire avec le gestionnaire de paquets.

Pratique : zip2john

John peut retrouver le mot de passe d’un fichier zip, mais il peut également retrouver le mot de passe d’un utilisateur Windows ou d’autres choses. Nous nous contenterons d’un fichier zip pour le moment. Pour les besoins de ce tutoriel, je ne vous expliquerai pas comment faire des liens symboliques, alors désolé les vétérans si la suite de ce tutoriel vous paraît crade. Mais concrètement, la procédure est la suivante.
Nous utilsons zip2john pour générer un hash du mot de passe du fichier zip.
Nous stockons le hash dans un fichier à part.

zip2john
zip2john

Si nous essayons d’extraire un zip protégé par mot de passe, même en ligne de commande, ça ne marchera pas et on va se retrouver avec un fichier vide.

Tentative d'extraction d'un fichier zip protégé par mot de passe
Tentative d’extraction d’un fichier zip protégé par mot de passe

zip2john est un script qui est situé dans le sous-dossier run. Utilisons-le pour stocker le résultat dans un fichier à part, comme le veut l’usage du >.
Maintenant que nous avons notre hash, nous allons utiliser john pour tenter de le retrouver.

Pratique : lancer la commande

Attaque par dictionnaire
Attaque par dictionnaire


Le script john est situé dans le sous-dossier run. Ca donne quelque chose comme ceci :

$./john/run/john votre-fichier-hash

On le laisse mouliner.
Dans ce cas de figure, j’ai choisi un mot espagnol. Comme vous pouvez le constater, faire tomber le mot de passe ne m’a pris que 19 secondes.

Essayons autre chose avec un mot de passe uniquement composé de chiffres. Comme ce n’est pas quelque chose qui existe dans un dictionnaire, la technique sera la bruteforce. Mais dès que nous savons que le mot de passe n’est composé que de chiffres, nous pouvons utiliser l’option –incremental= »Digits » pour signaler à John de ne travailler qu’avec des chiffres !

$./john/run/john votre-fichier-hash-chiffres --incremental="Digits"

Et nous laissons mouliner john. Même si ce mot de passe n’est fait que de chiffres, il aura fallu près de dix minutes pour le retrouver. Imaginez à quel point un pirate va s’arracher les cheveux si vous faites des mots de passe très longs et bourrés de caractères !

Bruteforcing avec des chiffres
Bruteforcing avec des chiffres

Lorsqu’un mot de passe a été retrouvé, ne relancez pas la procédure. Utilisez la même commande, mais avec l’option — show

$./john/run/john votre-fichier-hash-chiffres --show

Cela vous permettra de le retrouver.

--show
–show

C’était fun, hein ? Ce tutoriel était une base. Vous êtes libres de continuer sur cette voie.

Extra

Pensez à mettre à jour votre dictionnaire de temps en temps. Voici un lien pour approfondir – en anglais.
https://www.openwall.com/wordlists/

La page des dictionnaires de John
La page de téléchargement des dictionnaires de John

Vous aimez les maths ?

Okay, je vous ai dit que les mots de passe composés de chiffres et de lettres sont très compliqués à faire tomber, mais pourquoi exactement ?

Admettons que votre mot de passe contienne 8 caractères. Si ces huit caractères ne sont que des chiffres et que le pirate le sait, ça va l’arranger : des chiffres, il n’en existe que dix.
En d’autres termes, le nombre de combinaisons possibles est de 10 puissance 8, soit 100000000. D’un point de vue machine, ce n’est pas beaucoup.

Admettons que votre mot de passe ne contiennent que des lettres mais qu’elles ne forment pas un mot. Votre mot de passe fait 12 caractères. Comme l’alphabet latin contient 26 lettres, le nombre de combinaisons possibles passe à 26 puissance 12.
Le nombre de combinaisons possibles passe à 9,54289566617e16.
C’est déjà beaucoup plus impressionnant.

Maintenant, votre mot de passe est composé de chiffres et de lettres et fait 14 caractères. Nous travaillons avec 36 caractères et le nombre de combinaisons possibles sera de 36 puissance 14.
Ca donne 6,14094221446e21
Autant vous dire qu’à partir de là, même avec John, ces mots de passe vont être très longs à faire tomber.

Vous en voulez encore ?

Et jusque-là, nous partions du principe que nous travaillons avec des mots de passe à taille fixe ! Imaginez qu’un pirate ne connaisse pas la longueur exacte du mot de passe en clair. Si vous ne travaillez qu’avec des caractères alphanumériques, évidemment, le nombre de combinaisons possibles ne sera plus 36^14, mais
36 + 36^2 + 36^3 + 36^4 + …. + 36^13 + 36^14 + 36^15 + …
Et pour rendre le truc encore plus lourd, ajoutez-y des caractères spéciaux ! En français, ce n’est pas ce qui nous manque : les accents, la cédille, le trait d’union…

Cela permet d’arriver aisément à des mots de passe qu’une vie ne suffit pas à déchiffrer.
Le tutoriel s’arrête ici ! Il n’est pas un tout, alors explorez !

Erratum
J’édite cet article le 15 Novembre pour signaler une petite erreur dans le dernier chapitre. Les mots de passe sont case-sensitive, c’est-à-dire que la machine fait la différence entre les majuscules et les minuscules. Mais ça devrait vous arranger, parce que cela double le nombre de caractères de l’alphabet latin. Ainsi, nous ne parlons plus de 26 caractères mais de 52, ce qui augmente considérablement le nombre de combinaisons possibles.

Hefka le NekoPunk


Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *