Retour au blog
sept. 2019·7 min de lectureTraduit par IA
Langue:DeutschEnglishFrançaisÖsterreichischKlingonian Version originale: Deutsch

Protection contre la force brute

#bruteforce#captcha#loginschutz#nutzerschutz#passwortschutz#protection#schutzmassnahme

Qu'est-ce que la force brute

Les attaques par force brute contre les applications web constituent un problème sérieux, en particulier pour les grands sites comptant beaucoup d'utilisateurs. Un attaquant tente de compromettre un compte utilisateur soit avec des combinaisons aléatoires de nom d'utilisateur et de mot de passe, soit avec ce qu'on appelle une liste de mots (wordlist), qui contient plusieurs noms d'utilisateur typiques et plusieurs mots de passe typiques comme admin et 1234. Ces listes sont essayées en succession rapide, et la réponse du serveur permet de reconnaître si la connexion a réussi ou non. Il faut alors, en théorie, partir du principe que la force brute peut hypothétiquement casser n'importe quel mot de passe. La question est toutefois de savoir en combien de temps le mot de passe peut être deviné. Si une attaque dure 20 minutes, c'est acceptable pour un attaquant ; à 500 ans, c'est tout autre chose. Un moyen efficace d'empêcher les attaques par force brute est donc de rendre la durée d'un passage réussi aussi longue que possible. En principe, il est donc toujours conseillé de ne pas indiquer à l'utilisateur qui se connecte si le nom d'utilisateur existe. Cela augmente de façon exorbitante la durée d'une attaque réussie, car l'attaquant doit en plus du mot de passe deviner un nom d'utilisateur valide. C'est moins pertinent pour les plateformes de réseau où chaque utilisateur peut voir les noms d'utilisateur des autres. Un attaquant n'aurait alors qu'à créer un compte valide et obtiendrait ainsi les noms d'utilisateur des autres (un mécanisme de protection possible figure ci-dessous). Par ailleurs, ne pas vérifier la connexion via des codes d'état HTTP est en principe une bonne approche. Un code 403 est facile à intercepter pour un attaquant, qui obtient ainsi rapidement l'information sur la réussite de la connexion et n'a pas besoin d'analyser en plus la page web pour obtenir l'état de connexion, ce qui représente pour nous un gain de temps supplémentaire.

Durée

Sur https://tmedweb.tulane.edu/content_open/bfcalc.php se trouve un calculateur passionnant qui peut vous calculer la durée d'une attaque par force brute et le nombre de combinaisons possibles. Un mot de passe avec 5 majuscules, deux minuscules et deux chiffres me donne là le résultat suivant : Your password is 9 characters long and has 803,181,017,600 combinations. It takes 15.58 hours or 0.65 days to crack your password on computer that trys 25,769,803,776 passwords per hour. This is based on a typical PC processor in 2007 and that the processor is under 10% load. 15,58 heures, c'est relativement peu et ne devrait probablement pas décourager un attaquant qui fait tourner le programme sur son ordinateur. L'objectif doit donc être d'allonger la durée de sorte que forcer le mot de passe ne paraisse plus raisonnable, tout en imposant à l'utilisateur aussi peu de restrictions que possible.

Comment se protéger

Captcha

Les captchas sont une démarche courante de protection contre les attaques par force brute. Après un certain nombre de connexions échouées, l'utilisateur voit un captcha qu'il doit en plus résoudre pour tenter une nouvelle connexion. L'avantage est que l'utilisateur n'est pas bloqué et conserve la possibilité de se connecter ; il doit toutefois résoudre un captcha, ce qui pose problème pour des raisons d'accessibilité. De plus, saisir un captcha qui n'est parfois pas facile à lire (ce qui est le but) peut décourager de nombreux utilisateurs.

Nom d'utilisateur secret

Un « Secret Username » (je ne sais pas si le terme existe officiellement) signifie que le nom d'utilisateur visible sur une plateforme de réseau n'est pas en même temps celui qui sert à se connecter. Alternativement, un identifiant utilisateur ou (un peu plus confortablement) l'adresse e-mail pourrait être demandé. Cela veut dire que, si je suis inscrit sur un réseau social avec le nom d'utilisateur David et l'adresse e-mail « fancymail@d3vdav3.de », les autres utilisateurs ne voient que mon nom d'utilisateur (David), mais la connexion n'est possible qu'avec mon adresse e-mail « fancymail@d3vdav3.de ». L'attaquant doit ainsi deviner à la fois nom d'utilisateur et mot de passe, ce qui augmente nettement la durée d'une attaque réussie.

Verrouillage de compte

