Donnerstag, 8. Januar 2009

News

präsentiert von: entwickler.com
Donnerstag, 25. Oktober 2007

About Security #128: CSRF: Ausnutzung und Gegenmaßnahmen

Bei einem Angriff über Cross-Site Request Forgery (CSRF) gibt es für den Angreifer mehrere Möglichkeiten, den CSRF-Request so in den Browser eines Benutzers einzuschleusen, dass er ohne weiteres Zutun des Benutzers abgeschickt wird.

Wie wird der CSRF-Request eingeschleust?

Es gibt außer den in About Security #127 genannten Beispielen eine ganze Reihe weiterer Möglichkeiten, einen Benutzer einen HTTP-Request abschicken zu lassen, ohne dass der wie im ersten Beispiel aktiv einen Link anklicken muss. Das Laden einer präparierten Webseite reicht.

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

Der Parameter [CSRF-URL] in den folgenden Beispielen könnte z.B. die Form
http://www.opfer.example/pfad/zum/skript?aktion=boeses
haben.

  • HTML:
    • <img src="[CSRF-URL]">
    • <script src="[CSRF-URL]">
    • <iframe src="[CSRF-URL]">
  • JavaScript:
    • Image-Objekt:
      <script>
      var foo = new Image();
      foo.src = "[CSRF-URL]";
      </script>
    • XMLHttpRequest:
      Mit dem XMLHttpRequest-Request kann auch ein POST-Request ausgelöst werden. Von [CSRF-URL] müssen die Parameter abgetrennt werden: [URL] ist im Folgenden 'http://www.opfer.example/pfad/zum/skript', und [CSRF] ist 'aktion=boeses'.
      <script>
      var post_data = '[CSRF]';
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.open("POST", '[URL]');
      xmlhttp.onreadystatechange = function () {
      if (xmlhttp.readyState == 4) {
      // nichts tun, wir wollen ja nicht auffallen
      }
      };
      xmlhttp.send(post_data);
      </script>
  • Flash
    Amit Klein hat beschrieben, wie mit Flash beliebige HTTP-Header gesendet werden können: 'Forging HTTP request headers with Flash' (Korrektur dazu). Dabei kann insbesondere auch der Referer-Header gefälscht werden.

Außerdem gibt es etliche weitere Möglichkeiten, einen Webbrowser zum Absenden eines HTTP-Requests zu bewegen. Entsprechende Angriffe sind auch nicht auf Webseiten und Webbrowser beschränkt. Jedes Dokumentenformat, das Skripting erlaubt, kann für einen Angriff ausgenutzt werden. Insbesondere also z.B. E-Mails oder Multimediadateien.

Erkennen von CSRF

Ein Webanwendung ist immer dann über CSRF angreifbar, wenn Aktionen über einen statischen URL (GET-Request) oder einen statischen POST-Request ausgeführt werden können, also ein Request, der sich im Laufe der Zeit nicht ändert. Als einfacher Test, ob die eigene Anwendung verwundbar ist oder nicht, können die betroffenen Seiten durchgegangen und alle Requests über einen Proxy wie z.B. Paros aufgezeichnet werden. Später wird das Ganze wiederholt und die aufgezeichneten Requests werden miteinander verglichen. Bleiben die GET- und POST-Requests gleich, ist die Anwendung verwundbar. Änderungen von Cookie-Werten sind unerheblich, da die Cookies vom Webbrowser bei jedem Request automatisch mitgeschickt werden, unabhängig davon, ob er vom Benutzer oder automatisch ausgelöst wurde.

Verhindern von CSRF

Zwei oft genannte Gegenmaßnahmen sind wirkungslos: Das Prüfen des Referer Headers und das ausschließliche Verwenden von POST-Request. Der Referer kann über Flash (s.o.) und XMLHttpRequests gefälscht werden. Ein POST-Request ist zwar etwas schwerer zu fälschen als der nur aus einem Link bestehende GET-Request, mit etwas JavaScript-Code oder einem einfachen XMLHttpRequest kann aber auch ein gefälschter POST-Request abgeschickt werden.

About Security: Die komplette Serie

Eine häufige Schwachstelle sind in diesem Zusammenhang auch Webanwendungen, die nicht darauf achten, wie sie die Daten übermittelt bekommen. Wird z.B. in PHP ['Parameter'] verwendet, kann ein Angreifer die Daten per GET-Request schicken, auch wenn das eigentlich verwendete Formular sie per POST-Request senden würde. Sollen nur Daten aus POST-Requests angenommen werden, muss das durch explizites Verwenden von ['Parameter'] getan werden.

Als wirksame Gegenmaßnahme kann jedes Formular mit einem individuellen, zufällig erzeugten Token versehen werden. Nur Requests mit einem gültigen Token werden ausgeführt. Dadurch kann der Angreifer dem Opfer keinen vorbereiteten gültigen Request unterschieben, sondern muss erst das aktuelle Token ausspähen. In Verbindung mit einer XSS-Schwachstelle in der eigenen Webanwendung oder evtl. einer Schwachstelle im Browser ist aber auch das Ausspähen des Tokens möglich. Sessions sollten daher so kurz wie möglich sein, um das Zeitfenster für einen Angriff zu minimieren. Bei potenziell gefährlichen Aktionen sollte eine Nachfrage ("Aktion ... wirklich ausführen?") oder sogar eine erneute Passwortabfrage erfolgen.

Wichtig ist, dass das Token nicht vorhersagbar ist. Bei einem mit ausreichender Wahrscheinlichkeit vorhersagbaren Token kann der Angreifer einfach mehrere Requests mit möglicherweise passenden Tokens vorbereiten und dem Opfer unterschieben. Der Request mit gültigen Tokens wird vom Server ausgeführt, die anderen verworfen. Ob die präparierte Webseite (oder was sonst für den Angriff verwendet wird) einen oder mehrere vorbereitete CSRF-Requests enthält, ist für den Angriff egal.

Soviel vorerst zu CSRF. In der nächsten Folge geht es erneut um Cross-Site Scripting.

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 "Sichere Webanwendungen – Cross-Site Request Forgery"

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

Volontär (w/m) Redaktion, Vollzeit

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (m/w)

Signsoft GmbH

Java-Entwickler (m/w)

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit
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