Fehlerhafte Benutzerauthentifizierung
Ein 6-stelliger Code ist nur ein Geheimnis, während die Vermutungen begrenzt sind.
Was ist Fehlerhafte Benutzerauthentifizierung?
Ein Endpunkt kann einen Berechtigungsnachweis korrekt prüfen und die Prüfung trotzdem nie gegen Automatisierung abwehren: keine Versuchsbegrenzung, keine Sperrung, keine Ratenbegrenzung. Wenn es sich bei den Anmeldeinformationen um einen 6-stelligen Code handelt, durchläuft ein Angreifer den gesamten Bereich eine Anfrage nach der anderen. Sie beginnen eine Anmeldung mit nur der E-Mail-Adresse eines Ziels, sehen zu, wie ein falscher Code mit der Antwort 200 antwortet, ohne dass etwas zählt, und programmieren dann Ihren Weg zu einer Live-Sitzung. Der Fix verfolgt fehlgeschlagene Versuche im serverseitigen Zustand, gibt 429 beim Limit zurück, verbraucht einen Code bei Übereinstimmung und hält den Ablauf kurz.
Was Sie lernen in Fehlerhafte Benutzerauthentifizierung
- Eine fehlerhafte Benutzerauthentifizierung erkennen: Ein Endpunkt validiert Zugangsdaten korrekt, begrenzt aber die Versuche nicht — und fällt deshalb einem Brute-Force-Angriff zum Opfer
- Verstehen, dass ein kurzer Zahlencode (ein OTP oder Anmeldecode) nur geheim bleibt, solange die Zahl der Rateversuche begrenzt ist, und dass ein ungedrosselter Endpunkt einem Angreifer den gesamten Wertebereich Anfrage für Anfrage ausliefert
- Das Ganze von Token-Diebstahl, Token-Fälschung und Lücken bei der Zugriffskontrolle auf Objektebene unterscheiden; hier stimmt die Prüfung der Zugangsdaten, und es fehlt der Schutz des Endpunkts gegen Automatisierung
- Den Fix anwenden: Fehlversuche in einem serverseitigen Zustand am Konto zählen, ab einem Schwellenwert sperren und 429 zurückgeben, Codes beim Einlösen verbrauchen und ihre Gültigkeit kurz halten
- Jeden Endpunkt für Anmeldung, Verifizierung und Passwort-Zurücksetzung auf ein fehlendes Versuchslimit prüfen — ein einziger ungedrosselter Authentifizierungsschritt genügt für eine Kontoübernahme
Fehlerhafte Benutzerauthentifizierung — Trainingsschritte
-
Ein Code als einzige Hürde
Kelvo ist eine Finanz-App für Privatkunden und meldet ihre Nutzer ohne Passwort an: mit einem sechsstelligen Code, der per E-Mail kommt. E-Mail-Adresse eingeben, Kelvo schickt den Code, Code eintippen, drin. Bob hat keinen Code. Was er hat, stammt aus einer geleakten Mailingliste: die E-Mail-Adresse einer Kundin, renata.voss@gmail.com. Er öffnet die Anmeldeseite von Kelvo, um genau zu sehen, womit er es zu tun hat.
-
Den Code auslösen
Bob startet eine Anmeldung für das Konto, auf das er es abgesehen hat. Er tippt die E-Mail-Adresse des Opfers ein und lässt sich von Kelvo den Code schicken. Der Code landet in Renatas Postfach, nicht in seinem — aber Kelvo zeigt ihm jetzt die Maske, die nach dem Code fragt. Diese Maske und die Anfrage dahinter nimmt er sich als Nächstes vor.
-
Die Anfrage beobachten
Die Eingabemaske für den Code liegt jetzt vor Bob. Renatas echten Code hat er nicht — aber bevor er ihn zu knacken versucht, will er wissen, wie die Maske einen Code prüft und wohin sie ihn schickt. Er tippt einen falschen Code ein, schickt ihn ab und verfolgt im Network-Panel, welche Anfrage sein Browser dabei absetzt.
-
Der Endpunkt, offen sichtbar
Bobs Browser hat den Code an Kelvos API geschickt, und das Network-Panel hat die komplette Anfrage mitgeschnitten. Damit hat er genau das, was er braucht, um ohne die Maske anzugreifen: den exakten Endpunkt, der die Codes prüft.
-
Das Brute-Force-Skript
Mit dem Endpunkt in der Hand rät Bob nicht von Hand. Er öffnet das kurze Skript, das er darauf loslassen wird: eine Schleife, die jeden möglichen Code an Kelvos Verify-Endpunkt schickt, bis einer als akzeptiert zurückkommt.
-
Wie die Schleife arbeitet
Der ganze Angriff besteht aus einer Handvoll Zeilen. Gehen Sie durch, was die einzelnen Teile tun und warum ihn auf dem angreifbaren Server nichts aufhält.
-
Jeden Code durchprobieren
Bob lässt das Skript auf Kelvos Verify-Endpunkt los. Es feuert immer wieder dieselbe Anfrage ab, zählt den Code jedes Mal um eins hoch und wartet darauf, dass einer als akzeptiert zurückkommt.
-
Ein Code, der funktioniert
Das Skript lief ungehindert durch und hat einen Code gefunden, den der Server akzeptiert.
-
Den Code einsetzen
Bob nimmt den Code, den sein Skript gefunden hat, und schickt ihn noch einmal von Hand an den Endpunkt — um zu bestätigen, dass ihm das Konto gehört, und um zu sehen, was er damit in der Hand hat.
-
Eine echte Sitzung, aus sechs Ziffern
Der Endpunkt hat den erratenen Code akzeptiert und eine echte Sitzung herausgegeben.
Abdeckung der Sicherheits-Frameworks
OWASP API Top 10
- API2:2023 Broken Authentication
CWE
- CWE-287 Improper Authentication
- CWE-307 Improper Restriction of Excessive Authentication Attempts
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security