Cloud SecurityFabian Gold6 min Lesezeit

Time-based User Enumeration

Da das klassische Enumerieren von Benutzernamen oft nicht mehr möglich ist, muss man einen Time-based-Ansatz wählen, um an diese Informationen zu kommen.

Inhaltsverzeichnis

Einführung

Einer der wichtigsten Punkte beim Pentest einer Webanwendung ist es valide Benutzerdaten herauszufinden, um anschließend mithilfe von Brute-Force oder Wörterbuchattacken den zweiten Faktor, das Passwort, herauszufinden. Heutzutage wird das Enumerieren von Benutzernamen bei Anwendungen zu einer immer größer werdenden Herausforderung für Angreifer. Dies ist ein gutes Zeichen, weil es bedeutet, dass Entwickler ihre Hausaufgaben machen und die Sicherheit der Anwendungen im Hinterkopf haben. Bei den meisten Anwendungen werden inzwischen nur noch generische Meldungen, wie „E-Mail-Adresse oder Passwort ist falsch“, bei einem fehlgeschlagenen Log-in zurückgeben.

Da das einfache Enumerieren von Benutzernamen nicht mehr möglich ist, muss man einen tiefergehenden Ansatz wählen, um an diese wertvollen Informationen zu kommen. Hierbei kommt die Schwachstelle der zeitbasierten Userenumerierung ins Spiel.

Klassischer Ansatz vs. Zeitbasierter Ansatz

Beim klassischen Ansatz der Userenumerierung hält man Ausschau nach einer spezifischen Rückmeldung des Systems. Dies kann so offensichtlich sein wie eine Fehlermeldung ("Dieses Konto existiert nicht.") oder einfach eine leichte Änderung der Antwortfehlercodes. In jedem Fall kann ein Angreifer dies missbrauchen, um automatisch eine Liste gültiger Benutzernamen zu erstellen, die für Passwortangriffe verwendet werden kann. Da dieser Fall bei den heutigen Systemen nicht mehr allzu häufig auftritt, muss man einen tiefergehenden Ansatz wählen.

Der zeitbasierte Teil dieser Schwachstelle tritt auf, wenn die Anwendung keine offensichtliche Möglichkeit hat, die Gültigkeit eines Benutzernamens zu bestimmen, sondern sich der Zeitpunkt der Antwort des Webservers ändert. In der Regel wird dies durch Fehler im Code der Anwendung zur Verarbeitung der Anmeldung verursacht, die einen viel längeren Ausführungspfad erzeugen, was zu einer längeren Zeitverzögerung führt.

Egal, wie es ein Angreifer schafft valide Benutzerdaten zu ergattern, es stellt ein Risiko für Ihr Unternehmen dar. Diese Liste enthält die Hälfte der für die Anmeldung bei der jeweiligen Anwendung erforderlichen Daten, wodurch sich die Wahrscheinlichkeit, dass sich jemand unbefugt Zugang verschafft, erheblich erhöht. Das Einzige, was jetzt noch zwischen Ihrem Unternehmen und einer Kompromittierung steht, ist die Stärke der Kennwörter Ihrer Benutzer, die – da sind wir uns wohl alle einig – wahrscheinlich nicht besonders gut sind.

Was ist beim Testen zu beachten?

Es gibt einige Punkte, die beim Testen zu beachten sind. In erster Linie ist es wichtig den Server nicht zu sehr zu stressen, da dies das Ergebnis verzehren könnte. Deshalb sollte man zwischen den Requests einen kleinen Delay einbauen.

Zusätzlich ist es ratsam, die validen Benutzernamen im Payload aufzusplitten, dass bedeutet, dass die validen Benutzernamen nicht in aufeinanderfolgenden Requests gesendet werden. Durch die zufällige Aufteilung im Datensatz wird das Risiko von False Positives vermindert.

Des Weiteren ist es notwendig den Test mehrmals laufen zu lassen. Anschließend sollte die durchschnittliche Antwortzeit pro Benutzer berechnet werden, hiermit werden die Daten normalisiert und das Risiko auf False Positive Ergebnisse wird weiter reduziert.

Natürlich hängt auch mit all diesen Maßnahmen der Erfolg des Angriffes sehr stark von der Stabilität des Servers und der Internetverbindung zwischen dem Server und dem Client ab.

Wie verhindere ich Time-based User Enumeration?

Nachdem wir nun gesehen haben, wie der Angriff der zeitbasierten Userenumerierung funktioniert, stellt sich die Frage, wie die Systeme dagegen abgesichert werden können. Bei eigenen Anwendungen, die selbst entwickelt wurden, sollten die Entwickler auf dieses Problem aufmerksam gemacht werden, um Möglichkeiten zur Vermeidung großer Zeitunterschiede bei Anmeldevorgängen gefunden werden. Ist man nicht Eigentümer des Codes, wie es bei kommerzieller Standardsoftware der Fall ist, wird die Sache komplizierter.

Neben der Behebung der eigentlichen Ursache sollte einige weitere Kontrollen eingebaut werden, um das Risiko eines unbefugten Zugriffs zu verringern. Die effektivste Kontrolle wäre die Implementierung einer Multi-Faktor-Authentifizierung (MFA) für alle Ihre offenen Anmeldeschnittstellen. Selbst wenn ein Angreifer über die Liste der aufgezählten Benutzernamen Zugriff auf gültige Anmeldedaten erhalten würde, bräuchte er diesen zweiten Faktor, um sich Zugang zu verschaffen.

Alternativ dazu können strenge Kontosperren und eine strenge Passwortrichtlinie die Widerstandsfähigkeit gegen Passwortangriffe erhöhen. Eine Kennwortrichtlinie mit einer Mindestlänge und die Einrichtung einer Kennwort-Disallowlist, die verhindert, dass Benutzer extrem schwache Kennwörter festlegen, kann dazu beitragen, unbefugten Zugriff zu verhindern.

Sollten die Angriffe nicht verhindert werden können, sollte man sie zumindest überwachen. Stellen Sie sicher, dass Ihre Monitoring-Umgebung so konfiguriert ist, dass sie mehrere ungültige Authentifizierungsversuche aus einer einzigen Quelle unabhängig vom Benutzernamen erkennt, sodass Anfragen von dieser IP-Adresse für eine bestimmte Zeit gesperrt werden.

Fazit

In diesem Blogbeitrag haben wir erklärt, wie ein solcher Angriff stattfinden kann, auf was geachtet werden muss und wie man diese Angriffe verhindern kann.

Die Enumerierung von Nutzernamen ist eine sehr weitverbreitete Schwachstelle, die nicht immer dadurch behoben werden kann, dass man einfach sicherstellt, dass die Anwendung in Situationen, in denen der Benutzername existiert und nicht existiert, gleich reagiert. Die trivialste Lösung für diese Schwachstelle wäre, dass auch für Konten, die nicht existieren, eine Passwortvalidierung durchgeführt wird.

Das Risiko dieser Schwachstelle ist jedoch stark abhängig von den verwendeten Methoden zur Authentifizierung bzw. von der verwendeten Passwortrichtlinie.

Kontakt

Neugierig? Überzeugt? Interessiert?

Vereinbaren Sie ein unverbindliches Erstgespräch mit einem unserer Vertriebsmitarbeiter. Nutzen Sie den folgenden Link, um einen Termin auszuwählen: