Frage:
Auswirkungen auf die Sicherheit, wenn dem Benutzer mitgeteilt wird, dass er sich aufgrund zu vieler IP-Versuche nicht anmelden kann
Goose
2017-05-31 21:35:47 UTC
view on stackexchange narkive permalink

Beim Austausch des Code Review-Stapels wurde mir als Antwort auf Code, der den Benutzer informiert, wenn sein Anmeldeversuch aufgrund zu vieler Anmeldeversuche von einer IP fehlgeschlagen ist,

"Absolut mitgeteilt Geben Sie dem Endbenutzer keine Nachricht, warum die Anmeldung fehlgeschlagen ist. Sie geben einem potenziellen Angreifer wichtige Informationen, um ihn beim Angriff auf Ihre Anwendung zu unterstützen. Hier geben Sie einem Angreifer sehr genaue Informationen, um Ihre IP-Einschränkung zu umgehen. "

https://codereview.stackexchange.com/a/164608/93616

Übe ich schlechte Sicherheit? Sollte ich in vagen Begriffen wie "Zu viele Anmeldeversuche" oder "Sie konnten nicht angemeldet werden" erklären?

Update : Falls es Unklarheiten gibt, sind es derzeit zu viele Versuchslogik und Nachricht ist es egal, ob die Versuche erfolgreich waren oder nicht.

Das "absolut nicht" ist viel zu stark.Sicherheit ist ein Kompromiss mit Benutzerfreundlichkeit.Als Gegenargument teilt Google Ihnen gerne mit, wenn zu viele verdächtige Anfragen von Ihrer IP-Adresse gestellt wurden, und ich habe festgestellt, dass dies in vielen Fällen eine sehr nützliche Information ist.Wenn Google dies kann, können Sie dies auch, wenn Sie der Meinung sind, dass es Ihren Nutzern mehr hilft als Angreifern.Wenn nicht, nicht.
"Sagen Sie dem Endbenutzer auf keinen Fall, warum die Anmeldung fehlgeschlagen ist."- Ich denke, diese Aussage zielt eher darauf ab, keine Informationen wie "Dieses Konto existiert nicht im System" zurückzugeben.Ein Angreifer kann anhand der verschiedenen Antworten auf die Anmeldeanforderungen feststellen, ob im System ein bestimmtes Benutzerkonto vorhanden ist.Mit anderen Worten, die Anmeldeantwort sollte gleich sein, unabhängig davon, ob das Konto vorhanden ist und / oder das angegebene Kennwort falsch ist.
Ich würde einen anonymisierenden Proxy verwenden, um bei jeder Anfrage eine neue IP-Adresse zu erhalten. Was bringt es also, durch IP zu blockieren?Sie sollten durch falsche Authentifizierung nach Benutzername blockieren
@NeilMcGuigan Blockiert nur Angriffe in einer einzigen Dimension.Es blockiert nicht gegen einen Bot, der ein gemeinsames Passwort für Tausende von Benutzernamen versucht.
@Xander korrekt.Sie können auch fehlgeschlagene Kennwörter blockieren
@NeilMcGuigan Nein, aus mehreren Gründen nicht auf die gleiche Weise.
Ein Angreifer kann das sowieso ziemlich schnell herausfinden, es ist kein großes Geheimnis ...
@schroeder Da ich meine gelöschte Antwort nicht kommentieren kann, um meinen Fall zu vertreten, werde ich es hier machen.Entschuldigung, dass ich meine Antwort nicht klar genug formuliert habe.Es war definitiv beabsichtigt, die Frage zu beantworten.Ich gab einige konkrete Beispiele dafür, wo Fehlalarme auftreten könnten, die andere Antworten noch nicht gegeben haben, um deutlich zu machen, wie häufig sie wahrscheinlich sein würden.Ich habe dies dann mit dem letzten Satz der Antwort auf die Frage verknüpft. Wenn Sie Anmeldeversuche ohne Erklärung von blockierten IPs ablehnen, werden sich all diese Fehlalarme fragen, was los ist.
Fünf antworten:
Arminius
2017-05-31 23:39:54 UTC
view on stackexchange narkive permalink

