Casser des condensats de mots de passe... sans violence

Publié le

Avant tout choses, je vous recommande la lecture de la prĂ©sentation que j’avais faite Ă  l’OSSIR en mai 2019 : https://www.ossir.org/paris/supports/2019/2019-05-14/2019_OSSIR_-_Casser_des_mots_de_passe_v1.0.pdf

Résumé de la présentation

Sans reprendre le contenu complet de la présentation, voici les principaux messages.

Casser des condensats, c’est utile

Casser des condensats c’est utile pour se protĂ©ger en identifiant les mots de passe les plus faibles. Depuis plusieurs mois, des cybercriminels attaquent massivement Office 365 Ă  partir de deux principales attaques :

-Du « password spraying » consistant Ă  essayer quelques mots de passe prĂ©visible (Entreprise2020, Password123
) sur un grand nombre de comptes, afin de ne pas atteindre le seuil de blocage du nombre de tentative erronĂ©e par compte (souvent Ă  5) ;

-Du « password reuse » consistant Ă  essayer les mots de passe trouvĂ© dans des fuites de donnĂ©es publiques sur les comptes associĂ©s. Si Martin DUPONT de chez Entreprise avait un compte Linkedin avec le mot de passe « Maman007 », suite Ă  la fuite de la base de Linkedin en 2012, il y’a fort Ă  parier que des attaquant vont tenter de compromettre son compte Office 365 en essayant de s’y connecter avec le login martin.dupont@entreprise.com et le mot de passe « Maman007 ».

SĂ©bastien MĂ©riot d’OVH avait fait une trĂšs bonne prĂ©sentation sur le sujet Ă  la confĂ©rence CORI&IN 2020 : Fuite de donnĂ©es & Credential Stuffing. Si vous n’avez pas pu la voir, en voici un rapide rĂ©sumĂ© : https://blog.xmco.fr/retour-sur-la-coriin-2020/

Casser des condensats peut Ă©galement servir lors d’un test d’intrusion, par exemple en environnement Active Directory en rĂ©cupĂ©rant des condensats de mots de passe grĂące Ă  l’outil responder ou en rĂ©alisant du Kerberoasting, ce qui marche plutĂŽt trĂšs bien 😉 . Pour les dĂ©tails sur le Kerberoasting, je vous recommande la lecture de cet excellent billet de blog en français de Pixis : https://beta.hackndo.com/kerberoasting/

Ça se fait bien pour pas trop cher

Pour un coĂ»t modique (Ă  l’échelle d’une entreprise ou d’une organisation criminelle), il est possible de disposer de matĂ©riel permettant de tester des dizaines de milliards de mots de passe par seconde pour casser des condensats.

Les résultats obtenus sont toujours intéressants

En gĂ©nĂ©ral, dans des entreprises n’ayant pas rĂ©alisĂ© ce type d’opĂ©ration et/ou n’ayant pas une sensibilisation forte Ă  la sĂ©curitĂ©, les rĂ©sultats oscillent entre 60% et 80%.

RĂ©cemment, j’ai travaillĂ© sur le sujet pour une entreprise et j’ai pu retrouver les mots de passe de 85%des 80 000 comptes actifs dont :

  • 1 900 mots de passe faisant parti des 10 pires mots de passe du monde (123456, azerty, password, 12345, 123123
), le fameux « The World’s Top 10 Worst Passwords » ;
  • 2 200 mots de passe contenant simplement le nom de l’entreprise ou avec l’annĂ©e en suffixe ;
  • 3 140 mots de passe disponible dans des fuites de donnĂ©es publiques (« password reuse ») ;
  • 25 638 mots de passe provenant de dictionnaires publiques comme CrackStation. Alors oui ce n’est pas bon, oui c’est dĂ©sagrĂ©able Ă  dĂ©couvrir, oui cela peut faire peur, mais il est prĂ©fĂ©rable de le dĂ©couvrir en faisant ce type de vĂ©rification et lancer un plan de remĂ©diation, plutĂŽt que de fermer les yeux et laisser les cybercriminels exploiter ces faiblesses.

Solution(s)

Pour les conclusions, je vous renvoie vers ma prĂ©sentation que je complĂ©terai juste de : si vous utilisez Office 365 activez l’authentification forte Ă  double facteur, c’est indispensable ; j’entends parler quasiment chaque jour de comptes compromis chez mes clients, contacts, prospects, copains


