Donnerstag, 18. August 2011


Topthema

Mittwoch, 30. September 2009 | Topthema

About Security #224: Schwachstellen-Suche: Authentifizierung - "Remember me"

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/051574)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Manchmal muss ein Angreifer gar nicht die Login-Funktion angreifen, um sich Zugriff zu einer Webanwendung zu verschaffen. Stattdessen nutzt er die "Remember me"-Option vieler Webanwendungen.

"Remember me"

Viele Webanwendungen bieten dem Benutzer die Möglichkeit, ohne Eingabe von Benutzername und Passwort Zugriff auf die Webanwendung zu erlangen, wenn er sie von einem bestimmten Rechner aus aufruft. Eine Funktion, die ihm ohne Eingabe von Benutzername und Passwort Zugriff auf die Webanwendung gewährt - das ist doch genau das, was ein Angreifer möchte. So eine Funktion muss also besonders sicher implementiert werden. Leider ist oft das Gegenteil der Fall und die Funktion ist schon vom Design her unsicher. Oft sogar so, dass sie nicht nur lokal, sondern auch aus der Ferne missbraucht werden kann.

Grundsätzliches Problem: Vertraue nie dem Client

Die "Remember me"-Funktion leidet an einem grundsätzlichen Problem: Sie verstößt gezwungenermaßen gegen den wichtigsten Grundsatz der Web-Sicherheit: Vertraue nie dem Client. Alle vom Client gelieferten Daten können manipuliert sein. Das Problem läßt sich aber in diesem Fall nicht umgehen: Wenn man den Client erkennen möchte, muss man dafür schon von ihm gelieferte Daten verwenden.

Persistenter Cookie - persistente Schwachstelle

Die einzige Möglichkeit, dauerhaft Daten auf dem Client zu speichern, bietet ein persistenter Cookie (wenn man von der aufkommenden Möglichkeit einer lokalen SQL-Datenbank auf dem Client absieht). Er ist also die einzige Möglichkeit, einen bestimmten Client wiederzuerkennen.

Manche Webanwendungen implementieren die "Remember me"-Funktion einfach, indem sie einen persistenten Cookie mit dem Benutzernamen des Benutzers anlegen, z.B. RememberUser=donaldduck. Wird dieser Cookie an die Startseite übertragen, erkennt die Webanwendung den betreffenden Benutzer und richtet ihm sofort, ohne vorherige Authentifizierung, eine neue Session ein. So einen Cookie muss ein Angreifer nicht einmal ausspähen, um sich anzumelden - er muss nur den Benutzernamen kennen. Mit einer Liste bekannter oder üblicher Benutzernamen kann der Angreifer sich also problemlos Zugriff zur Webanwendung verschaffen, ohne der Authentifizierungsfunktion auch nur nahe zu kommen.

Andere Webanwendungen verwenden statt des Benutzernamens eine Benutzer-ID. Wird der Cookie an die Startseite übertragen, ermittelt die Webanwendung den zugehörigen Benutzer und richtet ihm eine neue Session ein. Ist diese Benutzer-ID bekannt oder kann sie vom Angreifer berechnet oder erraten werden, kann er sich damit sofort Zugriff auf die Webanwendung verschaffen. Im Prinzip entspricht der Angriff in diesem Fall dem in About Security #155 und #156 beschriebenen Session-Hijacking. Der Unterschied zwischen dem Ausnutzen der "Remember me"-Funktion und dem Session-Hijacking ist der Zeitraum, in dem die erlangten Informationen verwendet werden können: Die beim Session-Hijacking angegriffene laufende Session wird i.A. nach einer gewissen Zeit der Untätigkeit beendet, wodurch der Angreifer eine erlangte Session-ID nur für einen normalerweise relativ kurzen Zeitraum nutzen kann, während die für die "Remember me"-Funktion verwendete Information normalerweise für einen deutlich längeren Zeitraum gültig ist. Und während man beim Session-Management zusätzlich die IP-Adresse als Identifizierungsmerkmal hinzuziehen kann, die sich während einer laufenden Session nicht ändern sollte, ist das für die "Remember me"-Funktion nicht möglich, da der Rechner des Benutzers zwischen zwei Sessions durchaus eine neue IP-Adresse bekommen haben kann.

Sichere Variante nicht zwingend sicher

Ein Angreifer darf keine Möglichkeit haben, die gespeicherte Information zur Erkennung des Benutzers zu erraten und/oder sich durch eine manipulierte Information Zugang zur Webanwendung zu verschaffen. Aber selbst wenn die gespeicherte Information ausreichend geschützt ist, z.B. weil es sich um eine nicht vorhersagbare Zufallszahl handelt oder weil sie verschlüsselt wurde, kann sie noch z.B. über einen Cross-Site-Scripting-Angriff ausgespäht und danach vom Angreifer von dessen Computer aus als Identifikationsmerkmal an die Webanwendung geschickt werden.

Schwachstellen suchen

Um die "Remember me"-Funktion zu prüfen, wird sie für ein vom Tester kontrolliertes Benutzerkonto aktiviert und danach erst einmal geprüft, ob sich die Webanwendung wirklich vollständig an den Benutzer "erinnert" und ihm sofort den Zugriff erlaubt, oder ob sie sich nur den Benutzernamen merkt und das Passwort trotzdem abfragt. Wird das Passwort abgefragt, ist die größte Gefahr schon mal gebannt. Ein sehr kleines Problem bleibt: Ein Angreifer kann so evtl. über einen XSS-Angriff an einen gültigen Benutzernamen gelangen. Und natürlich muss die Login-Funktion auch gegen alle anderen Angriffe auf die Authentifizierung abgesichert sein. Aber sofern die normale Anmeldeseite verwendet wird und darin nur der Benutzername schon ausgefüllt ist, sollte das zutreffen.

About Security: Die komplette Serie

Wenn die Funktion den Benutzer vollständig erkennt, stellt sich die Frage, woran sie das tut. Alle persistenten Cookies müssen untersucht werden. Einer davon muss den Benutzer eindeutig identifizieren. Lässt sich der Wert dieses Cookies berechnen oder vorhersagen?

Auch wenn die Daten wie verschlüsselte, getarnte oder zufällige Werte aussehen, ist vielleicht ein Angriff möglich. Dazu werden die Ergebnisse der "Remember me"-Funktion mehrerer sich ähnelnder Benutzernamen und/oder Passwörter gesammelt und analysiert. Wie solche Werte untersucht werden, wird in einer zukünftigen Folge beschrieben.

Wurde der Cookie identifiziert, wird der Wert probeweise manipuliert. Ist es möglich, sich als anderer Benutzer auszugeben?

In der nächsten Folge geht es um weitere mögliche Schwachstellen in der Authentifizierung: Die "User Impersonation"-Funktion mancher Webanwendungen, mit denen ein privilegierter Benutzer die Identität eines anderen Benutzers annehmen kann, um dann Aktionen in dessen Benutzerkontext auszuführen.

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