it-swarm.com.de

"Benutzername und / oder Passwort ungültig" - Warum zeigen Websites diese Art von Nachricht an, anstatt den Benutzer darüber zu informieren, welche falsch war?

Nehmen wir an, ein Benutzer meldet sich bei einer typischen Site an, gibt seinen Benutzernamen und sein Kennwort ein und gibt eine seiner Eingaben falsch ein. Ich habe festgestellt, dass die meisten, wenn nicht alle Websites dieselbe Meldung anzeigen (etwa "Ungültiger Benutzername oder ungültiges Kennwort"), obwohl nur eine Eingabe falsch ist.

Für mich scheint es einfach genug zu sein, den Benutzer darüber zu informieren, welche Eingabe falsch war, und ich habe mich gefragt, warum Websites dies nicht tun. Gibt es dafür einen Sicherheitsgrund oder ist es nur etwas, das zur Norm geworden ist?

103
bobble14988

Wenn ein böswilliger Benutzer eine Website angreift, indem er gebräuchliche Kombinationen aus Benutzername und Passwort wie admin/admin errät, weiß der Angreifer, dass der Benutzername gültig ist, wenn er die Meldung "Passwort ungültig" anstelle von "Benutzername oder Passwort ungültig" zurückgibt.

Wenn ein Angreifer weiß, dass der Benutzername gültig ist, kann er seine Bemühungen mithilfe von Techniken wie SQL-Injektionen oder Bruteforcing des Kennworts auf dieses bestimmte Konto konzentrieren.

128
user10211

Wie andere bereits erwähnt haben, möchten wir nicht, dass Sie wissen, ob der Benutzername oder das Passwort falsch war, damit wir nicht so anfällig für Brute-Force oder sind Wörterbuch Angriffe ..

Wenn einige Websites ihren Benutzern mitteilen möchten, welche fehlgeschlagen ist, während sie sich noch im grünen Bereich befinden, könnten sie " honeypot " Benutzernamen (wie Administrator, Administrator usw.) implementieren, die dies tun würden Benachrichtigen Sie die Website-Administratoren, dass jemand auf ihrer Website herumschnüffelt. Sie könnten sogar eine Logik einrichten, um ihre IP-Adresse zu sperren, wenn sie versuchen würden, sich mit einem dieser "Honeypot" -Nutzernamen anzumelden. Ich kenne eine Person, die tatsächlich eine Website hatte und in ihren Quellcode einen HTML-Kommentar wie "Da Sie Richard immer wieder vergessen: Benutzername: Käse Passwort: Burger123" in der Nähe des Anmeldefelds eingefügt hat, um jede IP-Adresse zu überwachen, die versucht hat, sie zu verwenden dieser Benutzername/Passwort. Das Hinzufügen einer solchen Überwachungslogik macht beim Entwickeln einer Website viel Spaß.

Natürlich funktioniert auch das Protokollieren ungültiger Anmeldeversuche und das Hinzufügen geeigneter Logik für den Umgang mit diesen IP-Adressen. Ich weiß, dass einige mit mir nicht einverstanden sind, aber je nach Art der Website halte ich es nicht für zu schwierig, den Benutzer darüber zu informieren, solange Sie zusätzliche Sicherheitsmaßnahmen zur Verhinderung verschiedener Arten von Angriffen hinzufügen.

24
ROFLwTIME

