9 Layer 5 - Die Sitzungsschicht

9.1 Einführung: Verbindungen verwalten

Die Sitzungsschicht (Session Layer) ist die fünfte Schicht im OSI-Referenzmodell und befindet sich zwischen der Transportschicht (Layer 4) und der Darstellungsschicht (Layer 6). Sie ist verantwortlich für den Aufbau, die Verwaltung und Beendigung von Kommunikationssitzungen zwischen Anwendungen. Im TCP/IP-Referenzmodell existiert die Sitzungsschicht nicht als separate Ebene, sondern ihre Funktionalitäten sind in der Anwendungsschicht integriert.

9.2 Hauptaufgaben von Layer 5

  1. Sitzungsaufbau und -abbau: Einrichtung, Aufrechterhaltung und Beendigung von Kommunikationssitzungen
  2. Dialog-Management: Festlegung, wer wann Daten senden darf (Halbduplex/Vollduplex)
  3. Synchronisation: Einfügen von Kontrollpunkten (Checkpoints) für die Wiederaufnahme nach einem Fehler
  4. Token-Management: Verhinderung von gleichzeitigen kritischen Operationen
  5. Authentifizierung und Autorisierung: Benutzeridentifikation und Zugriffsrechte

9.3 Sitzungsorientierte Konzepte

9.3.1 Sessions und Zustandsmanagement

In Netzwerk-Anwendungen ist eine Session eine logische Verbindung zwischen zwei Endpunkten, die auf verschiedene Weise implementiert werden kann:

  1. Zustandsbehaftete (Stateful) Sessions:
  2. Zustandslose (Stateless) Sessions:

9.3.2 Dialoge und Kommunikationsmodi

Die Sitzungsschicht definiert, in welcher Weise der Datenaustausch zwischen den Kommunikationspartnern stattfindet:

  1. Simplex:
  2. Halbduplex:
  3. Vollduplex:

9.4 Mechanismen auf Layer 5

9.4.1 Synchronisationspunkte

Ein wichtiges Konzept der Sitzungsschicht ist die Einrichtung von Synchronisationspunkten, die den Dialog in logische Einheiten unterteilen:

Diese Synchronisationspunkte ermöglichen eine Wiederaufnahme der Kommunikation nach einem Fehler oder einer Unterbrechung, ohne die gesamte Sitzung neu starten zu müssen.

Session Start
|
├── Major Sync Point 1
|   ├── Minor Sync Point 1.1
|   ├── Minor Sync Point 1.2
|   └── Minor Sync Point 1.3
|
├── Major Sync Point 2
|   ├── Minor Sync Point 2.1
|   └── Minor Sync Point 2.2
|
└── Session End

9.4.2 Tokenmanagement

Tokens werden in der Sitzungsschicht verwendet, um zu steuern, welcher Kommunikationspartner bestimmte Aktionen ausführen darf:

Der Token-basierte Ansatz verhindert Konflikte bei kritischen Operationen, indem sichergestellt wird, dass diese stets geordnet und koordiniert ablaufen.

9.5 Protokolle mit Layer-5-Funktionalität

Obwohl im TCP/IP-Modell Layer 5 nicht explizit existiert, implementieren viele Protokolle Funktionen der Sitzungsschicht:

9.5.1 NetBIOS (Network Basic Input/Output System)

# NetBIOS-Namen anzeigen
$ nbstat -n

NetBIOS Local Name Table

Name               Type         Status
-------------------------------------
WORKSTATION1      <00>  UNIQUE  Registered
WORKGROUP         <00>  GROUP   Registered
WORKSTATION1      <03>  UNIQUE  Registered

9.5.2 RPC (Remote Procedure Call)

RPC ermöglicht es einem Prozess, Funktionen auf einem entfernten System aufzurufen, als wären sie lokale Funktionen:

// Vereinfachtes RPC-Beispiel in C
// IDL-Definition (Interface Definition Language)
program CALCULATOR {
    version CALC_V1 {
        int ADD(int, int) = 1;
        int SUBTRACT(int, int) = 2;
    } = 1;
} = 0x20000001;

// Client-Code
int result;
result = add_1(10, 5, clnt);  // Remote-Aufruf auf Server

9.5.3 H.323

Ein Protokollpaket für Audio- und Videokonferenzen über paketbasierte Netzwerke:

9.5.4 SIP (Session Initiation Protocol)

Ein Signalisierungsprotokoll zum Aufbau, zur Änderung und zum Beenden von Kommunikationssitzungen:

# SIP-Nachrichtenbeispiel für Anrufaufbau
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP alice-pc.example.com:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob <sip:bob@example.com>
From: Alice <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710@alice-pc.example.com
CSeq: 314159 INVITE
Contact: <sip:alice@alice-pc.example.com>
Content-Type: application/sdp
Content-Length: 142

[SDP-Daten folgen hier]

9.6 Sitzungsmanagement in Webanwendungen

9.6.1 HTTP-Cookies

Cookies sind ein Mechanismus, um Sitzungsinformationen in HTTP-Anwendungen zu speichern:

# HTTP-Antwort mit Cookie-Setzung
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure
Content-Type: text/html

# Nachfolgende HTTP-Anfrage mit Cookie
GET /dashboard HTTP/1.1
Host: example.com
Cookie: session_id=abc123

9.6.2 Session Management in Webapplikationen

Webanwendungen implementieren Sitzungsmanagement über verschiedene Techniken:

  1. Serverseitige Sessions:

  2. Clientseitige Sessions:

<?php
// PHP-Beispiel für serverseitiges Session-Management
session_start();  // Session initialisieren

// Session-Daten setzen
$_SESSION['user_id'] = 12345;
$_SESSION['username'] = 'max.mustermann';

