it-swarm.com.de

Gibt es einen Grund, Benutzern nach einer erfolgreichen Anmeldung keine falsch eingegebenen Passwörter anzuzeigen?

Unser Kunde hat die Anforderung aufgestellt, dass für den Fall, dass der betreffende Benutzername mehrere fehlgeschlagene Anmeldeversuche hatte, die falsch eingegebenen Kennwörter angezeigt werden müssen, sobald eine erfolgreiche Anmeldung durchgeführt wurde. Richtig eingegebene Informationen, einschließlich vorheriger Passwörter, werden nicht angezeigt auf jeden Fall.

Unsere leitende Entwicklerin hat uns mitgeteilt, dass es technisch möglich ist, keine falschen Einträge zu hashen, aber sie ist äußerst mit der Funktion äußerst unzufrieden und wurde daher zurückgestellt während wir es uns überlegen.

Bei der fraglichen Website handelt es sich um eine umfassende Mapping-/GIS-Anwendung, die keinerlei Geldtransaktionen enthält. Weitere Anmelde-/Authentifizierungsoptionen sind Google/LinkedIn/Twitter/Facebook. Daher müssen dort offensichtlich keine Passwörter gespeichert werden, und die Behandlung ist in erster Linie ein UX-Problem.

Welche Sicherheitslücken ergeben sich aus der Implementierung einer solchen Funktion? Unser Kunde ist nicht ganz ohne technisches Wissen, daher reicht eine allgemeine Erklärung aus.

Ich entschuldige mich, wenn die Frage zu weit gefasst oder die Antwort sehr offensichtlich ist.

222
RaunakS

Das Hauptproblem besteht darin, dass falsche Passwörter so gespeichert werden müssen, dass sie später den Benutzern angezeigt werden können. Was bedeutet, wie Ihr Entwickler betont hat, dass sie nicht zuerst kryptografisch gehasht werden können. Das Ergebnis ist, dass Sie sie entweder als Klartext (schlecht) oder verschlüsselt (besser, aber normalerweise nicht empfohlen) speichern.

Das größte Risiko besteht darin, dass Angreifer auf diese Datenbank mit ungültigen Kennwörtern zugreifen können. Entweder gefährden sie den Server, führen eine SQL-Injection durch oder rufen ihn auf andere Weise ab. Anstatt die primären Kennwörter zu knacken, die hoffentlich stark gehasht und daher härter sind, könnten sie beschließen, Konten mithilfe der Informationen im ungültigen Kennwortverlauf zu kompromittieren. Entweder greifen sie einfach auf die Klartextkennwörter zu, oder sie versuchen, den Verschlüsselungsschlüssel zu finden, mit dem sie wieder in Klartextkennwörter entschlüsseln können.

Eine häufige Ursache für Anmeldefehler sind kleinere Tippfehler während der Passworteingabe. Mein Passwort ist also Muffins16, aber ich gebe mUFFINS16 ein, weil meine Feststelltaste aktiviert ist. Oder Muffins166, weil ich zweimal dieselbe Taste gedrückt habe. Oder Muffina16, weil mein Finger die falsche Taste gedrückt hat. Wie Sie sehen können, sind diese Variationen nahe genug am Original, sodass Angreifer das gültige Kennwort wahrscheinlich aus ungültigen Kennwörtern ermitteln können, indem sie einige geringfügige Änderungen vornehmen oder falsche Kennwörter mit wahrscheinlichen Wörter oder Wörtern aus dem Wörterbuch vergleichen.

Dieses Problem wird noch verschärft, da die meisten Benutzer Kennwortoptionen verwenden ähnlich wie bei diesen Formaten und keine zufälligen Zeichenfolgen. Für einen Angreifer ist es schwieriger, den Tippfehler zu identifizieren, wenn Ihr ungültiges Passwort V8Az $ p4/fA lautet. Es ist jedoch noch viel einfacher, Variationen davon auszuprobieren, als sie ohne Informationen zu erraten.

Ein weiteres Risiko besteht darin, dass sich Benutzer möglicherweise nicht daran erinnern, welches ihrer Kennwörter sie auf dieser Website verwendet haben, sodass sie ihre gemeinsamen Kennwörter ausprobieren. Jetzt ist diese Site plötzlich ein größeres Ziel, da ein Angreifer möglicherweise nicht nur das Konto eines Benutzers dort gefährden kann, sondern auch auf anderen Sites mit der praktischen Liste der "ungültigen" Passwörter.

Sie können einige dieser Risiken mindern, indem Sie die Speicherung ungültiger Kennwörter unmittelbar nach der Anzeige nach einer gültigen Anmeldung löschen. Dies sollte das Zeitfenster für einen Angreifer einschränken, auf die Daten zuzugreifen und von ihnen zu profitieren.

