Casser les mots de passe de ses utilisateurs avec le plus gros dictionnaire français du monde

En tant que responsable de la sécurité des systèmes d’information de mon entreprise, j’ai plusieurs missions, dont celle de la sensibilisation à la sécurité informatique de mes utilisateurs. Pour cela, j’utilise plusieurs approches : les messages de sensibilisation (phishing, ransomware, etc.), les messages opportunistes lorsqu’une crise (chez les autres) est médiatisée, les vidéos de sensibilisation, les interventions dans les services, auprès du COMEX, etc.

Je fais intervenir des sociétés spécialisées dans les attaques éthiques, pour aller plus vite et pour avoir un regard externe, regard externe qui est souvent mieux perçu que celui du local de l’étape. Mais je mène parfois des audits internes moi-même. Voici un retour d’expérience que je partage avec vous, parce que cela illustre (pour les jeunes) l’un des aspects de la cybersécurité, et parce que cela peut peut-être aider un ou deux RSSI débutants qui passeraient par là, sait-on jamais.

Je précise que la méthode que je présente ici n’est qu’une des nombreuses méthodes existantes.

1ère étape : Récupérer la base de données des utilisateurs

Dans l’environnement de mon entreprise, comme c’est souvent le cas, les comptes des utilisateurs sont gérés par Microsoft Active Directory. Problème, il faut des droits particuliers pour pouvoir accéder à la base de données des utilisateurs. Or, le RSSI que je suis ne dispose pas de droits permettant cet accès…

Il m’a donc fallu contourner le problème : je suis passé par la console de gestion de mon antivirus++ que l’on appelle un EDR. En effet, la console de gestion de mon EDR me permet d’exécuter des commandes sur toutes les machines sur lesquelles cet EDR est installé.

Je me suis donc connecté sur un contrôleur de domaine secondaire pour y ouvrir un terminal particulier via la console EDR et j’ai exécuté la commande suivante :

ntdsutil "ac i ntds" "ifm" "create full c:\temp\SSI" quit quit

Cette commande crée une copie des fichiers NTDS.dit et SYSTEM qui contiennent toutes les informations utiles pour moi et les place dans le répertoire c:\temp\SSI du contrôleur de domaine. J’ai ensuite compressé ce répertoire dans une archive avec mot de passe. Puis j’ai supprimé tout le contenu de ce répertoire, par sécurité.

Problème : ma console EDR ne me permet pas de télécharger le fichier c:\temp\SSI.7z car il dépasse la taille autorisée… Il m’a donc fallu demander un peu d’aide : j’ai attendu 24h puis j’ai ouvert un ticket de demande de récupération du fichier SSI.ZIP au support informatique à partir des sauvegardes quotidiennes de cette machine. C’est passé crème.

Attention, le fait d’avoir mis les fichiers NTDS.dit et SYSTEM dans une archive avec mot de passe permet de garantir la confidentialité de ces données, surtout qu’elles se sont trouvées dans plusieurs sauvegardes, sur l’ordinateur de l’ingénieur qui a traité ma demande ET sur mon propre ordinateur…

2e étape : Constitution du plus gros dictionnaire de mots français du monde

J’ai déjà évoqué sur ce blog en détail comment j’ai eu l’idée d’utiliser tout le contenu du site Wikipédia français. Vous trouverez le résumé dans le billet intitulé « Dictionnaire français pour hashcat« , et le détail technique sur mon dépôt GitHub

Voici les commandes utilisées :

wget https://dumps.wikimedia.org/frwiki/latest/frwiki-latest-pages-articles-multistream.xml.bz2
bzcat frwiki-latest-pages-articles-multistream.xml.bz2 | tr "\040\041\042\043\044\045\046\047\050\051\052\053\054\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\133\134\135\136\137\140\173\174\175\176" "\n" > toto
cat toto | tr -s "\n" | awk '!x[$0]++' | sort > wikipedia.fr.txt

Voir aussi dans ce billet l’explication de la commande awk utilisée.

Le fichier wikipedia.fr.txt ainsi obtenu contient plus de 29 millions de mots, incluant tous les mots de la langue française, mais aussi les noms de lieux ou lieux dits, les prénoms, les noms de famille, les mots surannées, le jargon de toutes les professions, les mots d’argots ou de patois, les sigles, les marques, beaucoup de mots latins ou en grec ancien, et des mots en d’autres langues courantes (anglais, allemand…) ou moins courantes (breton, corse, leetspeak…).

Bref, vous voici avec un fichier quasi parfait pour une attaque par dictionnaire.

3e étape : Préparer une machine de calcul

Pour craquer des mots de passe par une attaque par dictionnaire, il est préférable d’utiliser une machine performante. Dans mon cas, mon entreprise ne me donne pas accès à une telle machine, mais mon radiateur oui.

Les lecteurs de ce blog savent que je me suis fabriqué un radiateur qui me chauffe l’hiver tout en minant des cryptomonnaies. Ceux qui veulent en savoir plus peuvent lire ce billet. L’hiver étant fini, j’ai une machine disponible avec plusieurs cartes GPU (anciennes). Mais une machine de gamer actuelle suffirait.

La machine est sous Windows, avec WSL, mais une machine GNU/Linux serait aussi bien quand on maîtrise bien l’installation des drivers des cartes graphiques.

