CASSONS LES (MAUVAISES) IDÉES REÇUES SUR LA ROBUSTESSE DES MOTS DE PASSE

Filtrer par catégorie :

23 Novembre 2020 by Jérémy Luyé-Tanet
Les « testeurs » de mot de passe et les « indicateurs de robustesse » (présentés notamment sur la majorité des sites web lors de la création d’un compte) sont-ils fiables ? Dans la politique de mot de passe, les critères de longueur et de complexité sont-ils suffisants ?

 

Introduction


Selon Rapid7 en 2019, 72% des tests d’intrusion ont mis en lumière au moins 1 mot de passe compromis ( Source : Rapid7 ).

(Mon expérience personnelle étant plutôt de l’ordre de 99% des tests d’intrusion internes).

On retrouve ici ou là des bonnes pratiques diverses et variées concernant la sécurité des mots de passe.
Quelles sont ces bonnes pratiques et sont-elles cohérentes vis-à-vis de l'Etat de l'art et des attaquants ?
Des recommandations incomplètes sont parfois communiquées aux utilisateurs en entreprise, donnant un faux sentiment de sécurité face à certaines attaques.

Cette présentation traite de la notion de robustesse des mots de passe, en particulier dans le cas d'attaques sur les condensats ou les formats chiffrés de ces mots de passe.

Quelques définitions utiles :
  • Condensat: résultat d'un calcul via un algorithme non réversible utilisé pour le stockage d'un mot de passe. On utilise également les termes « empreinte » ou « hash » lorsqu'on récupère un mot de passe stocké sous format qui n'est pas en clair.
  • Entropie : au lieu de mesurer la robustesse par le nombre de combinaisons de caractères qu'il faut tester pour trouver le mot de passe avec certitude, on utilise le logarithme en base 2 de ce nombre. Cette mesure est appelée l'entropie du mot de passe.
 
 

1. Mots de passe robustes ?


De nombreux articles diffusés sur internet et les réseaux sociaux déclarent qu'un mot de passe est « fort », « robuste » ou encore « complexe », grâce à la taille et/ou la complexité.



1.1 La taille


« Un mot de passe fort doit comporter : au moins huit caractères. Si votre système d'exploitation est Windows, assurez-vous que la longueur minimale des mots de passe définie dans les paramètres du système est 8 caractères. » ( Source : Kaspersky ).

« Si possible, utilisez un mot de passe qui contient huit caractères ou plus. » ( Source : Microsoft ).

« Adoptez un mot de passe de plus de 10 caractères. » ( Source : LCI ).

« Utiliser une longueur de mot de passe minimale de 8 caractères, si autorisé. » ( Source : Wikipedia ).

« Si vous souhaitez une règle simple : choisissez des mots de passe d’au moins 12 caractères de types différents (majuscules, minuscules, chiffres, caractères spéciaux).» « Il est souvent plus efficace d’allonger un mot de passe que de chercher à le rendre plus complexe.» ( Source : ANSSI ).

Pourquoi recommande-t-on une taille plus grande ?

En augmentant la longueur d'un mot de passe, on augmente son entropie. Plus l’entropie est grande, plus il y a de combinaisons de caractères possibles.
Pourquoi recommande-t-on une taille différente en fonction de la source de la recommandation ?

Souvent parce que cette source n’est pas toujours suffisamment sensibilisée, ou parce qu’elle utilise des données plus ou moins datées, ou peu contextualisées.

La classification selon l’ANSSI :
  • Mot de passe de 8 caractères dans un alphabet de 70 symboles : équivalent à une clé 49bits ; force : très faible ; commentaire ANSSI : taille usuelle.
  • Mot de passe de 10 caractères dans un alphabet de 90 symboles : équivalent à une clé 65bits ; force : faible.
  • Mot de passe de 12 caractères dans un alphabet de 90 symboles : équivalent à une clé 78bits ; force: faible ; commentaire: taille minimale recommandée par l’ANSSI pour des mots de passe ergonomiques ou utilisés de façon locale.
  • Mot de passe de 16 caractères dans un alphabet de 36 symboles : équivalent à une clé 82bits ; force : moyen ; commentaire : taille recommandée par l’ANSSI pour des mots de passe plus sûrs.
  • Mot de passe de 16 caractères dans un alphabet de 90 symboles : équivalent à une clé 104bits ; force : fort.



1.2 La complexité