Meine bevorzugte sichere Implementierung wird von einer Bank durchgeführt, die ich benutze. Wenn ich meinen Benutzernamen richtig eingebe, wird "Welcome Jimbob!" und fordert mich dann auf, Sicherheitsfragen zu beantworten (falls ich mich noch nie über diesen Browser auf diesem Computer angemeldet habe), zu warten, bis ich die Sicherheitsfragen richtig beantwortet habe, und dann mein Sicherheitsbild/meine Beschriftung anzuzeigen und mein Kennwort einzugeben. Wenn ich den falschen Benutzernamen eingebe, wird etwas wie "Willkommen Bessie/Kareem/Randal!" Angezeigt. wo der angezeigte Name sehr ungewöhnlich ist - obwohl Sie immer den gleichen Namen für den gleichen Benutzernamen haben (ich bin mir normalerweise nicht sicher zwischen einem oder zwei Benutzernamen; und der falsche nennt mich durchweg Frenshelia). Ich gehe davon aus, dass es als eine Art nicht-kryptografischer Hash implementiert ist, der auf jeden eingegebenen Benutzernamen angewendet wird, der eindeutig einem Benutzernamen auf einer langen Liste ziemlich ungewöhnlicher Namen zugeordnet ist. Auf diese Weise erfahren legitime Benutzer, ob sie den falschen Benutzernamen eingegeben haben (selbst wenn Sie einen ungewöhnlichen Namen wie Bessie haben; es ist sehr unwahrscheinlich, dass der falsche Benutzername, den Sie zufällig erraten haben, auf Ihren spezifischen ungewöhnlichen Namen zurückgeht), ohne dass dies für die Benutzer offensichtlich wird um zufällige Konten zu finden, bei denen der Benutzername nicht vorhanden ist.

Nebenbei: Ich mag den Teil Sicherheitsfragen/Sicherheitsimage nicht besonders, der an Sicherheitstheater zu grenzen scheint. Ein erfahrener Angreifer, der einen MITM-Angriff (Man-in-the-Middle) ausführt (z. B. nach der Installation gefälschter Zertifikate in Ihrem Webbrowser und DNS/ARP-Spoofing, um yourbank.com auf seine IP-Adresse zu verweisen), kann warten, bis Sie versuchen, sich anzumelden Lassen Sie sich dann auf dem Computer von einem automatischen Skript auf dem Computer bei der realen Site anmelden, holen Sie sich die Sicherheitsfragen, zeigen Sie die ausgewählten Sicherheitsfragen an Sie zurück, senden Sie die Antworten von ihrem Browser an die Site selbst zurück und warten Sie, bis Sie die Sicherheit erhalten Image, senden Sie das Sicherheits-Image an Sie zurück und warten Sie, bis Sie das Kennwort von ihrem Ende aus eingegeben haben. An diesem Punkt verwenden sie das Kennwort, um sich als Sie anzumelden und böswillige Dinge zu tun. Zugegeben, die Fragen + Bild machen den Prozess schwieriger als das ständige Sammeln aller Sicherheitsbilder für eine Vielzahl angegriffener Benutzernamen, indem sie in einen Angriff umgewandelt werden, der in Echtzeit ausgeführt werden muss und möglicherweise eine verdächtige Signatur hinterlässt .

18
dr jimbob

Andere Antworten bieten einen guten Einblick in die Sicherheitsgründe für dieses Verhalten. Obwohl sie korrekt sind, bin ich mir ziemlich sicher, dass zumindest einige Websites nur die Autorisierungsroutine so programmiert haben, dass es unmöglich ist zu sagen, was falsch war - Login oder Passwort.

Beispielabfrage:

SELECT COUNT(*) FROM users WHERE login = 'john' AND hash = '2bbfcdf3f09ae8d700402f36913515cd'

Dies gibt 1 bei erfolgreichem Protokollierungsversuch und zurück, wenn kein Benutzer mit einem solchen Namen oder Dieser Benutzer hat ein anderes Passwort. Es ist nicht möglich festzustellen, welcher Teil der Bedingung fehlgeschlagen ist. Wenn es darum geht, Fehlermeldungen anzuzeigen, sagt Ihnen der Programmierer ehrlich, dass etwas nicht stimmt und er nicht genau weiß, was es genau ist.

Ich persönlich habe ähnliche Anfragen auf einigen PHP-basierten Websites gesehen, daher bin ich mir ziemlich sicher, dass ein Teil des Grundes in der Art und Weise liegt, wie der Authentifizierungsprozess wirklich codiert ist.

13
Dyppl

