User Enumeration
Zwei unterschiedliche Fehler verraten einem Angreifer, welche E-Mail-Adressen registriert sind.
Was ist User Enumeration?
Bei User Enumeration verrät eine Anwendung, welche Adressen zu Konten gehören. Ein einziger beobachtbarer Unterschied genügt: ein anderer Fehlertext, ein anderer Statuscode oder eine langsamere Antwort. Sie senden zwei Anmeldeanfragen und erhalten „No account found“ beziehungsweise „Incorrect password“ sowie einen Zeitunterschied, weil bcrypt nur ausgeführt wird, wenn ein Hash zum Vergleichen vorhanden ist. Der Fix gibt denselben allgemeinen Fehler aus und führt den Vergleich immer aus; ohne Benutzerkonto verwendet er einen festen Dummy-Hash. Auch Registrierung und Passwortzurücksetzung können die Kontenexistenz verraten.
Was Sie lernen in User Enumeration
- Erkennen, dass jeder Unterschied zwischen den Codepfaden für registrierte und nicht registrierte Benutzer (Antworttext, Statuscode, Latenz, Seiteneffekt) ein Enumeration-Orakel ist
- Die Korrektur mit einheitlichem Fehler bei der Anmeldung anwenden und sicherstellen, dass der Pfad ohne Benutzerkonto denselben bcrypt-Aufwand ausführt wie der Pfad mit vorhandenem Benutzerkonto
- Verstehen, dass Timing ein zweiter Enumeration-Kanal ist, der die Korrektur des Antworttexts übersteht und mit einem Dummy-Hash als Ersatz eingegrenzt werden muss
- Registrierungs- und Passwortzurücksetzungsendpunkte auf dasselbe Muster prüfen, da beide in ihren normalen Antworten häufig zwischen registrierten und nicht registrierten Benutzern unterscheiden
- Enumeration mit Credential Stuffing verknüpfen: Das Filtern der Kandidatenliste auf registrierte E-Mail-Adressen verwandelt einen auffälligen Spray-Angriff in eine unauffällige Kampagne, die Rate Limits umgeht
User Enumeration — Trainingsschritte
-
Eine Liste, die gefiltert werden muss
Bob besitzt einen Datensatz mit E-Mail- und Passwortpaaren aus einem anderen Datenleck. Die meisten Personen darin haben kein Larksong-Konto. Die ganze Liste an der Anmeldeseite auszuprobieren wäre langsam und auffällig. Zuerst will er wissen, welche E-Mail-Adressen tatsächlich zu Larksong-Konten gehören. Er öffnet die Anmeldeseite im Browser und hält die Entwicklertools bereit, um die Antwort auf einen fehlgeschlagenen Anmeldeversuch zu beobachten.
-
Nicht registrierte E-Mail testen
Bob beginnt mit einem Vergleichswert. Er versucht, sich mit einer Adresse anzumelden, die höchstwahrscheinlich zu keinem Larksong-Konto gehört, und verwendet ein beliebiges Passwort. Die Antwort beobachtet er im Netzwerkbereich.
-
Die Ausgangsantwort
Das Formular zeigt einen Anmeldefehler; die entscheidenden Details stehen jedoch im Netzwerkbereich: eine 401-Antwort mit Antworttext und Antwortzeit. So sieht eine fehlgeschlagene Anmeldung mit einer nicht registrierten E-Mail-Adresse aus. Bob hält dies als Ausgangswert fest.
-
Eine vermutlich echte E-Mail testen
Nun versucht Bob es erneut mit einer Adresse aus seinem Datensatz, die seiner Ansicht nach zu einem echten Larksong-Konto gehört: marcus.delgado@gmail.com. Das Wegwerfpasswort behält er bei. Behandelt der Endpunkt beide Fälle gleich, entspricht die Antwort dem Ausgangswert. Falls nicht, ist genau dieser Unterschied der Gewinn.
-
Eine andere Antwort
Die Antwort hat sich geändert. Das falsche Passwort ist dasselbe, aber der Antworttext ist anders. Bob hat sich nie angemeldet, dennoch hat ihm der Anmeldeendpunkt gerade verraten, dass diese E-Mail-Adresse zu einem echten Larksong-Konto gehört.
-
Antwortzeiten prüfen
Die Formulierung ist ein Hinweis. Der Netzwerkbereich enthält einen zweiten, unauffälligeren: die Dauer jeder Anfrage.
-
Wissenscheck
-
Die Liste auswerten
Bob richtet ein Skript auf den Anmeldeendpunkt und übergibt ihm jede E-Mail-Adresse aus seinem Datensatz, jeweils mit einer Anfrage. Lautet die langsame Antwort Incorrect password , nimmt er die Adresse in seine bestätigte Liste auf. Von 50.000 Kandidaten gehören 8.400 zu echten Larksong-Konten. Der anschließende Credential-Stuffing-Angriff richtet sich nun nur gegen Adressen, von denen Bob weiß, dass sie existieren. So bleibt er klein, unauffällig und deutlich unter den Rate Limits, die einen ungezielten Spray-Angriff erkennen würden.
-
Die Sicherheitswarnung
Sie verantworten den Anmeldedienst von Larksong. Über Nacht hat die Erkennung ein auffälliges Muster am Anmeldeendpunkt festgestellt und Ihnen den Befund per E-Mail gesendet. Lesen Sie den Befund und öffnen Sie anschließend den Code.
-
Den Anmelde-Handler öffnen
Die Anmelderoute befindet sich im Authentifizierungsdienst. Öffnen Sie den Handler und prüfen Sie, wie er bei einer fehlgeschlagenen Anmeldung über die zurückzugebende Antwort entscheidet.
Abdeckung der Sicherheits-Frameworks
OWASP Top 10
- A07:2025 Authentication Failures
- A07:2021 Identification and Authentication Failures
CWE
- CWE-204 Observable Response Discrepancy
- CWE-208 Observable Timing Discrepancy
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