Mon mode opératoire

Quand je rĂ©cupĂšre des condensats que je souhaites casser, je suis gĂ©nĂ©ralement le mĂȘme mode opĂ©ratoire, que j’amĂ©liore Ă  chaque itĂ©ration.

Tout ceci est bien entendu perfectible, critiquable


1 – Recherche des condensats dans ma propre base

Je conserve une petite base associant des mots de passe et des condensats (NTLM et SHA1-160bits) provenants de publications comme celles du site hashes.org, de pastebin
 Si les condensats à casser ne sont ni NTLM ni SHA1-160bits, je passe à la suite.

2 – Dictionnaire spĂ©cifique

Je construis un dictionnaire spécifique à ma cible, à partir:

  • Du Wikipedia de l’entreprise ciblĂ©e, dans la plupart des langues ;
  • Du site web de l’entreprise, de ses marques, de ses filiales, de sa maisons mĂšre
 avec l’outil CeWL (que je dĂ©teste car dĂ©veloppĂ© en Rubis) ou manuellement ;
  • D’articles de presse sur l’entreprise, ses marques
 ;
  • Des comptes Facebook de l’entreprise, de ses marques
 plutĂŽt manuellement mais c’est assez rapide ;
  • Des Twitter de l’entreprise, de ses marques
 avec l’outil twofiquand j’arrive Ă  le faire marcher, sinon manuellement (quasi aussi rapide) ; Je concatĂšne toutes ces donnĂ©es brutes, construis quelques mots complexes ou expressions manuellement et cela me donne un premier dictionnaire.

Outil de cassage : hashcat avec ce dictionnaire et un ensemble de 3 millions de rÚgles de dérivations que je maintiens dans le temps (celles fournies par défaut avec hashcat sont déjà trÚs bien).

Durée : quelques minutes

3 – Tous les mots de passe de moins de 7 caractùres

La technique est simple, il s’agit de tester tous les mots de passe possible d’une longueur de 1 à 7 caractùres.

Outil : hashcat

Durée : dans les 15 minutes sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

3 bis – Tous les mots de passe de moins de 8 caractùres

Si j’ai le temps, je rĂ©alise la mĂȘme chose que prĂ©cĂ©demment mais avec tous les mots de passe possible d’une longueur de 8 caractĂšres.

Outil : hashcat

Durée : dans les 20 à 22h sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

4 – Dictionnaire InsidePro

J’utilise le dictionnaire InsidePro de 31Mo (en ayant supprimĂ© les doublons avec CrackStation, cf. la suite)

Outil : hashcat et mes 3 millions de rÚgles de dérivations

Durée : quelques dizaines de minutes sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

5 – Dictionnaire Crackstation

