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

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

Comme certains le savent (ou pas), j’aime bien casser des condensats de mots de passe mais sans violence 😉.

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 twofi quand 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 😉.