J'ai créé un module de connexion sur mon site Web. J'ai pu faire face à de simples attaques par force brute car je peux identifier l'utilisateur en fonction de son nom d'utilisateur/e-mail et limiter sa connexion en fonction des tentatives de connexion infructueuses par compte d'utilisateur.
Mais lorsqu'il s'agit d'attaques de force brute énumérées par l'utilisateur (alias les attaques de force brute inversées), l'identification de l'utilisateur devient assez difficile. La limitation de la connexion basée sur les tentatives infructueuses par adresse IP peut ne pas fonctionner correctement et ennuyer les utilisateurs connectés à Internet via un réseau local car ils auront la même adresse IP externe, car ils pourraient faire face à une limitation en raison des tentatives infructueuses faites par quelqu'un d'autre sur le réseau.
Existe-t-il un moyen d'identifier de manière unique ces utilisateurs?
Comment identifier de manière unique les utilisateurs avec la même adresse IP externe? Existe-t-il un moyen d'identifier de manière unique ces utilisateurs?
Oui, il existe de nombreuses façons:
Mais la plupart d'entre eux ne sont pas utiles pour se défendre contre les attaques par force brute, car le programme qui les exécute n'acceptera probablement pas les cookies ou n'exécutera pas JavaScript.
Dans votre cas, vous pouvez essayer:
Vous pouvez obtenir l'adresse IP interne des utilisateurs même à partir d'Internet en utilisant HTML5 & WebRTC . Vous pouvez consulter l'article Découverte IP locale avec HTML5 WebRTC: risque de sécurité et de confidentialité? pour plus d'informations et l'essayer sur http://net.ipcalf.com/ .
Le site Web qui sert l'article semble maintenant en panne. Cependant, je pense que cet artice WebRTC a trouvé des adresses IP locales qui fuient peut également fournir des informations.
Il n'y a pas à ma connaissance de méthode non spoofable. Si vous limitez déjà le nombre maximal de tentatives à huit essais par minute avec un délai d'attente d'une minute. Un temps mort d'une minute n'est généralement pas considéré comme ennuyeux tant que vous donnez suffisamment d'informations à l'utilisateur.
Assurez-vous de revoir activement ces événements où il y a des brutes de force suspectées d'une adresse IP, car il pourrait être intéressant de rechercher qui essaie de vous brutaliser.
La plupart des autres méthodes mentionnées ici sont facilement supprimées et/ou réduisent considérablement les performances.
C'est pourquoi les pare-feu d'applications Web (WAF) ne comptent pas sur eux.
2 méthodes fiables sont:
Si vous combinez votre solution avec une limitation de débit, la limite de débit correcte doit être 1 à 2 fois le nombre d'URL par page. Par exemple, si login.php comprend 2 fichiers CSS, 4 fichiers JavaScript et 10 images plus la 1 page elle-même, vous devez autoriser au moins 17 accès par cookie de session client, par seconde. Sinon, vous risquez de bloquer/limiter les demandes normales.
Pour les attaques persistantes, vous devez demander à votre FAI de bloquer/trou noir la route en amont.
Pourquoi ne pas utiliser les autres solutions?
'User-Agent:' est très trivial à usurper:
wget -O index.html --user-agent="My Fake Browser"
Les cookies de session, l'en-tête HTTP "X-Forwarded-For:" et d'autres en-têtes sont également triviaux à voler/usurper. Google 'Firesheep' ou 'Cookies Manager +' ou 'Modify Headers plugin' ou 'LiveHeaders plugin' etc. pour preuve.
La limitation du débit ne suffit pas non plus, car une attaque furtive aléatoirement ou augmentera le temps d'attente entre les requêtes:
wget --limit-rate=10 http://example.com/index.php
La force brute n'est généralement pas votre seul problème. https://www.owasp.org/index.php/Top_10_2013-Top_1 = Le codage et le test d'une protection efficace prennent également du temps. Pour vous faire gagner du temps et/ou des cycles CPU sur vos serveurs Web - c'est un gaspillage multiplié si vous avez une batterie de serveurs - votre hôte Web devrait offrir un WAF frontal avec celui-ci configuré pour vous. C'est la meilleure solution - ne le faites pas côté serveur. Faites-le en amont.
L'identification unique peut être difficile, mais il est possible d'ajouter des variables de serveur comme l'agent utilisateur et des variables locales comme les cookies (qui peuvent toutes deux être falsifiées et/ou contournées, mais ajoutent au moins quelques variations à côté de l'adresse IP). Si JavaScript est une option, vous pouvez essayer empreinte digitale du navigateur (JavaScript ou HTML5 Canvas)