it-swarm.com.de

Allgemeine Fehlermeldung für falsches Passwort oder Benutzernamen - ist das wirklich hilfreich?

Es ist wirklich üblich (und ich würde sagen, es ist eine Art Sicherheitsgrundlage), nicht auf der Anmeldeseite angezeigt zu werden, wenn der Benutzername oder das Kennwort falsch war, wenn ein Benutzer versucht, sich anzumelden. Stattdessen sollte eine allgemeine Nachricht angezeigt werden, z. Passwort oder Benutzername sind falsch ".

Der Grund ist, potenziellen Angreifern nicht anzuzeigen, welche Benutzernamen bereits vergeben sind. Daher ist es schwieriger, ein vorhandenes Konto zu "hacken".

Es klang für mich vernünftig, aber dann kam mir etwas anderes in den Sinn.

Wenn Sie Ihr Konto registrieren, geben Sie Ihren Benutzernamen ein. Und wenn es bereits vergeben ist, erhalten Sie eine Fehlermeldung - die nicht generisch ist!

Im Grunde genommen könnte ein Angreifer einfach "richtige" Benutzernamen von der Registerseite abrufen, oder irre ich mich?

Worum geht es also bei generischen Nachrichten? Nicht generische Nachrichten würden zu einer viel besseren Benutzeroberfläche führen.

74
Mirco

Nein, Sie haben Recht, dass Sie irgendwann, wenn Sie versuchen, Angreifer daran zu hindern, gültige Benutzeridentitäten zu ermitteln, diese entweder anlügen oder außergewöhnlich vage Fehlermeldungen bereitstellen müssen.

Ihre App kann einem Benutzer mitteilen, dass "der angeforderte Benutzername nicht verfügbar ist" und nicht genau angeben, ob er bereits verwendet wurde oder nur Ihre anderen Anforderungen an den Benutzernamen (Länge, Zeichennutzung, reservierte Wörter usw.) nicht erfüllt. Wenn diese Details öffentlich sind, kann ein Angreifer natürlich feststellen, dass seine Vermutung aufgrund des verwendeten Kontos und nicht aufgrund eines ungültigen Formats fehlgeschlagen ist.

Dann haben Sie auch Ihr Passwort-Reset-System. Akzeptieren Sie einen Benutzernamen/eine E-Mail-Adresse und sagen, dass eine Nachricht gesendet wurde, auch wenn dieses Konto nicht in Ihrer Datenbank enthalten war? Was ist mit der Kontosperrung (wenn Sie sie verwenden)? Sagen Sie dem Benutzer nur, dass seine Anmeldeinformationen ungültig waren, auch wenn dies nicht der Fall war, sondern dass sein Konto gesperrt wurde, in der Hoffnung, dass er sich an den Kundendienst wendet, der das Problem identifizieren kann?

Es ist vorteilhaft, die Schwierigkeit für Angreifer zu erhöhen, gültige Benutzernamen zu sammeln, aber dies kostet normalerweise frustrierende Benutzer. Die meisten Websites mit niedrigerer Sicherheit, die ich gesehen habe, verwenden separate Nachrichten, die angeben, ob der Benutzername oder das Kennwort falsch sind, nur weil sie es vorziehen, Fehler zu machen, um die Benutzer zufrieden zu stellen. Sie müssen feststellen, ob Ihre Sicherheitsanforderungen eine Priorisierung gegenüber der Benutzererfahrung vorschreiben.

61
PwdRsch

Sie gehen davon aus, dass das System tatsächlich weiß, welches Feld falsch eingegeben wurde. Es gibt mehrere Gründe, warum dies nicht unbedingt der Fall ist.

Eine Möglichkeit ist, dass dies ein Nebeneffekt der Implementierung ist. Eine vereinfachte Methode zum Nachschlagen von Anmeldungen in einer Datenbank könnte ungefähr so ​​aussehen (mit :n für vom Benutzer angegebene Parameter):

SELECT 1
  FROM users
 WHERE username=:1 AND
       password=HASHING_FUNCTION(CONCAT(:2, salt))

Wenn Sie ein leeres Ergebnis erhalten, wissen Sie, dass die Anmeldung fehlschlagen sollte, aber Sie wissen nicht warum, es sei denn, Sie tun etwas Komplizierteres oder stellen eine andere Abfrage. Manchmal ist es also eher Faulheit oder der Wunsch, die Datenbank zu schonen, als eine bewusste Sicherheitsentscheidung.

Aber selbst wenn die Implementierung zwischen einem nicht vorhandenen Benutzer und falschen Anmeldeinformationen unterscheiden kann, besteht immer noch die Situation, dass ein Benutzer sein Kennwort korrekt eingibt, jedoch den falschen Benutzernamen, und dies ist zufällig ein Benutzer, der existiert (mit einem anderen Kennwort). Wenn der Benutzer dann eine Nachricht erhält, dass sein Passwort falsch ist, ist dies falsch. Wenn der angegebene Benutzername nicht vorhanden ist, weiß das System kann nicht tatsächlich, ob der Benutzername oder das Kennwort falsch war.