Pour qu'un mot de passe soit plus complexe à deviner, on recommande en général, en plus de la taille minimum, l'utilisation de plusieurs classes de caractères :
  • les caractères alphabétiques en majuscules ;
  • les caractères alphabétiques en minuscules ;
  • les caractères spéciaux ;
  • les chiffres.
L’entropie peut également être augmentée par l’utilisation de plusieurs classes de caractères, c’est ce qu’on appelle le critère de complexité.


 

2. Les attaques possibles


2 différents vecteurs sont utilisés par un attaquant pour compromettre des mots de passe dans le cadre des attaques d'élévation de privilèges et d'usurpation de comptes :
  • les attaques dites « en ligne », qui visent à comparer les réponses d'un service d'authentification jusqu'à ce que le service valide le mot de passe entré ;
  • les attaques dites « hors ligne », qui consistent à reproduire le traitement (en général on parle de « hachage » ou de chiffrement) de mots de passe en clair vers leurs condensats (empreintes, hashs) jusqu'à ce que le mot de passe testé génère le bon résultat attendu.



2.1 Les attaques en ligne


Les attaques en ligne sont en général contrecarrées par la mise en place de mécanismes de sécurité :
  • le verrouillage (temporaire ou non) du compte testé au bout de X tentatives : génère un risque d'attaques de déni de service !
  • la détection d'un nombre important de tentatives dans un temps donné et le fait de bannir une adresse IP temporairement par exemple (risque de déni de service si l’adresse IP est partagée).



2.2 Les attaques hors ligne


Les attaques hors ligne du condensat sont totalement invisibles pour le service d'authentification ciblé puisqu'elles se déroulent en général :
  • sans être connecté au réseau ou à l'équipement ciblé ;
  • sur un poste ou un serveur de l'attaquant avec une puissance de calcul conséquente, en général avec une ou plusieurs cartes graphiques qui permettent d'accélérer les calculs de condensats ;
  • suite à une précédente attaque qui a consisté à dérober une base de condensats (empreintes, ou hashs) de mots de passe, par exemple le vol d'une base de données MySQL, la base SAM Windows pour un poste, ou encore la ruche NTDS.DIT d'un serveur Active Directory.

Les attaques par force brute.
Elles consistent en général à tester toutes les combinaisons possibles de mots de passe à partir des classes de caractères et des tailles données, par exemple de 3 à 6 caractères alphanumériques :
  • aaa ;
  • b1c2d ;
  • 999999.
Il est également possible de cibler les tests quand on connait des critères de la politique de complexité de mot de passe, par exemple :
  • Password[XXX] où XXX sont des chiffres ;
  • [X][yyyyyy] où X est une majuscule et y une minuscule.

Les attaques par dictionnaires.
Elles consistent à tester des listes de mots à partir d'un fichier dictionnaire.
Ce fichier peut être constitué de mots de passe générés manuellement, générés de manière automatisée ou de mots de passe trouvés sur internet et qui ont été diffusés suite à un piratage (forums, darkweb, ou parfois sur internet directement, cf Rockyou par exemple).
  • azerty ;
  • toto ;
  • password.

Les attaques par dictionnaires avec permutation de lettres.
Elles sont également basées sur un fichier dictionnaire, mais avec l'application de règles qui remplacent une lettre ou une chaine de caractères par une autre.
Exemples de règles de permutation :
  • password + règle de permutation a vers @ => p@ssword ;
  • password + règle de permutation a vers @ + règle de permutation o vers 0 => p@ssw0rd.
  Ceci permet de tester beaucoup plus de combinaisons de mots de passe, mais en gardant une certaine logique.

Les tables « arc-en-ciel » ou « rainbowtables ».
Elles étaient utilisées pour précalculer toutes les combinaisons possibles de mots de passe pour un algorithme donné, une taille et une complexité donnée.
Elles ne sont plus vraiment d'actualité étant donné qu'il est maintenant plus rapide de tester à la volée via GPU ces valeurs que de les précalculer et d'utiliser un disque dur pour aller chercher la bonne valeur.

Les attaques hors ligne ne cessent d’évoluer !
  • De nombreuses optimisations sur les outils et les techniques sont régulièrement apportées par la communauté ;
  • de nouvelles cartes graphiques arrivent en permanence sur le marché, et sont de plus en plus performantes ;
  • des travaux de recherche sur les comportements humains ou sur les algorithmes utilisés pour le stockage des mots de passe permettent d'optimiser les chances de réussites d'une attaque ou la vitesse de calcul d'un algorithme.