Sagen Sie dem Endbenutzer auf keinen Fall, warum die Anmeldung fehlgeschlagen ist. Sie geben einem potenziellen Angreifer wichtige Informationen, um ihn beim Angriff auf Ihre Anwendung zu unterstützen.

Wenn Sie einem Benutzer jedoch nicht mitteilen, warum die Anmeldung fehlgeschlagen ist, ist dies eine potenzielle Usability-Katastrophe.

Wenn Sie nicht klären, ob die IP des Benutzers gesperrt wurde oder der Benutzer stattdessen ein falsches Kennwort verwendet hat, kann dies zu Panik führen, da es den Anschein hat, als hätte jemand auf sein Konto zugegriffen und das Kennwort geändert, um ihn zu sperren. Wenn meine Anmeldung mit einem vorab ausgefüllten Passwort fehlschlägt, denke ich zuerst an einen Einbruch und nicht an einen IP-Block.

Außerdem kann ein naiver IP-Blockierungsmechanismus unwirksam sein und zusätzliche einführen Probleme. Es ist möglicherweise trivial, für einen Angreifer mit ausreichenden Ressourcen zu umgehen, und jemand, der eine IP-Adresse mit anderen Benutzern teilt, könnte das IP-Verbot missbrauchen, um andere auszuschließen. Stattdessen ist ein CAPTCHA nach n fehlgeschlagenen Versuchen pro IP möglicherweise eine weichere Lösung und besser für Ihre Anwendung geeignet.

Siehe auch:

habe eine positive Bewertung für das Captcha "Soft Lock"
Jon Bentley
2017-05-31 22:28:29 UTC
view on stackexchange narkive permalink

Die Bereitstellung allgemeiner Nachrichten, die nicht erwähnt wurden, bietet einen Sicherheitsvorteil.

Alice versucht, ein Konto auf Bobs Server brutal zu erzwingen. Bei den ersten Versuchen erhält Alice die Meldung "Fehlgeschlagener Anmeldeversuch" zurück. Beim nächsten Versuch erhält sie "Zu viele Anmeldeversuche von dieser IP-Adresse". Sie ist sich jetzt bewusst, dass (a) alle Anmeldeinformationen, die sie bis zu diesem Zeitpunkt ausprobiert hat, ungültig waren und (b) sie etwas anderes tun muss, bevor sie weitere Versuche unternimmt.

Aber was ist, wenn Bob sich nicht ändert? die Nachricht? Alice fährt mit der Brute Force fort und erhält weiterhin den generischen "Fehlgeschlagenen Anmeldeversuch" bei jedem Versuch , auch wenn die Anmeldeinformationen korrekt sind . Wenn sie zufällig die richtigen Anmeldeinformationen versucht, lehnt Bob den Versuch ab, da das IP-Limit überschritten wurde, aber Alice weiß nicht, dass dies der Grund ist, und muss ihn als falschen Versuch behandeln (es sei denn, sie hat einen anderen Art zu wissen, was über den Rahmen dieser Frage hinausgeht). Ihre einzige Möglichkeit besteht darin, mit der Suche fortzufahren, ohne zu wissen, ob sie die richtigen Anmeldeinformationen bereits gefunden und überschritten hat.

Beachten Sie, dass dieser Vorteil Sicherheit durch Dunkelheit ist verlässt sich darauf, dass Alice Bobs IP-Blockierungsrichtlinie nicht kennt. Abhängig vom Setup sind diese Informationen möglicherweise trivial zu erhalten. Wenn Alice beispielsweise Zugriff auf ein anderes Konto im System hat (einfach, wenn es die Registrierung eines öffentlichen Kontos akzeptiert), kann sie mithilfe von Versuch und Irrtum feststellen, ob ein korrekter Versuch nach zu vielen falschen Versuchen schließlich abgelehnt wird.

Andere Antworten haben den Kompromiss zwischen Sicherheit und Benutzerfreundlichkeit erklärt, daher werde ich das nicht wiederholen.