Die Frage, die Sie Ihrem Kunden wahrscheinlich stellen sollten, ist, wie er vorhersagt, dass Benutzer von der Anzeige ihrer ungültigen Passwörter profitieren werden. Ist es so, dass Benutzer erkennen können, wie sie ihr Passwort falsch eingegeben haben? Tippfehler sind nicht beabsichtigt, daher ist es unwahrscheinlich, dass das Anzeigen ihres Fehlers zukünftige Anmeldeversuche verbessert. So können Benutzer einen Angreifer identifizieren, der versucht, seine Passwörter zu erraten? Ein ähnliches Feedback kann durch Auflisten von Datum, Uhrzeit, IP/Geolocation oder anderen Informationen für ungültige Versuche ohne das versuchte Passwort gegeben werden. Benutzer wissen also, dass sie es bei der Passworteingabe vermasselt haben und geben dem Anmeldesystem der Site keine Schuld? Dies scheint der einzige zu sein, der Verdienst hat, und ich bin mir nicht sicher, ob er genug Wert bietet, um das Risiko zu rechtfertigen.

Ich vermute, wenn Sie erst einmal besser verstanden haben, was sie mit dieser Funktion erreichen wollen, können Sie wahrscheinlich sicherere Alternativen vorschlagen.

355
PwdRsch

tldr; Dies ist noch schlimmer, als Ihre Passwörter nicht zu hashen und als einfachen Text zu speichern.

Ich stimme den Bedenken Ihres leitenden Entwicklers zu. Um frühere falsche Kennwortversuche anzuzeigen, müssen Sie diese reversibel speichern. Dies bedeutet, dass sie nicht gehasht werden können. Wenn jemand das System kompromittieren würde, hätte er Zugriff auf alle schlechten Versuche und könnte wahrscheinlich die wahren Passwörter für einige Benutzer zusammenstellen. Wenn Sie zum Beispiel sehen können, waren einige meiner schlechten Versuche:

correct horrse battery staple
correct horse batttery staple

Es wäre ziemlich einfach, mein tatsächliches Passwort herauszufinden.

Ich bin auch mit drawbenns Antwort einverstanden: Wenn ich meinen Benutzernamen falsch, aber mit meinem korrekten Passwort eingebe und der falsche Benutzername zufällig der Benutzername eines anderen ist, kann der Benutzer jetzt mein echtes Passwort sehen.

199
TTT

Einmal habe ich versucht, mich mit meinem Passwort, aber dem Benutzernamen meines Kollegen bei einem System anzumelden.

Dann habe ich immer wieder das falsche Passwort verwendet, als ich versucht habe, mich bei einem freigegebenen Konto anzumelden.

Und ich weiß, dass viele Administratoren Zugriff auf das Konto ihres Chefs erhalten, damit sie Dinge erledigen können. Ich wäre ziemlich schockiert, wenn ihre Chefs niemals das falsche Passwort eingegeben hätten und dann von einem Besucher abgelenkt würden, bevor sie sich korrekt einloggen, um den Fehler zu beheben.

Plus all die Tippfehler, wenn jemand über meiner Schulter steht, während ich mich anmelde.

In all diesen Fällen habe ich manchmal mein Google Mail- oder Lastpass-Passwort in die Passwort-Eingabeaufforderung bei der Arbeit eingegeben und umgekehrt.

Und die Zeit, als ich mein Passwort googelte, weil ich nicht auf den Bildschirm schaute und einfach davon ausging, dass es gesperrt war. Nicht, dass das irgendetwas mit Ihrem Vorschlag zu tun hat, aber ich teile diese Anekdote gerne, weil sie die Leute daran erinnert, dass jeder manchmal Fehler machen und das Falsche eingeben kann.

Das einzige, was diese Funktion von hUnt3r2 bewirkt, ist, kleine Fehler (Eingabe des falschen Passworts oder falsche Eingabe) in versehentliche Exposition gegenüber einem breiteren Publikum umzuwandeln.

95
user15392

Reputationsverlust

Die Einrichtung eines solchen Mechanismus würde zu einem sofortigen Reputationsverlust führen, wenn man bedenkt, dass es hochkarätige Fälle gab, in denen fehlgeschlagene Anmeldeversuche verwendet wurden, um andere Websites anzugreifen. Hier ist ein Beispiel:

Mark (Zuckerberg) nutzte seine Website TheFacebook.com, um nach Mitgliedern der Website zu suchen, die sich als Mitglieder der Crimson identifizierten. Dann untersuchte er ein Protokoll mit fehlgeschlagenen Anmeldungen, um festzustellen, ob eines der Crimson-Mitglieder jemals ein falsches Passwort in TheFacebook.com eingegeben hatte. Wenn die Fälle, in denen sie eingegeben hatten, fehlgeschlagen waren, versuchte Mark, sie zu verwenden, um auf die Harvard-E-Mail-Konten der Crimson-Mitglieder zuzugreifen. Er hat erfolgreich auf zwei von ihnen zugegriffen.