J’ai ensuite installé hashcat par le cassage des mots de passe, VeraCrypt pour garder en sécurité à l’abri des regards tous les fichiers et mots de passe découverts et le packet Impacket pour utiliser le script Python secretsdump.py que j’installe dans WSL.

Enfin, je récupère la règle OneRuleToRuleThemAll que je place dans le répertoire « rules » de hashcat.

4e étape : A L’ATTAAAAQUE

Je décompresse mon fichier SSI.7z protégé par mot de passe, dans mon containeur sécurité VeraCrypt et récupère le fichier NTDS.dit et SYSTEM

J’exécute ensuite la commande suivante dans WSL sous Windows :

secretsdump.py LOCAL -ntds NTDS.dit -system SYSTEM -outputfile hash.txt

Le fichier hash.txt contient les mots de passe de mes utilisateurs, chiffrés sous forme de hashs. Je peux enfin lancer la commande suivante :

hashcat -m 1000 -a 0 -w 1 hash.txt wikipedia.fr.txt -r rules/OneRuleToRuleThemAll.rule

Je peux laisser la machine travailler, et quatre heures après, j’ai cassé environ 10% des mots de passe de mes utilisateurs.

Conclusions

Il y a beaucoup de choses à dire, et sans doute beaucoup de monde à son avis sur le sujet, mais voici les actions que j’ai menées suite à la découverte (en quelques heures) de 10% des mots de passe de mes utilisateurs :

  • Tous les utilisateurs sont protégés par une authentification multifactorielle. La faiblesse de leur mot de passe n’est pas en soit catastrophique. Je n’ai donc pas obligé les utilisateurs dont j’ai pu craquer le mot de passe à en changer, sauf pour les comptes de service et les utilisateurs à privilèges (admin, etc.) où les mots de passe peuvent être réellement aléatoires et gérés par des coffres forts de mots de passe.
  • J’ai communiqué auprès de l’ensemble des utilisateurs pour les prévenir qu’il ne faut pas utiliser des mots de passe du type « AbracaDabra@2025! » qui, bien que longs et complexes (17 signes mélangeant majuscules, minuscules, chiffres, caractères spéciaux), sont trouvés par une attaque par dictionnaire. Le message est difficile à entendre, donc merci le MFA.
  • J’ai fait modifier les vérifications lors du changement de mot de passe, pour diminuer la probabilité de succès d’une attaque par dictionnaire.

Si vous avez des réactions constructives à ce billet, n’hésitez pas à laisser un commentaire.

6 réflexions sur « Casser les mots de passe de ses utilisateurs avec le plus gros dictionnaire français du monde »

  1. > Dans l’environnement de mon entreprise, comme c’est souvent le cas, les comptes des utilisateurs sont gérés par Microsoft Active Directory. Problème, il faut des droits particuliers pour pouvoir accéder à la base de données des utilisateurs. Or, le RSSI que je suis ne dispose pas de droits permettant cet accès…
    > Il m’a donc fallu contourner le problème : je suis passé par la console de gestion de mon antivirus++ que l’on appelle un EDR. En effet, la console de gestion de mon EDR me permet d’exécuter des commandes sur toutes les machines sur lesquelles cet EDR est installé.

    Hum. J’espère que l’accès à la console de l’EDR est bien protégé; parce que ça a l’air d’être un chouette moyen de contourner les protections et sécurités mises en place.

    • La console de gestion de l’EDR permet d’isoler toutes les machines du reste du monde, et en particulier les serveurs, en cas de propagation d’un ransomware par exemple… Donc oui, un attaquant qui en prendrait le contrôle pourrait faire d’énormes dégâts. Par conséquent, elle est particulièrement protégée (et surveillée).

  2. perso sur un site marchand j’ai un mot de pass à 6 lettres depuis 20 ans et j’ai jamais eu de probleme , je l’ai toujours laissé pour voir ^^
    ….. fou non?

    • Ce qui serait fou, ce serait d’aller régulièrement sur ce compte pour y mettre à jour la carte bancaire qui y est enregistrée 😉

  3. Je ne suis pas RSSI, mais je me demande en toute bonne foi: le fait de « sortir » les mots de passe de l’entreprise pour les casser sur un PC/radiateur personnel n’est il pas un risque et une faute?

    • Toutes les actions concrètes de sécurité ont une part de risque : quand vous scannez un site en production à la recherche de vulnérabilités, il est possible de le faire tomber (oups), quand vous demandez la mise à jour d’un serveur, il peut ne pas redémarrer, etc.

      Pour chaque situation, vous devez faire une analyse de risque et garder en tête tout ce qui peut mal se passer, et prendre les précautions appropriées.

      Dans le cas présent, ce qui pourrait m’être reproché, ce serait justement de ne pas avoir pris les bonnes précautions : le fichier de la base de données des mots de passe est chiffré, il a été déchiffré sur mon ordinateur d’analyse qui lui même est chiffré, et tout le travail résultant a été placé dans un containeur VeraCrypt chiffré. De plus, je ne fournis jamais à un utilisateur son mot de passe (même oralement), je lui dis qu’il a été découvert dans le cadre d’un audit de sécurité et qu’il doit le changer (et améliorer sa complexité).

      J’ai pris une initiative sans demander la permission car dans ce cas précis, je préfère m’excuser de faire mon travail que de demander la permission.

      C’est une prise de risque, mais j’ai des arguments pour ma défense.

Répondre à An'h Onÿm Annuler la réponse

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


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.