Dienstag, 4. Mai 2010


Topthema

Donnerstag, 9. Juli 2009 | Topthema

About Security #212: Schwachstellen-Suche: Proxy-Server

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/049794)

Arbeitet der Webserver auch als Forward-HTTP-Proxy-Server, kann er unter Umständen als Hilfsmittel für weiterführende Angriffe dienen: Auf andere Server im Internet, auf andere Server im internen Netz oder auf andere Dienste auf dem Webserver selbst.

Angriffe auf andere Server im Internet

Ein Angreifer kann über den Webserver bzw. genauer den Forward-HTTP-Proxy-Server evtl. andere Server im Internet angreifen, diese Angriffe gehen für das Angriffsziel dann vom Proxy-Server aus.

Es gibt zwei Möglichkeiten, um einen Forward-Proxy zum Aufbau von Verbindungen zu bewegen. Eine Möglichkeit ist das Senden eines HTTP-Requests mit einer vollständigen URL stammt Hostnamen und ggf. Port:

GET http://www.fremder-server.example:80/ HTTP/1.0


HTTP/1.1 200 OK
...

Wurde der Server so konfiguriert, das er einen Request zum betreffenden Server weiterleiten kann, wird daraufhin die Antwort dieses Servers zurückgeliefert. Bei einem Test mit einem solchen Request muss aber geprüft werden, ob die Antwort wirklich von gewünschten Server kommt und nicht vom als Proxy verwendeten Server selbst. Viele Server akzeptieren Requests mit vollständigen URLs, ignorieren aber den Host- und Port-Teil und beantworten den Request mit ihren eigenen, lokalen Daten.

Die zweite Möglichkeit ist die HTTP-Methode CONNECT, mit der eine Verbindung zum gewünschten Server und Port aufgebaut werden kann:

CONNECT www.fremder-server.example:443 HTTP/1.0


HTTP/1.1 200 Connection established
...

Eine Antwort wie im Beispiel bedeutet, das der Proxy die Verbindung zum Ziel wie gewünscht aufgebaut hat. Danach wird der gesamte folgende Traffic zum und vom Ziel ohne weitere Bearbeitung weitergeleitet, was auch das Tunneln anderer Protokolle und damit Angriffe auf andere Server als HTTP-Server ermöglicht. Viele Proxy-Server schränken jedoch die über die CONNECT-Methode erreichbaren Ports stark ein, oft sind nur Verbindungen zum für HTTPS verwendeten Port 443 möglich.

Angriffe auf andere Server im internen Netz

Ein Angreifer kann vom Proxy-Server aus evtl. auf Server im internen Netz der betreffenden Organisation zugreifen, die aus dem Internet heraus nicht zu erreichen sind.

Sollen Verbindungen zu Servern im internen Netz aufgebaut werden, können über den Proxy-Server entweder IP-Adress-Bereiche nach Webserver-Ports oder eine bestimmte IP-Adresse nach offenen Ports durchsucht werden. Die folgende Request-Response-Kombination bedeutet z.B., das der Port 54321 auf dem betreffenden Server nicht offen ist:

GET http://192.168.1.1:54321 HTTP/1.0


HTTP/1.1 502 Bad Gateway
Content-Length: 345
Connection: Close

...
The proxy server received an invalid response from an upstream server.
...

Die folgende Request-Response-Kombination bedeutet dagegen, das Port 22 offen ist und liefert das zugehörige Service-Banner zurück:

GET http://192.168.1.1:22 HTTP/1.0


HTTP/1.1 200 OK
Connection: Close

SSH-2.0-OpenSSH_4.2
Protocol mismatch.

Die folgende Request-Response-Kombination bedeutet, das der für SUN Remote Procedure Calls verwendete Port 111 offen ist, aber kein Banner ausgegeben wurde:

GET http://192.168.1.1:111 HTTP/1.0


HTTP/1.1 502 Proxy Error
Content-Length: 456
Connection: Close

...
The proxy server could not handle the request GET http://192.168.1.1:111.
Reason: Error reading from remote server
...
Angriffe auf andere Dienste auf dem Webserver

Ein Angreifer kann sich evtl. über den Proxy mit anderen Diensten auf dem Webserver verbinden und dadurch Firewall-Regeln oder durch das Ausnutzen von Vertrauensbeziehungen eine eigentlich erforderliche Authentifizierung umgehen.

Um eine Verbindung mit anderen Diensten auf dem Proxy-Server aufzubauen, wird als Ziel-Server die IP-Adresse 127.0.0.1 des Loopback-Inferfaces verwendet. Die obigen Beispiele unterscheiden sich dann nur durch die geänderte IP-Adresse.

Schwachstellen finden

Sofern beim eigenen Webserver nicht ein Blick in die Konfigurationsdateien ausreicht, um zu prüfen, ob er als Proxy konfiguriert ist oder nicht, müssen alle drei möglichen Angriffe durchprobiert werden:

  • Zuerst wird versucht, sowohl mit der GET- als auch der CONNECT-Methode eine Verbindung zu einem Server im Internet aufzubauen und von dort Daten zu empfangen
  • Danach wird mit beiden Methoden versucht, eine Verbindung zu verschiedenen IP-Adressen und Ports im lokalen Netz aufzubauen
  • Zuletzt wird mit beiden Methoden versucht, zu üblichen Port-Nummern des Webservers selbst eine Verbindung aufzubauen.
Schwachstellen beheben

Ist der Webserver als Proxy konfiguriert, sollte diese Funktion wenn möglich deaktiviert werden. Wird die Proxy-Funktion benötigt, muss sie so weit wie möglich gehärtet werden. Es dürfen nur Verbindungen zu den möglichst genau spezifizierten Servern und Ports erlaubt werden, die für den ordnungsgemäßen Betrieb nötig sind. Zur Kontrolle ausgehender Verbindungen kann zusätzlich eine Filterung auf der Netzwerkebene erfolgen.

In der nächsten Folge werden zum Abschluss des Themenbereichs "Schwachstellensuche im Webserver" mögliche Schwachstellen im virtuellen Hosting und die Absicherung des Webservers beschrieben.

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:

Kommentare

Folgende Links könnten Sie auch interessieren