Le brute force est certainement l’une des techniques d’attaques les plus triviales. La principale raison : le facteur humain reste le maillon faible de la chaine cybersécurité. En effet, nul besoin de réaliser des attaques d’ingénierie sociale ou des attaques d’injection SQL sophistiquées pour voler des identifiants car les habitudes ont la vie dure : les mots de passe des utilisateurs restent faibles donc faciles à deviner. Avec les bons outils, même les attaquants les plus novices parviennent à compromettre les données et paralyser les systèmes de grandes entreprises.
Cependant, il serait injuste de jeter l’opprobre uniquement sur les utilisateurs, car avant même une attaque ciblant leurs identifiants, ces derniers sont souvent déjà victimes de politiques de sécurité inefficaces voire contre-productives. Et même dans les entreprises les plus sensibilisées aux risques d’attaques brute force, les mécanismes et mesures de protections implémentés sont la plupart du temps insuffisants. Nous reviendrons largement sur ce sujet dans le cœur de notre article car il existe encore de nombreuses idées reçues sur le brute force qui, spoiler alert ! ne sert pas seulement à contourner les systèmes d’authentification en devinant des mots de passe et identifiants d’utilisateurs.
Entrons dans le vif du sujet avec cet article qui se propose d’analyser ces divers biais et de présenter les mesures essentielles pour prévenir ou contrer les différents types d’attaques brute force.
Qu’est-ce qu’une attaque brute force ?
Une attaque brute force consiste en un processus d’essais-erreurs utilisé pour deviner les informations d’identification (identifiants/mots de passe ou clés de chiffrement). L’objectif est d’obtenir un accès non autorisé à un système. Il s’agit donc de partir d’un identifiant et d’essayer plusieurs combinaisons de mots de passe ou inversement, d’utiliser plusieurs identifiants contre un seul mot de passe.
Cependant, le brute force ce n’est pas que ça contrairement aux idées reçues. Pour information, il s’agit certainement de la technique que nous utilisons le plus souvent lors de nos tests d’intrusion sur tous types de cibles, tant les exploitations possibles sont nombreuses. En effet, comme indiqué en préambule, les attaques brute force ne servent pas qu’à deviner des identifiants ou des mots de passe. Elles servent souvent de vecteurs pour lancer d’autres attaques et exploiter les vulnérabilités de certains systèmes :
- Problèmes de droits (IDOR) via devinette d’identifiants en cas de défaut de contrôle d’accès permettant d’accéder à des données ou des fichiers, etc.
- Fuzzing (recherche de contenus) via utilisation d’un dictionnaire pour trouver des fichiers non répertoriés sur l’interface d’une application par exemple.
- Énumération d’utilisateurs en cas de mauvaises configuration permettant d’offrir d’autres options à un attaquant comme cibler des utilisateurs via du phishing par exemple.
De fait, les attaques brute force sont très répandues et très utilisées par des pentesters comme des attaquants car elles peuvent tirer parti d’une pléthore de manquements sur le plan sécurité. Et pour ne pas arranger les choses, elles sont très faciles à exécuter avec des outils (BURP, HYDRA, John the Ripper, etc.), des scripts d’automatisation et des bases de données de mots de passe (dictionnaires).
Enfin, disons-le, les attaques brute force sont relativement efficaces car les utilisateurs utilisent encore trop souvent des mots de passe faibles, et le craquage de ces derniers reste tout de même le cas d’utilisation le plus courant.
Quels sont les différents types d’attaques brute force ?
Il existe plusieurs types d’attaques brute force : les attaques par dictionnaire, le password spraying et le credential stuffing.
Les attaques par dictionnaire
Dans ce type d’attaque, tous les mots d’un dictionnaire sont testés pour trouver un mot de passe ou des fichiers (dans le cadre du fuzzing). Par ailleurs, il ne s’agit pas ici de tester les mots de dictionnaires ordinaires mais de réelles bases de données (comme RockYou ou SecLists par exemple) issues de nombreuses études et analyses d’habitudes d’utilisateurs et de développeurs et constamment mises à jour. De plus, les attaquants peuvent paramétrer les outils utilisés pour le brute force afin d’ajouter des chiffres, caractères et autres éléments afin de tester de nombreuses possibilités plus complexes.
Le password spraying
Le password spraying est une autre variante d’attaque brute force. Dans ce cas de figure, il s’agit pour un attaquant de tester des mots de passe couramment utilisés pour obtenir un accès à un ou plusieurs comptes utilisateurs. En effet, les attaques brute force traditionnelles tentent d’obtenir un accès non autorisé à un seul compte en devinant le mot de passe. Ce qui peut rapidement entraîner le verrouillage du compte ciblé, car les politiques de verrouillage de compte couramment utilisées autorisent généralement un nombre limité de tentatives infructueuses. Cependant le verrouillage de comptes reste une mauvaise idée et nous reviendrons sur ce point un peu plus loin dans nos bonnes pratiques.
Ainsi, les attaques par password spraying sont non seulement des tentatives d’évitement de ce type de mécanismes de sécurité mais se révèlent très efficaces. Les attaquants partent en effet du principe qu’au sein d’un grand groupe de personnes, il est probable qu’il y en ait au moins une qui utilise un mot de passe commun, et c’est malheureusement trop souvent le cas. En effet, les identifiants repris dans les mots de passe, le nom de l’entreprise ou de l’application suivi de l’année et d’un signe de ponctuation (généralement un point d’exclamation) sont des pratiques répandues et connues des attaquants.
Le credential stuffing
Contrairement aux attaques par dictionnaire ou au password spraying, le credential stuffing se produit après une compromission d’un compte utilisateur lorsqu’un attaquant devine une combinaison valide d’identifiant et mot de passe donnant accès à un système donné. En effet, dans ce cas de figure, un attaquant essaie cette même combinaison sur d’autres systèmes, en partant du principe que les utilisateurs utilisent généralement le même mot de passe pour plusieurs sites, ce qui est malheureusement souvent vrai.
Pour une entreprise, une attaque brute force peut avoir des conséquences désastreuses : vol, fuites ou altération de données, pertes financières, atteinte à la réputation, retards et erreurs dans les opérations, etc. Il est donc important de mettre en œuvre les mesures techniques nécessaires pour prévenir ou conter ce type d’attaque.
Comment prévenir ou contrer les attaques brute force ?
Implémenter une politique de mots de passe efficace
Contrer une attaque brute force passe nécessairement par l’implémentation d’une politique de mots de passe efficace. Pour ce faire, seul le critère « taille » est essentiel car, plus un mot de passe est long, plus il sera difficile à deviner via une attaque brute force.
Cependant, ce critère est encore trop souvent ignoré par les entreprises en charge de mettre en œuvre ces politiques de mots passe et les utilisateurs nourris et contraints par des consignes contre-productives voire dangereuses sur le plan sécurité. En effet, les directives du type : longueur minimale d’au moins 8 caractères incluant au moins une majuscule, un chiffre et un caractère spécial, sont désuètes et trompeuses.
Prenons par exemple le mot de passe suivant : Monmotdepasse1!. Si on suit les directives ci-dessus, ce dernier est considéré comme sécurisé alors qu’il n’en est rien. En effet, il est beaucoup plus facile à deviner via une attaque brute force contrairement au mot de passe suivant : couragepourdevinermonmotdepassekevin, alors que ce dernier ne contient ni chiffre, ni majuscule, ni caractère spécial. Donc longueur est le mot d’ordre pour définir un mot de passe sécurisé (15 à 20 caractères quel que soit le type de caractères), car cela réduit les chances d’être deviné. Et évidemment il faut éviter des suites de caractères (comme 12345678910111213), cela va de soi.
Aussi, il faut partir du principe qu’un attaquant ne réalise pas ce type de technique manuellement, en saisissant un par un des mots de passe, même si cela peut arriver pour des mots de passe par défaut. En effet, de nombreuses applications web et frameworks créent des utilisateurs par défaut lors de l’installation (id : admin / mot de passe : admin étant un cas courant). Si ces comptes utilisateurs ne sont pas supprimés ou modifiés, ils constituent des cibles faciles pour une attaque brute force, qui s’appuie donc généralement sur outil automatisé pour effectuer des milliers de requêtes par minute avec des informations d’identification générées à partir d’une longue liste de valeurs possibles (attaques par dictionnaire vous vous rappelez !).
Enfin, abordons le sujet des politiques d’expiration qui visent à encourager les changements fréquents de mots de passe pour prévenir d’éventuelles fuites. À première vue, cela apparait comme une bonne mesure de sécurité. Cependant, l’analyse des comportements des utilisateurs montre une tout autre réalité. En effet, la plupart du temps, les utilisateurs se contentent de créer un autre mot de passe non sécurisé car facile à craquer par des attaquants. Il est donc recommandé de bannir ces politiques d’expiration de mots de passe et de tout simplement inciter les utilisateurs à choisir un mot de passe suffisamment long et complexe.
Il existe de nombreuses solutions pour sensibiliser les collaborateurs. L’une d’entre elles consiste à les responsabiliser en les invitant à vérifier à une certaine fréquence si leurs mots de passe, identifiants, numéros de téléphone n’ont pas été compromis et divulgués lors d’une fuite de données. Des outils comme have I been pwned ? facilitent cette vérification et offrent également la possibilité pour des entreprises de s’inscrire afin de recevoir des alertes en cas de fuites de données. Un audit d’exposition web et dark web peut également être envisagé afin d’identifier sa surface d’attaque donc des éventuelles fuites de données sur le web visible ou le dark web.
Ne pas désactiver les comptes après des échecs de connexion
Une autre stratégie de défense courante contre une attaque brute force consiste à désactiver automatiquement un compte après un certain nombre de tentatives de connexion infructueuses. Dans la plupart des cas, le compte peut être réactivé automatiquement après un certain délai, ou l’utilisateur peut devoir contacter l’administrateur afin que le compte soit réactivé. Dans un cas comme dans l’autre, la désactivation automatique des comptes utilisateurs est un mauvais mécanisme de sécurité pour lutter contre une attaque brute force.
En premier lieu, en désactivant les comptes, le système a échangé une vulnérabilité de contournement d’authentification contre une possibilité d’attaque DoS (déni de service). En effet, si un attaquant peut désactiver un compte après 3 tentatives infructueuses toutes les 30 minutes par exemple, il peut effectivement empêcher cet utilisateur d’accéder au système. Imaginez les dégâts que pourrait causer une attaque brute force si elle était utilisée contre un compte administrateur avec un tel mécanisme en place.
En second lieu, le verrouillage des comptes est inefficace contre les attaques par password spraying ou certaines attaques par dictionnaire. En effet, elles sont focalisées sur les mots de passe alors que ce mécanisme de verrouillage suppose que l’attaquant garde le nom d’utilisateur et essaie de deviner le mot de passe. Dans ces cas de figure, un attaquant pourrait effectuer des milliers de tentatives de connexion, et même si chacune d’entre elles échoue, le système n’enregistrera qu’une seule connexion incorrecte par compte.
Mettre un délai après chaque échec de connexion
Une meilleure technique pour contrer les attaques brute force consiste à retarder progressivement la réponse de la page après l’échec des tentatives de connexion. Après la première tentative de connexion échouée, par exemple, la réponse sera retardée d’une seconde. Après le deuxième échec, la réponse est retardée de deux secondes, et ainsi de suite.
L’implémentation de ce type de technique, dit de délai incrémentiel, peut rendre totalement inefficace les outils automatisés de brute force car le temps nécessaire pour effectuer des essais sera fortement rallongé.
Implémenter une authentification multi facteurs
L’ajout d’un facteur d’authentification supplémentaire rend également plus difficile pour un attaquant de craquer un compte via une attaque brute force. En effet, avec un 2FA en place, un attaquant se trouvera face à une autre barrière, souvent très difficile voire impossible à deviner pour un code généré aléatoirement avec une durée limitée par exemple. Il ne pourra donc pas se connecter au compte d’un utilisateur, même s’il saisit le bon identifiant et le bon mot de passe.
Pour plus d’informations, vous pouvez consulter notre article dédié : Fonctionnement et configuration de l’authentification 2 facteurs.
Utiliser un algorithme robuste pour le stockage des mots de passe
Le stockage des mots de passe des utilisateurs en base de données doit être réalisé de manière sécurisée. En effet, en cas de compromission de cette base, tous les mots de passe seront accessibles s’ils sont stockés en clair. Le stockage des mots de passe en clair doit être absolument proscrit.
Il est donc important d’utiliser un algorithme robuste pour le stockage des mots de passe. Pour plus de détails, nous avons longuement traité le sujet dans un article dédié, que nous vous invitons vivement à consulter : Comment stocker les mots de passe de manière sécurisée dans une base de données ?
Monitorer tous les événements utilisateurs
Monitorer l’activité des utilisateurs et des événements au sein de votre réseau ne permet pas de contrer les attaques brute force mais reste un pan essentiel d’une bonne stratégie de sécurité. En effet, avec un monitoring efficace il est possible – entre autres – de détecter des événements inhabituels comme des demandes d’accès répétitives.
Pour plus d’informations, vous pouvez consulter notre article dédié : Logging et monitoring, définitions et bonnes pratiques.
Personnaliser les messages d’erreur
Enfin, il est important de créer des messages d’erreur appropriés en réponse à l’échec des tentatives de connexion, car c’est souvent un des facteurs de réussite d’une attaque brute force. De fait, il ne faut surtout pas faciliter la tâche des attaquants en leur offrant des informations précieuses donc un gain de temps non négligeable avec des messages du type « utilisateur introuvable » ou « mot de passe incorrect ».
En effet, un message « utilisateur introuvable » indique à un attaquant que l’identifiant utilisateur qu’il tente de deviner via du brute force n’existe pas dans le système. D’autre part, l’information « Mot de passe incorrect » lui indique que l’identifiant utilisateur existe bien, mais que le mot de passe est incorrect.
Ainsi, il est plus sûr pour une application de répondre par un message « obscure » comme « Nom d’utilisateur ou mot de passe incorrect » lorsqu’une tentative de connexion échoue pour donner aucun indice à un attaquant potentiel.
Conclusion : pour contrer les attaques brute force, c’est la taille qui compte !
L’authentification par mot de passe reste le moyen le plus courant d’accorder un accès. Cependant, aussi peu techniques qu’elles puissent être, les attaques brute force se révèlent très efficaces pour compromettre des applications. Des mécanismes de sécurité appropriés doivent donc être implémentés.
La première et principale méthode pour déjouer une attaque par force brute est d’exiger de tous les utilisateurs qu’ils choisissent un mot de passe fort. Pour ce faire, c’est sans conteste qu’une question de taille ! Les mots de passe doivent surtout être longs (15 à 20 caractères sans par ailleurs limiter la taille maximale). De fait, exit les directives du type : longueur d’au moins 8 caractères avec un mix de lettres majuscules et minuscules, de chiffres et de signes de ponctuation. Et rien de tel qu’un gestionnaire de mots de passe pour implémenter ou renforcer une politique de mots de passe.
Enfin, il ne faut surtout pas faciliter le travail des attaquants. Ainsi, les procédures de changements fréquents de mots de passe comme les mécanismes de désactivation de comptes ou les messages d’échecs de connexion génériques sont à proscrire.