4. Security Considerations (Sicherheitsüberlegungen)
TCP Fast Open führt einen Mechanismus zur Datenübertragung während des Handshakes ein, was neue Sicherheitsherausforderungen mit sich bringt. Dieses Kapitel analysiert diese Bedrohungen und die entsprechenden Schutzmaßnahmen im Detail.
4.1. Übersicht der Angriffsvektoren (Attack Threats Overview)
Hauptbedrohungskategorien
- Amplifikationsangriffe (Amplification Attacks)
- Ressourcenerschöpfungsangriffe (Resource Exhaustion Attacks)
- Replay-Angriffe (Replay Attacks)
- Datenschutzverletzungen (Privacy Leakage)
Bedrohungsmodell
Annahmen zu Angreiferfähigkeiten:
├─ Kann Quell-IP-Adressen fälschen (IP-Spoofing)
├─ Kann Netzwerkpakete abfangen und wiedergeben
├─ Kann eine große Anzahl gleichzeitiger Verbindungen initiieren
└─ Kann Netzwerkverkehrsmuster beobachten
Schutzziele:
├─ Nicht anfälliger als Standard-TCP
├─ Amplifikationseffekt von Angriffen begrenzen
├─ Serverressourcen schützen
└─ Benutzerdatenschutz schützen
4.2. Amplifikationsangriffe (Amplification Attacks)
Angriffsprinzip
Angreifer nutzen Serverantworten, um Angriffsdatenverkehr zu verstärken:
Angriffsszenario:
1. Angreifer fälscht IP-Adresse des Opfers
2. Sendet kleines SYN-Paket (+ TFO-Cookie + Anfrage)
3. Server sendet große Antwort an das Opfer
4. Verstärkungsfaktor = Antwortgröße / Anfragegröße
Beispiel:
Anfrage: 60 Byte SYN + 100 Byte HTTP-Anfrage = 160 Byte
Antwort: 60 Byte SYN-ACK + 10 KB Daten = 10.060 Byte
Verstärkungsfaktor: 63x
Schutzmaßnahmen
1. SYN-Datengröße begrenzen
Server MUSS:
- Akzeptierte SYN-Datenlänge begrenzen (empfohlen: ≤ MSS, ca. 1460 Byte)
- Überlange SYN-Datenpakete ablehnen
2. SYN-ACK-Antwortgröße begrenzen
Server SOLLTE:
- Antwortdatengröße begrenzen, bevor die Verbindung vollständig hergestellt ist (ACK empfangen)
- Empfohlene Begrenzung: ≤ 4 × SYN-Datenlänge
Implementierungsbeispiel:
MAX_SYN_DATA = 1460 # MSS
MAX_SYNACK_DATA_BEFORE_ACK = 4 * MAX_SYN_DATA # 4x-Begrenzung
def handle_tfo_syn(syn_packet):
if len(syn_packet.data) > MAX_SYN_DATA:
# Fast Open ablehnen, auf Standard-Handshake zurückfallen
return send_standard_synack()
# Anfrage verarbeiten
response = process_request(syn_packet.data)
# Antwortgröße begrenzen (vor ACK)
if len(response) > MAX_SYNACK_DATA_BEFORE_ACK:
response = response[:MAX_SYNACK_DATA_BEFORE_ACK]
# Restliche Daten nach ACK senden
return send_synack_with_data(response)
3. Cookie-Validierung
Strenge Cookie-Validierung kann IP-Spoofing verhindern:
- Cookie MUSS an Client-IP-Adresse gebunden sein
- Anfragen mit ungültigem Cookie lösen keine Datenantwort aus
4. Ratenbegrenzung
Serverseitige Strategie:
├─ Ratenbegrenzung für Fast-Open-Verbindungen pro IP
├─ Globale Begrenzung der Fast-Open-Verbindungsanzahl
├─ Erkennung anomaler Muster (z. B. mehrfache Verwendung desselben Cookies)
└─ Temporäres Deaktivieren von Fast Open für verdächtige IPs
4.3. Ressourcenerschöpfungsangriffe (Resource Exhaustion)
SYN-Flood-Angriffsvariante
TFO kann für erweiterte SYN-Flood-Angriffe missbraucht werden:
Traditioneller SYN-Flood:
Angreifer → Viele SYNs → Server (erschöpft Halbverbindungswarteschlange)
TFO-SYN-Flood:
Angreifer → Viele SYNs + Cookie + Daten → Server
↓
Server muss:
├─ Cookie validieren (CPU)
├─ Daten verarbeiten (CPU + Speicher)
└─ Möglicherweise Anwendungslogik auslösen (mehr Ressourcen)
Schutzmaßnahmen
1. SYN-RECEIVED-Zustandsbegrenzung
Server MUSS:
- Anzahl der Verbindungen im SYN-RECEIVED-Zustand begrenzen
- Strengere Begrenzungen für TFO-Verbindungen festlegen
Implementierungsempfehlung:
#define MAX_SYN_RECEIVED_NORMAL 1024
#define MAX_SYN_RECEIVED_TFO 512 // TFO-Begrenzung niedriger
int syn_received_count_normal = 0;
int syn_received_count_tfo = 0;
int accept_syn(packet, is_tfo) {
if (is_tfo) {
if (syn_received_count_tfo >= MAX_SYN_RECEIVED_TFO)
return REJECT;
syn_received_count_tfo++;
} else {
if (syn_received_count_normal >= MAX_SYN_RECEIVED_NORMAL)
return REJECT;
syn_received_count_normal++;
}
// ... Verarbeitung fortsetzen
}
2. Anwendungsschicht-Isolation
Server SOLLTE:
- Zustellung von SYN-Daten an die Anwendungsschicht verzögern, bis ACK empfangen wird
- Oder im SYN-RECEIVED-Zustand nur leichtgewichtige Verarbeitung durchführen
3. Kostenkontrolle der Cookie-Berechnung
Cookie-Validierung optimieren:
├─ Effizienten Verschlüsselungsalgorithmus verwenden (z. B. AES-NI-Hardwarebeschleunigung)
├─ Cookie-Cache implementieren (kurzfristige Caching-Validierungsergebnisse)
├─ Offensichtlich ungültige Cookies schnell ablehnen
└─ CPU-Auslastung überwachen, Strategie dynamisch anpassen
4. Integration mit SYN-Cookies
Server KANN TCP-SYN-Cookies kombiniert einsetzen:
- SYN-Cookies: Zustandsloser SYN-Flood-Schutz
- TFO-Cookies: Zustandsbehaftete Leistungsoptimierung
Schutzstrategie:
if (under_attack) {
// Bei hoher Last TFO deaktivieren, SYN-Cookies aktivieren
disable_tfo();
enable_syn_cookies();
} else {
// Normal: Beide aktivieren
enable_tfo();
enable_syn_cookies(); // Als Backup
}
4.4. Replay-Angriffe (Replay Attacks)
Angriffsszenario
Angreifer fangen TFO-SYN-Pakete ab und spielen sie erneut ab:
Szenario 1: Netzwerkabhören
Angreifer (Abhören) ─┐
↓
Client ────SYN + Cookie + "GET /transfer?amount=100"───→ Server
↑
Angreifer (Replay) ───┘ → Überweisungsoperation wiederholt ausführen!
Schutzmaßnahmen
1. Idempotenzanforderung
Anwendungsschicht MUSS:
- Nur idempotente Operationen in TFO-SYN senden
- Beispiele:
- ✓ Erlaubt: GET-Anfragen, Nur-Lese-Operationen
- ✗ Verboten: POST, PUT, DELETE und andere Operationen mit Nebeneffekten
Client-Leitfaden:
def can_use_tfo(request):
# TFO nur für idempotente Anfragen verwenden
if request.method in ['GET', 'HEAD', 'OPTIONS']:
return True
if request.method == 'POST' and request.is_idempotent:
return True # Anwendung explizit als idempotent markiert
return False
def send_request(request):
if can_use_tfo(request) and has_cookie(server):
send_with_tfo(request)
else:
send_with_standard_tcp(request)
2. TCP-Sequenznummernschutz
TCP-eigene Mechanismen bieten grundlegenden Schutz:
- Server verfolgt empfangene Sequenznummern
- Daten mit doppelten Sequenznummern werden verworfen
- Einschränkung: Nur während der Verbindungsdauer gültig
3. Anwendungsschicht-Deduplizierung
Server-Anwendung SOLLTE:
- Anfrage-Deduplizierungsmechanismus implementieren (z. B. Anfrage-ID)
- Zusätzliche Validierung für sensible Operationen verwenden (z. B. CSRF-Token)
4. Cookie-Zeitgültigkeit
- Nach Cookie-Ablauf werden alte Replay-Angriffe unwirksam
- Kurze Cookie-Gültigkeitsdauer reduziert das Replay-Zeitfenster
4.5. Datenschutzüberlegungen (Privacy Considerations)
Cookie als Tracking-Bezeichner
Bedrohung: TFO-Cookies könnten als persistente Benutzer-Tracking-Bezeichner verwendet werden:
Datenschutzrisiko:
Client-IP ändert sich → Cookie bleibt gültig
↓
Server kann Verbindungen von verschiedenen IPs verknüpfen
↓
Potenzielle Benutzeridentitätsverknüpfung und -verfolgung
Schutzmaßnahmen
1. Cookie an IP gebunden
Cookie MUSS an IP-Adresse gebunden sein:
- Nach IP-Änderung wird Cookie ungültig
- Neues Cookie muss angefordert werden
Abwägung:
- ✓ Verbesserten Datenschutz
- ✗ Häufige Cookie-Aktualisierungen in Mobilfunknetz-IP-Drift-Szenarien erforderlich
2. Begrenzte Cookie-Lebensdauer
- Empfohlene Gültigkeitsdauer: Stunden bis 1 Tag
- Cookies regelmäßig rotieren
- Cookies löschen, wenn Benutzer Browserdaten löscht
3. Cookie enthält keine Benutzerinformationen
Cookie DARF NICHT:
- Benutzer-ID oder Sitzungs-ID enthalten
- Benutzeridentifizierbare Informationen enthalten
- Über verschiedene Dienste hinweg geteilt werden
Cookie SOLLTE:
- Nur zur Überprüfung verwendet werden, dass der Client zuvor mit dem Server verbunden war
- Keine Zustandsinformationen übertragen
4. Benutzerkontrolle
Client SOLLTE bereitstellen:
- Option zum Deaktivieren von TFO
- Funktion zum Löschen von TFO-Cookies
- TFO-Cookies im Datenschutzmodus deaktivieren
4.6. Interaktion mit anderen Sicherheitsmechanismen (Interaction with Other Security Mechanisms)
TLS/SSL-Integration
Überlegungen bei kombinierter Verwendung von TFO und TLS:
TFO + TLS-Handshake:
Client Server
| |
| SYN + TFO Cookie + TLS ClientHello |
|---------------------------------->|
| |
| SYN-ACK + TLS ServerHello |
|<----------------------------------|
| |
| ACK + TLS ... |
|---------------------------------->|
Vorteile:
- Weitere Latenzreduzierung (TLS 1.3 + TFO = 0-RTT)
- TLS bietet zusätzliche Sicherheitsschicht
Hinweis:
- TLS-0-RTT-Daten erfordern ebenfalls Idempotenz
- Sicherheit von TFO und TLS muss gleichzeitig berücksichtigt werden
Firewalls und NAT
Kompatibilitätsprobleme:
Einige Middleboxen können:
├─ TCP-Fast-Open-Optionen entfernen
├─ SYN-Pakete mit Daten blockieren
├─ TCP-Optionsfelder ändern
└─ Strenge Zustandsverfolgung implementieren
Gegenmaßnahmen:
├─ Client implementiert Rückfallmechanismus
├─ TFO-Unterstützung erkennen
├─ Deaktivierungsoption bereitstellen
└─ Server protokolliert Kompatibilitätsprobleme
DoS-Schutzsysteme
TFO SOLLTE mit bestehenden DoS-Schutzsystemen koordiniert werden:
Integrationsempfehlungen:
├─ DDoS-Schutzgeräte SOLLTEN TFO-Optionen verstehen
├─ Ratenbegrenzung SOLLTE TFO-Datenverkehr berücksichtigen
├─ Anomalieerkennung SOLLTE TFO-Missbrauchsmuster erkennen
└─ TFO kann bei Angriffen dynamisch deaktiviert werden
4.7. Zusammenfassung der Sicherheits-Best-Practices (Security Best Practices Summary)
Serverseitig
MUSS implementiert werden:
- ✓ Cookie an Client-IP binden
- ✓ SYN-Datengröße begrenzen
- ✓ SYN-ACK-Antwortgröße begrenzen (vor ACK)
- ✓ Cookie-Ablaufmechanismus
- ✓ Ratenbegrenzung
SOLLTE implementiert werden:
- ✓ Server-Schlüssel regelmäßig rotieren
- ✓ TFO-Nutzungsmuster überwachen
- ✓ Mit SYN-Cookies integrieren
- ✓ Anfrage-Deduplizierung auf Anwendungsschicht
- ✓ Strategie dynamisch anpassen (basierend auf Last)
KANN implementiert werden:
- ✓ Erweiterte Bedrohungserkennung
- ✓ Cookie-Versionsverwaltung
- ✓ Geolokalisierungsvalidierung
- ✓ Machine-Learning-Anomalieerkennung
Clientseitig
MUSS implementiert werden:
- ✓ TFO nur für idempotente Operationen verwenden
- ✓ Cookie sicher speichern
- ✓ Fähigkeit zum Rückfall auf Standard-TCP
SOLLTE implementiert werden:
- ✓ Cookie-Ablaufverwaltung
- ✓ Benutzerdatenschutzkontrolle
- ✓ Fehlererkennungs- und Wiederholungslogik
- ✓ Datenschutzmodus-Unterstützung
Anwendungsschicht
Empfehlungen:
Idempotenzprüfung:
├─ GET/HEAD-Anfragen → TFO standardmäßig erlauben
├─ POST/PUT/DELETE → TFO standardmäßig verbieten
├─ Anwendungsspezifische Logik → explizit markieren
└─ Sensible Operationen → TFO immer verbieten
Datenvalidierung:
├─ Nicht auf TFO-Sicherheit verlassen
├─ Anwendungsschicht-Authentifizierung implementieren
├─ TLS-Verschlüsselung verwenden
└─ Anfrage-Signierung und -Validierung
Nächster Abschnitt: 5. IANA Considerations (IANA-Überlegungen) erläutert die Optionsnummernzuweisung für TCP Fast Open.