Beachten Sie, dass Alice das richtige Passwort nur dann genau überprüfen kann, wenn die Passwortüberprüfung mit der Rückmeldung erfolgt, bevor "zu viele Versuche" durchgeführt werden.Die umgekehrte Reihenfolge liefert weniger Informationen, sodass Alice nur "falsche" Passwörter von "unbekannten" Passwörtern unterscheiden kann.Was immer noch eine unerwünschte Menge an Informationen sein kann, die einem Angreifer gegeben werden müssen.
Diese Antwort setzt "falsches Passwort" voraus, aber die Meldung "Fehlgeschlagene Anmeldung" bedeutet wirklich nur "falscher Benutzername oder falsches Passwort für diesen Benutzernamen".(Es kann zu einem Seitenkanalangriff kommen, wenn der falsche Benutzername früher abgelehnt wird. Es ist jedoch bekannt, dass die Wartezeit für eine fehlgeschlagene Anmeldemeldung zufällig festgelegt wird.)
@MSalters Stimmt, hat aber keinen Einfluss auf meine Antwort.In beiden Fällen ist der Effekt auf einen Brute-Force-Angreifer derselbe: Mit einer allgemeinen Nachricht können sie den Unterschied zwischen korrekten und falschen Anmeldeinformationen nicht erkennen und müssen beide gleich behandeln.Die Unterschiede zwischen einer Meldung "Falsches Kennwort" und einer Meldung "Fehlgeschlagene Anmeldung" sind ein separates Problem zwischen Sicherheit und Benutzerfreundlichkeit.Ich werde meine Antwort bearbeiten, um es klarer zu machen.
Dan Landberg
2017-05-31 21:48:04 UTC
view on stackexchange narkive permalink

Ja, technisch gesehen geben Sie Informationen zurück, die von einem Angreifer zur Feinabstimmung eines Brute-Force-Botnetzes verwendet werden könnten. Außerdem bin ich mir nicht sicher, wie nützlich die Fehlermeldung "Zu viele Anmeldeversuche von dieser IP" für einen Standardbenutzer sein wird. Es sollte auch beachtet werden, dass jeder erfahrene Angreifer entweder einen sich ändernden Reaktionstyp oder einen Zeitunterschied bemerkt und wahrscheinlich sowieso herausfindet, was passiert.

Möglicherweise möchten Sie einen Dienst wie CloudFlare verwenden. Sie verfügen über eine skriptfähige API, die unter bestimmten Umständen eine Interstitial-Seite dynamisch einfügen oder eine WAF-Regel aktualisieren kann. Troy Hunt hat ein gutes Tutorial, in dem er dies für Windows Azure mithilfe von Azure-Funktionen ausführt.

Diese Antwort macht Sinn.Was soll ich dem Benutzer sagen, wenn er das Limit erreicht hat?Ich möchte an dieser Stelle vermeiden, CloudFlare einzubeziehen.
Die Empfehlung kommt auch von Entwicklern, die nicht immer mit den angezeigten Fehlern übereinstimmen.Auch hier müssen Sie vorsichtig sein.Wenn ich beispielsweise versuche, das Kennwort eines Benutzers brutal zu erzwingen, und die Meldung "Falsche Anmeldeinformationen" angezeigt wird, wird jedoch der Fehler "Zu viele Versuche von dieser IP" angezeigt.Ich werde wissen, dass ich den Jackpot mit dem Passwort geknackt habe, auch wenn ich mich nicht angemeldet habe.
Ein Großteil Ihrer Formulierung wird von der Raffinesse Ihrer Benutzer abhängen.Etwas in der Art von "Momentan kann ich mich nicht anmelden. Bitte versuchen Sie Ihre Anfrage später erneut."Wenn Sie möchten, dass es am sichersten ist, sollten Sie vermeiden, ein bestimmtes Zeitlimit aufzulisten, da ein Angreifer seine Versuche nach diesem Zeitlimit nur neu starten würde. Ehrlich gesagt wird ein kluger Angreifer herausfinden, was passiert.Ich würde wirklich empfehlen, einen Drittanbieter-Service für diesen zu verwenden.Sie können viel Zeit damit verbringen, ein Update dafür zu programmieren, und ein Angreifer wird einen Weg finden, das System zu spielen.
@kotzu Ich folge nicht deiner Logik."Zu viele Versuche von dieser IP" bedeutet zu viele * falsche * Versuche, nicht "Sie hatten einige falsche Versuche, gefolgt von einem korrekten Versuch, aber wir werden Sie blockieren, weil der richtige Versuch Sie über das Limit gebracht hat".
@Jon Bentley - Ja, genau das ist mein Punkt.Was Sie sagen, wäre der richtige Weg, um die Nachricht zu zeigen.Aber manchmal habe ich eine Anwendung mit einer fehlerhaften Logik gesehen, die es dem Angreifer ermöglicht zu wissen, wann er das richtige Passwort getroffen hat, indem er nicht mit den Fehlermeldungen übereinstimmt.
@JonBentley Aber stellen Sie sicher, dass Sie auch nicht nur falsche Versuche testen ... Andernfalls erhält Ihr Brute-Force-Angreifer einen Ratenlimitfehler, einen Ratenlimitfehler, einen Ratenlimitfehler, dann eine erfolgreiche Anmeldung und es wird keine Sicherheit gewonnenwas auch immer.
Cloudflare bedeutet Abschiedssicherheit.Es ist im Grunde * MitM as a Service. *
@SargeBorsch Es hängt wirklich von Ihrem Bedrohungsmodell ab.Wenn Sie versuchen, sich gegen Angreifer des Nationalstaates zu verteidigen, werden Sie wahrscheinlich schwächer.Für die meisten Anwendungen bietet es eine signifikante Verbesserung der Sicherheit in Bezug auf DDoS-Prävention, WAF und andere Funktionen.
@user52472 Cloudflare ist ohnehin eine Gefahr, weil sie auch ihre Inkompetenz bewiesen haben.(siehe Wolkenblasenloch)
Kirill Sinitski
2017-05-31 22:04:31 UTC
view on stackexchange narkive permalink