Mit anderen Worten, Mark scheint private Anmeldedaten von TheFacebook verwendet zu haben, um sich in die separaten E-Mail-Konten einiger TheFacebook-Benutzer zu hacken.

Quelle: Wie Mark Zuckerberg sich in das Harvard Crimson gehackt hat

Eine Alternative

Wenn Ihr Kunde unbedingt fehlgeschlagene Anmeldeversuche bei der nächsten erfolgreichen Anmeldung als Wohlfühlmaßnahme anzeigen möchte, kann ich eine Alternative vorschlagen? Anstatt die fehlgeschlagenen Kennwörter anzuzeigen, zeigen Sie die IP-Adresse und die Geolokalisierungsinformationen des Browsers an, der das falsche Kennwort übermittelt hat. Sollte ziemlich einfach zu tun sein, würde kein Sicherheitsproblem verursachen und würde im Falle einer tatsächlichen böswilligen Aktivität viel nützlichere Informationen liefern.

44
John Wu

Ein nicht sicherheitsrelevanter Grund, dies nicht zu tun: Schlechter Login-Spam.

Ich führe meine Liste mit E-Mails/Benutzernamen für Ihre Anwendung aus. Ich versuche, mich bei jedem Konto mit demselben 'Passwort' anzumelden. Vielleicht eine beleidigende Phrase; politischer Slogan oder einfach eine Anzeige für eine Website.

Dann meldet sich jeder Ihrer Benutzer an. Diejenigen mit den Benutzernamen/E-Mails, die ich vermutet habe, müssen sich alles ansehen, was ich eingegeben habe.

Es gibt jeder einzelnen anonymen Person einen Vektor zum Anzeigen von Inhalten für Ihre Benutzer.

Im Fall von Mitarbeitern, die den Service jeweils nutzen und wahrscheinlich die Anmeldenamen des anderen erraten können, kann dies sogar zu Belästigungen oder anderen HR-Problemen am Arbeitsplatz führen.

39
Joshua Hunter

Was passiert, wenn ich mich bei Ihrer App anmelden möchte und mit meinem Kollegen zusammen sitze? Angenommen, ich habe mein Passwort falsch eingegeben. Muss ich ihn jetzt wegschicken, während ich mich anmelde, damit er meinen Passwortversuch nicht sieht?

23

Wenn es Benutzer mit ähnlichen Benutzernamen/E-Mail-Adressen gibt, versuchen sie möglicherweise versehentlich, sich bei einem anderen Benutzerkonto anzumelden.

Ein böswilliger Benutzer könnte dann seine Liste "falscher" Kennwortversuche verwenden, um in Konten mit ähnlichen Benutzernamen/E-Mail-Adressen (z. B. bill11, bill1 usw.) einzubrechen.

Ich denke, es wäre besser, schlechte und erfolgreiche Anmeldeversuche einfach zusammen mit der Zeit und der relevanten IP-Adresse aufzulisten.

17
webbster

Ich stimme anderen Antworten zu, die darauf hinweisen, dass es einfach ist, das Passwort eines Benutzers zu erraten, wenn ein Angreifer die Liste der fehlgeschlagenen Versuche abgerufen hat.

In diesem Fall spielt es keine Rolle, dass Ihr System keine Informationen zu Geldtransaktionen enthält. Es ist üblich, dass Benutzer an mehreren Standorten dasselbe Kennwort oder Variationen desselben Kennworts verwenden. Möglicherweise wird ihnen geraten, dies nicht zu tun, aber es passiert immer noch. Nur weil Sie nicht der Meinung sind, dass Ihr System vertrauliche Informationen selbst preisgibt, bedeutet dies nicht, dass die vertraulichen Informationen Ihrer Benutzer nicht gefährdet werden, wenn Ihr System kompromittiert wird.

Wenn Joe User auf Ihrem System dasselbe Kennwort verwendet wie für seine Bank, wenn ein Angreifer sein Kennwort auf Ihrem System erraten und herausfinden konnte, welche Bank Joe verwendet hat, kann der Angreifer auf Joes Bankkonto zugreifen. Oder Krankenakten oder ein anderes System, auf dem Joe dieses Passwort verwendet hat.

Sie schützen nicht nur die Passwörter für Ihr System.

11
Seth R

