X-Forwarded-For und Cookies

Tag zusammen,
ich teste zur Zeit ein wenig rum mit Cookies in einem phpBB Board. Dabei ist mir aufgefallen, dass man mit einer neuen IP auch ausgeloggt ist also hab ich mir mal die Daten angeguckt die dabei verschickt werden. Der Browser sendet natürlich noch die Cookies die die Session identifizieren, dass scheint den Server aber nicht zu interessieren. Mir ist beim rumexperimentieren aufgefallen, dass der User-Agent wohl auch eine Rolle spielt. Dann hab ich gelesen, dass der Server wohl einen IDHash anlegt der abhängig vom User-Agent + IP ist. Die IP kann man jetzt schlecht spoofen, da sonst die Pakete vom Server ins Nirvana geschickt werden. Dann hab ich gelesen, dass es wohl mit einem X-Forwarded-For im Header gehen könnte. Also hab ich einfach dem Paket vorm abschicken ein X-Forwarded-For hinzugefügt indem als erstes die alte IP von mir steht und als Proxy meine neue. Muss man dabei noch was beachten oder werten nicht alle Server/Boards den X-Forwarded-For im Header aus? Der Server soll durch das Paketa denken, dass ich das ganze von meiner alten IP aus gesendet habe, so dass ich immer noch eingeloggt bin.

P.S: Klar kann ich mich einfach neu einloggen, aber es ist eine Frage der Interesse und der Sicherheit.
 
Schöne Idee, aber wenn du das Problem mal aus dem Blickwinkel eines Software-Entwicklers betrachtest, wirst du feststellen, dass deine X-Forwarded-For-Spielereien nichts bringen...

Ausgewertet werden - die Vermutung stelle ich jetzt, ohne den phpBB-Code anzuschauen, einfach mal in den Raum, da es die geläufigste Variante ist - die Daten $_SERVER['REMOTE_ADDR'] und $_SERVER['USER_AGENT']...

In $_SERVER['USER_AGENT'] steht die Browser-Kennung
(das lässt sich ja noch manipulieren...)

In $_SERVER['REMOTE_ADDR'] steht die IP-Adresse des anfragenden Rechners - und die lässt sich nicht manipulieren.

Wenn du über einen Proxy surfst, dann steht dort die IP des Proxys drin.

Die X-Forwarded-For-Daten stehen in $_SERVER['HTTP_X_FORWARDED_FOR'] und werden entweder zusätzlich für den Hash verwendet oder einfach ignoriert.

Ob $_SERVER['HTTP_X_FORWARDED_FOR'] mitbenutzt werden, bekommst du heraus, indem du über einen Proxy surfst und zwischendurch dich neu einwählst, aber weiterhin über den gleichen Proxy surfst.
 
In $_SERVER['REMOTE_ADDR'] steht die IP-Adresse des anfragenden Rechners - und die lässt sich nicht manipulieren.

Das man die IP nicht einfach manipulieren kann schrieb ich selber bereits ;-).

Es war jedoch ein Beitrag bei gulli der darauf hinwies und dort las ich es sich so, als ob der Server dann dort einfach die Adresse aus dem X-Forwarded-For nehmen würde. Ich zitiere einfach mal Kugelfisch ausm gulli Board:
Der IP-Check hilft allerdings kaum, das Übernehmen von Sessions durch einen Angreifer, der deinen Traffic mitschneiden kann, zu verhindern, da dieser (wenn er nicht ohnehin unter deiner IP-Adresse agieren kann) schlicht einen falschen X-Forwarded-For-Header setzen könnte und vBulletin diesem vertraut.

Also stimmt es an für sich gar nicht was er dort geschrieben hat?

Ich hätte das ganze jetzt nämlich soweit interpretiert, dass wenn man über einen Proxy reingeht der X-Forwarded-For Eintrag im Header mit der Orginal Client-IP drin steht und diese IP wird dann benutzt damit die Session nicht auf den Proxy "registriert" wird, sondern auf den tatsächlichen Clienten. Könnte es das nicht zusätzliche Gefahren bringen, wenn die Sessions dann auf der IP des Proxys laufen? Wenn jemand die Cookies mitsniffen könnte bräuchte er dann nur noch den selben Proxy zu benutzen, es sei denn wie von dir angesprochen der X-Forwarded-For Eintrag wird mitbenutzt. Aber OK, dass ganze ist sowieso mehr theoretisch, da praktisch ein Angreifer meistens sowieso über die gleiche IP surfen kann, wenn er den Traffic schon mitsniffen kann.

BTW: Wenn ich über einen Proxy eine Seite Aufrufe steht doch auch in $_SERVER['REMOTE_ADDR'] wohl die Adresse des Proxys oder? Für die Orginal IP gibts dann eben dieses X-Forwarded-For Feld im Header.

EDIT: Fast das wichtigste vergessen: Vielen Dank schonmal!
 
