Y a des tas de types d'attaque de type "force brute". La plus performante c'est en effet de récupérer le hash (via fuite de la base de données par exemple), de tester un par un une liste de mots de passe avec la même fonction de hashage que celle utilisée par le site piraté, et de s'arrêter quand le hash correspond.
Citation :
Mais qu'est-ce qui, au départ, permet de faire la liste des "mots de passe classiques" à tester ?
Des dictionnaires de ce type sont disponibles un peu partout, d'ailleurs les composants qui permettent de mesurer la force d'un mot de passe en font usage (ex : mots de passe les plus utilisés, liste des prénoms français les plus courants, liste des mots les plus utilisés sur wikipédia dans une langue donnée, etc.). Les plus efficaces sont bien connus des hackers et disponibles très facilement sur le net. Il existe même des "
rainbow tables", qui sont en fait une liste de mots de passe et leur hash selon une fonction de hashage donnée, et qui permettent d'accélérer l'attaque en évitant à l'algorithme de devoir recalculer le hash (cependant ces tables ne sont pas aussi efficaces si le hash est "
salé").
Après le dictionnaire ne fait pas tout, l'algorithme qui va l'exploiter est aussi assez important : il peut se contenter de tester les mots de passe de la liste dans l'ordre, ou effectuer des combinaisons "stratégiques" de mots et de séparateur, combiner avec un peu de pure force brute, faire varier la casse... Après, si le mot de passe est suffisamment robuste et que l'attaquant ne cherche pas à craquer un compte en particulier, il a plutôt intérêt à utiliser un algorithme simple et passer à un autre compte plutôt que d'insister sur le même.
En fait ces techniques ne sont pas réservées aux attaques "hors ligne". Ça fonctionne assez facilement sur un site en ligne non piraté s'il n'est pas suffisamment sécurisé, notamment s'il ne bloque pas les tentatives de connexion après un certain nombre d'échecs. Il suffit à l'attaquant d'implémenter un robot qui va simuler des connexions de navigateur (possiblement en parallèle voire depuis plusieurs machines, voire un "
botnet") en faisant varier login/mdp jusqu'à ce que le serveur réponde "OK". C'est beaucoup plus lent qu'une attaque hors ligne, mais avec un mot de passe aussi faible que "James1975" et une attaque distribuée utilisant un dictionnaire adapté, ça peut prendre un temps dérisoire...
La démo de zxcvbn-ts donne d'ailleurs des estimations statistiques très intéressante (mais avec un dictionnaire anglais seulement).
Ce n'est d'ailleurs pas si simple de se protéger contre ce type d'attaque pour le propriétaire du site non plus :
- S'il bloque l'adresse IP qui échoue trop de fois à la suite, il risque de bloquer toute une entreprise dans laquelle tous les employés partagent l'IP du proxy. En plus, l'attaquant a toujours la possibilité de lancer son attaque de manière distribuée (botnet) et donc d'ignorer le blocage si son réseau est suffisamment grand.
- S'il bloque le compte, l'attaquant peut choisir de lisser son attaque sur plusieurs comptes en même temps s'il ne cherche pas à en pirater un en particulier, voire d'exploiter ce mécanisme de blocage pour bloquer l'accès au site à ses utilisateurs légitimes.
- etc.
Personnellement j'ai mis en place au boulot un mécanisme de blocage temporaire par adresse IP (blocage des tentatives de connexion provenant d'une IP donnée si X connexions échouées dans les Y dernières minutes), ça limite déjà pas mal le "niveau technique minimum" de l'attaquant sans devoir déployer des ressources coûteuses complexes à maintenir (
Web Application Firewall, etc.).