J’utilise le dictionnaire CrackStation (tĂ©lĂ©chargeable sur leur site) que j’ai prĂ©cĂ©demment nettoyĂ©, triĂ© et dĂ©barrassĂ© de ses doublons (# sort -u | awk ‘length($0) > 4 && length($0) < 41’ )

Outil : hashcat et mes 3 millions de rÚgles de dérivations

Durée : dans les 24h sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

6 – Dictionnaire perso

Depuis un moment je construis un dictionnaire de mots de passe Ă  partir de tous les fuites de donnĂ©es que je peux rĂ©cupĂ©rer. A ce jour il faut 43Go. Il n’est pas exhaustif (je n’ai ni le temps ni les rĂ©seaux criminels pour tout rĂ©cupĂ©rĂ© 😊) mais il permet de complĂ©ter les dictionnaires prĂ©cĂ©dents.

Outil : hashcat et mes 3 millions de rÚgles de dérivations

Durée : entre 3 et 4 jours sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

7 – Masques Ă©vidents

Je me suis crĂ©Ă© une liste de masques reprĂ©sentant des mots de passe pouvant ĂȘtre considĂ©rĂ©s comme classiques comme par exemple tous les mots de 8 lettres, dĂ©butants par une majuscule et suivi des 4 chiffres.

Outil : hashcat

Durée : entre 4 et 6 heures sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

8 – Masques personnalisĂ©s

Avec les mots de passe prĂ©cĂ©demment rĂ©cupĂ©rĂ©s et une liste rĂ©duite de mots intĂ©ressants (nom de marque, de produit, de formule chimique
) je rĂ©aliser un dictionnaire Ă  partir duquel je vais gĂ©nĂ©rer des masques pour hashcat. J’ai dĂ©veloppĂ© un petit outil en python pour cela, que je peux fournir uniquement sur demande car
 il n’est pas d’une propretĂ© absolue 😉.

Par exemple, je définis les 4 groupes suivants : « Entreprise », 4 chiffres, 2 caractÚres spéciaux et 2 chiffres. Puis à partir de ces 4 groupes, je génÚre toutes les combinaisons possibles en incrémentant la longueur des éléments, ce qui donnerait les masques suivants ( ?d = chiffre, ?s= caractÚre spécial) :

Entreprise ?d ?s ?d Entreprise ?d ?s ?s ?d => ici c’est le nombre de caractĂšres spĂ©ciaux qui a variĂ© Entreprise ?d ?s ?d ?d=> nous recommençons avec 2 chiffres au lieu d’un seul Entreprise ?d ?s ?s ?d ?d => Ă  nouveau 2 caractĂšres spĂ©ciaux 
 Entreprise ?d ?d ?d ?d ?s ?s ?d ?d => Je finis cette combinaison par tous les groupes dans leur intĂ©gralitĂ©s ?dEntreprise ?s ?d => ici c’est une nouvelle combinaison oĂč je ne dĂ©bute plus par le nom de l’entreprise par le second groupe de 1 Ă  4 chiffres 
 ?d ?d ?d ?d Entreprise ?s ?s ?d ?d => fin de cette combinaison

Outil : hashcat

Durée : Je limite aux combinaisons aboutissant à des mots de passe de 10 à 12 caractÚres afin de ne pas dépasser une journée de calcul au total

9 – Masques d’imitation

LĂ  encore, j’utilise les mots de passe prĂ©cĂ©demment rĂ©cupĂ©rĂ©s mais pour gĂ©nĂ©rer des masques qui auraient permis de les retrouver. Cette mĂ©thode est particuliĂšrement efficace 😍.

Si par exemple, j’ai le mot de passe « Coucou2020! », j’en dĂ©duits le masque suivant ( ?u = majuscule, ?l = minuscule, ?d = chiffre, ?s = caractĂšre spĂ©cial) : ?u ?l ?l ?l ?l ?l ?d ?d ?d ?d ?s

J’ai dĂ©veloppĂ© un petit outil en python pour cela, que je peux fournir uniquement sur demande car
 il n’est, lĂ  encore, pas d’une propretĂ© absolue 😉.

Outil : hashcat

Durée : entre 12 et 24h mais mon script étant un peu plus évolué que le précédent, je limite ici la durée de cassage à 1 journée

10 – Mots de passe trouvĂ©s + rĂšgles de dĂ©rivations

LĂ  encore, j’utilise les mots de passe prĂ©cĂ©demment rĂ©cupĂ©rĂ©s et je les utilise tout simplement comme un nouveau dictionnaire.

Outil : hashcat et mes 3 millions de rÚgles de dérivations

Durée : moins de 5 minutes sur 2 cartes graphiques RTX 2080 pour des condensats NTLM

Tout ceci peut ĂȘtre amĂ©liorĂ© et je dois encore :

  • Connecter les scripts des phases 7, 8 et 9 afin d’éliminer les masques redondants ;
  • Rendre mes scripts plus pro et utilisables par une autre personne que moi-mĂȘme 😃. Si vous avez suivi, vous remarquerez que globalement, tout tourne autour des mĂȘmes mots de passe et que je peux difficilement trouver un mot de passe qui n’aurait pas Ă©tĂ© dĂ©jĂ  trouvĂ© prĂ©cĂ©demment ou un mot de passe approchant. C’est vrai et c’est pour cela que je fais Ă©voluer rĂ©guliĂšrement mon propre dictionnaire avec de nouveaux mots de passe, rĂ©ellement trouvĂ©s dans la nature.

Mais retrouver un mot de passe qui n’a jamais Ă©tĂ© utilisĂ© nulle part avant, non basĂ© sur un mot usuel et d’une bonne longueur
 c’est trĂšs difficile, vous savez donc quoi faire 😉.

Blog: Fortigate CVE-2023-27997 (XORtigate) in the eyes of the owl

Le Top arbitraire de l’annĂ©e Ă©coulĂ©e 2022

KeePass, ultra-mĂ©ga-giga vulnĂ©rabilitĂ© critique đŸ€Šâ€â™‚ïž