Es gibt jedoch eine andere interessante Technik, die angewendet werden kann, um einen user enumeration attack (Und mehr) auszuführen. Es heißt Timing attack. Der Angreifer misst einfach die Antwortzeit für die Authentifizierungsanforderung und wie sie sich zwischen einer gültigen und einer ungültigen Anmeldung unterscheidet.

  1. Remote-Timing-Angriffe im Nanosekundenbereich auf PHP Anwendungen: Zeit, sie ernst zu nehmen?
    http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/

  2. Eine Lektion in Timing-Angriffen
    http://codahale.com/a-lesson-in-timing-attacks/

  3. Konstanter Zeitzeichenfolgenvergleich in PHP, um Timing-Angriffe zu verhindern
    https://codereview.stackexchange.com/questions/13512/constant-time-string-comparision-in-php-to-prevent-timing-attacks

Mein Punkt ist, dass eine solche Nachricht nicht ausreicht, wenn Sie Ihre Anwendung gegen diese Art von Bedrohung schützen möchten.

8

Der Sicherheitsgrund dafür ist, dass es sonst viel einfacher wird, gültige Benutzernamen zu finden.

5
Lucas Kauffman

Zusätzlich zu allen bereits gegebenen guten Antworten gibt es ein allgemeines Sicherheitsprinzip, das besagt, dass Sie nicht autorisierten Benutzern keine unerwünschten Informationen zur Verfügung stellen sollten. Das heißt, Wenn Sie die Wahl haben, entweder "Ihre Authentifizierungsdaten sind ungültig" zu beantworten oder zu erklären, welcher Teil ungültig ist, sollten Sie immer den ersteren auswählen. Einige sehr böse kryptografische Angriffe basieren auf der kleinsten Menge an Fehlerinformationen, die von der Implementierung bereitgestellt werden, die versucht, "hilfreich" zu sein - siehe Padding Oracle-Angriff . Es ist daher eine gute Idee, sich immer für die geringstmögliche Information zu entscheiden, die der nicht autorisierten Entität mitgeteilt wird. Wenn seine Kombination aus Benutzername und Passwort nicht gut ist, antworten Sie immer mit "Benutzername/Passwort nicht gut" und geben keine Informationen mehr weiter Daten. Auch wenn es in einem bestimmten Fall (wie Google Mail, in dem der Benutzername öffentlich ist) nicht wichtig ist, empfiehlt es sich, dies standardmäßig zu übernehmen.

5
StasM

Angenommen, Sie geben einen zufälligen Benutzernamen und ein ebenso zufälliges Passwort ein (notieren Sie sich einfach, welches Passwort Sie eingeben). Jetzt können die Passwörter unter den n Benutzern gemeinsam sein. Also, wenn die Website sagt, dass das Passwort korrekt ist ... dann wissen Sie, was als nächstes folgt ... Chaos unter den echten Benutzern, da es ziemlich einfach ist, Anmeldenamen zu erhalten.

4
aayush anand

Das Bereitstellen einer mehrdeutigen Antwort ist nützlich, um Benutzeraufzählung Angriffe zu verhindern.

In einigen Fällen muss der Angreifer das Benutzerkonto nicht gefährden. Informationen, über die der Benutzer verfügt, sind ohne weitere Maßnahmen ausreichend. Zum Beispiel ist es eine wertvolle Information für den Handel, dass sein Kunde ein Konto in einem wettbewerbsfähigen Webshop hat.

4
Jakub Šturc

Ich schätze verschiedene Antworten oben, da sie am meisten sagen, aber manchmal wissen Anwendungen auch nicht, was falscher Benutzername oder Passwort ist. Im Falle einer tokenbasierten Authentifizierung speziell zur Implementierung von SSO (Single Sign On), z. IBM Tivoli Access Manager Ihre Anwendung erhält entweder ein erfolgreiches Token oder erhält einen Fehler zurück.

4
Niks

wenn es sich bei dem Login um eine E-Mail-Adresse handelt, kann leicht festgestellt werden, dass eine Person auf einer Website registriert ist. Vielleicht möchte ich das nicht. >> Manchmal verwenden Benutzer ein echtes Passwort für ein E-Mail-Konto für Websites, die sie registrieren, wenn sie eine E-Mail-ID als Login-ID verwenden :)

3