Question:
Est-il dangereux d'afficher un message indiquant que le nom d'utilisateur / compte n'existe pas lors de la connexion?
styfle
2017-04-25 17:41:56 UTC
view on stackexchange narkive permalink

Selon les Directives d'authentification OWASP, "Une application doit répondre par un message d'erreur générique, que l'ID utilisateur ou le mot de passe soit incorrect. Il ne doit pas non plus donner d'indication sur l'état d'un compte. "

Cependant, j'ai constaté que de nombreuses applications Web populaires enfreignent cette directive en affichant un message indiquant que le compte n'existe pas.


google


microsoft


slack


Alors, que se passe-t-il ici? Google, Microsoft et Slack font-ils quelque chose de peu sûr ou la directive OWASP est-elle inutile?

Notez que tous ces éléments ne demandent vos informations d'authentification (par exemple, mot de passe) * qu'après * avoir entré le nom d'utilisateur.
Correct.Il semble qu'ils soient gentils avec l'utilisateur qui a mal saisi son compte pour le lui faire savoir immédiatement, mais cela enfreint clairement les directives de l'OWASP.
Des variations sur cette question ont été posées [plusieurs fois.] (Https://security.stackexchange.com/q/62661/56961) Il y a même une balise pour [tag: user-enumeration]
["Informer l'utilisateur lorsque son adresse e-mail n'existe pas"] (https://blog.codinghorror.com/the-god-login/)
En plus du compromis sécurité / facilité d'utilisation, il y a aussi le fait que tout le monde a de toute façon un compte sur ces services.
En tant qu'utilisateur de nombreux sites Web en ligne différents avec de nombreux noms d'utilisateur et adresses e-mail différents, je souhaite certainement savoir si le nom d'utilisateur / l'adresse e-mail que j'essaie d'utiliser est reconnu par votre système, quel que soit le mot de passe que je saisis.En tant qu'utilisateur ayant du mal à se connecter, il est crucial pour moi de savoir si c'est mon nom d'utilisateur ou mon mot de passe qui est incorrect, sinon je suis frustré.
notez également qu'au moins certains d'entre eux (gmail) stockeront votre e-mail / nom d'utilisateur dans un cookie en texte clair, de sorte que vous (ou quiconque en a la main) n'aurez même pas besoin de vérifier - ils sauront par défaut exactement quel est votre nom d'utilisateurest.
Cela ne vaut pas la peine de répondre, mais je recommande de lire [ce billet de blog de l'équipe mailchimp] (https://blog.mailchimp.com/social-login-buttons-arent-worth-it/).Il se concentre sur les problèmes rencontrés par les utilisateurs lors de la connexion et sur la manière dont ils les ont résolus.L'un des points concerne votre question même.Messages d'erreur génériques vs spécifiques lors de la connexion.** TLDR **: Cela coûte aux utilisateurs.Ils ont décidé, tout comme les grands joueurs, que pour eux, la sécurité supplémentaire ne valait pas la perte d'utilisateurs qu'elle encourait.
Si vous voulez savoir si un compte existe, essayez simplement de vous inscrire avec ce nom d'utilisateur.
Notez que l '"URL d'équipe" sur slack n'est _pas_ votre nom d'utilisateur.Après avoir sélectionné un serveur Slack, vous êtes invité à entrer votre paire nom d'utilisateur / mot de passe personnel.
Avec les fournisseurs de messagerie, vous pouvez simplement envoyer un e-mail et attendre la réponse.Si vous obtenez une erreur de livraison du courrier, cela signifie que le nom d'utilisateur n'est pas enregistré.
Notez qu'ils fournissent tous 2FA.
Sept réponses:
Sjoerd
2017-04-25 18:20:44 UTC
view on stackexchange narkive permalink

C'est une considération entre la sécurité et la convivialité, et il n'y a donc pas vraiment de bonne réponse ici. Voici donc mon avis.

Si vous pouvez garder les noms d'utilisateur secrets, alors faites-le. Dans ce cas, il n'y a aucun moyen de déterminer si un nom d'utilisateur existe, et la connexion réagit de la même manière qu'un utilisateur existe ou non. Notez que cela signifie également prendre le même temps pour renvoyer un message d'erreur.

Ce comportement peut ne pas être possible. Par exemple, si les utilisateurs peuvent s'inscrire eux-mêmes et choisir leur propre nom d'utilisateur, vous devez les avertir lorsqu'un nom d'utilisateur existe déjà dans le système. Si tel est le cas, rendez la connexion aussi simple que possible en fournissant le message d'erreur le plus détaillé. Si quelqu'un peut déterminer si un utilisateur existe en utilisant la fonction d'enregistrement, il est inutile de le cacher lors de la connexion.

_ "Si quelqu'un peut déterminer si un utilisateur existe en utilisant la fonction d'enregistrement, il est inutile de le cacher lors de la connexion." _ - vous pouvez également le faire en réinitialisant le mot de passe ou à partir de la liste des profils publics (Twitter),ou en envoyant un e-mail et en obtenant éventuellement une erreur "message non distribuable" du serveur de messagerie (Gmail)
"Si quelqu'un peut déterminer si un utilisateur existe en utilisant la fonction d'enregistrement, il est inutile de le cacher lors de la connexion" - à moins que l'enregistrement ne soit verrouillé par un captcha et que la connexion ne le soit pas.
@JanDvorak Alors c'est un problème séparé et plutôt sérieux avec la connexion pour commencer.S'il n'y a pas de moyen de limiter les tentatives de connexion, alors vous avez déjà des problèmes beaucoup plus graves que simplement "trouver les noms d'utilisateur".
Même si je suppose que mes utilisateurs ont des mots de passe forts et que je m'assure qu'ils le font réellement?Je veux dire, le genre qui prend quarante milliards d'années à deviner, deux fois plus longtemps que KeePass génère normalement et plein de divers ASCII?Disons que mes limites de taux me protègent des attaques dos mais pas grand-chose d'autre?
@JanDvorak C'est pourquoi la plupart de ces sites qui vous montrent si le compte existe ou non lors de la connexion commenceront à faire un captcha lors de la connexion après quelques tentatives infructueuses - vous obtenez donc quelques essais où vous pourrez peut-être récolter des noms d'utilisateur valides, maisaprès cela sont ralentis par le captcha.
J'accepte cette réponse car cette ligne résume la question "Si vous pouvez garder les noms d'utilisateur secrets, alors faites-le".Dans certains systèmes d'entreprise, la fonction d'inscription n'est pas accessible au public, il est donc possible de suivre OWASP dans certains scénarios.Dans les exemples que j'ai donnés ci-dessus, ces comptes peuvent facilement être trouvés en dehors de la page de connexion.
@user11153, sur les systèmes où je fais masquer l'écran de connexion si le nom d'utilisateur était incorrect ou simplement le mot de passe, je fais également en sorte que la fonction de réinitialisation du mot de passe dise toujours qu'il a envoyé un e-mail à l'adresse enregistrée, même s'il n'y a pas d'adresse enregistrée.Je n'ai jamais construit de systèmes comprenant des serveurs de messagerie, mais je suis sûr que dans ces cas, il est possible de configurer au moins certains serveurs de messagerie pour ne pas indiquer si les noms d'utilisateur existent ou non (en plus de la mise en liste grise pour ralentir les attaques d'énumération).
Silver
2017-04-25 18:23:42 UTC
view on stackexchange narkive permalink

Ce n'est pas la seule ligne directrice de l'OWASP qui n'est pas suivie par les grands joueurs. OWASP se concentre souvent sur la sécurité et ignore la convivialité. Cela peut être un choix de conception valide s'il est combiné avec une politique de mot de passe décente, une protection contre la force brute (verrouillage, captcha, ..), une MFA, la surveillance des tentatives de connexion infructueuses, etc.

n'est pas seulement le problème de pouvoir deviner les comptes d'utilisateurs que vous pouvez plus tard force brute pour l'authentification. Certains sites doivent protéger la vie privée de leurs utilisateurs (adultes, partis politiques, rencontres, ...). Si je veux vérifier si mon patron utilise un site Web pour adultes, je peux abuser d'une vulnérabilité d'énumération d'utilisateurs pour savoir quels sites il utilise.

+1 pour le deuxième paragraphe qui soulève un très bon point une fois que vous connaissez le login de quelqu'un
Arminius
2017-04-25 20:48:40 UTC
view on stackexchange narkive permalink

Vous ne pouvez tout simplement pas l'empêcher. (À moins que vous ne soyez prêt à sacrifier une grande partie de la convivialité.)

L'énumération des utilisateurs peut être indésirable et il y a effectivement du potentiel implications pour la sécurité (par exemple, si un attaquant découvre qu'il existe un compte valide nommé admin auquel il pourrait essayer d'accéder). Mais pour les grands sites, c'est quelque chose que vous ne pouvez pas empêcher de se produire.

Même si vous ne révélez pas lors de la connexion qu'un utilisateur n'existe pas, vous devrez éventuellement avertir les nouveaux utilisateurs lorsqu'ils tenteront de enregistrez un nom déjà utilisé ou avec une adresse e-mail déjà utilisée .

Il n'y a pas de moyen convivial de contourner cela:

Create your Google Account

Une adresse e-mail déjà utilisée n'est sûrement pas un problème si vous envoyez simplement un e-mail à l'adresse indiquée indiquant que quelqu'un a essayé de créer un compte et s'il y en a déjà un pour cette adresse.Mais cela ne les empêchera pas de savoir si le nom d'utilisateur est utilisé, même si l'e-mail le ralentirait bien.Si cela ne vous dérange pas de leur donner des suffixes numériques aléatoires à ajouter à leurs noms, ils ne peuvent pas non plus sonder les noms existants.
Cela dépend aussi du service.Sur un portail de type Ashley Madison, vous ne souhaitez pas confirmer si une adresse e-mail est connectée ou non.Pour un nom d'utilisateur «tom», c'est moins un problème.
Il existe un moyen d'arrêter même l'énumération «créer un utilisateur».Vous pouvez autoriser les noms d'utilisateur dupliqués.c'est-à-dire énumérer les utilisateurs par une clé de substitution et autoriser le même nom d'utilisateur à différents utilisateurs.Et puis croisez les doigts que deux utilisateurs ne choisiront pas le même mot de passe :).Une solution assez horrible, mais possible.
@grochmal C'est pourquoi j'ai dit "pas de * moyen convivial *".Mon point principal est que ce problème ne devrait pas être une priorité absolue pour la plupart des applications.Permettre l'énumération des utilisateurs et des adresses e-mail d'une manière ou d'une autre est accepté par toutes les principales plates-formes que je connais.
@grochmal: Cela n'a aucun sens.Comment allez-vous envoyer un e-mail à une personne si quelqu'un d'autre peut acquérir exactement la même adresse e-mail?
@user21820 - Je n'ai pas du tout mentionné les e-mails.Ce ne sont que des noms d'utilisateur et des identifiants d'utilisateurs.L'utilisateur peut alors ou ne peut pas ajouter un e-mail auquel il peut être contacté pour des réinitialisations de mot de passe et des choses similaires.J'ai vu cela implémenté (et c'était toujours horrible).
@grochmal: Ah d'accord.Je pensais que vous répondiez à la réponse, qui concerne le courrier électronique, tout comme la question.Puisque vous n'êtes pas, je suis d'accord que c'est possible (bien que stupide).
... ou retarder le message d'erreur quant au dernier point possible dans le processus d'inscription pour rendre l'énumération aussi maladroite que possible ... pas convivial non plus ...
Pour être juste, il pourrait être utile d'avoir un compte factice nommé "admin", sans aucun privilège, afin que le site puisse garder une trace de quiconque tente d'y accéder.
Ben Aveling
2017-04-25 19:07:30 UTC
view on stackexchange narkive permalink

La sécurité est relative. Il est légèrement plus sûr de ne pas donner d'informations sur l'existence ou non du compte. Mais cela ne veut pas dire qu'il est dangereux de donner ces informations. C'est juste moins sûr, et très légèrement.

Ceci est particulièrement vrai dans les exemples que vous donnez; il existe d'autres moyens de trouver des noms de compte, il n'y a donc aucun avantage à essayer de cacher si le compte existe ou non.

Comme pour toute forme de sécurité par l'obscurité, cacher le compte names est un contrôle de sécurité faible, et d'autres contrôles sont nécessaires.

Mike Ounsworth
2017-04-25 19:14:41 UTC
view on stackexchange narkive permalink

Je suis d'accord avec la réponse de @ Silver, mais je souhaite développer. Gardez à l'esprit le contexte; les directives OWASP sont conçues comme des règles empiriques pour les développeurs qui ne sont pas des experts en sécurité. Si une société de développement de logiciels dispose d'une équipe d'architectes de sécurité de haut niveau, elle n'a pas besoin de suivre aveuglément les règles empiriques tant qu'elle comprend l'intention derrière les règles et atténue les risques par d'autres moyens.

Analogie: vous êtes censé changer l'huile de votre voiture tous les 3 mois ou 5 000 km, mais les mécaniciens poussent souvent plus longtemps quand ils savent que leurs habitudes de conduite sont bonnes. Et c'est tout à fait correct.


En ce qui concerne les détails ici, je ne suis pas un expert des vulnités d'énumération d'utilisateurs, et je ne sais pas pourquoi Google et Microsoft ont pris les décisions qu'ils ont prises, mais je suppose ont mis en place une limitation de débit et une liste noire pour empêcher les attaques d'énumération d'utilisateurs à grande échelle, et ont par ailleurs décidé que la commodité de l'utilisateur vaut le risque supplémentaire.

amonsec
2017-04-25 18:13:09 UTC
view on stackexchange narkive permalink

Il est probablement trop difficile de dire qu'ils enfreignent la directive OWASP, car pour des applications et des services tels que Google, Microsoft, ils doivent être autant que possible "compatibles avec les utilisateurs".

De plus, ils ont tous ou proposez les protocoles 2FA.

Il est probablement trop difficile de parler de violation alors qu'il ne s'agit que d'une ligne directrice.)
Douglas Held
2017-04-27 12:07:03 UTC
view on stackexchange narkive permalink

Le but de ne pas divulguer l'identifiant de l'utilisateur actif est d'empêcher l'énumération d'un grand nombre de comptes.

À proprement parler, vous pouvez vous protéger contre cela en autorisant les comptes en double, mais c'est une conception terrible et vous conduira à toutes sortes de problèmes.

Une autre façon de faire est de attribuer aux utilisateurs un identifiant - en construisant un qui est inutilisé. Mais cette expérience d’utilisation est si médiocre qu’elle n’en vaut peut-être pas la peine *.

Le moyen judicieux pour atténuer le risque est de - fonction d'énumération - par exemple, un captcha de bonne qualité, pour ralentir toute tentative d'énumération. Ensuite, la conception est raisonnablement sûre.

Le risque résiduel est alors que vous laissez ouverte la vérification d'un compte de très grande valeur - par exemple, barack .obama @ gmail.com. Ensuite, vous atténuez ce risque en implémentant également un contrôle contre les tentatives de piratage des mots de passe, etc.


* Salzer et Shroeder, La protection des informations dans les systèmes informatiques, section IA3 ) h) Acceptabilité psychologique: Il est essentiel que l'interface humaine soit conçue pour être facile à utiliser, afin que les utilisateurs appliquent correctement et systématiquement les mécanismes de protection. De plus, dans la mesure où l'image mentale de l'utilisateur de ses objectifs de protection correspond aux mécanismes qu'il doit utiliser, les erreurs seront minimisées. S'il doit traduire son image de ses besoins de protection dans un langage de spécification radicalement différent, il fera des erreurs.



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...