Sonntag, 12. Februar 2012 |
Statt beim Session Hijacking die Session ID eines Benutzers auszuspähen, kann ein Angreifer ihm auch seine eigene Session ID unterschieben und authentifizieren lassen. Ein solcher Angriff wird als Session Fixation bezeichnet. Wie so ein Angriff funktioniert und wie Sie ihn verhindern können, erfahren Sie dieser Folge.
Als Session Fixation (dt. etwa "Sitzungsbindung") wird ein Angriff bezeichnet, bei dem der Angreifer eine eigene Session erstellt und deren ID dann von einem anderen Benutzer authentifizieren lässt. Im Folgenden wird der Angriff gleich anhand eines Beispiels beschrieben.
login.asp login.asp?session=34fgfash6f4fss3 login.asp?session=34fgfash6f4fss3 dem
Benutzer unterschieben login.asp?session=34fgfash6f4fss3&name=ich&pass=geh31m
drin.asp?session=34fgfash6f4fss3 tuwas.asp?session=34fgfash6f4fss3
Der kritische Punkt dabei ist das Unterschieben der vorbereiteten Session. Je nachdem, wie die Webanwendung die Session IDs speichert, gibt es dafür zwei gebräuchliche Methoden:
http://www.beispiel.example/login.cgi?session=...,
kann der Angreifer dem Benutzer diesen URL z.B. in einer E-Mail
zuschicken und ihn über Social Engineering dazu verleiten, diesen URL
anzuklicken. N E U ! Security
aktuell
Täglich aktuelle Security-Infos!
Ein gutes Ziel für Session-Fixation-Angriffe sind
Webmail-Anwendungen.
Aber nicht nur Webanwendungen, die eine Authentifizierung erfordern,
können über Session Fixation angegriffen werden. Z.B. könnte
eine Anwendung die Eingabe sensitiver Informationen erfordern, die auf
einer Übersichtsseite zusammengefasst werden. Im Beispiel aus About
Security
#153
wäre das die Abschlussseite
http://www.shop.example/abschluss.cgi mit der
Zusammenfassung
der Bestellung samt Zahlungsinformationen. Ein Angreifer könnte nach
einem Session-Fixation-Angriff diese Seite aufrufen und die
Informationen
ausspähen.
Wie beim Session Hijacking muss ein Angreifer die Session ID
identifizieren, bevor er den Angriff durchführt. Entsprechend gilt
hier dasselbe wie in About Security
#155
beschrieben. Ob die Anwendung über Session Fixation angreifbar ist,
ergibt ein einfacher Test: Wie verhält sich die Anwendung, wenn man
sie mit einer vorhandenen Session ID aufruft? Beginnt die Nutzung der
Webanwendung normalerweise durch den Aufruf von
http://www.beispiel.example/, woraufhin die
Webanwendung mit
http://www.beispiel.example/index.php?session=[gültige
ID] antwortet, beginnt man nun direkt mit dem Aufruf eines
URL mit
gültiger Session ID. Übernimmt die Anwendung diese ID, besteht
Gefahr. Um sicher zu gehen, meldet man sich nun bei der Webanwendung
an.
Wird die anfangs übergebene Session ID beibehalten, ist ein Angriff in
der Tat möglich.
Um Session Fixation zu verhindern, muss jedes Mal, wenn sich ein Benutzer authentifiziert, eine neue, zufällig erzeugte Session ID vergeben werden. Dasselbe gilt, wenn ein anonymer Benutzer das erste Mal persönliche Daten oder sensitive Informationen eingegeben hat.
Manche Anwendungen akzeptieren beliebige Session IDs – auch solche, die sie nicht ausgegeben haben. Für den Angreifer entfällt damit der Schritt, sich eine gültige Session ID beschaffen zu müssen. Stattdessen kann er dem Benutzer gleich eine beliebige Session ID unterschieben, was den Angriff noch etwas erleichtert. Daher sollten nur selbst ausgegebene Session IDs akzeptiert werden. Bei einem Zugriff mit einer nicht von der Anwendung erzeugten Session ID muss die Session ID verworfen und der Session eine neu erzeugte ID zugewiesen werden.
Ebenso unsicher ist die Möglichkeit mancher Webanwendungen, eine abgelaufene Session mit bekannter Session ID zu reaktivieren. Stattdessen muss eine neue Session mit neuer Session ID und dem gespeicherten Zustand erzeugt werden. Sonst könnte ein Angreifer gültige Session IDs sammeln und diese später reaktivieren.
Verwenden mehrere Benutzer die gleiche Session ID, kann das über den Referer Header erkannt werden: Stimmt die beobachtete Reihenfolge der URL-Aufrufe nicht mit der normalen Reihenfolge überein, findet entweder ein URL-Jumping-Angriff statt (siehe About Security #153), oder ein anderer Benutzer verwendet die gleiche ID.
Mit der Session Fixation endet die Suche nach zustandsbasierten Angriffen. Ab der nächsten Folge geht es um Angriffe über vom Benutzer gelieferte Daten. Zuerst erfahren Sie, wie Sie Cross-Site-Scripting-Schwachstellen finden.
Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!
About Security – Übersicht zum aktuellen Thema "Schwachstellensuche – II. Zustandsbasierte Angriffe"