Freitag, 22. Oktober 2010


Topthema

Donnerstag, 6. August 2009 | Topthema

About Security #216: Schwachstellen-Suche: Authentifizierung – Namen finden

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/050377)

In About Security #214 und #215 wurden einige mögliche Schwachstellen in der Authentifizierung beschrieben. Im folgenden geht es um die Ausnutzung dieser Schwachstellen, wobei davon ausgegangen wird, das die Authentifizierung durch Eingabe eines Benutzernamens und des dazu gehörigen Passworts erfolgt.

Anmelde-Sperre erkennen

Eine Sperre, die nach eine bestimmten Anzahl fehlgeschlagener Anmeldeversuche einen Benutzernamen ganz oder zeitweise sperrt, erschwert oder verhindert einen Brute-Force-Angriff ebenso wie das automatisierte Ermitteln gültiger Benutzernamen. Um so eine auch als 'Account Lockout Policy' bezeichnete Anmelde-Sperre zu erkennen, gibt ein Angreifer, der Zugriff auf ein Benutzerkonto hat, zuerst eine Reihe falscher Passwörter ein und beobachtet dabei die jeweilige Fehlermeldung der Webanwendung.

Gibt es bis dahin keine Warnung vor einem gesperrten Benutzerkonto, wird nach z.B. 10 fehlgeschlagenen Anmeldeversuchen das richtige Passwort eingegeben. Gelingt damit die Anmeldung, gibt es vermutlich keine Sperre.

Besitzt der Angreifer kein Benutzerkonto, kann er evtl. einen gültigen Benutzernamen ermitteln (dazu unten mehr) oder raten. Dann kann er dafür beliebige Passwörter eingeben und die Antworten der Webanwendung auf Anzeichen für eine Anmelde-Sperre prüfen.

Fehlermeldungen - optisch gleich, aber doch unterscheidbar

Wie in About Security #215 beschrieben, sollten die Fehlermeldungen keine Unterscheidung zwischen gültigen und ungültigen Benutzernamen zulassen. Selbst auf dem ersten Blick identische Texte können jedoch unterscheidbar sein. Dazu können z.B. versteckte Kommentare oder Felder im HTML-Quelltext dienen, unterschiedliche Formatierungen oder einfache Tippfehler.

Unterschiede ermitteln

Kennt der Angreifer einen gültigen Benutzernamen (z.B. seinen eigenen), kann er dafür ein falsches Passwort eingeben und die Antwort der Webanwendung mit der bei Eingabe einer willkürlich gewählten (hoffentlich) nicht existierenden Kombination aus Benutzername und Passwort vergleichen.

Dabei wird jede Reaktion der Webanwendung ausgewertet, wie der angezeigte Text und dessen Quelltext, der Status-Code und evtl. vorhandene Redirects. Danach werden die verschiedenen Reaktionen auf erkennbare Unterschiede untersucht.

Wird in der Login-Funktion kein erkennbarer Unterschied gefunden, wird die Suche danach für jede andere Möglichkeit zur Eingabe eines Benutzernamens wiederholt, z.B. bei der Registrierung neuer Benutzer oder der Funktion zum Anfordern vergessener Passwörter.

Auf das Timing kommt es an

Auch wenn die Ausgaben für gültige und ungültige Benutzernamen vollkommen identisch sind, gibt es manchmal eine Möglichkeit, sie voneinander zu unterscheiden, und zwar wenn die Reaktionszeit der Anwendung für die beiden Möglichkeiten stark genug voneinander abweicht. Wird ein ungültiger Benutzername eingegeben, erfolgt die Antwort, nachdem dies festgestellt wurde. Wird ein gültiger Benutzername eingegeben, muss erst noch das Passwort geprüft werden. Dazu ist evtl. eine weitere Datenbankabfrage nötig, danach folgt evtl. eine Prüfung, ob das betreffende Benutzerkonto abgelaufen oder gesperrt ist oder nicht, bevor endlich das Passwort mit der Eingabe verglichen wird. Entsprechend kann es zu einer vielleicht nicht bei der manuellen Nutzung mit einem Webbrowser, wohl aber durch automatisierte Tools erkennbaren Differenz zwischen den verschiedenen Antwortzeiten kommen. Selbst wenn die Ergebnisse sehr ungenau sind, ist eine Liste mit 100 Benutzernamen, die z.B. mit einer Wahrscheinlichkeit von 50% gültig sind, besser als eine Liste mit 100.000 Benutzernamen, die nur mit einer Wahrscheinlichkeit von z.B. 0,5% gültig sind.

Existierende Benutzernamen ermitteln
About Security: Die komplette Serie

Wird ein Unterschied in den Antworten für gültige und ungültige Benutzernamen erkannt, kann über ein fertiges Tool oder ein selbst erstelltes Skript eine Liste üblicher Benutzernamen daraufhin getestet werden, welche davon vorhanden sind. Dabei muss eine evtl. vorhandene Anmelde-Sperre berücksichtigt werden. Um nicht nutzlos Anmeldeversuche zu verbrauchen, wird als Passwort entweder der zu testende Benutzername oder ein Wert wie "pass123" oder ähnliches verwendet. Gibt es keine Regeln für die Wahl des Passworts oder sind sie zu einfach, wird so mit etwas Glück nicht nur ein gültiger Benutzername gefunden, sonder auch gleich noch das passende Passwort.

Brute-Force-Angriff vorbereiten

Gibt es keine Maßnahmen zur Verhinderung von Brute-Force-Angriffen wie z.B. eine Anmelde-Sperre, kann auf die Passwörter der ermittelten Benutzernamen ein Brute-Force-Angriff gestartet werden. Ist eine Gegenmaßnahme vorhanden, ist das nicht bzw. nicht einfach möglich, da z.B. eine Anmelde-Sperre nicht ausgelöst werden darf. Ansonsten wäre auch mit einem per Brute Force ermittelten korrekten Passwort keine Anmeldung möglich.

In der nächsten Folge wir die Durchführung des Brute-Force-Angriffs beschrieben, außerdem geht es dann um Angriffe auf ungeschützt übertragene Zugangsdaten.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security - Übersicht zum aktuellen Thema:

Kommentare

Folgende Links könnten Sie auch interessieren