Question:
Implication de sécurité de dire à l'utilisateur qu'il ne peut pas se connecter en raison de trop de tentatives depuis IP
Goose
2017-05-31 21:35:47 UTC
view on stackexchange narkive permalink

Lors de l'échange de pile Code Review, en réponse au code qui informe l'utilisateur lorsque sa tentative de connexion a échoué en raison d'un trop grand nombre de tentatives de connexion depuis une adresse IP, on m'a dit

"Absolument N'envoyez pas un message à l'utilisateur final pour lui dire pourquoi la connexion a échoué. Vous donnez à un attaquant potentiel des informations critiques pour l'aider à attaquer votre application. Ici, vous donnez à un attaquant des informations très précises pour contourner votre restriction IP. "

https://codereview.stackexchange.com/a/164608/93616

Est-ce que je pratique une mauvaise sécurité? Dois-je expliquer en des termes plus vagues comme "Trop de tentatives de connexion" ou "Vous n'avez pas pu vous connecter"?

Mise à jour : en cas d'ambiguïté, il y en a trop tente la logique et le message ne se soucie pas si les tentatives ont réussi ou non.

Le "absolument pas" est beaucoup trop fort.La sécurité est un compromis avec la convivialité.En guise de contre-argument, Google se fera un plaisir de vous dire quand trop de requêtes suspectes ont été faites par votre adresse IP, et j'ai trouvé que c'était une information très utile dans de nombreux cas.Si Google peut le faire, vous le pouvez aussi si vous pensez que cela aidera vos utilisateurs plus que les attaquants.Sinon, ne le faites pas.
"Ne pas envoyer de message à l'utilisateur final pour lui dire pourquoi la connexion a échoué."- Je pense que cette déclaration vise davantage à ne pas renvoyer des informations telles que "Ce compte n'existe pas dans le système".Un attaquant peut utiliser les différentes réponses aux demandes de connexion pour déterminer si un compte utilisateur spécifique existe dans le système.En d'autres termes, la réponse d'ouverture de session doit être la même que le compte existe ou non et / ou que le mot de passe fourni soit incorrect.
J'utiliserais un proxy anonymisant pour obtenir une nouvelle adresse IP à chaque demande, alors quel est l'intérêt du blocage par IP?Vous devez bloquer par une authentification incorrecte par nom d'utilisateur
@NeilMcGuigan Cela ne bloque les attaques que dans une seule dimension.Il ne bloque pas un bot essayant un mot de passe commun sur des milliers de noms d'utilisateur.
@Xander correct.Vous pouvez également bloquer les mots de passe échoués
@NeilMcGuigan Non, pas de la même manière, pour plusieurs raisons.
un attaquant peut comprendre cela assez rapidement de toute façon, ce n'est pas un énorme secret ...
@schroeder Puisque je ne peux pas commenter ma réponse supprimée pour faire valoir mon cas, je vais le faire ici.Je m'excuse de ne pas avoir assez bien réussi à faire passer ma réponse clairement.C'était définitivement destiné à répondre à la question.Je donnais des exemples concrets où des faux positifs pourraient se produire, ce que d'autres réponses n'ont pas encore fait, pour indiquer clairement à quel point cela serait probablement fréquent.J'étais alors en train de relier cela à la dernière phrase de la réponse à la question - si vous refusez les tentatives de connexion sans explication des IP bloquées, tous ces faux positifs vont se demander ce qui se passe.
Cinq réponses:
Arminius
2017-05-31 23:39:54 UTC
view on stackexchange narkive permalink

Ne pas envoyer de message à l'utilisateur final pour lui dire pourquoi la connexion a échoué. Vous donnez à un attaquant potentiel des informations critiques pour l'aider à attaquer votre application.

D'un autre côté, ne pas dire à un utilisateur pourquoi sa connexion a échoué est un désastre potentiel en termes d'utilisation.

Si vous ne clarifiez pas si l'adresse IP de l'utilisateur a été bannie ou si l'utilisateur a plutôt utilisé un mot de passe incorrect, il pourrait paniquer car il leur semble que quelqu'un a accédé à son compte et a changé le mot de passe pour le verrouiller. Si ma connexion avec un mot de passe prérempli échoue, la première chose à laquelle je pense est une effraction plutôt qu'un blocage IP.

De plus, un mécanisme de blocage IP naïf pourrait être inefficace et introduire des problèmes. Il est potentiellement trivial de contourner pour un attaquant disposant de ressources suffisantes et quelqu'un qui partage une adresse IP avec d'autres utilisateurs pourrait abuser de l'interdiction IP pour en verrouiller d'autres. Au lieu de cela, un CAPTCHA après n tentatives infructueuses par IP peut être une solution plus douce et plus appropriée pour votre application.

Voir aussi:

avoir un vote favorable pour le captcha "soft lock"
Jon Bentley
2017-05-31 22:28:29 UTC
view on stackexchange narkive permalink

Il y a un avantage de sécurité à fournir des messages génériques qui n'ont pas été mentionnés.

Alice tente de forcer brutalement un compte sur le serveur de Bob. Pour les premières tentatives, Alice récupère le message "Echec de la tentative de connexion". Lors de la prochaine tentative, elle obtient "Trop de tentatives de connexion à partir de cette adresse IP". Elle est maintenant consciente que (a) toutes les informations d'identification qu'elle a essayées jusqu'à présent n'étaient pas valides, et (b) elle doit faire quelque chose de différent avant de faire d'autres tentatives.

Mais qu'en est-il si Bob ne change pas le message? Alice continuera avec la force brute et continuera à obtenir la "tentative de connexion échouée" générique à chaque tentative même si les informations d'identification sont correctes . Si elle essaye les informations d'identification correctes, Bob rejettera la tentative car la limite IP a été dépassée, mais Alice ne saura pas que c'est la raison et devra la traiter comme une tentative incorrecte (à moins qu'elle n'en ait manière de savoir ce qui dépasse le cadre de cette question). Sa seule option est de poursuivre la recherche, sans savoir si elle a déjà localisé et dépassé les informations d'identification correctes.

Notez que cet avantage est la sécurité par l'obscurité car il se fie au fait qu'Alice ne connaît pas la politique de blocage IP de Bob. Selon la configuration, ces informations peuvent être faciles à obtenir. Par exemple, si Alice a accès à un autre compte sur le système (facile si elle accepte l'enregistrement d'un compte public), elle peut utiliser des essais et des erreurs pour voir si une tentative correcte est finalement rejetée après trop de tentatives incorrectes.

D'autres réponses ont expliqué le compromis sécurité / convivialité, je ne vais donc pas me donner la peine de le répéter.

Notez qu'Alice ne peut pas vérifier avec précision le mot de passe correct à moins que la vérification du mot de passe, avec le message de retour, n'ait lieu avant les vérifications «trop de tentatives».L'ordre inverse donne moins d'informations, permettant seulement à Alice de distinguer les mots de passe «incorrects» des mots de passe «inconnus».Ce qui peut encore être une quantité indésirable d'informations à donner à un attaquant.
Cette réponse suppose «mot de passe incorrect», mais le message «échec de connexion» signifie en réalité seulement «nom d'utilisateur incorrect ou mot de passe incorrect pour ce nom d'utilisateur».(Il peut y avoir une attaque de canal secondaire si le nom d'utilisateur incorrect est rejeté plus tôt, mais il est bien connu de randomiser le temps d'attente pour un message de connexion échoué)
@MSalters Vrai, mais cela n'affecte pas ma réponse.Quoi qu'il en soit, l'effet sur un attaquant par force brute est le même: avec un message générique, ils ne peuvent pas faire la différence entre les informations d'identification correctes et incorrectes et doivent les traiter tous les deux de la même manière.Les différences entre un message «Mot de passe incorrect» et un message «Échec de la connexion» sont un problème distinct de sécurité et d’utilisation.Je modifierai ma réponse pour la rendre plus claire.
Dan Landberg
2017-05-31 21:48:04 UTC
view on stackexchange narkive permalink

Oui, techniquement, vous renvoyez des informations qui pourraient être utilisées par un attaquant pour affiner un botnet de force brute. De plus, je ne suis pas sûr de l'utilité du message d'erreur «À plusieurs tentatives de connexion à partir de cette adresse IP» pour un utilisateur standard. Il convient également de noter que tout attaquant chevronné commencera à remarquer soit un type de réponse changeant, soit une différence de temps, et comprendra probablement ce qui se passe de toute façon.

Vous pouvez envisager d'utiliser un service tel que CloudFlare. Ils ont une API scriptable qui peut insérer dynamiquement une page interstitielle ou mettre à jour une règle WAF dans certains scénarios. Troy Hunt propose un bon didacticiel dans lequel il effectue cette opération pour Windows Azure à l'aide d'Azure Functions.

