Paper: Automated Discovery of Parameter Pollution Vulnerabilities in Web Applications Referat von Georg Räß und Kevin Virmani Paper geschrieben von Marco Balduzzi,Carmen Torrano Gimenez,Davide Balzarotti und Engin Kirda verfügbar unter http://www.isoc.org/isoc/conferences/ndss/11/pdf/6_1.pdf
Inhalt Einführung Einordnung des Problems Problembeschreibung HTTP Parameter Pollution Ablauf eines Angriffs Client Side Angriff Server Side Automatische Erkennung von Schwachstellen Modell Theorie Auswirkungen
Einführung Einordnung des Problems Von statischen Inhalten zu dynamischen Daher meist viele Schichten involviert
Einführung Einordnung des Problems stateless HTTP Protokoll -> stateful Anwendung 60% der Angriffe auf die Server bzw. Datenbankebene Datenbankschicht (Server) SQL Injection, LDAP Injection, XML Injection, XPath Injection Command Injection, etc. Anwendungsschicht (Server) Remote File Inclusion, etc. Anwendungsschicht (Client) Cross Site Scripting (XSS), Cookie Stealing, Flash Exploits etc.
Einführung Einordnung des Problems Gegenmaßnahmen Web Application Firewall Sanitization auf Anwendungsebene (zb php filter) Static code analysis Neuartige Angriffe HTTP Parameter Pollution
Einführung Einordnung des Problems HTTP Parameter Pollution Server Side und Client Side Angriffe möglich Der Angreifer kann existierende Variablen überschreiben aber auch neue injizieren
Einführung Problembeschreibung Uniform Resource Identifier laut RFC 3986 Query (Seite 23) : The query component contains non-hierarchical data that, along with data in the path component (Section 3.3), serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The query component is indicated by the first question mark ("?") character and terminated by a number sign ("#") character or by the end of the URI. http://example.com/direcotry/script.jsp?var1=value1#anchor3 HTTP Protokoll erlaubt, dass der selbe Parameter zweimal verwendet wird. Was passiert dann? http://example.com/direcotry/script.jsp?usr=bob&usr=alice
Einführung Problembeschreibung Verarbeitet beide q GET Parameter
Einführung Problembeschreibung sk GET Parameter verantwortlich für dargestellte Unterseite Nur letzter Parameter wird ausgewertet (ff = find friends)
Einführung Problembeschreibung Parameter Handling abhängig von Technologie Dieses Verhalten ist an sich nicht schlimm, wenn es dem Entwickler bewusst ist!
HTTP Parameter Pollution Ablauf Client Side Attacke Manipulation einer Wahl URL: http://host/election.jsp?poll_id=4568 Mit 2 Links auf der Website <a href="vote.jsp?poll_id=4568&candidate=white >Vote for Mr. White</a> <a href="vote.jsp?poll_id=4568&candidate=green >Vote for Mrs. Green</a> Analyse Parameter Aufruf Manipulierte URL à falsche Wahl Manipulierte URL unterschieben Cracker Opfer
HTTP Parameter Pollution Ablauf Client Side Manipulierte URL http://host/election.jsp?poll_id=4568%26candidate%4dgreen (http://host/election.jsp?poll_id=4568&candidate=green) Aufgerufene jsp Website gibt aus: <a href=vote.jsp?poll_id=4568&candidate=green&candidate=white>vote for Mr. White</a> <a href=vote.jsp?poll_id=4568&candidate=green&candidate=green>vote for Mrs. Green</a> Gewinner ist immer Mr. Green!
HTTP Parameter Pollution Weiterführende Beispiele Weitere typische Beispiele für Client Side Attacken Löschen von User Accounts, Emails, etc Manipulationen in sozialen Netzen Posten / Kaufen / Agieren unter fremdem Namen Manipulation von Abstimmungen Typische Beispiele für Server Side Attacken Auslesen von Datenbankinhalten und Dateiinhalten Ändern von Datenbankinhalten
HTTP Parameter Pollution Ablauf Server Side Angriff Beispiel einer Server Side Attacke (php) <?php! $get_param1 = $_GET[ amount ];! $get_param2 = $_GET[ recipient ];!! funtion execreq($get_param1, $get_param2){! $link = "http://abc.com/index.php?action=transfer&amount=".! $get_param1."&recipient=".$get_param2;! include($link); "! }!?>!! Wie wäre hier ein Server Side Angriff möglich?
HTTP Parameter Pollution Ablauf Server Side Angriff o http://abc.com/index.php?amount=1000&recipient=mat %26action%3dwithdraw o action=transfer (aus Server Code) wird mit action=withdraw überschrieben o Anstatt Geld zu überweisen, wird Geld abgebucht o Abhängig von der Reihenfolge der Auswertung und abhängig von der eingesetzten Technik
HTTP Parameter Pollution Das & URL Encode à %26 Double URL Encode à %2526 UTF-8 (2 byte) à %c0%a6 UTF-8 (java style) à \uc0a6 HTML Entitiy à & HTML Entity number à & Unicode URL Encode à %u0026
Automatische Erkennung von Schwachstellen Modell PAPAS Parameter Pollution Analysis System Kann auf HPP Verwundbarkeit scannen
Automatische Erkennung von Schwachstellen P-Scan Theorie Scanner der auf Verdoppelung von vorhandenen Parametern prüft Seiteninhalt analysieren und Parameter merken Page 0 (orginal) à app.php?par1=val1 Page 1 (test 1) à app.php?par1=newval1 Page 2 (test 2) à app.php?par1=val1&par1=newval1 Tests Identitätstest Page0 == Page1 == Page2 à Parameter uneffektiv Base Test Page0 == Page1 oder Page1==Page2 Join Test Sucht Vorkommnisse von Kombinationen Fuzzy Test Prüft Auswertungsreihenfolge mit Fuzzy Logik Error Test Prüft ob Error zurückgegeben wird (Datenbank)
Automatische Erkennung von Schwachstellen Theorie V-Scan Scanner der Einfügen neuer Parameter prüft Alle Parameter einzeln aufrufen mit beliebigem Var/Value Paar Zb app.php?par1=val1%26foo%3dbar Anschließend Seiteninhalt auf Vorkommnisse von foo=bar hin überprüfen,wenn Vorhanden, dann ist par1 zum injizieren geeignet V-Scan extrahiert P URL = [P U1,P U2,P U3...] à Vorkommnisse Parameter in URL P BODY = [P B1,P B2,P B3...] à Vorkommnisse Parameter im <body>
Automatische Erkennung von Schwachstellen Theorie V-Scan P A = P URL P BODY Schnittmenge aller Parameter die im Body und in der URL vorkommen P B = p p P URL p P BODY URL Parameter die nicht im Body vorkommen P C = p p P URL p P BODY Parameter die im Body aber nicht in der URL vorkommen V-Scan injiziert Parameter in der Reihenfolge P A P B P C
Auswirkungen
HTTP Parameter Pollution Speziell HPP Technik kann benutzt werden um WAF und SQL Injection Filter erfolgreich zu umgehen!! Beispiel : /index.aspx?page=select 1,2,3 from table where id=1 Wird erkannt und abgewehrt /index.aspx?page=select 1&page=2,3 from table where id= Wird eventuell NICHT erkannt da die Parameter eventuell nur einzeln auf SQL Injections überprüft werden