Der TCP-SYNC-Angriff auch als „halboffener Angriff“ bekannt, ist ein Angriff gegen TCP-Netzwerkverbindung. Der Angreifer missbraucht dabei den Drei-Wege-Handshake des TCP. Bei dieser Art von Angriff werden auf dem Server viele halboffene TCP-Verbindungen angelegt. Dies bindet Ressourcen auf dem Server, die für die eigentliche Nutzung nicht mehr zu Verfügung stehen.
Um die Wirkungsweise der Absicherung besser zu verstehen, blicke ich noch einmal ganz kurz zurück wie der normale TCP-Verbindungsaufbau funktioniert. Beim TCP handelt es sich um ein verbindungsorientiertes Protokoll. Dies bedeutet Client und Server müssen zuerst eine TCP-Verbindung aushandeln, bevor die eigentlichen Daten untereinander ausgetauscht werden können. Für die Etablierung der TCP-Verbindung dient der Drei-Wege-Handshake:
- Der Client sendet ein SYN-Paket („synchronize“) an den Server.
- Der Server antwortet mit einem SYN/ACK-Paket (ACK = „acknowledge“) und legt eine „Transmission Control Block“ (TCB) genannte Datenstruktur für die Verbindung im SYN-Backlog an.
- Der Client beantwortet das SYN/ACK-Paket mit einem ACK-Paket und schließt damit den Handshake ab. Danach steht die Verbindung bereit.
Während einer SYN-Flood-Attacke kommt es zu einer massiven Störung des TCP-Verbindungsaufbaus:
- Der Angreifer sendet ein SYN-Paket an den Server und spooft dabei seine IP-Adresse.
- Der Server legt eine Transmission-Control-Block-Datenstruktur für die halboffene Verbindung im SYN-Backlog an. Der TCB belegt Speicher auf dem Server. Ferner ist die Größe des SYN-Backlog begrenzt.
- Der Server sendet ein SYN/ACK-Paket an die gespoofte IP-Adresse des Angreifers.
- Da vom Angreifer kein ACK-Paket zur Bestätigung der Verbindung eingeht, sendet der Server weitere SYN/ACK-Pakete an den vermeintlichen Client und hält die Verbindung im halboffenen Zustand.
- Während der Server weiterhin auf eine Antwort wartet, gehen bereits neue SYN-Pakete des Angreifers ein, die in das SYN-Backlog eingetragen werden müssen.
- Ab einem bestimmten Punkt ist im SYN-Backlog kein Platz mehr für weitere halboffene Verbindungen vorhanden. Der Server verwirft hernach eingehende SYN-Pakete und ist damit von außen nicht mehr erreichbar.
Mit den hier gezeigten Konfigurationsschritte besteht die Möglichkeit sich vor TCP-SYNC-Attacken für HTTP zu schützen. In meinen Beispiel möchte auf die folgenden Werte triggern:
- conn-max 100
- embryonic-conn-max 200
- per-client-embryonic-max 10
- per-client-max 5
- random-sequence-number enable
- timeout embryonic 0:0:45
- timeout half-closed 0:25:0
- timeout tcp 2:0:0
Das zugehörige Konfigurationsbeispiel würde wie folgt aussehen:
conf t
class-map tcp-syn
match port tcp eq www
policy-map PWAN
class tcp-syn
set connection conn-max 100
set connection embryonic-conn-max 200
set connection per-client-embryonic-max 10
set connection per-client-max 5
set connection random-sequence-number enable
set connection timeout embryonic 0:0:45
set connection timeout half-closed 0:25:0
set connection timeout tcp 2:0:0
exit
exit
service-policy PWAN interface WAN
exit
write memory