SYN-Cookies

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Unter SYN-Cookies versteht man einen im Jahr 1996 von Daniel J. Bernstein entwickelten Mechanismus zum Schutz vor SYN-Flood-Angriffen. Bei diesen handelt es sich um eine Form des Denial-of-Service-Angriffs, bei der der anzugreifende Rechner durch massives Öffnen von Verbindungen dazu provoziert wird, die eigenen Ressourcen auf das Offenhalten der Verbindungen zu verwenden.

Verbindungsaufbau mit TCP[Bearbeiten]

Beim Herstellen einer herkömmlichen TCP-Verbindung, dem sogenannten Drei-Wege-Handshake, schickt ein Client zuerst ein SYN-Paket an den Server. Dieser speichert diese Nachricht und antwortet mit einem SYN/ACK-Paket. Schließlich sendet der Client ein ACK-Paket an den Server und die Verbindung ist hergestellt.

Erweiterung um SYN-Cookies[Bearbeiten]

Das Transmission Control Protocol (TCP) macht keine Vorgaben zum initialen Wert der Sequenznummer der SYN/ACK-Pakete. Also kann der Server sie nutzen, um Informationen zu kodieren, die er sonst in einer Tabelle halboffener TCP-Verbindungen speichern müsste. Da es somit keine solche Tabelle gibt, kann sie auch nicht überlaufen, womit ein SYN-Flood-Angriff nicht zu einem Denial of Service (DOS) führen kann.

Im Detail können folgende Regeln angewendet werden:

  • t ist ein langsam ansteigender Zeitstempel, der empfohlenderweise alle 64 sekunden inkrementiert wird
  • m ist die maximale Paketgröße des Clients
  • s ist ein Hashwert aus den folgenden Werten: Der Zeitstempel t, IP-Adressen und Portnummern von Client und Server. Der Hashwert muss 24 Bit lang sein.

Der Server sendet sein SYN/ACK-Paket mit einer speziell generierten Sequenznummer. Diese Sequenznummer ist laut TCP-Spezifikation jedoch auf 32 Bit beschränkt und kann folgendermaßen generiert werden:

  • Die ersten 5 Bits: t mod 32
  • Mittlere 3 Bits: Eine individuelle Kodierung von m (nur acht verschiedene Möglichkeiten)
  • Die letzten 24 Bits: s

Da der Client die Sequenznummer des TCP-SYN/ACK bei Empfang um eins hochzählt, enthält sein TCP-ACK-Paket die vom Server generierte initiale Sequenznummer um eins inkrementiert. Der Server dekrementiert diese also wieder um eins und vergleicht sie anschließend mit dem Hashwert des Pakets. Stimmen die beiden Hashes nicht überein, muss die Verbindung neu aufgebaut werden, wozu der Server dem Client ein TCP RST-Paket sendet.

Im Detail passiert am Server folgendes, nachdem das Paket dekrementiert wurde:

  1. Die ersten 5 Bits müssen mit der aktuellen Berechnung von t (oder einen Zeitstempel davor) übereinstimmen. Somit kann herausgefunden werden, ob bereits eine Zeitüberschreitung eingetreten ist.
  2. Der Wert s wird erneut aus Zeitstempel t (oder einen Zeitstempel davor), IP-Adressen und Portnummern von Client und Server berechnet und mit den letzten 24 Bit verglichen. Nur bei Übereinstimmung wird die Verbindung zugelassen.
  3. Die mittleren 3 Bits werden dekodiert und die Verbindung mit der gewünschten maximalen Paketgröße aufgebaut.

Weil die Überprüfung des Verbindungsaufbaus auf dem Server passiert, kann die Hashfunktion der Implementierung grundsätzlich beliebig definiert sein; sie sollte jedoch möglichst zufällig sein, um Sicherheitsrisiken zu vermeiden.[3] Dieses Verfahren läuft für den Client transparent ab, weswegen Verbindungen zwischen Gegenstellen unabhängig davon aufgebaut werden können, ob sie SYN-Cookies verwenden.

Inhalt der initialen Sequenznummer [4][5][Bearbeiten]

  • Zeitstempel mit einer Auflösung von 64 Sekunden
  • maximale Segmentgröße
  • Hashfunktion über:
    • Sender- und Empfänger-IP-Adresse
    • Ports
    • Zeitstempel mit einer Auflösung von 64 Sekunden
    • Ein nur dem Server bekannter geheimer Wert, der sich (wenn überhaupt) in großen Abständen ändert

Die Hashfunktion ist im zugehörigen RFC 4987 nicht spezifiziert und kann daher frei gewählt werden.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. SYN cookies. Website des SYN Cookies Entwicklers. Abgerufen am 18. Dezember 2009.
  2. RFC 4987. RFC 4987 Abschnitt SYN-Cookies. Abgerufen am 18. Dezember 2009.
  3. Steven M. Bellovin: RFC 1948 - Defending Against Sequence Number Attacks. In: Internet Engineering Task Force (IETF). AT&T Research, Mai 1996, S. 5, abgerufen am 20. Juni 2010 (englisch).
  4. SYN cookies. Website des SYN Cookies Entwicklers. Abgerufen am 18. Dezember 2009.
  5. RFC 4987. RFC 4987 Abschnitt SYN-Cookies. Abgerufen am 18. Dezember 2009.