Un verrouillage fait partie des moyens durs de protéger un compte contre les attaques par force brute. Le compte est alors bloqué pendant un certain temps après un certain nombre de tentatives de connexion erronées. Un attaquant qui doit attendre 30 secondes après 5 essais a besoin d'une durée nettement plus longue pour deviner un mot de passe et se cherchera une cible plus facile. L'inconvénient est toutefois qu'une attaque DOS relativement simple peut ainsi être lancée. Un attaquant qui connaît le nom d'utilisateur peut simplement lancer, à 30 secondes d'intervalle, plusieurs tentatives de connexion erronées et empêcher ainsi l'utilisateur légitime de se connecter. De plus, l'utilisateur légitime sera agacé, s'il a vraiment oublié son mot de passe, de devoir attendre 30 secondes avant de pouvoir refaire un essai.

Vérification par e-mail

Un moyen relativement simple et efficace est le déblocage de nouvelles tentatives de connexion par e-mail. Après un certain nombre de tentatives erronées, l'utilisateur reçoit un e-mail avec un lien sur lequel il faut cliquer pour débloquer à nouveau le compte. Un nouvel essai est ainsi possible assez vite, l'utilisateur n'a pas à attendre et, en cas de tentative de force brute, apprend en plus que plusieurs connexions ont échoué, et peut alors, le cas échéant, remplacer son mot de passe par un plus fort.

Mouvement de la souris

Fonctionnelle mais relativement inefficace est l'interception des mouvements de souris. Pour naviguer sur la page, l'utilisateur doit bouger sa souris, que ce soit pour atteindre le champ de saisie ou cliquer sur le bouton de connexion. Un utilisateur qui n'effectue aucun mouvement de souris peut éventuellement être un bot et pourrait alors être forcé de saisir un captcha. L'inconvénient est de nouveau l'accessibilité : on peut naviguer sur la page par exemple avec la touche TAB, ce qui ne déclenche aucun mouvement de souris et identifie à tort l'utilisateur comme un bot. Il serait donc aussi judicieux de vérifier les saisies au clavier. Mais via Chromium par exemple, l'événement keypress est lui aussi déclenché et la protection tombe à vide. De plus, un attaquant professionnel ne passera pas par le formulaire mais enverra les requêtes directement au script de connexion via une requête POST. Cette protection tombe donc de nouveau à vide.

Deux facteurs

Une démarche supplémentaire efficace est l'utilisation d'un jeton à usage unique / basé sur le temps, reposant sur l'authentification à deux facteurs. L'utilisateur reçoit ici une clé de par exemple 8 chiffres, qui change et est régénérée au bout d'un certain temps. La génération des clés se fait côté client comme côté serveur avec la même graine (seed), de sorte que le serveur peut recalculer et valider la clé saisie. L'avantage est que la clé change par exemple au bout de 30 secondes, ce qui complique une attaque par force brute.

Vitesse de connexion

Mesurer la vitesse de connexion est aussi une solution pour éviter les attaques par force brute. Côté serveur, on mesure le temps dont un utilisateur a besoin pour lancer une nouvelle connexion. À supposer que l'utilisateur légitime tape un autre mot de passe avant une nouvelle connexion, il faut au moins une seconde avant qu'une nouvelle tentative puisse avoir lieu. Un client qui lance plusieurs tentatives de connexion par seconde ne peut être piloté que par programme et peut donc être considéré comme un bot. Il serait donc judicieux, en cas de plusieurs tentatives de connexion dans un court laps de temps, d'activer un captcha pour validation supplémentaire, d'informer l'utilisateur ou de bloquer le compte pendant un certain temps.

Délai dans le processus de connexion

Une dernière possibilité est un délai dans le processus de connexion. L'utilisateur indique certes ses données, mais le serveur attend quelques secondes avant d'exécuter la connexion. On peut afficher à l'utilisateur une barre de chargement, de sorte qu'il lui semble que le serveur traite encore la requête. Chaque connexion est ainsi retardée de quelques secondes, ce qui complique une attaque par force brute réussie.

Résultat

Une protection absolue contre les attaques par force brute n'est pas possible. Elle peut toutefois être détectée et, le cas échéant, ralentie de telle sorte que la durée jusqu'au succès soit si grande qu'il n'est pas rentable de laisser réellement tourner l'attaque. Le mieux est de combiner pour cela plusieurs des méthodes citées ici, en cherchant toujours un équilibre entre convivialité et sécurité.

Plus récentyoutube-dl : télécharger du MP3 rapidementPlus ancienUn MacBook flambant neuf qui s'éteint tout seul