33
nobody

Im Allgemeinen ist es schwieriger, eine Registrierungsseite brutal zu erzwingen, als eine Anmeldeseite brutal zu erzwingen. Daher profitieren wir von diesen zusätzlichen Kosten. Aber im Konzept sind Sie richtig. Es gibt andere Möglichkeiten, Benutzernamen aufzulisten als Anmeldeseitenmeldungen.

Es ist einfach 'Good Practice' (TM), generische Fehlermeldungen bei der Anmeldung beizubehalten, um es Angreifern zu erschweren, gute von schlechten Konten zu unterscheiden. Mit einem Brute-Force-Tool ist es trivial, zufällige Namen auszuprobieren und dann, wenn sich die Fehlermeldung ändert, mit dem Brute-Forcen dieses Benutzernamens zu beginnen.

Wie immer müssen Sie jedoch die Benutzerfreundlichkeit mit der Reduzierung von Bedrohungen in Einklang bringen.

13
schroeder

Nicht alle Systeme verfügen über eine Kontoregistrierung. Zum Beispiel funktioniert Ihre Betriebssystemanmeldung nicht. Websites akzeptieren von Zeit zu Zeit keine neuen Mitglieder mehr.

Es ist eine Frage der Trennung von Bedenken: Sollte der Anmeldedialog die Systemkonfiguration abfragen und sein Verhalten basierend darauf anpassen, ob das System so konfiguriert ist, dass Anwendungen für neue Konten akzeptiert werden oder nicht? Anschließend wird der Anmeldedialog mit Informationen gekoppelt, die für den jeweiligen Job nicht wirklich relevant sind.

Es scheint in allen Fällen einfacher zu sein, nur die vage Fehlermeldung zu implementieren (vorausgesetzt, die UI-Software weiß sogar, ob das Kennwort fehlerhaft oder das Konto nicht vorhanden ist: Was passiert, wenn ein generischer Authentifizierungsfehler von einer API niedrigerer Ebene auftritt?)

Und außerdem: Die neue Benutzeroberfläche der Benutzeranwendung kann eine lange gefälschte Verzögerung implementieren, z. B. "Durchsuchen der Benutzerbasis ... [10 Sekunden] ... Ups, der Benutzername ist bereits vergeben!" Wenn dies implementiert ist, bedeutet dies, dass das Prüfen des Speicherplatzes von Benutzer-IDs durch diesen Mechanismus stark ratenbeschränkt ist. Da die Beantragung eines neuen Kontos eine seltene, einmalige Operation ist, werden Benutzer unter der Verzögerung leiden, während sie sich durch eine Verzögerung von zehn Sekunden im regulären Anmeldedialog verschlimmern würden.

5
Kaz

Dies hängt vom Benutzernamen ab. Es gibt drei Hauptansätze für Benutzernamen:

  • Vom Benutzer ausgewählter Name
  • E-Mail-Addresse
  • Zugewiesener Benutzername - normalerweise eine Ziffernfolge

Sie haben Recht, dass ein Angreifer bei vom Benutzer ausgewählten Namen mithilfe des Registrierungsprozesses ableiten kann, welche Namen verwendet werden. Daher hat die Anmeldung, die eine generische Nachricht zurückgibt, nur begrenzte Vorteile.

In den beiden anderen Fällen ist es jedoch viel wichtiger, dass der Anmeldebildschirm eine allgemeine Fehlermeldung zurückgibt. Betrachten Sie eine Rekrutierungsseite, es könnte für [email protected] peinlich sein, wenn sein Chef feststellt, dass auf einer Rekrutierungsseite ein Konto vorhanden ist. Zugewiesene Benutzernamen werden am häufigsten auf Hochsicherheits-Websites wie Online-Banking verwendet.

5
paj28

Ja du hast Recht. Überall auf Ihrer Site, wo bestätigt werden kann, dass ein Benutzername vorhanden ist oder nicht, kann dies zu Aufzählung der Benutzernamen führen.

Jedoch dieses Problem kann gelöst werden wenn es für Ihr System wichtig ist. In einigen Systemen kann die Aufzählung von Benutzernamen nicht vermieden werden, da sie der Art der Anwendung eigen ist. Ein Beispiel ist ein Webmail-Dienst - hier gelten E-Mail-Adressen als potenziell öffentlich. Es ist schwierig zu verhindern, dass Benutzer andere Benutzernamen kennen, ohne dass sich die Benutzer mit einer anderen Kennung als ihrer gehosteten E-Mail-Adresse anmelden müssen. Dies kann zu Verwirrung und Schwierigkeiten bei der Wiederherstellung verlorener Anmeldeinformationen führen.

Bei den meisten anderen Systemen kann dies jedoch behoben werden, indem die E-Mail-Adresse des Benutzers als Anmeldename verwendet wird. Sie würden das Problem lösen, indem Sie das vergessene Passwort und das Anmeldeformular so effektiv wie auf derselben Seite haben. Bei der Anmeldung handelt es sich um ein mehrstufiges Formular. Im ersten Schritt werden Sie lediglich nach dem Benutzernamen (E-Mail-Adresse) gefragt, den der Benutzer mit Ihrem System verwenden möchte. Für die Kontowiederherstellung wäre dies dieselbe Form, aber der Titel würde etwas in der Art von Please enter your email address to generate a password recovery email.

