web-dev-qa-db-fra.com

Tentatives de connexion à la limite de taux: compter par IP ou nom d'utilisateur

J'ai besoin de limiter les tentatives de connexion.

Une option consiste à compter les tentatives par adresse IP, puis à bloquer l'adresse IP. L'inconvénient est que différents utilisateurs peuvent avoir la même adresse IP. Une autre option est de limiter par un identifiant de compte (nom d'utilisateur ou email) puis de bloquer le compte (il peut être activé manuellement par le support). Le seul inconvénient auquel je peux penser est que les utilisateurs malveillants peuvent deviner les noms d'utilisateur et les bloquer ... Mais à part ça, cela semble plus sécurisé car les utilisateurs malveillants peuvent utiliser différentes IP, non?

Quelle est la méthode recommandée pour le faire?

23
Moshe Shaham

Je dirais que vous devriez faire les deux.

Si vous ne limitez la limite que sur l'adresse IP, un attaquant contrôlant un réseau de robots pourrait forcer brutalement un compte avec un mot de passe faible. Si vous avez 10 000 ordinateurs avec des adresses IP uniques et que chacun a droit à quatre tentatives par heure, vous pouvez essayer près d'un million de mots de passe par jour.

Si vous ne notez que la limite du nom d'utilisateur, un attaquant avec une liste de noms d'utilisateur existants pourrait forcer les comptes avec un mot de passe faible. Il est probable que quelques-uns de vos utilisateurs utilisent l'un des 10 premiers mots de passe, donc si vous les essayez sur tous les comptes, vous entrerez quelque part.

Bien sûr, vous pouvez faire toutes sortes de combinaisons. Par exemple, vous pouvez bloquer un nom d'utilisateur uniquement lorsque X adresses IP différentes n'ont pas réussi à se connecter avec lui, de sorte qu'un attaquant essayant d'empêcher un utilisateur de se connecter doit travailler un peu pour cela.

33
Anders

Modèle de menace

Cela dépend vraiment de votre modèle de menace:

  • Quelle est la gravité d'une attaque DOS contre les utilisateurs par rapport à la compromission d'un compte d'utilisateur?
  • Un attaquant veut-il attaquer un utilisateur spécifique ou simplement collecter autant d'informations d'identification valides que possible? (dans le premier cas, vous voudriez bloquer par nom d'utilisateur, dans le second par IP).
  • Est-il facile de débloquer un nom d'utilisateur bloqué pour un utilisateur légitime?
  • ...

Exemples

Prenons ebay comme exemple:

  • Une attaque DOS serait plutôt mauvaise. Quelqu'un pourrait empêcher tous les utilisateurs en concurrence sur une offre de pouvoir se connecter.
  • Bien sûr, la compromission de compte n'est pas non plus une bonne chose, mais le paiement est sécurisé (je pense, il devrait l'être) en exigeant des informations supplémentaires (par exemple, lorsque vous payez via Paypal, vous devrez entrer votre mot de passe Paypal). De plus, l'interdiction par nom d'utilisateur n'ajoute de la sécurité que si un attaquant veut attaquer un utilisateur spécifique. S'ils veulent juste autant de comptes que possible, le blocage des noms d'utilisateur ne limite pas les attaquants. Seul le blocage des adresses IP le fait.

Ainsi, dans cet exemple - l'accès à l'application est quelque peu critique, et un attaquant n'attaque pas des comptes d'utilisateurs spécifiques -, la limitation par IP serait la bonne décision, et la limitation par nom d'utilisateur serait préjudiciable.

Prenons un autre exemple: une connexion administrateur pour une application Web:

  • Vous n'avez probablement pas à vous soucier de DOS. Oui, ce serait une gêne mineure, mais l'administrateur a probablement des méthodes simples pour récupérer son compte. Peut-être que la page de connexion est également masquée, donc un attaquant devrait d'abord le deviner.
  • Un attaquant ne veut attaquer que ce seul compte administrateur et il peut avoir plusieurs proxy. Bloquer ce compte est logique ici.

Donc, ici, le blocage par IP a un faible effet sur l'attaquant, tandis que le blocage par nom d'utilisateur serait le bon choix.

17
tim

Vous devriez limiter les deux taux.

Donner à un compte des tentatives de connexion limitées (à partir de toutes les adresses IP) est assez standard et arrêtera une tentative de deviner le mot de passe d'un utilisateur.

Vous devez également limiter la limite de chaque adresse IP contre les tentatives de connexion incorrectes pour tous les comptes tentés, afin qu'ils ne puissent pas maximiser un compte et essayer contre un autre encore et encore.

Bien sûr, cela s'ajoute à la limitation de demande anti-DDoS standard.

1
JamEngulfer