Cette réponse a du sens.Que dois-je dire à l'utilisateur lorsqu'il atteint la limite?J'aimerais éviter d'impliquer CloudFlare à ce stade.
La recommandation vient également des développeurs qui ne sont pas toujours cohérents avec les erreurs qu'ils affichent.Vous devez également faire attention à cela.Par exemple, si j'essaie de forcer brutalement le mot de passe d'un utilisateur et que j'obtiens des messages «Informations de connexion incorrectes», mais j'obtiens l'erreur «Trop de tentatives de cette IP».Je saurai que j'ai touché le jackpot avec le mot de passe même si je ne me suis pas connecté.
Une grande partie de votre formulation dépendra de la sophistication de vos utilisateurs.Quelque chose comme "Impossible de se connecter pour le moment. Veuillez réessayer votre demande plus tard"Si vous voulez que ce soit le plus sûr, vous voudrez éviter d'indiquer une limite de temps spécifique, car un attaquant recommencerait simplement ses tentatives après cette limite de temps. Honnêtement, un attaquant intelligent va comprendre ce qui se passe.Je recommanderais vraiment d'utiliser un service tiers pour celui-ci.Vous pouvez passer énormément de temps à coder un correctif pour cela, et un attaquant trouvera un moyen de jouer avec le système.
@kotzu Je ne suis pas votre logique."Trop de tentatives de cette IP" signifie trop de * mauvaises * tentatives, pas "Vous avez eu quelques mauvaises tentatives suivies d'une tentative correcte, mais nous allons vous bloquer parce que la bonne tentative vous a mis au-dessus de la limite".
@Jon Bentley - Oui, c'est exactement ce que je veux dire.ce que vous dites serait la bonne façon de montrer le message.Mais parfois, j'ai vu une application avec une logique défectueuse qui permet à l'attaquant de savoir quand il a frappé le bon mot de passe en étant incompatible avec les messages d'erreur.
@JonBentley Mais assurez-vous de ne pas tester uniquement les mauvaises tentatives non plus ... Sinon, votre attaquant par force brute obtient une erreur de limite de taux, une erreur de limite de taux, une erreur de limite de taux, puis une connexion réussie et aucune sécurité n'est acquisequoi que ce soit.
Cloudflare signifie adieu la sécurité.il s'agit essentiellement de * MitM as a Service. *
@SargeBorsch Cela dépend vraiment de votre modèle de menace.Si vous essayez de vous défendre contre les attaquants des États-nations, oui, cela vous rend probablement plus faible.Pour la plupart des applications, il apporte une amélioration significative de la sécurité en termes de prévention DDoS, WAF et autres fonctionnalités.
@user52472 Cloudflare est de toute façon un danger, car ils ont également démontré leur incompétence.(voir trou Cloudbleed)
Kirill Sinitski
2017-05-31 22:04:31 UTC
view on stackexchange narkive permalink

Dans ce cas, la sécurité et la convivialité sont des objectifs contraires. Si la mise en œuvre la plus sécurisée n'offrirait aucun retour d'information, elle serait également la moins conviviale. Vous devez décider du degré de vulnérabilité de votre système à la brutalisation des connexions, des autres mesures d'atténuation en place et de l'efficacité de l'atténuation spécifique lorsqu'elle est évaluée pour ne pas gêner l'utilisateur.

Par exemple, si je concevais une connexion pour un appareil grand public Je le rendrais aussi convivial que possible en ayant des commentaires détaillés et en introduisant des atténuations supplémentaires pour compenser. Si je concevais la connexion HSM, je n'offrirais aucun commentaire et des délais d'attente onéreux à l'échelle de l'appareil.

Serge Ballesta
2017-05-31 22:43:19 UTC
view on stackexchange narkive permalink

Tout dépend de ce que vous construisez. S'il s'agit d'un blog ou de tout autre site sophistiqué où il n'est pas vraiment important de rejeter les tentatives légitimes, et où vous ne faites pas vraiment confiance à la robustesse de l'application, vous devez vraiment le protéger de tout ce qui pourrait être une attaque et ne jamais dire pourquoi vous refusez une connexion.

Si vous construisez une application professionnelle et que vous attendez des accès professionnels, ne limitez pas les accès à partir d'une seule IP si votre application est suffisamment robuste. Si vous le faites, assurez-vous d'informer l'utilisateur de la raison et de mettre en place une hot line raisonnablement réactive (au plus 1 jour ouvrable pour lire et comprendre un message, et pour initier une action corrective si nécessaire ). Parce qu'il est courant pour les grandes organisations de configurer un seul proxy sortant pour tous leurs accès HTTP et HTTPS. Vous pouvez avoir des milliers d'employés dans différents endroits d'un pays, tous utilisant apparemment la même adresse IP. Une liste blanche autorisant des connexions illimitées à partir de proxys connus suffit, mais vous devez être prêt à la changer rapidement si l'un de vos clients fait évoluer son réseau et change son adresse proxy.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...