News CONSUS OKAS Fachartikel Spiele Impressum
 
Session Hijacking Allgemeines
Session Hijacking ist ein Angriff auf eine verbindungsbehaftete Datenkommunikation zwischen zwei Computern. Authentifiziert sich einer der Kommunikationspartner gegenüber dem anderen innerhalb der Session, haben beide ein Vertrauensverhältnis für die Dauer derselben. Beide wissen also mit wem sie es zu tun haben und können User Privilegien zuweisen. Ziel des Angreifers ist es, durch die „Entführung“ dieser Session die Vertrauensstellung auszunutzen, um dieselben Privilegien wie der rechtmäßig authentifizierte Benutzer zu erlangen. Nach erfolgreicher Entführung kann der Angreifer im schlimmsten Fall die Identität des Nutzers übernehmen und die Anwendung in dessen Namen nutzen.

Da die Kommunikation über Computernetzwerke in Schichten unterteilt ist, kann dieser Angriff auf jeder Schicht, die eine verbindungsbehaftete Kommunikation vorsieht, ausgeführt werden.
Nach oben
Session Hijacking und PHP
In unserer PHP-Installation bekommen wir über phpinfo() oder php.ini Datei die Informationen im Bereich Session, welche Einstellungen für die Session gültig sind und wo die Sessions abgelegt werden. Hier die relevanten Settings:

  • session.cache_expire
    Bei der Angabe: session.cache_expire sehen wir die Angabe 180. Die Session verfällt also automatisch nach 180 Minuten, wenn der Anwender nichts mehr macht. Diese Vorgabezeit für die Lebensdauer einer Session kann allerdings in PHP auch frei gesetzt werden mit dem Befehl:
    session_cache_expire(5);
    Durch den Befehl würde nun die Session nach 5 Minuten ablaufen, wenn der Nutzer nicht aktiv ist. Allerdings bekommt die Session (bzw. das Programm) nicht mit, dass der Benutzer gerade einen Text tippt (oder in aller Ruhe die Website liest) und sich dann nach der 6 Minute wundert, warum er sich wieder einloggen muss. Ein Timer auf der Seite kann hier Abhilfe schaffen.

  • session.save_path
    Diese Angabe regelt den Pfad auf dem Server der die verschiedenen Dateien der Sessions enthält. Hier wird für jeden Benuzter der PHP Skripte eine Datei mit einer 32 stelligen Zeichenkette versehen, die die jeweilige Session identifiziert. Diese Zeichenkette kann man oft in der Adressleiste als PHPSESSID= erkennen (Diesen Namen kann man unter der Einstellung session.name ändern).
  • Nach oben
    Gegenmaßnahmen
    Als Gegenmaßnahmen bietet sich an, die Session um weitere Informationen zu erweitern, die nur die Original Verbindung liefern kann. Wie die IP Adresse, der Browser, das Betriebssystem u.s.w. Diese Informationen können dann zu Beginn des Skriptes verglichen werden, um somit festzustellen, ob sich der Benutzer in der Zwischenzeit geändert hat.
    Auch sehr nützlich ist es in regelmäßigen Abständen eine neue Session ID für den Benutzer zu generieren, da es das Übernehmen der ID sehr schwer macht.
    Hier nun ein Code Beispiel für eine Session Hijacking Countermeasure Funktion:

     1:
     2:
     3:
     4:
     5:
     6:
     7:
     8:
     9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    19:
    //SESSION HIJACKING COUNTERMEASURE
    if (!isset($_SESSION['initiated'])){  
      session_regenerate_id();
      $_SESSION['initiated'] = true;
    }
    if (isset($_SESSION['REMOTE_ADDR'])){
      if ($_SESSION['REMOTE_ADDR'] != $_SERVER['REMOTE_ADDR']){
        exit;
      }
    } else {
      $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
    }
    if (isset($_SESSION['HTTP_USER_AGENT'])){
      if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){
        exit;
      }
    } else {
      $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
    }

    Bei Fragen, Wünschen, Anregungen oder Verbesserungen dieses Artikels kann man uns jederzeit eine Mail schicken.
    Nach oben
     
    Aktuelles:
      - new Beam Video
    Projekte:
      - CGE Consus Game Engine
    - OKAS unsere Webhosting Software
    Social: