Web-Sicherheit

August 27, 2011

HTTP-Parameterverunreinigung, Teil 2

Filed under: Allgemein — sebastiankuebeck @ 06:42
Tags: , , , , , ,

Im Vorigen Teil dieser Serie haben wir die Grundlagen der HTTP-Parameterverunreinigung erörtert und die Eigenheiten der Verarbeitung von Mehrfachparametern besprochen.

Inspiriert von Luca Carettoni und Stefano diPaolas Präsentation untersuchte Ivan Markovic gängige Webtechnologien auf weitere Eigenheiten in der Verarbeitung von HTTP-Parametern und entdeckte unter anderem folgendes:

  • [ und . werden in PHP zu einem _ (Underscore) umgewandelt, wenn sie im Parameternamen vorkommen;
  • NUL (ASCII-Code 0) wird im Parameternamen in PHP und ASP einfach ignoriert, darüber hinaus werden auch alle Zeichen nach NUL im Namen ignoriert;
  • NUL im Parameterwert führt in PHP dazu, dass der Parameter ignoriert wird, in ASP ignoriert die NUL und alle Zeichen danach.

Das Verhalten von ASP deutet übrigens klar darauf hin, das die Parameter in einem nullterminierten String gespeichert wird, wie das in der Programmiersprache C standardmäßig gemacht wird.  Durch das einfügen von NUL wird hier die Endmarkierung (also die 0) außer Kraft gesetzt und durch eine neue ersetzt. Es findet also eine Verwechslung zwischen externen Daten (dem Parameter mit dem Zeichen NUL) und internen (die Null als Markierung des Endes eines Strings) statt, was potentiell immer gefährlich ist!

Ivan Markovic hat alle seine Erkenntnisse in der folgender Tabelle zusammengefasst:

Picture 3 / HPC / Server behavior. Quelle: Ivan Markovic: Http Parameter Contamination, 2011.

Alles gut und schön, aber wie lassen sich diese Beobachtungen nun nutzen?

Wir erinnern uns, das WAFs wie ModSecurity die Eingabe nach gewissen Angriffssignaturen absuchen. So versucht beispielsweise eine Regel in modsecurity_crs_41_sql_injection_attacks.conf zu verhindern, dass jemand die Windows-Komandozeile über eine SQL-Injection-Schwachstelle aufruft. Diese Regel sucht ganz einfach nach der Zeichenkette xp_cmdshell (so heisst die Komandozeile im SQL Server) und blockiert die Anfrage, sollte sie fündig werden.

Nun erinnern wir uns aber, dass die IIS die Zeichen . und [ in _ (Underscore) umwandelt. Wir können daher auch  xp[cmdshell  oder xp.cmdshell in einem Parameter übergeben und die IIS wandelt beides in der Webanwendung in xp_cmdshell um. Leider erkennt die WAF die Varianten xp[cmdshell  oder xp.cmdshell nicht als Angriff und blockiert daher den Aufruf nicht. Und voilà – schon haben wir die WAF erfolgreich umgangen!

Ivan Markovic nennt diese Technik übrigens HTTP Parameter Contamination um sie von Luca Carettonis und Stefano diPaolas Technik HTTP Parameter Pollution zu unterscheiden. Ich werde allerdings in beiden Fällen bei Verunreinigung bleiben, da das ja eigentlich ein Synonym für Kontamination ist.

Im nächsten Teil kommen wir nun endlich zu Dmitry Evteevs Blog-Post, über das ich eigentlich berichten wollte.

Schreibe einen Kommentar »

Es gibt noch keine Kommentare.

RSS feed for comments on this post. TrackBack URI

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Bloggen auf WordPress.com.

%d Bloggern gefällt das: