Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

14.18 SINUS Firewall-1 TCP/IP Stack

Die 3 Wege - Architektur

Einfache Firewalls besitzen nur eine 2-Wege Zustandsmaschine, wie sie leider heute noch in einigen DOS - Firewalls zu finden ist. Hierbei gilt eine Verbindung als hergestellt, wenn nach dem Client - SYN der Server mit SYN antwortete. Diese TCP/IP Stacks sind empfindlich gegen vielerlei Angriffe und nicht mehr Stand der modernen Firewall-Generation.

Die SINUS Firewall hält sich hierbei streng an den RFC 793 - Standard und differenziert den Zustand genauer. Auf das SYN - Paket, also den Verbindungswunsch eines Clients, beispielsweise über TCP, antwortet die Firewall mit einem SYN/ACK. Danach werden zwischen Client und Server nur noch Pakete mit gesetztem ACK ausgetauscht, bis ein FIN vom Client oder Server die Verbindung als beendet erklärt.

Hierbei ist eine Vielzahl von Angriffen möglich. Z.B. kann ein gespooftes "RST" oder "FIN" Signal eines Angreifers dafür sorgen, daß die Verbindung zwischen Client und Server abbricht, wenn einer der beiden Partner der Meinung ist, daß der andere die Verbindung unterbricht. Hierzu muß der Angreifer natürlich die IP-Adresse der Partner fälschen (spoofing).

Ebenso würden gespoofte SYN´s an die beiden Partner zu einer Endlosschleife führen. Ein DoS Angriff wäre somit erfolgreich.

Daher wurde die Zustandsmaschine im Laufe der Zeit erweitert. Eine Verbindung gilt nach RFC 1122 dann nur noch als beendet, wenn sowohl Client und Server sich über ein FIN geeinigt haben. In diesem Falle dürfen weder von Client oder Server keine ACK Pakete mehr gesendet werden. Ein Angreifer müßte dann sowohl an den Client als auch an den Server ein FIN oder RST senden, um die Verbindung zu unterbrechen.

Der TCP/IP Stack mußte daher wieder um eine Kleinigkeit erweitert werden. Falls noch Datenpakete mit ACK zwischen Client und Server ausgetauscht werden, kann also ein RST oder FIN von einem der beiden Beteiligten nicht tatsächlich stammen. Solange, wie ACK Pakete auf einem der Hosts eintreffen, wird ein RST oder FIN nicht als Verbindungswunsch akzeptiert. Da der aber auch noch den Austausch von Paketen mit ACK zwischen Server und Client verhindern müßte, damit die gespooften RST oder FIN Pakete bei Client und Server akzeptiert würden, bleibt ihm nur noch eines - die Aufgabe. Solange nicht Server und Client beide ein FIN sich gegenseitig schicken, gilt die Verbindung als half close, also halb geschlossen. Wenn man mit netstat unter UNIX oder Microsoft Windows sich alle momentanen Verbindungen ansieht, kann man den Zustand der Verbindungen genau ansehen. Unter UNIX genügt ein PERL Skript, um bestimmte Verbindungen gezielt zu schließen. Im Falle, daß die Verbindung gerade geöffnet wurde, also gerade den SYN- SYN/ACK hinter sich hat, wird dieser Zustand als half open bezeichnet.

In jedem Falle wird im TCP/IP Stack für jeden Zustand (half open/close) und jede einzelne Verbindung ein Timer gestartet, der auch stets Statistiken über die Qualität der Verbindungen mitführt. Ist die Verbindung z.B. sehr gut, weil Client und Server direkt nebeneinander stehen, so kann und muß der Timeout heruntergesetzt werden. Ein Angreifer könnte ansonsten den SYN-RCVD Buffer fluten, und der Server hätte keine Möglichkeit mehr, weitere Verbindungen anzunehmen (syn-flood). Andererseits würde ein zu kurzer Timeout den Verbindungsaufbau zu einem weit entfernten Client verhindern.

Aber auch diese Verfahrensweise birgt Gefahren: Was wäre, wenn ein Client, der direkt neben dem Server steht, eine langsame Verbindung vortäuschen würde, damit der Server den Timeout höher setzt, um dann schnell einen SYN Angriff zu starten ? In dem Fall, daß der SYN-RCVD - Buffer gefüllt ist, sendet die Firewall aktiv einfach ein ACK Paket mit falscher Prüfsumme, damit es verworfen wird an alle Clients, um die bestehenden Verbindungen nicht terminieren zu lassen (timeout refresh) und ein SYN-ACK sowohl an die echten, als auch die vom Angreifer gespooften Adressen, die natürlich ins Leere laufen. Nach einiger Zeit beendet die Firewall dann alle Verbindungen, die nicht mit einem SYN-ACK quittiert wurden und kann so den SYN-RCVD Buffer leeren. Es bleiben nur noch diejenigen Verbindungen übrig, die zuvor bestanden haben und die ernsthaft neu initiiert wurden.

Aber auch diese Technik birgt Gefahren: Ein Angreifer könnte so die Firewall mit schnellen, gespooften SYN Paketen ganz aus der Nähe dazu veranlassen, dem Host, der die gespoofte IP - Nummer besitzt, eine Flut von SYN-ACK Paketen zu schicken. Dies könnte durchaus zur Leitungsüberlastung bei einigen Providern führen, insbesondere bei denjenigen, deren Anbindung etwas langsamer ist. In diesem Falle wäre die Firewall selber zwar gegen SYN flooding gesichert, würde aber zu einem DoS (denial-of-service) bei einem völlig Unbeteiligten führen, der zufällig die IP-Adresse des vom Angreifer benutzten, gespooften Pakets besitzt.

Die SINUS Firewall kann zuverlässig diesen Mißbrauch verhindern, indem sie für jede Verbindung einen eigenen Counter setzt, der bei einer maximalen Anzahl von SYN-Paketen einer bestimmten (auch gespooften) IP - Nummer das Aussenden des SYN-ACK stoppt.

Für den Schutz ihrer Standleitungskunden, besonders denen mit ISDN-Anschluß sollte von allen größeren Providern evtl. dieses Problem genauer bedacht werden. Hier hilft der Einsatz einer schnellen Firewall mit SPF - Architektur, die diese DoS Angriffe verhindert, indem sie die Zustände aller Verbindungen der Kunden im eigenen Netzwerk speichert, und gegen SYN-ACK Pakete verteidigt, denen kein SYN vorangegangen ist. Allerdings muß auch das Netzwerk gegen gegenseitige Angriffe von Kunden untereinander gesichert werden. Hierzu wäre dann der Einsatz von Firewall - Routern notwendig. Diese Technik entspricht exakt derjenigen, die im Checkpoint Firewall-1 "SynDefender Gateway" zum Einsatz kommt.


Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING