Alors que les experts de Kaspersky Blockchain Security testaient une plateforme blockchain pour détecter des vulnérabilités, ils ont récemment découvert que le processus de récupération du mot de passe de la plateforme était vulnérable. Il pouvait être attaqué à partir de l’énumération du nom d’utilisateur. Les développeurs Web doivent connaître ces attaques et leurs dangers.
Qu’est-ce qu’une attaque par énumération ?
En général, les applications Web qui utilisent un identifiant et un mot de passe pour s’authentifier comprennent différents composants qui interagissent avec la base de données de l’utilisateur : fenêtre de connexion (pour des raisons évidentes), formulaire d’inscription (pour éviter la duplication des noms d’utilisateur) et page pour réinitialiser le mot de passe (pour vérifier que le compte correspondant existe). Si les développeurs Web ne protègent pas suffisamment bien le déploiement de ces fonctions, les cybercriminels peuvent alors s’en servir pour déterminer si un certain nom d’utilisateur figure dans la base de données.
Autrefois, il était assez courant de constater que les développeurs mettaient en place toutes ces fonctions sans les protéger, et les pirates informatiques pouvaient utiliser une liste de noms d’utilisateur et un programme qui les saisissait un par un. Avec le temps, et pour se protéger des éventuels cybercriminels, les développeurs ont commencé à employer certaines méthodes de protection comme le test CAPTCHA, un nombre limité de tentative de connexion et l’utilisation de l’astérisque, ou d’un autre symbole, pour cacher certains détails d’une réponse.
Quant aux applications Web modernes, la fenêtre de connexion possède généralement ce genre de protection. Pourtant, les formulaires d’inscription et les pages permettant de réinitialiser le mot de passe n’en sont parfois pas équipés. De plus, certains développeurs Web ne croient pas que l’on puisse utiliser le temps de réponse du serveur pour déterminer si un utilisateur figure ou non dans la base de données. Par exemple, si le nom d’utilisateur est dans la base de données le serveur répond en 2 millisecondes. Dans le cas contraire, la réponse est deux fois plus longue (4 millisecondes). Un être humain ne peut pas percevoir cette différence ; en revanche, les outils d’énumération automatiques s’en rendent facilement compte.
Les dangers de l’attaque par énumération du nom d’utilisateur
L’attaque par énumération permet au cybercriminel de vérifier si la base de données contient un nom. Cela ne lui permet pas de se connecter immédiatement mais il obtient la moitié des renseignements nécessaires. Par exemple, si le pirate informatique veut mettre en place une attaque par force brute, il lui suffit de trouver le mot de passe qui correspond au nom d’utilisateur déjà vérifié. Moins de temps perdu et moins de travail puisqu’il n’a pas à rechercher les paires identifiants/mot de passe.
N’oubliez pas que la plupart des services utilisent l’adresse e-mail comme nom d’utilisateur. Par conséquent, un utilisateur quelconque a le même identifiant sur plusieurs sites Internet. Pourtant, certaines pages ne prennent pas la sécurité au sérieux. Il est désespérément courant d’entendre que certains identifiants, et les mots de passe correspondants, ont été divulgués. On trouve des collectes de données consolidées et obtenues lors de ces fuites sur les forums de discussion de cybercriminels. De plus, les gens ont tendance à utiliser le même mot de passe pour plusieurs services. Après avoir vérifié que le nom d’utilisateur existe sur le site Internet, le pirate informatique peut exploiter ce genre de collectes pour voir si cet utilisateur a des mots de passe différents sur d’autres sites, puis les essayer.
En outre, les opérateurs d’harponnage (spear phishing) réalisent souvent des attaques par énumération en phase de reconnaissance. Après avoir deviné que la cible a un compte pour ce service, ils peuvent envoyer un e-mail en son nom et demander à l’utilisateur de modifier son mot de passe en le dirigeant vers une page d’hameçonnage qui ressemble au site en question. Lorsque le client peu méfiant saisit un nouveau mot de passe, il doit d’abord confirmer l’ancien. De cette façon, l’escroc obtient tout ce dont il a besoin.
Comment se protéger d’une attaque par énumération
Avez-vous déjà remarqué comment les sites Internet actuels vous répondent après avoir rempli un formulaire pour réinitialiser votre mot de passe ? Contrairement à ce qui se faisait avant, ils ne vous disent pas « Nous vous avons envoyé un lien pour que vous puissiez réinitialiser votre mot de passe » ou « Cette adresse e-mail ne figure pas dans notre base de données ». Ils vous indiquent plutôt que « Vous recevrez un message avec un lien si cette adresse e-mail fait partie de notre base de données ». En d’autres termes, ces sites ne confirment ni ne dénient explicitement l’existence du nom d’utilisateur. Ils ont apporté ces changements pour protéger les utilisateurs des attaques par énumération.
Dans le même esprit, dans la fenêtre de connexion, il est inutile d’expliquer en détail que l’utilisateur a saisi un mot de passe incorrect, ou que cet identifiant n’existe pas. Il suffit de dire que cette combinaison identifiant/mot de passe est inconnue. Ce n’est pas la meilleure solution d’un point du vue expérience utilisateur. C’est assez rare, mais je perds patience lorsque je ne sais plus quelle adresse e-mail j’ai utilisée pour m’inscrire mais que je suis certain du mot de passe, ou vice versa, et que le site ne me dit pas lequel des deux est incorrect. La sécurité entraîne toujours une perte virtuelle de confort mais, lorsqu’il s’agit des services d’authentification, la moindre préférence pour la sécurité est justifiée.
Il est évident que l’utilisation d’un test CAPTCHA et d’un nombre limité de tentative de connexion sont indispensables. En plus de ces outils, et pour garantir la sécurité de votre application Web, nous vous conseillons de demander à un tiers de réaliser un audit. Si vous utilisez des technologies qui reposent sur la blockchain, nos collègues Kaspersky Blockchain Security peuvent vous aider à évaluer la sécurité de votre application Web.