Frage:
Allgemeine Fehlermeldung für falsches Passwort oder Benutzernamen - ist das wirklich hilfreich?
Mirco
2014-07-08 00:41:41 UTC
view on stackexchange narkive permalink

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

Hört sich für mich vernünftig an, 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.

Es gibt Websites wie Yahoo Mail, auf denen Sie den richtigen Benutzernamen eingeben und ein falsches Kennwort die allgemeine Nachricht ausgibt. Bei Eingabe von "Falscher Benutzername" wird aus Sicherheitsgründen die Meldung "Dieser Benutzername wird nicht verwendet ..." angezeigt. Ich denke, dies ist ein Relikt aus alten Zeiten und hat keinen Platz im heutigen Schema der Dinge.
Wenn Sie Ihr Passwort auf dem Win7-Sperrbildschirm falsch eingeben (wo der Benutzername standardmäßig vorausgewählt ist), wird weiterhin die allgemeine Meldung angezeigt ...
Ich bevorzuge die Funktion "Passwort vergessen", die mir auch sagt, ob der Benutzername in vielen Fällen gültig ist oder nicht. Der Link befindet sich normalerweise in der Nähe des Passwortfelds. Der Umweg "Registrieren" ist nicht erforderlich.
Zehn antworten:
PwdRsch
2014-07-08 00:54:19 UTC
view on stackexchange narkive permalink

Nein, Sie haben Recht, dass Sie irgendwann während der Bemühungen, 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 könnte 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 nicht erfüllt (Länge, Zeichennutzung, reserviert) Wörter usw.). 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 System zum Zurücksetzen des Passworts. 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 Anzahl zu erhöhen Es ist für Angreifer schwierig, gültige Benutzernamen zu sammeln, dies führt jedoch in der Regel zu Frustrationen bei den Benutzern. 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.

Wenn Sie auf der Website einen Benutzernamen * auswählen * können (ohne den gleichen Rat wie bei der Auswahl von Passwörtern), ist es ein Witz, die Benutzernamen geheim zu halten. OK, einige Benutzer werden von der Geheimhaltung profitieren, da sie schwer zu erratende Benutzernamen wählen, aber Benutzer "dave" wird diesen Vorteil nicht erhalten, unabhängig davon, welche Maßnahmen Sie dann ergreifen, um ihn geheim zu halten ;-) Also kann kaum wesentlich sein.
+1 für "... bestimmen, ob Ihre Sicherheitsanforderungen eine Priorisierung gegenüber der Benutzererfahrung vorschreiben"
Nun, Sie * könnten * das Zurücksetzen von Passwörtern und das Erstellen von Konten kombinieren: Jedes Konto, das erstellt werden könnte, existiert irgendwie, es ist nur so, dass niemand das Passwort kennt.
nobody
2014-07-08 02:23:57 UTC
view on stackexchange narkive permalink

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 besteht darin, dass dies ein Nebeneffekt der Implementierung ist. Eine vereinfachte Methode zum Nachschlagen von Anmeldungen in einer Datenbank sieht möglicherweise so aus (unter Verwendung von : 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 dies etwas komplizierter oder eine andere Abfrage machen. Manchmal ist es also nur Faulheit oder der Wunsch, die Datenbank zu schonen, und nicht eine bewusste Sicherheitsentscheidung.

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

Kein sicherheitsbewusstes System sollte diese Art der Authentifizierung verwenden, da Sie zusätzlich zum Hashing ein Salt benötigen. Und im Idealfall ein Salz pro Reihe. Also beim Namen nachschlagen, Salz und Hasch nehmen, vergleichen.
Und ich würde bezweifeln, dass die meisten DBMS eine ordnungsgemäße HASHING_FUNCTION implementieren, und ich würde auch vermuten, dass dies anfällig für Timing-Angriffe ist. Das würde ich nicht tun.
Besonders der zweite Punkt ist ausgezeichnet! Wenn der Benutzer einen Tippfehler in seinem Benutzernamen hat, aber zufällig mit einem anderen Benutzernamen übereinstimmt, lautet die entsprechende Nachricht "Falscher Benutzername", da es sich für den Benutzer um einen falschen Benutzernamen handelt, selbst wenn das System ihn in der Datenbank gefunden hat, also den generischen immer besser! @Mormegil Ich denke, der Code ist gültig, HASHING-FUNCTION sollte natürlich eine kryptografisch sichere Hashing-Funktion sein. Das Timing ist jedoch kein Problem, es sei denn, Sie wissen, ob sich ein Benutzername aufgrund des schnellen Index-Scans wahrscheinlich nicht in der Datenbank befindet. Wie bereits erwähnt, ist dies für die meisten modernen Anwendungen wahrscheinlich irrelevant
@Falco Nun, entweder HASHING-FUNCTION ist so etwas wie SHA-256 (das möglicherweise im DBMS implementiert ist), ein schneller Hash, der nicht für Passwort-Hashing geeignet ist, oder PBKDF oder BCRYPT (das wahrscheinlich nicht von bereitgestellt wird) Jedes aktuelle DBMS) und ein Timing-Angriff können trivial unterscheiden, ob ein Benutzername gefunden wurde (und das Kennwort falsch ist) oder kein Benutzername gefunden wurde. Einfach gesagt, ich habe keine Ahnung, warum jemand es so implementieren möchte. (Der zweite Punkt ist jedoch gültig.)
@Mormegil PostgreSQL bietet bcrypt. Je nachdem, wie Sie die Abfrage erstellen, kann es zu einem Timing-Angriff kommen.
Sie können dies auf diese Weise tun, wenn Ihr Salz pro Zeile aus dem Benutzernamen generiert wurde, indem Sie es beispielsweise mit einem geheimen Schlüssel in HMAC eingeben. Um Timing-Angriffe zu vermeiden, müssen Sie natürlich sicherstellen, dass das Passwort-Hashing durchgeführt wird, unabhängig davon, ob der Benutzername vorhanden ist oder nicht, aber das ist trivial.
schroeder
2014-07-08 00:50:13 UTC
view on stackexchange narkive permalink

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), Fehlermeldungen generisch zu protokollieren, 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.

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

