Je me demandais si reCAPTCHA était suffisamment fort pour empêcher BruteForce des bots ou si j'avais besoin d'ajouter plus de sécurité, comme l'envoi d'un courrier unique à l'utilisateur tous les 5 essais pour que quelqu'un essaie de se connecter au compte et de bloquer le compte pendant que le courrier n'est pas pas vérifié.
L'objectif est d'empêcher la devinette automatisée des mots de passe sur un site Web.
ReCaptcha est génial du point de vue du client, mais ce n'est pas parfait.
La technique de messagerie que vous mentionnez est appelée verrouillage de compte et constitue un moyen de dissuasion très efficace contre les attaques par force brute. Je voudrais l'implémenter car c'est une couche supplémentaire indépendante du côté client complètement.
Une autre mesure que vous pouvez mettre en œuvre est la limitation. Il est irréaliste pour un humain d'envoyer 2 demandes en 1 seconde (ou toute valeur que vous jugez appropriée), vous limitez donc la fréquence des connexions acceptées. Dans iptables, vous feriez quelque chose comme ceci:
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
(Exemple tiré de debian-administration.org .) Cela limitera les demandes au port 22 à 3/minute, toute autre demande sera supprimée. Cela peut être utile pour d'autres opérations en plus des routines de connexion.
Un CAPTCHA est normalement destiné à garantir que l'entrée "utilisateur" provient d'une personne réelle.
Bien qu'il puisse aider à prévenir les attaques automatisées contre un mécanisme de connexion à un site Web, il est susceptible d'avoir un impact négatif sur l'expérience utilisateur (nom d'utilisateur, mot de passe et CAPTCHA) à moins que le système ne puisse être configuré pour activer le CAPTCHA uniquement après une ou deux connexions infructueuses.
L'autre mécanisme pour contrôler les attaques sans compromettre l'expérience utilisateur est une politique de contrôle d'accès sur le site Web qui comprend une limite sur le nombre de tentatives de connexion infructueuses pendant une période de temps donnée, suivie d'une durée de verrouillage. Cela vous aidera à vaincre à la fois les attaques automatisées et ciblées (c'est-à-dire les attaques par devinettes de mot de passe basées sur l'utilisateur ainsi que les attaques automatisées), de sorte qu'en fait, vous obtenez 2 pour 1.
Que ce soit pour imposer un verrouillage temporisé (c'est-à-dire une réinitialisation automatique après 10 minutes, par exemple) ou pour verrouiller le compte et attendre que l'utilisateur valide réponde d'une manière ou d'une autre, c'est un appel de jugement basé sur le scénario particulier, c'est-à-dire des choses comme la sensibilité des données, la taille de population d'utilisateurs, nombre de personnel du service d'assistance disponible, etc.
Avertir l'utilisateur de plusieurs échecs de connexion peut aider à sensibiliser l'utilisateur à d'éventuelles tentatives d'accès non autorisé, mais peut également entraîner de nombreux appels d'assistance indésirables, alors définissez la barre à un niveau qui vous convient.
reCAPTCHA rend certainement la devinette du mot de passe plus difficile, mais pas impossible. Les pirates mettent en place des sites avec des goodies (jeux, téléchargements, etc.), qui sont protégés par captcha, et y redirigeront votre captcha. Les utilisateurs essayant d'obtenir leur téléchargement résoudront vos captchas, permettant aux pirates de l'utiliser pour deviner un autre mot de passe. Le verrouillage du compte est plus efficace, car seul le propriétaire de l'e-mail peut déverrouiller le compte. C'est aussi plus perturbant pour les utilisateurs.
Gardez à l'esprit que le captcha et le verrouillage du compte sont des expériences utilisateur terribles, et votre site devrait être assez bon/unique pour pouvoir se permettre de telles techniques. Donnez à vos utilisateurs au moins quelques tentatives avant de demander la résolution d'un captcha pour la première fois, sinon les utilisateurs peuvent simplement passer au site suivant offrant les mêmes services que le vôtre.
L'autre moyen de sécurité supplémentaire est l'authentification à 2 facteurs. C'est là que les utilisateurs enregistrent leur numéro de téléphone cellulaire (mobile) et chaque fois qu'ils se connectent, le serveur envoie un code via un message SMS qui doit être entré par l'utilisateur avant d'accéder. Comme pour toutes les choses, la sécurité, cela ajoute une couche de gêne pour l'utilisateur mais est extrêmement efficace.
Un moyen de sécurité beaucoup plus simple consiste à restreindre les mots de passe courts/faciles. Si votre utilisateur est autorisé à faire "1234" son mot de passe, un bot est beaucoup plus susceptible de le deviner que "ihatelongpasswordssomuch"
J'ai vu des sites qui utilisent un CAPTCHA après un nombre "faible" de tentatives de mot de passe incorrectes (comme 3), puis verrouillent le compte pendant une période de temps (telle qu'une heure) après un nombre "élevé" de tentatives de mot de passe incorrectes ( comme 10). En effet, cela signifie que les attaques par force brute sont limitées à un maximum de 10 suppositions par heure, effectuées par un opérateur humain - ce qui n'est pas très attrayant du point de vue d'un attaquant.
De nombreuses réponses semblent impliquer que reCAPTCHA vérifie que l'entrée est humaine ... ce n'est pas le cas. Il y a beaucoup d'open source tilitaires OCR (côté client et côté serveur) qui permettent à n'importe quel script automatisé d'analyser le texte d'une image. Ainsi, tout ce qui est basé sur du texte, même des calculs, peut facilement être usurpé.
L'OCR ajoute beaucoup de temps pour chaque supposition et nécessite également beaucoup plus de ressources (puissance de calcul), mais au final, cela ne fait que retarder l'attaquant. Il ne doit donc jamais être utilisé comme seul mécanisme défensif, seul bien sûr un est meilleur qu’aucun. Si possible, utilisez les nouvelles vérifications basées sur l'image (sélectionnez toutes les images qui montrent une fleur). Les mécanismes basés sur les entrées (comme Google teste actuellement) sont également facilement usurpés en analysant correctement votre matériel.
Je conseillerais également de conserver un historique des adresses IP, des agents utilisateurs, de tout ce qui est identifiable lorsqu'un mot de passe incorrect a été entré pour un utilisateur. Si je devais brutaliser un utilisateur, j'alternerais entre de nombreux utilisateurs, en utilisant de nombreux proxys différents et en utilisant un spoofer d'agent utilisateur pour le rendre aléatoire, mais avec suffisamment d'informations, tout peut être détecté et bloqué.
reCaptcha est assez bon mais n'est pas parfait.
Un outil comme fail2ban est un autre moyen efficace. Configurez le site Web pour consigner les échecs, puis configurez fail2ban pour surveiller le journal et lorsqu'il détecte x nombre de défaillances à partir d'une adresse IP dans un laps de temps défini, il ajoute une règle de pare-feu afin que le serveur se déconnecte de cette adresse IP pendant une durée prédéterminée.
Avantages:
Désavantages: