Donnerstag, 8. Januar 2009

News

präsentiert von: entwickler.com
Donnerstag, 24. April 2008

About Security #152: Schwachstellensuche: Contra Cookie Poisoning

Wie Sie die in About Security #151 vorgestellten Cookie-Poisoning-Schwachstellen finden und was Sie gegen derartige Angriffe unternehmen können, erfahren Sie in dieser Folge.

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Schwachstellen finden

Wenn Sie eine Webanwendung auf Schwachstellen in der Zustandsverwaltung untersuchen, müssen Sie außer den eigenen Parametern der Webanwendung auch die Parameter prüfen, die vom Webbrowser automatisch an den Server gesendet werden. In diesem Fall ist es die Gültigkeitsdauer der Cookies, später kommen auch noch verschiedene HTTP-Header dazu. Die entscheidende Frage ist wieder: Ändert sich bei einer Manipulation eines solchen Parameters unerlaubt ein Zustand? Bei der Manipulation der Gültigkeitsdauer des Cookies ist das oft nicht sofort ersichtlich, im Beispiel aus About Security #151 würde die erschlichene längere Nutzungsdauer evtl. erst nach dem 16.05. auffallen. Statt so lange zu warten, ist meist ein genauer Blick auf die entsprechenden Programmteile zielführender: Wird die Lebensdauer des Cookies irgendwo als Eingabeparameter verwendet, und wenn ja, wozu?

Wurden Schwachstellen gefunden, geht es an deren Beseitigung:

Cookie Poisoning verhindern...

... ist unmöglich: Die Cookies werden auf dem Client gespeichert, und ein Angreifer kann alle auf dem Client gespeicherten Daten nach Belieben manipulieren. Und das gilt nicht nur für seinen eigenen Client, sondern mit Einschränkungen auch für die Daten eines normalen Benutzers. Cross-Site Scripting und Cross-Site Request Forgery sind in diesem Zusammenhang die bekanntesten Probleme. Cookies lassen sich außerdem über das sog. Cross-Site Cooking manipulieren. Dabei nutzt der Angreifer eine Schwachstelle im Webbrowser aus, um einen Cookie für eine andere Domain zu setzen. Während normalerweise der Webserver von boese.example keinen Cookie für eine andere Domain, z.B. gut.example, setzen darf, führt eine Schwachstelle dazu, das ein solcher Cookie gesetzt werden kann.

Den Erfolg des Cookie Poisonings verhindern...

... ist eine erfolgversprechendere Strategie: Da man eine Manipulation der Cookies nicht verhindern kann, muss man die Folgen der Manipulation verhindern oder zumindest einschränken.

Dabei gilt wie immer: Den vom Client gelieferten Daten darf nicht vertraut werden. Wenn ein Benutzer z.B. nur für einen bestimmten Zeitraum auf die Anwendung zugreifen darf, dann muss die entsprechende Information auf dem Server gespeichert (und natürlich auch geprüft) werden. Das Gleiche gilt für die Anzahl durchgeführter Login-Versuche sowie alle anderen derartigen Fälle: Wann immer möglich, sollten Zustandsinformationen auf dem Server gespeichert werden.

About Security: Die komplette Serie
Manipulationen erkennen

Ist eine Speicherung der Daten auf dem Client unumgänglich, muss eine Manipulation des Parameters erkannt werden. Die Frage ist nur, wie. Im Folgenden soll der zu schützende Parameter foo heißen.