Es war jedoch ein Beitrag bei gulli der darauf hinwies und dort las ich es sich so, als ob der Server dann dort einfach die Adresse aus dem X-Forwarded-For nehmen würde.
[...]
Also stimmt es an für sich gar nicht was er dort geschrieben hat?

In dem von dir zitierten Beitrag ging es um vBulletin - gut möglich, dass es dort wiederum ganz anders gehandhabt wird...
Oder er hat sich einfach nur dämlich ausgedrückt... oder tatsächlich einfach Mist erzählt... wer weiß.

Ich hätte das ganze jetzt nämlich soweit interpretiert, dass wenn man über einen Proxy reingeht der X-Forwarded-For Eintrag im Header mit der Orginal Client-IP drin steht und diese IP wird dann benutzt damit die Session nicht auf den Proxy "registriert" wird, sondern auf den tatsächlichen Clienten.

BTW: Wenn ich über einen Proxy eine Seite Aufrufe steht doch auch in $_SERVER['REMOTE_ADDR'] wohl die Adresse des Proxys oder? Für die Orginal IP gibts dann eben dieses X-Forwarded-For Feld im Header.

richtig. aber anstatt zu interpretieren oder zu mutmaßen... einfach mal selbst testen! ;-)
lade einfach mal folgendes PHP-Script auf deinen Webspace:
PHP:
<?php
echo '<pre>';
print_r($_SERVER);
echo '/<pre>';

oder
PHP:
<?php
var_dump($_SERVER);

jetzt gehst du ganz normal mit dem Browser drauf und findest als Ausgabe unter anderem ein Feld "REMOTE_ADDR", welches deiner IP entspricht.

Als nächstes suchst du dir auf einer dieser unzähligen Proxy-Listen-Seiten (z.B. hier) einen transparenten Proxy und aktualisierst die Seite...

unter "REMOTE_ADDR" findest du die IP des Proxy-Servers, unter "HTTP_VIA" findest du HTTP-Protokoll-Version und Proxy-IP, unter "HTTP_X_FORWARDED_FOR" findest du deine eigene IP-Adresse.

( quod erat demonstrandum ;-) )


Zum Schluss nimmst du einen anonymen Proxy.
Hier wirst du feststellen, dass "HTTP_VIA" und "HTTP_X_FORWARDED_FOR" nicht mehr vorhanden sind. In "REMOTE_ADDR" findest du entweder die IP des Proxy-Servers oder - gerade bei anonymen Proxys - eine ganz andere IP, welche sich auch immer mal ändert... dann hängst du nämlich in einer Proxy-Kaskade - da sind also mehrere Proxy-Server hintereinander geschalten und du wirst immer mal über einen anderen weitergeleitet.


Fazit für den Proxy-Nutzer und für den Angreifer:
Könnte es das nicht zusätzliche Gefahren bringen, wenn die Sessions dann auf der IP des Proxys laufen?
Ja - wenn man über den gleichen Proxy geht, die Session-ID abgefangen hat (muss ja nichtmal mitgesnifft sein... gibt ja genügend andere Wege, an die Session-ID zu kommen...) und auch noch die Browser-Kennung des Opfers kennt und den eigenen Browser dementsprechend manipuliert, ist 'ne Session ganz schnell mal entführt...

Fazit für den Webseiten-Betreiber:
Es gibt mit USER_AGENT, REMOTE_ADDR, HTTP_VIA und HTTP_X_FORWARDED_FOR jede Menge Daten, welche sich nutzen lassen, um Sicherheits-Mechanismen einzubauen.
Diese Sicherheits-Mechanismen sorgen natürlich immer auch dafür, dass User ausgeschlossen werden.

Neben diesen Methoden gibt es auch noch andere Sicherheits-Maßnahmen:

  • Session-ID alle X Minuten automatisch ändern
  • Bei sämtlichen Requests einen Token verlangen
  • Seite komplett auf HTTPS erzwingen und die Cookies dann auch nur für HTTPS zulassen
  • u.s.w.


Die Maßnahmen haben alle Vor- und Nachteile und man sollte immer entsprechend des Klientel entscheiden, welche Maßnahmen nötig sind, welche bedenkenlos möglich sind und welche Maßnahmen einen großen Anteil der Nutzer ausschließen.

Bei einem Online-Shop z.B. ist mir die Sicherheit meiner Kunden wichtig - entweder beim IP-Wechsel fliegt man, oder die Anzahl der IP-Wechsel wird zumindestens begrenzt (meinetwegen auf 1 Wechsel pro Stunde), auf dass es nicht möglich ist, mit 2 verschiedenen IPs gleichzeitig in ein und der selben Session zu surfen.

Bei einem Forum für anonyme Alkoholiker dagegen ist die Wahrscheinlichkeit, dass jemand wirklich anonym surfen will, schon wesentlich höher und man könnte mit der IP-Sperre schnell sein Publikum aussperren...

EDIT: Fast das wichtigste vergessen: Vielen Dank schonmal!
Bitte bitte, nix zu danken.
 
Zurück
Oben