Ich vermute, dass Ihr Kunde an einem XY-Problem leidet. Machen Sie einen Schritt zurück und versuchen Sie herauszufinden, was Ihr Kunde wirklich will. Oft ist es nützlich zu wissen , dass jemand ein falsches Passwort versucht hat und wie dies Passwort wurde eingegeben, nicht unbedingt was dieses Passwort war. Möglicherweise möchte der Kunde nur genügend Informationen, um harmlose Bedrohungen wie das Fetten Ihres eigenen Passworts von verdächtigeren zu unterscheiden, z. B. das Erraten von Passwörtern aus der Hälfte des Landes auf einem Gerät, das sich noch nie zuvor angemeldet hat.

Fragen Sie Ihren Kunden nach dem Bedrohungsmodell und prüfen Sie, ob die folgenden Informationen ausreichen:

  • benutzer-ID, für die die Authentifizierung fehlgeschlagen ist (damit Sie wissen, wen Sie bei jedem Fehler warnen müssen)
  • datum (und Uhrzeit
  • client-IP-Adresse, Benutzeragent und ungefähre Geolokalisierung
  • ob der Client JavaScript ausführt (Angreifer stören sich oft nicht)
  • ob der Client ein Cookie für die erfolgreiche Anmeldung in der Vergangenheit vorgelegt hat

Zeigen Sie dann ein Warnfeld basierend auf diesen Informationen an, wenn sich ein Benutzer nach einem oder mehreren Fehlern erfolgreich anmeldet.

9
Damian Yerrick

Ich zögere, die bereits ausgezeichneten Antworten hier zu ergänzen, aber es gibt noch einen weiteren wichtigen Punkt. Wenn Sie nicht absolut sicher sind, dass Benutzer nur über HTTPS eine Verbindung zur Website herstellen (und ehrlich gesagt auch dann nicht), sollten Sie niemals die Möglichkeit haben, die falschen Passwörter anzuzeigen ... da diese niemals in der Website übertragen (verschlüsselt oder nicht) werden sollten erster Platz. Client-Systeme sollten nur so etwas wie einen gesalzenen Hash übertragen, nicht das eigentliche Kennwort (in einer ordnungsgemäßen Implementierung, um sicherzustellen, dass der Hash selbst nicht zum Kennwort wird, d. H. Etwas, das gestohlen und wiederverwendet werden kann), um Abhörangriffe zu verhindern.

Und es spielt keine Rolle, dass die Site keine Finanztransaktionen verarbeitet. Sie möchten immer noch nicht, dass es das schwächste Glied in einer Kette wird.

Ich bin also voll und ganz mit Ihrem Hauptentwickler in dieser Sache zusammen. Ich würde mit aller Kraft gegen dieses "Merkmal" kämpfen.

7
Viktor Toth

Eine mögliche Lösung: Da es hier darum geht, falsche Kennwortversuche im Klartext zu speichern, vermeiden Sie dies. Wenn das Kennwort eines Benutzers festgelegt ist, generieren Sie ein Paar aus öffentlichem und privatem Schlüssel. Speichern Sie den öffentlichen und den privaten Schlüssel, die mit dem Kennwort verschlüsselt sind. Wenn Sie falsche Passwörter protokollieren, verschlüsseln Sie diese mit dem öffentlichen Schlüssel (und fügen Sie Salt hinzu). Auf diese Weise kann nur der Benutzer, der das richtige Passwort kennt, die falschen Passwörter sehen.

7
v7d8dpo4

Ihr System verfügt über eine große entschlüsselbare Datenbank mit Kennwörtern. Wenn Sie die falschen Passwörter für Benutzer X nachschlagen, erhalten Sie fast, aber nicht ganz korrekte Passwörter für das Konto von X, korrekte Passwörter für verschiedene Konten des Benutzers X sowie korrekte Passwörter für Konten von Benutzern mit fast demselben Benutzernamen wie X.

Mit der vernünftigen Annahme, dass ein Hacker in Ihr System eindringen und eine entschlüsselte Kopie der Datenbank erhalten könnte, wäre dies katastrophal. Selbst wenn der Zugriff der falschen Person auf Ihr System nicht zu kritisch ist, enthält diese Datenbank Kennwörter Ihrer Benutzer für verschiedene Systeme, die möglicherweise viel kritischer sind.

4
gnasher729

Es scheint mir, dass bei einer ordnungsgemäß erstellten Authentifizierung das vom Benutzer eingegebene Kennwort nicht einmal an die Host-Site übertragen wird, sodass die Frage nach dem Speichern falscher Versuche umstritten ist.

Es kann akzeptabel sein, ein Kontrollkästchen "Kennwort anzeigen" in der Benutzeroberfläche zu haben, das ausschließlich eine lokale Funktion ist und entweder während der Eingabe des Kennworts oder nach einem fehlgeschlagenen Versuch verwendet werden kann. Wahrscheinlich sollten die gespeicherten Informationen nach kurzer Zeit gelöscht werden, um zu verhindern, dass Kennwörter von verlassenen Konsolen gesammelt werden.

0
ddyer