Dienstag, 2. Dezember 2008

News

präsentiert von: entwickler.com
Donnerstag, 8. Mai 2008

About Security #154: Schwachstellensuche: Der Referer Header

Auch die Nutzung des Referer Headers schützt die Webanwendung nicht zuverlässig vor URL Jumping. Wieso das so ist und wie Sie eine Webanwendung vor solchen Angriffen schützen können, erfahren Sie in dieser Folge.

Der Referer Header

Ein HTTP-Request für eine Seite aus dem in About Security #153 eingeführten Beispiel könnte folgendermaßen aussehen:

GET /abschluss.cgi HTTP/1.1
Host: www.shop.example
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) [...]
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: de-de
Connection: keep-alive
Referer: http://www.shop.example/zahlen.cgi
Bedeutung der Header-Felder

Die Header-Felder haben folgende Bedeutung: Über die GET-Methode wird die Seite /abschluss.cgi vom Host www.shop.example angefordert. Der User-Agent, der den Webbrowser des Benutzers identifiziert, ist in diesem Fall uninteressant, ebenso die verschiedenen Accept- und der Connection Header. Von Interesse ist der Referer Header: Von wo wurde auf die angeforderte Seite verwiesen? In diesem Fall ist das
http://www.shop.example/zahlen.cgi

Wäre der Benutzer z.B. über Google zur angeforderten Seite gekommen, könnte der Referer Header wie folgt aussehen:
http://www.google.com/search?client=safari&rls=de-de&
q=Bestellung+abschließen&ie=UTF-8&oe=UTF-8

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

Der Referer Header wird vom Webbrowser automatisch gesetzt, ist aber nicht immer vorhanden: Stammt der Link aus den Bookmarks oder wurde er direkt in die Adresszeile eingegeben, gibt es keinen Referer und damit auch keinen entsprechenden Header-Eintrag.

HTTP-Request- und -Response-Header können Sie sich z.B. beim Web-Sniffer ansehen.

Woher kommst Du?

Wenn man wissen möchte, ob ein Benutzer vor dem Aufruf einer Seite auf einer bestimmten anderen Seite war, bietet sich auf den ersten Blick die Prüfung des Referer Headers an: War der Benutzer vor dem Aufruf von abschluss.cgi auf zahlen.cgi, steht im Referer-Header http://www.shop.example/zahlen.cgi, ansonsten etwas anderes oder nichts.

Beim Aufruf einer Seite B, die erst nach der Seite A aufgerufen werden darf, muss also nur der Referer Header geprüft werden. Steht darin die vorhergehende Seite A, wird die neue Seite ausgeliefert, ansonsten gibt es eine Fehlermeldung.

Wirklich?

Soweit, so gut. Dieser Ansatz funktioniert so lange, wie der Referer Header den korrekten Wert enthält. Das ist aber nicht zwingend der Fall. Manche Browser senden den Referer Header aus Datenschutzgründen nicht mit, und auch Proxies können ihn aus demselben Grund aus dem Request löschen. Noch kritischer sind Manipulationen durch einen Angreifer. Da der Referer Header vom Webbrowser gesetzt wird, kann er vom Angreifer nicht einfach im Browser oder der herunter geladenen Seite manipuliert werden. Während der Übertragung ist er jedoch ungeschützt und kann z.B. in einem Proxy wie Paros manipuliert werden. Außerdem kann der Angreifer jederzeit einen eigenen Client verwenden, der die Header nach seinen Vorgaben setzt. Im Rahmen von CSRF-Angriffen ist auch die Manipulation der Header über Flash (Korrektur) oder XMLHttpRequests bekannt, siehe auch About Security #128.

Der Referer Header ist also ebenfalls keine gute Wahl, wenn die zuvor besuchte Seite ermittelt werden soll.

About Security: Die komplette Serie
URL Jumping verhindern

Um URL Jumping zu verhindern, muss die Reihenfolge der Seitenaufrufe überprüft werden. Dazu muss die jeweils zuvor besuchte Seite gespeichert werden. Wie in About Security #153 und oben zu sehen war, ist der Client dafür nicht geeignet: Ein Angreifer kann alle dort gespeicherten Informationen mit mehr oder weniger viel Aufwand nach Belieben manipulieren. Daher muss die Information, welche Seite ein Benutzer zuletzt besucht hat, auf dem Server gespeichert werden.

Kann oder soll die zuletzt besuchte Seite nicht auf dem Server gespeichert werden, ist die Prüfung des Referer Headers die beste der verfügbaren Möglichkeiten. Der Parameter ist zwar nicht sicherer als die anderen, aber unauffälliger. Wenn die Webanwendung einen Cookie setzt oder einen Parameter in einem Formular oder der URL überträgt, ist das immer ein Hinweis darauf, dass irgend etwas für den Angreifer interessantes damit passiert. Der Referer Header wird jedoch automatisch mit jedem Request mitgeschickt. Ob er von der Webanwendung ausgewertet wird oder nicht, ist für den Angreifer nicht direkt ersichtlich. Das ist aber keine Garantie dafür, dass ein Angreifer die Schutzfunktion nicht trotzdem erkennt und umgeht.

Identifikation des Benutzers

Hier wie auch bei vielen zuvor besprochenen Angriffen müssen als Gegenmaßahme Informationen auf dem Server statt auf dem Client gespeichert werden. Das ist relativ einfach zu realisieren: Für jeden Benutzer werden die entsprechenden Informationen temporär im Programm oder auch längerfristig in einer Datei oder Datenbank gespeichert. Das führt zu neuen Fragen: Wie erkennt bzw. unterscheidet man die Benutzer, und ergibt das neue Angriffspunkte? Die Antworten auf diese Fragen erhalten Sie in der nächsten Folge.

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

Ihre Meinung ist uns wichtig!
Mobile Computing Heute & Morgen!
Nehmen Sie an unserer Umfrage zum Thema Mobile Computing in Deutschland teil und nutzen Sie die Chance eine Casio Exilim EX-Z1050-Digitalkamera zu gewinnen!

Konferenzen

BASTA! Spring 2009

BASTA! Spring 2009

23.-27. Februar 2009
Maritim Rhein-Main Hotel Wissenschaftsstadt 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

webinale 09

webinale 09

25.-27. Mai 2009
Berlin

Werbung
Top-Jobs

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (m/w)

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit

Signsoft GmbH

Java-Entwickler (m/w)
JAX 09

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

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