Ces différentes attaques sont facilitées par le comportement humain ou de mauvaises pratiques qu'on retrouve souvent :
  • les utilisateurs « changent » les anciens mots de passe en ajoutant un 1, 2, 3, ou le mois et/ou l'année à la fin de la version précédente ;
  • l’orthographe « leetspeak » (ou « 1337 ») et des mots de passe tels que « p@$$w0rd » ;
  • le cerveau humain ne respecte pas parfaitement le caractère aléatoire dans le choix des caractères ;
  • des mots du dictionnaire composent le mot de passe ;
  • les utilisateurs ont tendance à réutiliser le même mot de passe ou une base d’un mot sur différents accès (internes et externes à l'organisation) ;
  • le fait qu'un utilisateur choisisse un mot de passe commun à un autre utilisateur est un fait courant (même si les utilisateurs ne se connaissent pas du tout et que le mot de passe est complexe).

D'après mon retour d'expérience sur 10 ans, dans 99% des tests d'intrusion internes réalisés j'ai découvert au moins 1 mot de passe valide respectant les critères suivants :
  • basé sur le nom de l'entreprise ;
  • contenant les bases suivantes: « soleil », « password » / « Motdepasse », « azerty », « bonjour » ;
  • basés sur les prénoms des enfants ou leurs dates de naissance ;
  • contenant les mois ou les années ;
  • contenant des noms de villes ;
  • des comptes de test, de service ou des comptes d'administrateurs ne respectant la politique de complexité, pourtant appliquée sur les comptes utilisateurs ;
  • 8 caractères, composés d'une majuscule suivie de lettres minuscules, puis terminé par un ou des chiffres => Politique de complexité par défaut Active Directory respectée.

« L’utilisation de mots de passe d’organisation sur des sites web externes augmente considérablement la probabilité de compromission de ces mots de passe par des cybercriminels. »

« Une compréhension de la nature humaine est essentielle, car les recherches démontrent que pratiquement toutes les règles que vous imposez à vos utilisateurs entraînent une fragilisation de la qualité des mots de passe. Les exigences de longueur, de caractères spéciaux et de modification du mot de passe entraînent une normalisation des mots de passe, ce qui permet aux pirates informatiques de deviner ou de déchiffrer les mots de passe plus facilement. » ( Source : Microsoft ).

  Le changement régulier des mots de passe n'est plus recommandé. Le NIST et Microsoft ne le recommandent plus !

« Dans le cadre de l’étude Psychologie des mots de passe, LastPass a interrogé 3 250 personnes dans le monde entier pour en savoir plus sur l’état actuel des comportements de sécurité en ligne, et les résultats sont inquiétants :
  • 44 % des sondés utilisent des mots de passe identiques ou similaires alors qu’ils savent que cela affaiblit leur sécurité personnelle ;
  • 53 % n’ont pas changé leur mot de passe au cours des 12 derniers mois, y compris après avoir entendu parler de fuites dans l’actualité ;
  • 41 % pensent que leurs comptes ont trop peu de valeur pour qu’un pirate s’y intéresse ». ( Source : LastPass )

Rappel des recommandations que l'on trouve partout (2 critères) :
  • la taille (minimum 8, 10 ou 12 caractères en général).
Certains articles s'arrêtent à cette recommandation, est-ce suffisant ? NON ! ;
  • la taille + la complexité.
Certains articles s'arrêtent à cette recommandation, est-ce suffisant ? NON. C'est cependant suffisant dans certains cas :
  • quand ce mot de passe n'a aucune logique qui pourrait être devinée (ie: valeur totalement aléatoire et stockée dans un gestionnaire type KeePass) ;
  • quand ce mot de passe est d'une longueur qui ne peut être testée dans un temps « raisonnable » par force brute ;
  • quand ce mot de passe n'a jamais fuité en clair (condensat volé puis cassé, site piégé ou base de données volée en clair) et ne peut pas être récupéré en clair (cf attaques type Mimikatz permettant de récupérer le mot de passe en clair en mémoire Windows, quelle que soit sa complexité) ;
  • quand un mécanisme limite le nombre de tentatives possibles par force brute dans le cadre d’attaques en ligne.



3. Testez la force de vos mots de passe


De nombreux « testeurs » de mots de passe ou des indicateurs de « robustesse » lors de la création d'un compte sur une application existent.

  Peu de ces « testeurs » ou indicateurs vérifient la présence du mot de passe dans les bases de mots de passe fuités sur internet. Et s’ils le faisaient, on pourrait se demander où le mot de passe transite, et si cet échange réseau est suffisamment sécurisé.

Un mot de passe considéré comme « robuste » peut également avoir fuité, qu’il soit en clair ou non (site piraté interne ou externe à l'organisation, réutilisation entre différents sites…) ou avoir été trouvé par attaques avec permutations de lettres et/ou base commune avec un autre mot de passe.


  La majorité de ces « testeurs » se basent uniquement sur les indicateurs suivants :
  • une taille minimum arbitrairement choisie (en général 8 caractères) ;
  • l'utilisation de plusieurs classes de caractères (3 parmi 4 en général).

  L'indicateur de robustesse est donc arbitraire et donne un faux sentiment de sécurité car il n'empêche pas qu'une des attaques citées auparavant ne puisse trouver ce mot de passe à partir du condensat.

Il ne prend pas non plus en compte le temps de calcul de l'algorithme de hachage, qui peut fortement ralentir une attaque sur un condensat.

Dans la mesure du possible, l’utilisation de ces « testeurs » est donc à éviter car ils donnent un faux sentiment de « robustesse » (d’autant plus si le mot de passe est fonctionnel car il pourrait être journalisé et réutilisé). Les outils permettant de vérifier dans les bases de mots de passe fuités doivent plutôt être réservées aux analyses forensics pour la recherche de la fuite potentielle d’un mot de passe. Le seul site de confiance reconnu par la communauté étant HaveIBeenPwned.



4. Temps de cassage


En complément des indicateurs précédents, un indicateur farfelu est apparu dans les présentations : « le temps de cassage » d'un mot de passe.

Pourquoi c'est farfelu ?
La réussite d’une attaque sur un condensat de mot de passe dépend directement :
  • des paramètres définis par l'individu malveillant ;
  • de la puissance de calcul disponible pour un attaquant (nombre et type d'instance(s) de calcul) ;
  • de l'attaque utilisée (force brute, dictionnaires et dictionnaires avec permutation de lettres) et dans quel ordre ;
  • du temps de calcul pour l’algorithme utilisé pour le stockage du mot de passe (Blowfish plus lent que du SHA256 simple…) ;
  • de la source des mots de passe testés (compilation publique, compilation privée, base achetée sur le darknet...) et des éventuelles règles de permutation utilisées ;
  • aucun paramètre ou méthode n'est standard ou obligatoire.

Ce qui implique que l'indicateur est donc totalement subjectif et qu'il ne peut pas être utilisé dans les bonnes pratiques à diffuser aux utilisateurs.

Les seules données qui peuvent être données uniquement à titre indicatif pour avoir une idée d'un ordre de grandeur sont :
  • le nombre de mots de passe testés par seconde : par une carte graphique spécifique, avec un outil en version spécifique, un algorithme spécifique et un type d'attaque spécifique à une date donnée ;
  • une durée approximative nécessaire à tester toutes les combinaisons possibles de mots de passe (attaque par force brute) d'une taille spécifique, d'un algorithme spécifique, avec des classes de caractères données et une puissance de calcul équivalente à une carte graphique moyenne gamme.

Exemple : l'attaquant moyen disposant d'une carte graphique moyenne gamme est en mesure de tester toutes les combinaisons de mots de passe NTLM (Windows) utilisant le clavier français de 1 à 8 caractères en l'espace de quelques heures.

 

5. Et donc, qu'est-ce qu'on fait ?


En complément des critères de complexité et de taille implémentés dans la politique de mot de passe, des chantiers complémentaires sont à prévoir :
  • L’intégration de services ou de librairies (en ligne ou hors ligne) de vérification dans les fuites de données sur internet, afin de supprimer ou de bloquer les mots de passe déjà fuités. Un mécanisme de liste noire peut notamment être implémenté sur les annuaires Active Directory.
Cette intégration n’implique pas forcément d’envoyer le mot de passe en clair vers un service externe, puisqu’il est possible, lorsque le mot de passe est défini de :
  • télécharger des dictionnaires de mots de passe trouvés (hachés ou non) pour les comparer au mot de passe entré ;
  • envoyer uniquement le format haché du mot de passe ou même une seule partie, pour vérifier qu’il a fuité.
La librairie suivante permet par exemple de le faire via les API HaveIBeenPwned : https://jacksonvd.com/checking-for-breached-passwords-ad-using-k-anonymity/
Les serveurs Active Directory en environnement Azure implémentent cette option également :


digital.security peut également vous accompagner sur :

 
1. La sensibilisation des utilisateurs : au même titre que les campagnes de phishing, la sensibilisation de l’organisation est primordiale.

Sans aller jusqu’à sanctionner la personne dont le mot de passe trivial a fuité, un utilisateur qui comprend est un utilisateur qui aura potentiellement moins de mal à accepter les directives et les respectera sans chercher à les contourner.
Les questions suivantes doivent être abordées afin de sensibiliser le plus grand nombre :
Qu’est-ce qu’un mot de passe personnel, robuste et unique et pourquoi doit-on l’utiliser ? Comment fait-on ?  Quels sont les risques ? Quelle est la bonne pratique quand un site a laissé fuiter mon mot de passe ?

 
2. L’audit régulier de la base des mots de passe : en complément des autres pratiques, le contrôle reste nécessaire.

Un audit des mots de passe (de l'annuaire Active Directory par exemple) tous les X mois est possible afin d’éliminer les mots de passe qui sont trouvés (et qui pourraient donc être trouvés par un attaquant également), qu’ils soient robustes ou non selon les critères d’analyse.
L’auditeur qui réalise le test est à jour des dernières pratiques, des dernières fuites de mots de passe et des derniers outils, afin de se rapprocher au maximum du scénario d’un attaquant réel.


Quelques dernières recommandations :
  • On vérifie que la (ou les) politique de mot de passe est définie, mais surtout qu’elle est adaptée aux droits de l’utilisateur ciblé, et appliquée sur tous les comptes ! Par expérience, de nombreux comptes historiques, comptes de services ou comptes d’administration sont « oubliés » sur les annuaires Active Directory ;

  • On utilise au maximum des mots de passe qui ne sont basés sur aucun mot, uniques, complexes, aléatoires et suffisamment longs. On sait que 8 caractères en environnement Windows (format NTLM) à la date d’aujourd’hui ça tombe à tous les coups lors d’une attaque par force brute sur les empreintes en quelques heures. Donc on vise, comme le recommande l’ANSSI, au moins 12 caractères par sécurité (et plus de 14 caractères pour les comptes Administrateurs par exemple), stockés dans un conteneur sécurisé. Un gestionnaire de mot de passe de type KeePass permet de stocker et générer ces mots de passe, et de n’en retenir qu’un ;

  • On utilise l’authentification multifacteurs dès que possible, et on évite l’authentification par SMS qui peut être potentiellement interceptée (attaques « SIM-swaping ») ;

  • On arrête d’utiliser l’indicateur de « temps de cassage » ou « robustesse » comme fausse preuve de sécurité :) (Dès qu’une nouvelle carte graphique sort, on ne publie pas qu’elle peut tout casser).

AUTEUR

Jérémy Luyé-tanet : Manager de l’équipe Audit Hauts-de-France digital.security – Jeremy.Luye-Tanet@digital.security
 

références

[1] https://www.rapid7.com/research/report/under-the-hoodie-2019/
[2] https://support.kaspersky.com/fr/common/windows/3730
[3] https://pulse.microsoft.com/fr-be/making-a-difference-fr-be/na/fa2-6-conseils-pour-creer-un-mot-de-passe-fort/
[4] https://www.lci.fr/high-tech/faille-twitter-changemnt-mot-de-passe-5-conseils-pour-qu-ils-soient-ultra-securises-et-faciles-a-retenir-1557412.html
[5] https://fr.wikipedia.org/wiki/Robustesse_d%27un_mot_de_passe
[6] https://www.ssi.gouv.fr/guide/mot-de-passe/
[7] https://docs.microsoft.com/fr-fr/microsoft-365/admin/misc/password-policy-recommendations?view=o365-worldwide
[8] https://www.lastpass.com/fr/resources/psychology-of-passwords-2020
[9] https://jacksonvd.com/checking-for-breached-passwords-ad-using-k-anonymity/
[10] https://docs.microsoft.com/en-us/azure/active-directory/authentication/tutorial-configure-custom-password-protection