Ja das. Die Registrierungsseite enthält normalerweise eine Form von CAPTCHA.
Solange das CAPTCHA oder eine andere Herausforderung / ein anderes Puzzle kommt, wird dem Benutzer mitgeteilt, dass der Name bereits vergeben ist. Zwischen den Versuchen sollte auch eine angemessene Wartezeit liegen, jedoch nicht so lange, bis eine echte Person, die versucht, ein echtes Konto einzurichten, davon abgehalten wird.
Kaz
2014-07-08 11:00:55 UTC
view on stackexchange narkive permalink

Nicht alle Systeme verfügen über eine Kontoregistrierung. Zum Beispiel nicht bei der Anmeldung Ihres Betriebssystems. Websites akzeptieren von Zeit zu Zeit keine neuen Mitglieder mehr.

Es geht um die 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 angenommen werden Konten oder nicht? Anschließend wird der Anmeldedialog mit Informationen gekoppelt, die für den 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 es sich um das Kennwort handelt Das ist schlecht oder das Konto nicht vorhanden. Was ist, 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 wie " Suche nach Benutzerbasis ... [10 Sekunden] ... oops, 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 durch eine Verzögerung von zehn Sekunden im regulären Anmeldedialog verschärft würden.

+1 für die Erwähnung der Drosselung (Geschwindigkeitsbegrenzung).
paj28
2014-07-08 13:47:35 UTC
view on stackexchange narkive permalink

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

  • Vom Benutzer ausgewählter Name
  • E-Mail-Adresse
  • 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 joe.bloggs@abc.com peinlich sein, wenn sein Chef feststellt, dass auf einer Rekrutierungsseite ein Konto vorhanden ist. Zugewiesene Benutzernamen werden am häufigsten auf Hochsicherheitsseiten wie Online-Banking verwendet.

Bei E-Mail-Adressen gehen Sie davon aus, dass bei der Registrierung eines neuen Kontos und der Angabe einer vorhandenen E-Mail-Adresse nicht sofort die Fehlermeldung "E-Mail-Adresse wird bereits verwendet" angezeigt wird. Andernfalls ist es nicht sehr vorteilhaft, dies nicht auf dem Anmeldebildschirm anzuzeigen, wenn es auf dem Registrierungsbildschirm angezeigt wird. Eine Möglichkeit, dies zu vermeiden, besteht darin, dass für den Registrierungsbildschirm ein CAPTCHA erforderlich ist, bevor Sie darüber informiert werden, ob die von Ihnen angegebene E-Mail-Adresse bereits vergeben ist oder nicht.
@D.W. - sicher, oder Sie können dies ohne Captcha tun, indem Sie zuerst einen Bestätigungscode an die E-Mail-Adresse senden und den Benutzer nur einmal bestätigen, wenn die Adresse bereits vergeben ist.
SilverlightFox
2014-07-08 14:13:02 UTC
view on stackexchange narkive permalink

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

Dieses Problem kann jedoch gelöst werden, wenn es ist wichtig für Ihr System. 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 ist dies jedoch der Fall kann behoben werden, indem die E-Mail-Adresse des Benutzers als Login-Benutzername angegeben 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) gefragt, den der Benutzer mit Ihrem System verwenden möchte. Für die Kontowiederherstellung wäre dies dasselbe Formular, aber der Titel würde etwas in der Art von sagen. Bitte geben Sie Ihre E-Mail-Adresse ein, um eine E-Mail zur Kennwortwiederherstellung zu generieren.

In beiden Fällen Das Formular sendet 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 Kennwörtern per E-Mail zuzulassen, was für einige Anwendungen möglicherweise nicht akzeptabel ist wie Bankanwendungen. 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.

