Dämme gegen die SYN-Flut

Seite 2: Unter Beschuss

Inhaltsverzeichnis

Sowohl bei Windows als auch Unix/Linux zeigt netstat (Netzwerk-)Verbindungen und deren Status an. Die oft etwas verwirrende Ausgabe aller Netzwerkaktivitäten (-a) kann man mit -t (Linux) beziehungsweise -p TCP (Windows) auf TCP-Sockets einschränken. Die Option -n unterdrückt zusätzlich die Namensauflösung.

Halboffene Verbindungen zeigt netstat mit dem Status SYN_RECV an (SYN_RECEIVED unter Windows). Diese treten normalerweise nur vereinzelt auf, selbst auf wirklich vielbeschäftigten Servern wie denen von heise online sind selten mehrere Verbindungen gleichzeitig in diesem Zustand. Während einer SYN-Flood-Attacke tauchen hingegen plötzlich hunderte davon auf:

loki:~# netstat -tn
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.10.22.75:80 10.1.0.8:51966 SYN_RECV
tcp 0 0 10.10.22.75:80 10.1.0.6:23451 SYN_RECV
tcp 0 0 10.10.22.75:80 10.1.0.1:7890 SYN_RECV
tcp 0 0 10.10.22.75:80 10.1.0.7:43146 SYN_RECV
...

Doch ein entsprechend vorbereitetes System ist damit nicht so einfach in die Knie zu zwingen. Als ersten Schritt kann der Administrator die Größe der Backlog-Queue vorsichtig erhöhen. Unter Linux setzt

echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog

diesen Wert auf 1024, was sich auch im Dauerbetrieb auf heise online als unbedenklich erwiesen hat. Allerdings belegt jeder Eintrag in der Queue Speicher, sodass man den Wert an die Hardwareausstattung und Auslastung der Server anpassen muss.

Außerdem kann man analog in tcp_synack_retries die Zahl der erneuten SYN/ACK-Versuche herabsetzen. Der Standardwert von 5 sorgt für einen Timeout von drei Minuten. Mit 1 versucht es der Server nach 3 Sekunden ein zweites Mal und gibt nach 9 Sekunden auf, was den Eintrag in der Backlog-Queue freigibt. Unter akutem Angriff kann man die Wiederholung auch ganz abschalten, was aber manchmal zu Problemen mit regulären Nutzern mit langsamen Verbindungen führt.

Auch unter Windows (2000, XP, 2003 Server) lässt sich die Zahl der SYN/ACK-Wiederholungen anpassen. Hier steuert das in der Registry unter

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

der Wert des Parameters TcpMaxDataRetransmissions. Zum Härten des Systems empfiehlt Microsoft ihn auf 2 (DWORD) zu setzen, was für die Backlog-Queue einen Timeout von 21 Sekunden zur Folge hat.

Außerdem verfügt Windows über einen Mechanismus, SYN-Flood-Angriffe selbstständig zu erkennen und darauf zu reagieren. Diesen aktiviert der Parameter SynAttackProtect, die Werte von TcpMaxHalfOpen und TcpMaxHalfOpenRetried spezifizieren die Grenzwerte, bei deren Erreichen das System die Schutzmechanismen aktiviert. Steht SynAttackProtect auf 1, setzt Windows die Zahl der Retransmission herab und verzögert laut Microsoft das Anlegen von Einträgen im Routing-Cache. Der empfohlene Wert von 2 sorgt zusätzlich dafür, dass Windows erst nach einem vollzogenen Drei-Wege-Handshake das Winsock-Subsystem über die ankommende Verbindung benachrichtigt. Das Verhalten des Systems im Normalbetrieb ändert sich durch SynAttackProtect nicht.

Name Wert (DWORD)
SynAttackProtect 2
TcpMaxPortsExhausted 1
TcpMaxHalfOpen 500
TcpMaxHalfOpenRetried 400
TcpMaxConnectResponseRetransmissions 2
TcpMaxDataRetransmissions 2
EnablePMTUDiscovery 0
KeepAliveTime 300000 (5 Minuten)
NoNameReleaseOnDemand 1

Von Microsoft zum Schutz vor SYN-Flooding vorgeschlagene Werte (unter HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters) [2,3]

Windows-Applikationen rufen zur Netzwerkkommunikation die Windows Socket API auf (Winsock). Auf Kernel-Ebene implementiert deren Funktionen der Treiber afd.sys. Auch er lässt sich über spezielle Registry-Parameter anpassen und insbesondere eine dynamisch wachsende Backlog-Queue aktivieren.

Name Wert (DWORD)
EnableDynamicBacklog 1
MinimumDynamicBacklog 20
MaximumDynamicBacklog 20000
DynamicBacklogGrowthDelta 10


Von Microsoft vorgeschlagene Parameter für den Winsock-Treiber afd.sys (HKLM\System\CurrentControlSet\Services\AFD\Parameters)