Um Manipulationen an Daten zu erkennen, verwendet man normalerweise Authentikationssysteme (siehe About Security #66). Dabei wird, vereinfacht ausgedrückt, eine Prüfsumme berechnet, zusammen mit den Daten gespeichert und später mit der erneut berechneten Prüfsumme verglichen. Wurden die Daten manipuliert, stimmen die beiden Werte nicht überein. Die Webanwendung müsste also für alle ausgegebenen foo Prüfsummen berechnen und diese zusammen mit foo speichern. Sendet später ein Client ein foo samt Prüfsumme an den Server, würde die Prüfsumme erneut berechnet und mit der gespeicherten verglichen. Stimmen die Werte überein, wurde foo nicht manipuliert. Das ist ziemlich aufwändig: Statt eines Werts müssen nun zwei auf dem Client gespeichert und von der Webanwendung ausgewertet werden.

Authentikationssysteme sind in diesem Fall also nicht die erste Wahl. Wie sieht es denn mit Konzelationssystemen (siehe About Security #66) aus? Würde eine Verschlüsselung der Daten zum gewünschten Ergebnis führen? Spielen wir das doch mal durch:

1. Die Webanwendung verschlüsselt foo, bevor sie den Parameter an den Client sendet
2. Der Client speichert den verschlüsselten Wert in einem Cookie
3. Der Client sendet den gespeicherten Wert im Rahmen eines Requests an den Server
4. Die Webanwendung entschlüsselt den empfangenen Wert und verwendet das Ergebnis als foo

OK, das funktioniert. Und was passiert, wenn ein Angreifer den Cookie manipuliert?

3. Der Angreifer manipuliert den Wert und sendet ihn dann an den Server
4. Die Webanwendung versucht, den empfangenen Wert zu entschlüsseln. Das schlägt fehl – und damit auch der Angriff

Fazit: Wenn Sie die Daten vor der Übertragung an den Client verschlüsseln, kann der Angreifer sie nicht manipulieren. Eine Manipulation führt dann nur dazu, dass es beim Entschlüsseln zu einem Fehler kommt und der manipulierte Wert verworfen wird.

Dass auch die Verschlüsselung nicht vor jedem Angriff schützt, werden Sie in zukünftigen Folgen noch sehen. In der nächsten Folge wird ein weiterer zustandsbasierter Angriff auf die Webanwendung behandelt: Das URL Jumping, bei dem ein Angreifer die vorgesehene Reihenfolge der besuchten Seiten verlässt.

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 "Schwachstellensuche – II. Zustandsbasierte Angriffe"

Kommentare

dot.net Code Camp C# 3.5

Konferenzen

BASTA! Spring 2009

BASTA! Spring 2009

23.-27. Februar 2009
Maritim Rhein-Main Hotel Wissenschaftsstadt Darmstadt

Entwicklertage 2009

Entwicklertage 2009

23.-27. Februar 2009
Darmstadt

BASTA! Italia 2009

BASTA! Italia 2009

16.-18. März 2009
Holiday Inn EUR Parco dei Medici, Roma

PHPCon Italia 2009

PHPCon Italia 2009

18.-20. März 2009
Holiday Inn EUR Parco dei Medici, Roma

JAX 09

JAX 09

20.-24. April 2009
Rheingoldhalle Mainz

Eclipse Forum Europe 09

Eclipse Forum Europe 09

20.-24. April 2009
Rheingoldhalle Mainz

webinale 09

webinale 09

25.-27. Mai 2009
Berlin

RailsWayCon

RailsWayCon

25.-27. Mai 2009
Berliner Congress Center, Alexanderplatz, Berlin

Werbung
Top-Jobs

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit

Signsoft GmbH

Java-Entwickler (m/w)

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (m/w)
Entwickler Tage

Magazine

Entwickler Magazin - Enterprise Technologies & Business Solutions

Entwickler Magazin

Enterprise Technologies & Business Solutions

dot.net magazin - die unabhängige Quelle für .NET-Technologien

dot.net magazin

Die Quelle für .NET-Technologien

Eclipse Magazin

Eclipse Magazin

Weltweit erstes Magazin für Eclipse-Entwickler

Java Magazin - Internet & Enterprise Technology

Java Magazin

Internet & Enterprise Technology

Ruby on Rails

RailsWay Magazin

Ruby on Rails

CREATE OR DIE - Ein Leben für die Kreativität

CREATE OR DIE

Ein Leben für die Kreativität

Business Technology - Management Magazin

Business Technology

Management Magazin

PHP Magazin - Professional PHP Development

PHP Magazin

Professional PHP Development

Bücher


hosted by HostEurope