In diesem Fall sind Sicherheit und Benutzerfreundlichkeit gegensätzliche Ziele. Die sicherste Implementierung würde zwar kein Feedback bieten, wäre aber auch am wenigsten benutzerfreundlich. Sie müssen entscheiden, wie anfällig Ihr System für das Erzwingen von Anmeldungen ist, welche anderen Abhilfemaßnahmen vorhanden sind und wie effektiv die spezifische Abschwächung ist, wenn sie gegen Unannehmlichkeiten für den Benutzer bewertet wird.

Wenn ich beispielsweise eine Anmeldung für a entwerfe Verbrauchergerät Ich würde es so benutzerfreundlich wie möglich gestalten, indem ich detailliertes Feedback habe und zusätzliche Abhilfemaßnahmen einführe, um dies zu kompensieren. Wenn ich eine HSM-Anmeldung entwerfen würde, würde ich kein Feedback und lästige geräteweite Zeitüberschreitungen anbieten.

Serge Ballesta
2017-05-31 22:43:19 UTC
view on stackexchange narkive permalink

Alles hängt davon ab, was Sie bauen. Wenn es sich um ein Blog oder eine andere schicke Website handelt, bei der es nicht wirklich wichtig ist, legitime Versuche abzulehnen, und bei der Sie der Robustheit der Anwendung nicht wirklich vertrauen, sollten Sie sie wirklich vor allem schützen, was ein Angriff sein könnte, und niemals sagen, warum Sie lehnen eine Anmeldung ab.

Wenn Sie eine professionelle Anwendung erstellen und professionelle Zugriffe erwarten, beschränken Sie die Zugriffe von einer einzelnen IP nicht, wenn Ihre Anwendung robust genug ist. Wenn Sie dies tun, informieren Sie den Benutzer unbedingt über den Grund und richten Sie eine angemessen reaktionsfähige Hotline ein (höchstens 1 Arbeitstag, um eine Nachricht zu lesen und zu verstehen und bei Bedarf eine Korrekturmaßnahme einzuleiten ). Weil es für große Unternehmen üblich ist, einen einzigen ausgehenden Proxy für alle ihre HTTP- und HTTPS-Zugriffe einzurichten. Möglicherweise haben Sie Tausende von Mitarbeitern an verschiedenen Standorten in einem Land, die alle anscheinend dieselbe IP-Adresse verwenden. Eine weiße Liste, die unbegrenzte Verbindungen von bekannten Proxys zulässt, reicht aus, aber Sie müssen bereit sein, sie schnell zu ändern, wenn einer Ihrer Kunden sein Netzwerk weiterentwickelt und seine Proxy-Adresse ändert.



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