Bob
2014-07-08 05:59:42 UTC
view on stackexchange narkive permalink

Das häufigste 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 trotzdem vorhanden sein sollte: Beschränken Sie die maximale Anzahl fehlgeschlagener Versuche in einem bestimmten Zeitraum.

Indem Sie Versuche einschränken, verhindern Sie alle brutalen Versuche. Angriffe erzwingen. 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 auf einem Remote-Standort).

Natürlich verfügt ein Angreifer möglicherweise bereits über eine Datenbank mit Benutzernamen und möchte lediglich überprüfen, ob diese vorhanden sind auf Ihrer Website. 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 ohnehin das Erraten verhindern).

Ich würde in so etwas wie einem Forum denken, es wäre viel schneller, vorhandene öffentliche Beiträge einfach zu crawlen, um Benutzernamen zu entdecken, als zu versuchen, sie brutal zu erzwingen. Einige Forensoftware enthalten sogar eine Seite, auf der die Benutzernamen für Sie aufgelistet sind!
Ahauehuaheuaheuahue
2014-07-08 01:54:52 UTC
view on stackexchange narkive permalink

Eine intelligente Website hätte ein Captcha auf ihrer Registrierungsseite, um dies zu verhindern.

Aber Sie wissen, wie 99% der Websites sind. Sie werden ihre UX mit einer allgemeinen Fehlermeldung ruinieren, obwohl sie dadurch keine zusätzliche Sicherheit erhalten. Persönlich kümmere ich mich nicht um generische 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.

Recaptchas können von einem Recaptcha-Löser leicht gebrochen werden. Diese Websites erheben häufig eine geringe Gebühr und weisen eine Genauigkeitsrate von ca. 70% auf. Captchas (kein reCaptcha) sind für einen Computer noch einfacher. Manchmal ist der Computer besser als ein Mensch, was Ihre Benutzer nur stört.
Eine Entscheidung darüber zu treffen, was für Ihre Umgebung funktioniert, ist in Ordnung, aber Sie müssen erklären, warum Sie diese Entscheidung getroffen haben, damit andere den Kontext verstehen. Ihre Schadensbegrenzungsmethoden tragen nicht dazu bei, das Problem der Aufzählung von Benutzerkonten zu lösen. Hatten Sie das Gefühl, dass die Aufzählung kein Risiko für Ihre Umgebung darstellt? Bitte geben Sie mehr als handgewellte abweisende Erklärungen ab.
Siehe http://deathbycaptcha.com und http://scraping.pro/decaptcher-review/. Ich bin mit begrenzten Anmeldeversuchen einverstanden.
emory
2014-07-08 04:58:23 UTC
view on stackexchange narkive permalink

Ich versuche, meinen Angreiferhut aufzusetzen, und es werden zwei Fälle angezeigt:

  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 verfügt nicht über eine Registrierungsseite. Ihr Punkt ist nichtig.

  3. ol>
Diese Antwort ist unsinnig. Wie würde das Erstellen eines neuen Benutzers etwas bewirken? Warum hast du mit Punkt 2 einen Strohmann großgezogen?
@schroeder zum Beispiel Google Mail. Sie können die Seite "Registrieren" verwenden, um die Identität eines vorhandenen zufälligen Google Mail-Benutzers zu ermitteln und dann zu versuchen, das Kennwort brutal zu erzwingen. Aber wird das zufällige Google Mail-Benutzerkonto wahrscheinlich über größere Berechtigungen verfügen als die, die Sie erstellen können?
Angreifer neigen dazu, Konten zu erzwingen, um die Daten DIESES Kontos abzurufen, und nicht nur um Zugriff auf ein System zu erhalten. Sie erheben Punkte, die entlassen werden sollen.
@schroeder Wenn ich ein bestimmtes Konto angreife, ist die Tatsache, dass das System eine Registrierungsseite oder eine nicht generische Fehlermeldung hat, von Nutzen? Zum Beispiel kannte die Person, die Palins E-Mail gehackt hatte, ihren Benutzernamen vorher.
Wenn Sie vor dem Angriff ein bestimmtes Ziel im Sinn haben, sicher, aber das ist auch nicht im Rahmen der Frage. Als Angreifer möchte ich wissen, welches Konto verfügbar sein wird. Nicht um Zugriff auf das System zu haben, sondern um alles abzurufen, was von ihrem Konto aus möglich ist: PII, Kontoinformationen, wiederverwendete Passwörter usw. Keiner meiner Punkte ist neu oder ungewöhnlich. Ich habe das Gefühl, dass Sie einfach gerne abweisend sind.
Anurag Pathak
2019-07-16 11:49:35 UTC
view on stackexchange narkive permalink

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

Auf diese Weise kann der Benutzername verhindert werden Aufzählungs- oder Registrierungsseite.

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



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...