// An anderer Stelle: Session-Daten auslesen
if (isset($_SESSION['user_id'])) {
    echo "Angemeldet als: " . $_SESSION['username'];
}
?>
// JavaScript-Beispiel für clientseitiges Session-Management mit JWT
// JWT erstellen (serverseitig)
const jwt = require('jsonwebtoken');
const token = jwt.sign(
  { userId: 12345, username: 'max.mustermann' },
  'geheimer-schlüssel',
  { expiresIn: '1h' }
);

// Token an Client senden
res.json({ token });

// Clientseitig: Token speichern
localStorage.setItem('token', receivedToken);

// Späteren API-Anfragen hinzufügen
fetch('/api/data', {
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('token')
  }
});

9.7 Sitzungskontrolle auf Unix/Linux-Systemen

9.7.1 Terminal-Sessions

Unix/Linux-Systeme verwalten Terminalsitzungen auf verschiedenen Ebenen:

  1. Login-Sessions:

  2. Pseudo-Terminals (PTY):

# Anzeige aktiver Login-Sessions
$ who
max      pts/0    2023-07-15 14:23 (192.168.1.10)
anna     pts/1    2023-07-15 15:05 (192.168.1.20)

# Detaillierte Session-Informationen
$ w
 15:30:25 up 10 days,  5:27,  2 users,  load average: 0.08, 0.03, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
max      pts/0    192.168.1.10     14:23    0.00s  0.04s  0.01s w
anna     pts/1    192.168.1.20     15:05    2:10   0.12s  0.12s -bash

9.7.2 Session Management mit screen und tmux

Terminal-Multiplexer wie screen und tmux ermöglichen fortgeschrittenes Sitzungsmanagement:

# Neue Screen-Session starten
$ screen -S meine_session

# Session trennen (detach) mit Tastenkombination: Ctrl+A, D

# Liste der laufenden Sessions anzeigen
$ screen -ls
There is a screen on:
    12345.meine_session (Detached)

# Wieder mit der Session verbinden
$ screen -r meine_session
# Neue Tmux-Session starten
$ tmux new -s meine_session

# Session trennen mit Tastenkombination: Ctrl+B, D

# Liste der laufenden Sessions anzeigen
$ tmux ls
meine_session: 1 windows (created Sat Jul 15 15:40:25 2023)

# Wieder mit der Session verbinden
$ tmux attach -t meine_session

9.8 Analyse von Sitzungen in Netzwerken

9.8.1 Session-Tracking mit Wireshark

Wireshark kann zur Analyse von Kommunikationssitzungen auf verschiedenen Protokollebenen verwendet werden:

# TCP-Sitzungen anzeigen
$ tshark -r capture.pcap -z conv,tcp

# Alle HTTP-Anfrage-Antwort-Paare extrahieren
$ tshark -r capture.pcap -T fields -e http.request.method -e http.request.uri -e http.response.code

# SIP-Anrufsitzungen analysieren
$ tshark -r voip_capture.pcap -o 'sip.display_raw_text:TRUE' -Y sip

In der grafischen Oberfläche von Wireshark: 1. Rechtsklick auf ein Paket einer interessanten Verbindung 2. “Follow” -> “TCP Stream” (oder UDP/HTTP/SSL Stream) wählen 3. Die gesamte Sitzung wird in konversationsähnlicher Form angezeigt

9.8.2 Session-bezogene Probleme diagnostizieren

Typische Sitzungsprobleme und Diagnoseansätze:

  1. Verbindungsabbrüche:

    # TCP-Reset-Pakete (RST) finden
    $ tshark -r capture.pcap -Y "tcp.flags.reset == 1"
  2. Sitzungs-Timeouts:

    # Lange Lücken zwischen Paketen in einer Verbindung finden
    $ tshark -r capture.pcap -T fields -e frame.time_epoch -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport | awk '...'
  3. Fehlgeschlagene Authentifizierung:

    # HTTP 401/403 Fehler finden
    $ tshark -r capture.pcap -Y "http.response.code == 401 || http.response.code == 403"

9.9 Sicherheitsaspekte auf Layer 5

9.9.1 Session Hijacking

Session Hijacking ist ein Angriff, bei dem ein Angreifer eine bestehende Sitzung übernimmt:

  1. TCP Session Hijacking:
  2. Anwendungssitzungs-Hijacking:
# Sicherheitsmerkmale für Cookies
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; SameSite=Strict

9.9.2 Session Fixation

Bei diesem Angriff zwingt der Angreifer dem Opfer eine bekannte Session-ID auf:

  1. Angreifer erhält eine gültige Session-ID vom System
  2. Opfer wird dazu gebracht, diese Session-ID zu verwenden (z.B. über präparierte Links)
  3. Opfer authentifiziert sich mit dieser Session-ID
  4. Angreifer kann nun auf die authentifizierte Sitzung zugreifen

Schutz:

<?php
// Sicheres Session-Management (PHP-Beispiel)
// Alte Sitzung verwerfen und neue erstellen bei Login
function secureLogin($username, $password) {
    if (verifyCredentials($username, $password)) {
        // Alte Session-ID verwerfen und neue erstellen
        session_regenerate_id(true);
        $_SESSION['user_id'] = getUserId($username);
        $_SESSION['login_time'] = time();
        $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
        return true;
    }
    return false;
}
?>

9.10 Die wichtigsten Fakten

Die Sitzungsschicht spielt eine wichtige Rolle für anwendungsorientierte Kommunikation, indem sie die strukturierte Interaktion zwischen Anwendungen ermöglicht und den Kontext über mehrere Datenaustausche hinweg aufrechterhält.