TEIL I: So melden Sie sich an
Wir gehen davon aus, dass Sie bereits wissen, wie Sie ein HTML-Formular für Login + Passwort erstellen, das die Werte zur Authentifizierung in ein Skript auf der Serverseite überträgt. In den folgenden Abschnitten werden Muster für eine solide praktische Authentifizierung und die Vermeidung der häufigsten Sicherheitsrisiken behandelt.
Zu HTTPS oder nicht zu HTTPS?
Sofern die Verbindung nicht bereits sicher ist (dh mithilfe von SSL / TLS über HTTPS getunnelt wird), werden Ihre Anmeldeformularwerte im Klartext gesendet, sodass jeder, der die Leitung zwischen Browser und Webserver abhört, die Anmeldungen während des Durchlaufs lesen kann durch. Diese Art des Abhörens wird routinemäßig von Regierungen durchgeführt, aber im Allgemeinen werden wir keine "eigenen" Drähte ansprechen, außer dies zu sagen: Verwenden Sie einfach HTTPS.
Im Wesentlichen besteht der einzige praktische Weg zum Schutz vor Abhören / Paket-Sniffing während der Anmeldung in der Verwendung von HTTPS oder einem anderen zertifikatbasierten Verschlüsselungsschema (z. B. TLS ) oder einem bewährten und getesteten Challenge-Response-Schema (z. B. Diffie-Hellman) -basiertes SRP). Jede andere Methode kann von einem abhörenden Angreifer leicht umgangen werden.
Wenn Sie bereit sind, ein wenig unpraktisch zu werden, können Sie natürlich auch ein Zwei-Faktor-Authentifizierungsschema verwenden (z. B. die Google Authenticator-App, ein physisches Codebuch im Stil des Kalten Krieges oder einen RSA-Schlüsselgenerator-Dongle). Bei korrekter Anwendung könnte dies auch bei einer ungesicherten Verbindung funktionieren, aber es ist schwer vorstellbar, dass ein Entwickler bereit wäre, eine Zwei-Faktor-Authentifizierung zu implementieren, jedoch kein SSL.
(Nicht) Roll-your-own JavaScript-Verschlüsselung / Hashing
Angesichts der wahrgenommenen (wenn auch jetzt vermeidbaren ) Kosten und technischen Schwierigkeiten beim Einrichten eines SSL-Zertifikats auf Ihrer Website sind einige Entwickler versucht, ihre eigenen Hashing- oder Verschlüsselungsschemata im Browser zu verwenden, um zu vermeiden, dass Klartextanmeldungen über eine ungesicherte Leitung übertragen werden.
Obwohl dies ein nobler Gedanke ist, ist er im Wesentlichen nutzlos (und kann eine Sicherheitslücke sein ), es sei denn, er wird mit einer der oben genannten kombiniert - das heißt, entweder die Leitung mit starker Verschlüsselung zu sichern oder eine bewährte Challenge-Response zu verwenden Mechanismus (wenn Sie nicht wissen, was das ist, wissen Sie einfach, dass es eines der am schwierigsten zu beweisenden, am schwierigsten zu entwerfenden und am schwierigsten zu implementierenden Konzepte in der digitalen Sicherheit ist).
Es stimmt zwar, dass die Passwort - Hashing sein kann gegen wirksames Passwort Offenlegung , es ist anfällig Angriffe zu wiederholen, Man-In-The-Middle - Angriffe / Entführungen (wenn ein Angreifer ein paar Bytes in der ungesicherte HTML - Seite injizieren kann , bevor es erreicht Ihre Browser können sie einfach das Hashing im JavaScript auskommentieren) oder Brute-Force-Angriffe (da Sie dem Angreifer sowohl den Benutzernamen als auch das Salt und das Hash-Passwort übergeben).
CAPTCHAS gegen die Menschheit
CAPTCHA soll eine bestimmte Angriffskategorie vereiteln: automatisiertes Wörterbuch / Brute-Force-Versuch und Irrtum ohne menschlichen Bediener. Es besteht kein Zweifel, dass dies eine echte Bedrohung ist. Es gibt jedoch Möglichkeiten, nahtlos damit umzugehen, ohne dass ein CAPTCHA erforderlich ist, das speziell für die serverseitige Anmeldedrosselung entwickelt wurde. Wir werden diese später erörtern.
Wissen Sie, dass CAPTCHA-Implementierungen nicht gleich erstellt werden. Sie sind oft nicht vom Menschen lösbar, die meisten von ihnen sind tatsächlich gegen Bots unwirksam, alle sind gegen billige Arbeitskräfte aus der Dritten Welt unwirksam (laut OWASP beträgt die aktuelle Sweatshop-Rate 12 USD pro 500 Tests), und einige Implementierungen können es sein In einigen Ländern technisch illegal (siehe OWASP Authentication Cheat Sheet ). Wenn Sie ein CAPTCHA verwenden müssen, verwenden Sie das reCAPTCHA von Google , da es per Definition OCR-hart ist (da es bereits OCR-falsch klassifizierte Buchscans verwendet) und sich sehr bemüht, benutzerfreundlich zu sein.
Persönlich finde ich CAPTCHAS eher ärgerlich und verwende sie nur als letzten Ausweg, wenn sich ein Benutzer mehrmals nicht angemeldet hat und die Drosselungsverzögerungen maximal sind. Dies geschieht selten genug, um akzeptabel zu sein, und stärkt das Gesamtsystem.
Speichern von Passwörtern / Überprüfen von Anmeldungen
Dies mag nach all den öffentlich bekannt gewordenen Hacks und Benutzerdatenlecks, die wir in den letzten Jahren gesehen haben, endlich allgemein bekannt sein, aber es muss gesagt werden: Speichern Sie Passwörter nicht im Klartext in Ihrer Datenbank. Benutzerdatenbanken werden routinemäßig durch SQL-Injection gehackt, durchgesickert oder abgerufen. Wenn Sie rohe Klartext-Kennwörter speichern, ist dies für Ihre Anmeldesicherheit ein sofortiges Spielende.
Wenn Sie das Passwort nicht speichern können, wie überprüfen Sie dann, ob die Kombination aus Login und Passwort, die über das Login-Formular veröffentlicht wurde, korrekt ist? Die Antwort ist Hashing mit einer Schlüsselableitungsfunktion . Wenn ein neuer Benutzer erstellt oder ein Kennwort geändert wird, nehmen Sie das Kennwort und führen es über eine KDF wie Argon2, bcrypt, scrypt oder PBKDF2 aus. Dabei wird das Klartext-Kennwort ("korrekthorsebatterystaple") in eine lange, zufällig aussehende Zeichenfolge umgewandelt , was viel sicherer in Ihrer Datenbank zu speichern ist. Um eine Anmeldung zu überprüfen, führen Sie dieselbe Hash-Funktion für das eingegebene Kennwort aus, geben diesmal das Salt ein und vergleichen die resultierende Hash-Zeichenfolge mit dem in Ihrer Datenbank gespeicherten Wert. Argon2, bcrypt und scrypt speichern das Salz bereits mit dem Hash. Weitere Informationen finden Sie in diesem Artikel auf sec.stackexchange.
Der Grund, warum ein Salz verwendet wird, ist, dass das Hashing an sich nicht ausreicht. Sie sollten ein sogenanntes "Salz" hinzufügen, um den Hash vor Regenbogentabellen zu schützen . Ein Salt verhindert effektiv, dass zwei Passwörter, die genau übereinstimmen, als der gleiche Hashwert gespeichert werden, und verhindert, dass die gesamte Datenbank in einem Durchgang gescannt wird, wenn ein Angreifer einen Angriff zum Erraten von Passwörtern ausführt.
Ein kryptografischer Hash sollte nicht zum Speichern von Passwörtern verwendet werden, da vom Benutzer ausgewählte Passwörter nicht stark genug sind (dh normalerweise nicht genügend Entropie enthalten) und ein Angreifer mit Zugriff auf die Hashes in relativ kurzer Zeit einen Angriff zum Erraten von Passwörtern ausführen kann. Aus diesem Grund werden KDFs verwendet - diese "strecken den Schlüssel" effektiv , was bedeutet, dass jede Kennwortschätzung, die ein Angreifer vornimmt, mehrere Wiederholungen des Hash-Algorithmus verursacht, beispielsweise 10.000 Mal, wodurch der Angreifer das Kennwort 10.000 Mal langsamer errät.
Sitzungsdaten - "Sie sind als Spiderman69 angemeldet"
Nachdem der Server die Anmeldung und das Kennwort für Ihre Benutzerdatenbank überprüft und eine Übereinstimmung gefunden hat, muss sich das System daran erinnern, dass der Browser authentifiziert wurde. Diese Tatsache sollte immer nur serverseitig in den Sitzungsdaten gespeichert werden.
Wenn Sie mit Sitzungsdaten nicht vertraut sind, funktioniert dies folgendermaßen: Eine einzelne zufällig generierte Zeichenfolge wird in einem ablaufenden Cookie gespeichert und zum Verweisen auf eine Sammlung von Daten - die Sitzungsdaten - verwendet, die auf dem Server gespeichert sind. Wenn Sie ein MVC-Framework verwenden, wird dies zweifellos bereits behandelt.
Stellen Sie nach Möglichkeit sicher, dass für das Sitzungscookie beim Senden an den Browser die Flags "Sicher" und "Nur HTTP" gesetzt sind. Das HttpOnly-Flag bietet einen gewissen Schutz gegen das Lesen des Cookies durch einen XSS-Angriff. Das sichere Flag stellt sicher, dass das Cookie nur über HTTPS zurückgesendet wird, und schützt daher vor Netzwerk-Sniffing-Angriffen. Der Wert des Cookies sollte nicht vorhersehbar sein. Wenn ein Cookie angezeigt wird, das auf eine nicht vorhandene Sitzung verweist, sollte sein Wert sofort ersetzt werden, um eine Sitzungsfixierung zu verhindern .
TEIL II: So bleiben Sie eingeloggt - Das berüchtigte Kontrollkästchen "Remember Me"
Permanente Login-Cookies ("Remember Me" -Funktionalität) sind eine Gefahrenzone. Einerseits sind sie genauso sicher wie herkömmliche Anmeldungen, wenn Benutzer verstehen, wie sie damit umgehen sollen. Auf der anderen Seite stellen sie ein enormes Sicherheitsrisiko für unachtsame Benutzer dar, die sie möglicherweise auf öffentlichen Computern verwenden und vergessen, sich abzumelden, und die möglicherweise nicht wissen, was Browser-Cookies sind oder wie sie gelöscht werden können.
Persönlich mag ich dauerhafte Anmeldungen für die Websites, die ich regelmäßig besuche, aber ich weiß, wie ich sicher damit umgehen kann. Wenn Sie sicher sind, dass Ihre Benutzer dasselbe wissen, können Sie dauerhafte Anmeldungen mit gutem Gewissen verwenden. Wenn nicht, können Sie sich der Philosophie anschließen, dass Benutzer, die mit ihren Anmeldedaten unachtsam sind, diese selbst in die Hand genommen haben, wenn sie gehackt werden. Es ist nicht so, als würden wir zu den Häusern unserer Benutzer gehen und all die Post-It-Notizen, die die Gesichtspalme auslösen, mit Passwörtern abreißen, die sie am Rand ihrer Monitore aufgereiht haben.
Natürlich leisten einige Systeme nicht haben keine Konten gehackt; Für solche Systeme gibt es keine Möglichkeit, dauerhafte Anmeldungen zu rechtfertigen.
Wenn Sie sich für die Implementierung dauerhafter Anmelde-Cookies entscheiden, gehen Sie folgendermaßen vor:
Nehmen Sie sich zunächst etwas Zeit, um den Artikel der Paragon Initiative zu diesem Thema zu lesen . Sie müssen eine Reihe von Elementen richtig machen, und der Artikel erklärt die einzelnen Elemente hervorragend.
Und um nur eine der häufigsten Fallstricke zu wiederholen, SPEICHERN SIE DAS PERSISTENT LOGIN COOKIE (TOKEN) NICHT IN IHRER DATENBANK, NUR EIN HASH! Das Anmeldetoken ist Passwort-äquivalent. Wenn ein Angreifer Ihre Datenbank in die Hände bekommt, kann er sich mit den Token bei jedem Konto anmelden, als wären es Klartext-Login-Passwort-Kombinationen. Verwenden Sie daher Hashing (laut https://security.stackexchange.com/a/63438/5002 reicht ein schwacher Hash für diesen Zweck aus), wenn Sie persistente Anmeldetoken speichern.
TEIL III: Geheime Fragen verwenden
Implementieren Sie keine "geheimen Fragen" . Die Funktion "Geheime Fragen" ist ein Sicherheits-Anti-Muster. Lesen Sie das Papier von Link Nummer 4 aus der MUST-READ-Liste. Sie können Sarah Palin danach fragen, nachdem ihr Yahoo! E-Mail-Konto wurde während einer früheren Präsidentschaftskampagne gehackt, weil die Antwort auf ihre Sicherheitsfrage ... "Wasilla High School" war!
Selbst bei benutzerdefinierten Fragen ist es sehr wahrscheinlich, dass die meisten Benutzer Folgendes wählen:
Eine "normale" geheime Frage wie der Mädchenname der Mutter oder das Lieblingshaustier
Eine einfache Kleinigkeit, die jeder aus seinem Blog, LinkedIn-Profil oder ähnlichem herausholen kann
Jede Frage, die einfacher zu beantworten ist, als ihr Passwort zu erraten. Was für jedes anständige Passwort jede Frage ist, die Sie sich vorstellen können
Zusammenfassend lässt sich sagen, dass Sicherheitsfragen in praktisch allen Formen und Variationen von Natur aus unsicher sind und aus irgendeinem Grund nicht in einem Authentifizierungsschema verwendet werden sollten.
Der wahre Grund, warum Sicherheitsfragen sogar in der Natur existieren, besteht darin, dass sie bequem die Kosten einiger Supportanrufe von Benutzern sparen, die nicht auf ihre E-Mails zugreifen können, um zu einem Reaktivierungscode zu gelangen. Dies auf Kosten der Sicherheit und des Rufs von Sarah Palin. Es ist es wert? Wahrscheinlich nicht.
TEIL IV: Funktion für vergessenes Passwort
Ich habe bereits erwähnt, warum Sie niemals Sicherheitsfragen für den Umgang mit vergessenen / verlorenen Benutzerkennwörtern verwenden sollten. Es versteht sich auch von selbst, dass Sie Benutzern niemals ihre tatsächlichen Passwörter per E-Mail senden sollten. In diesem Bereich sind mindestens zwei weitere allzu häufige Fallstricke zu vermeiden:
Nicht zurückgesetzt ein vergessenes Kennwort ein automatisch generierter starkes Passwort - solche Passwörter sind notorisch schwer zu merken, die der Benutzer bedeutet entweder ändern müssen oder schreiben Sie es auf - sagen wir, auf einem leuchtend gelben Post-It auf dem Rand ihres Monitors. Anstatt ein neues Passwort festzulegen, lassen Sie die Benutzer sofort ein neues auswählen - was sie sowieso tun möchten. (Eine Ausnahme hiervon kann sein, wenn die Benutzer allgemein einen Kennwortmanager zum Speichern / Verwalten von Kennwörtern verwenden, an die sie sich normalerweise nicht erinnern können, ohne sie aufzuschreiben.)
Hash immer den verlorenen Passwortcode / Token in der Datenbank. WIEDER ist dieser Code ein weiteres Beispiel für ein Passwort-Äquivalent. Er MUSS also gehasht werden, falls ein Angreifer Ihre Datenbank in die Hände bekommt. Wenn ein verlorener Passwortcode angefordert wird, senden Sie den Klartextcode an die E-Mail-Adresse des Benutzers, hashen Sie ihn, speichern Sie den Hash in Ihrer Datenbank - und werfen Sie das Original weg . Genau wie ein Passwort oder ein dauerhaftes Login-Token.
Ein letzter Hinweis: Stellen Sie immer sicher, dass Ihre Schnittstelle zur Eingabe des Codes für verlorenes Passwort mindestens so sicher ist wie Ihr Anmeldeformular selbst. Andernfalls verwendet ein Angreifer dies einfach, um stattdessen Zugriff zu erhalten. Es ist ein guter Anfang, sicherzustellen, dass Sie sehr lange "verlorene Kennwortcodes" generieren (z. B. 16 alphanumerische Zeichen, bei denen zwischen Groß- und Kleinschreibung unterschieden wird). Fügen Sie jedoch dasselbe Drosselungsschema hinzu, das Sie für das Anmeldeformular selbst verwenden.
TEIL V: Überprüfen der Passwortstärke
Zunächst sollten Sie diesen kleinen Artikel lesen, um die Realität zu überprüfen: Die 500 häufigsten Passwörter
Okay, vielleicht die Liste ist nicht die kanonische Liste der häufigsten Passwörter auf jedem System überall immer , aber es ist ein guter Indikator dafür , wie schlecht die Menschen ihre Passwörter wählen , wenn es keine erzwungene Politik an seinem Platz ist. Außerdem sieht die Liste erschreckend nah an der Heimat aus, wenn Sie sie mit öffentlich verfügbaren Analysen kürzlich gestohlener Passwörter vergleichen.
Also: Ohne Mindestanforderungen an die Kennwortstärke verwenden 2% der Benutzer eines der 20 häufigsten Kennwörter. Das heißt: Wenn ein Angreifer nur 20 Versuche erhält, kann 1 von 50 Konten auf Ihrer Website geknackt werden.
Um dies zu verhindern, muss die Entropie eines Passworts berechnet und anschließend ein Schwellenwert angewendet werden. Die Sonderpublikation 800-63 des Nationalen Instituts für Standards und Technologie (NIST) enthält eine Reihe sehr guter Vorschläge. In Kombination mit einer Wörterbuch- und Tastaturlayoutanalyse (z. B. "qwertyuiop" ist ein falsches Kennwort) können 99% aller schlecht ausgewählten Kennwörter mit einer Entropie von 18 Bit abgelehnt werden . Die einfache Berechnung der Passwortstärke und die Anzeige eines visuellen Stärkemessgeräts für einen Benutzer ist gut, aber unzureichend. Wenn es nicht erzwungen wird, werden viele Benutzer es höchstwahrscheinlich ignorieren.
Randall Munroes Password Strength xkcd wird dringend empfohlen, um die Benutzerfreundlichkeit von Passwörtern mit hoher Entropie aufzufrischen .
Verwenden Sie die API von Troy Hunt , um Benutzerpasswörter anhand von Passwörtern zu überprüfen, die bei Verstößen gegen öffentliche Daten gefährdet sind.
TEIL VI: Viel mehr - oder: Verhindern von schnellen Anmeldeversuchen
Schauen Sie sich zunächst die Zahlen an: Kennwortwiederherstellungsgeschwindigkeiten - Wie lange hält Ihr Kennwort?
Wenn Sie nicht die Zeit haben, die Tabellen in diesem Link zu durchsuchen, finden Sie hier eine Liste:
Es dauert praktisch keine Zeit , ein schwaches Passwort zu knacken, selbst wenn Sie es mit einem Abakus knacken
Es dauert praktisch keine Zeit , ein alphanumerisches 9-stelliges Passwort zu knacken, wenn die Groß- und Kleinschreibung nicht berücksichtigt wird
Wenn es weniger als 8 Zeichen lang ist, dauert es praktisch keine Zeit , ein kompliziertes Kennwort mit Symbolen, Buchstaben und Zahlen sowie Groß- und Kleinbuchstaben zu knacken (ein Desktop-PC kann den gesamten Schlüsselbereich mit bis zu 7 Zeichen durchsuchen von Tagen oder sogar Stunden)
Es würde jedoch übermäßig viel Zeit in Anspruch nehmen, selbst ein 6-stelliges Passwort zu knacken, wenn Sie auf einen Versuch pro Sekunde beschränkt wären!
Was können wir also aus diesen Zahlen lernen? Nun, viele, aber wir können uns auf den wichtigsten Teil konzentrieren: Die Tatsache, dass es wirklich nicht so schwierig ist , eine große Anzahl aufeinanderfolgender Schnellfeuer-Anmeldeversuche (dh den Brute-Force- Angriff) zu verhindern. Aber es richtig zu verhindern ist nicht so einfach, wie es scheint.
Im Allgemeinen haben Sie drei Möglichkeiten , die alle wirksam gegen Brute-Force - Angriffe sind (und Wörterbuch - Attacken, aber da Sie bereits eine starke Passwort Politik beschäftigen, sollten sie nicht ein Problem sein) :
Präsentieren Sie ein CAPTCHA nach N fehlgeschlagenen Versuchen (verdammt nervig und oft ineffektiv - aber ich wiederhole mich hier)
Sperren von Konten und Erfordernis einer E-Mail-Überprüfung nach N fehlgeschlagenen Versuchen (dies ist ein DoS- Angriff, der darauf wartet, ausgeführt zu werden)
Und schließlich die Drosselung der Anmeldung : Das heißt, eine Zeitverzögerung zwischen den Versuchen nach N fehlgeschlagenen Versuchen festlegen (ja, DoS-Angriffe sind immer noch möglich, aber zumindest sind sie weitaus weniger wahrscheinlich und viel komplizierter durchzuführen).
Best Practice Nr. 1: Eine kurze Zeitverzögerung, die mit der Anzahl der fehlgeschlagenen Versuche zunimmt, wie z.
- 1 fehlgeschlagener Versuch = keine Verzögerung
- 2 fehlgeschlagene Versuche = 2 Sekunden Verzögerung
- 3 fehlgeschlagene Versuche = 4 Sekunden Verzögerung
- 4 fehlgeschlagene Versuche = 8 Sekunden Verzögerung
- 5 fehlgeschlagene Versuche = 16 Sekunden Verzögerung
- usw.
Ein DoS, der dieses Schema angreift, wäre sehr unpraktisch, da die resultierende Sperrzeit geringfügig größer ist als die Summe der vorherigen Sperrzeiten.
Zur Verdeutlichung: Die Verzögerung ist keine Verzögerung, bevor die Antwort an den Browser zurückgegeben wird. Es ist eher eine Zeitüberschreitung oder ein Refraktärzeitraum, in dem Anmeldeversuche bei einem bestimmten Konto oder von einer bestimmten IP-Adresse überhaupt nicht akzeptiert oder ausgewertet werden. Das heißt, korrekte Anmeldeinformationen werden bei einer erfolgreichen Anmeldung nicht zurückgegeben, und falsche Anmeldeinformationen lösen keine Verzögerungserhöhung aus.
Best Practice Nr. 2: Eine Zeitverzögerung mittlerer Länge, die nach N fehlgeschlagenen Versuchen wirksam wird, wie z.
- 1-4 fehlgeschlagene Versuche = keine Verzögerung
- 5 fehlgeschlagene Versuche = 15-30 Minuten Verzögerung
DoS, die dieses Schema angreifen, wären ziemlich unpraktisch, aber sicherlich machbar. Es kann auch relevant sein zu beachten, dass eine so lange Verzögerung für einen legitimen Benutzer sehr ärgerlich sein kann. Vergessliche Benutzer werden dich nicht mögen.
Best Practice Nr. 3: Kombination der beiden Ansätze - entweder eine feste, kurze Zeitverzögerung, die nach N fehlgeschlagenen Versuchen wirksam wird, wie z.
- 1-4 fehlgeschlagene Versuche = keine Verzögerung
- 5+ fehlgeschlagene Versuche = 20 Sekunden Verzögerung
Oder eine zunehmende Verzögerung mit einer festen Obergrenze, wie:
- 1 fehlgeschlagener Versuch = 5 Sek. Verzögerung
- 2 fehlgeschlagene Versuche = 15 Sekunden Verzögerung
- 3+ fehlgeschlagene Versuche = 45 Sekunden Verzögerung
Dieses endgültige Schema wurde den OWASP-Best-Practice-Vorschlägen (Link 1 aus der MUST-READ-Liste) entnommen und sollte als Best-Practice angesehen werden, auch wenn es zugegebenermaßen restriktiv ist.
Als Faustregel würde ich jedoch sagen: Je stärker Ihre Passwortrichtlinie ist, desto weniger müssen Sie Benutzer mit Verzögerungen nerven. Wenn Sie sichere (alphanumerische Zeichen + Groß- und Kleinschreibung + erforderliche Zahlen und Symbole) Kennwörter mit mehr als 9 Zeichen benötigen, können Sie den Benutzern 2-4 nicht verzögerte Kennwortversuche geben, bevor Sie die Drosselung aktivieren.
Ein Angriff auf dieses endgültige Anmeldedrosselungsschema wäre sehr unpraktisch. Lassen Sie als letzten Schliff immer dauerhafte (Cookie-) Anmeldungen (und / oder ein von CAPTCHA verifiziertes Anmeldeformular) durch, damit legitime Benutzer nicht einmal verzögert werden, während der Angriff ausgeführt wird . Auf diese Weise wird der sehr unpraktische DoS-Angriff zu einem äußerst unpraktischen Angriff.
Darüber hinaus ist es sinnvoller, Administratorkonten aggressiver zu drosseln, da dies die attraktivsten Einstiegspunkte sind
TEIL VII: Verteilte Brute-Force-Angriffe
Abgesehen davon werden fortgeschrittenere Angreifer versuchen, die Drosselung der Anmeldung zu umgehen, indem sie "ihre Aktivitäten verbreiten":
Verteilen der Versuche in einem Botnetz, um das Markieren von IP-Adressen zu verhindern
Anstatt einen Benutzer auszuwählen und die 50.000 häufigsten Passwörter auszuprobieren (was sie aufgrund unserer Drosselung nicht können), wählen sie DAS häufigste Passwort aus und versuchen es stattdessen mit 50.000 Benutzern. Auf diese Weise umgehen sie nicht nur Maßnahmen mit maximalem Versuch wie CAPTCHAs und Anmeldedrosselung, sondern erhöhen auch ihre Erfolgschancen, da das häufigste Kennwort Nummer 1 weitaus wahrscheinlicher ist als Nummer 49.995
Abstand der Anmeldeanforderungen für jedes Benutzerkonto, z. B. im Abstand von 30 Sekunden, um sich unter das Radar zu schleichen
Hier empfiehlt es sich, die Anzahl der fehlgeschlagenen Anmeldungen systemweit zu protokollieren und einen laufenden Durchschnitt der Häufigkeit der fehlerhaften Anmeldungen Ihrer Site als Grundlage für eine Obergrenze zu verwenden, die Sie dann allen Benutzern auferlegen.
Zu abstrakt? Lassen Sie mich umformulieren:
Angenommen, Ihre Website hat in den letzten 3 Monaten durchschnittlich 120 fehlerhafte Anmeldungen pro Tag erhalten. Mit diesem (laufenden Durchschnitt) kann Ihr System das globale Limit auf das Dreifache festlegen - dh. 360 fehlgeschlagene Versuche über einen Zeitraum von 24 Stunden. Wenn dann die Gesamtzahl der fehlgeschlagenen Versuche in allen Konten diese Anzahl innerhalb eines Tages überschreitet (oder noch besser, überwachen Sie die Beschleunigungsrate und lösen Sie einen berechneten Schwellenwert aus), wird die systemweite Anmeldedrosselung aktiviert - was für ALLE Benutzer kurze Verzögerungen bedeutet (mit Ausnahme von Cookie-Anmeldungen und / oder Backup-CAPTCHA-Anmeldungen).
Ich habe auch eine Frage mit mehr Details und einer wirklich guten Diskussion darüber gepostet, wie man knifflige Pitfals bei der Abwehr verteilter Brute-Force-Angriffe vermeidet
TEIL VIII: Zwei-Faktor-Authentifizierung und Authentifizierungsanbieter
Anmeldeinformationen können gefährdet sein, sei es durch Exploits, das Aufschreiben und Verlieren von Passwörtern, den Diebstahl von Laptops mit Schlüsseln oder die Eingabe von Anmeldungen bei Phishing-Sites durch Benutzer. Anmeldungen können durch eine Zwei-Faktor-Authentifizierung weiter geschützt werden, bei der Out-of-Band-Faktoren wie Einwegcodes verwendet werden, die von einem Telefonanruf, einer SMS-Nachricht, einer App oder einem Dongle empfangen wurden. Mehrere Anbieter bieten Zwei-Faktor-Authentifizierungsdienste an.
Die Authentifizierung kann vollständig an einen Single-Sign-On-Dienst delegiert werden, bei dem ein anderer Anbieter das Sammeln von Anmeldeinformationen übernimmt. Dadurch wird das Problem an einen vertrauenswürdigen Dritten weitergeleitet. Google und Twitter bieten beide standardbasierte SSO-Dienste an, während Facebook eine ähnliche proprietäre Lösung bietet.
MUSS LINKS ÜBER DIE Webauthentifizierung LESEN
- OWASP-Handbuch zur Authentifizierung / OWASP-Authentifizierung Cheat Sheet
- Vor- und Nachteile der Clientauthentifizierung im Web (gut lesbares MIT-Forschungspapier)
- Wikipedia: HTTP-Cookie
- Persönliche Wissensfragen zur Fallback-Authentifizierung: Sicherheitsfragen im Zeitalter von Facebook (gut lesbares Berkeley-Forschungspapier)