In beiden Fällen sendet das Formular dem Benutzer eine E-Mail. Wenn sie bereits angemeldet sind, enthält der Inhalt dieser E-Mail einen Link zum Zurücksetzen des Passworts. Wenn sie nicht angemeldet sind, enthält der Inhalt dieser E-Mail einen Link zur nächsten Stufe des Anmeldevorgangs. Dadurch wird verhindert, dass Benutzernamen auf Ihrem System aufgelistet werden, sodass ein Angreifer nicht weiß, auf welche Konten er abzielen soll.

Dies bedeutet natürlich, dass Sie bereit sind, das Zurücksetzen von Passwörtern per E-Mail zuzulassen, was für einige Anwendungen wie Bankanwendungen möglicherweise nicht akzeptabel ist. Da diese Art von Konten normalerweise zusätzliche Sicherheitsüberprüfungen haben, werden ihnen normalerweise Benutzernamen zugewiesen, anstatt dass die Benutzer ihre eigenen auswählen können.

4
SilverlightFox

Das allgemeine Argument für vage Nachrichten scheint darin zu bestehen, Angreifer daran zu hindern, gültige Benutzernamen zu erraten. Es gibt tatsächlich eine einfache Lösung, die legitime Benutzer nicht ernsthaft beeinträchtigt und ohnehin vorhanden sein sollte: Beschränken Sie die maximale Anzahl fehlgeschlagener Versuche in einem bestimmten Zeitraum.

Indem Sie Versuche einschränken, verhindern Sie alle Brute-Force-Angriffe. Angenommen, Sie erlauben nur 5 Versuche pro 15 Minuten (in Foren üblich) - das macht einen Angriff auf das Erraten von Benutzernamen so gut wie nutzlos. Es verhindert auch das Brute-Forcing von Passwörtern (so nutzlos langsam, wie es ohnehin auf einem Remote-Standort der Fall wäre).

Natürlich verfügt ein Angreifer möglicherweise bereits über eine Datenbank mit Benutzernamen und möchte lediglich überprüfen, ob diese auf Ihrer Website vorhanden sind. Und Sie müssen die Auswirkungen auf die Sicherheit berücksichtigen, aber im Allgemeinen haben sie entweder bereits das Passwort (was diese Diskussion in Frage stellt) oder sie werden es nicht (so dass eingeschränkte Versuche das Erraten sowieso verhindern).

2
Bob

Um die Aufzählung von Benutzernamen auf der Benutzerregistrierungsseite zu vermeiden, kann eine Anwendung den Benutzernamen automatisch basierend auf der E-Mail-Adresse des Benutzers zuweisen, anstatt den Benutzer zu bitten, eine dieser Optionen auszuwählen.

Auf diese Weise kann verhindert werden, dass Benutzernamen oder Registrierungsseite aufgelistet werden.

Außerdem sollten wir die Funktionalität für vergessene Passwörter berücksichtigen. Manchmal sollte dies auch gültige Benutzerdetails anzeigen.

0
Anurag Pathak

Eine intelligente Website würde ein Captcha auf ihrer Registrierungsseite haben, um so etwas zu verhindern.

Aber Sie wissen, wie 99% der Websites sind. Sie werden ihre UX mit einer generischen Fehlermeldung ruinieren, obwohl sie dadurch keine zusätzliche Sicherheit erhalten. Persönlich kümmere ich mich nicht um allgemeine Fehlermeldungen, da für meine Anmeldungen viele andere Einschränkungen bestehen (Captchas, begrenzte Anmeldeversuche). Außerdem sind Anmeldungen der Hauptgrund, warum Benutzer eine Website verlassen.

Wenn Sie sich dafür entscheiden, eine generische Fehlermeldung anzuzeigen, dann gehen Sie den ganzen Weg damit. Stellen Sie sicher, dass nirgendwo lose Enden vorhanden sind. Sie können eine Wand mit 10 Zoll dickem Stahl verstärken, aber das hilft nicht, wenn eine unverschlossene Tür darin ist.

0

Ich versuche meinen Angreiferhut aufzusetzen und sehe 2 Fälle:

  1. Ihre Website verfügt über eine Registrierungsseite (z. B. Google Mail oder Stackoverflow). Ich könnte die Registrierungsseite verwenden, um den Benutzernamen eines vorhandenen Benutzers mit brutaler Gewalt herauszufinden. Oder ich könnte einfach einen neuen Benutzer erstellen. Mein neuer Google Mail- oder Stackoverflow-Benutzer hat wahrscheinlich ungefähr die gleichen Rechte wie der, den ich brutal erzwungen hätte.

  2. Ihre Website hat keine Registrierungsseite. Ihr Punkt ist nichtig.

0
emory