Das TCP-Protokoll ermöglicht gesicherte, zuverläßige Verbindungen. Das
bedeutet, daß die Daten vollständig, korrekt und ohne Duplikate beim
Zielrechner (genauer Anwendung) abgeliefert werden. TCP ist ein
verbindungsorientiertes Protokoll und wird von den meisten Internetdiensten
(z.B. Telnet,FTP,SMTP) benutzt.
Eine TCP-Verbindung läuft ähnlich wie ein Telefongespräch ab:
Man wählt die Nummer, wartet bis die Verbindung zustande kommt und beginnt
dann mit der ,,Datenübertragung``. Zwischen den Kommunikationspartnern besteht
dann eine relativ zuverlässige Verbindung.
TCP-Nachrichten können durch folgende vier Parameter eindeutig identifiziert
werden:
|
Abbildung 2.6 zeigt den Auffbau von TCP-Pakten.
Die Kommunikationsendpunkte werden durch Quellport und Zielport bestimmt.
Es gibt sogennante ,,well known ports`` denen bestimmte Internetdienste
zugeordnet sind, z.B. Port 80 für HTTP, Port 25 für SMTP.
Server-Prozesse, die einen Dienst über TCP anbieten, ,,lauschen`` auf
bestimmten Portnummern, um eine Verbindung entgegenzunehmen. Dies wird als
listen oder TCP-listen bezeichnet. Im Netzwerkcode von BSD-Unix
wurden für Server-Prozesse Portnummern 1024 definiert. Dies sind
privilegierte Nummern, die nur vom Superuseraccount (unter UNIX root)
verwendet werden dürfen. Da die meisten Betriebssysteme ihren Netzwerkcode
aus dem BSD-Code entwickelt haben, ist diese Übereinkunft weitverbreitet.
In [FSI-96] ist der Grund dieser Definition beschrieben:
,,Fremde Systeme sollen der Authentizität von Informationen, die sie von
diesen Ports erhalten, vertrauen können.`` Leider ist dies nur eine
Konvention und nicht Teil der Protokollspezifikation. Die Folge ist, man
darf privilegierten Portnummern nur trauen, wenn man sicher weiß, daß sich
das Quellsystem an diese Übereinkunft hält und daß es korrekt administriert
wird. Abbildung 2.7 zeigt den Ablauf einer TCP-Sitzung.
Nur das erste Paket einer TCP-Verbindung hat kein ACK-Bit gesetzt.
Dadurch kann man einen TCP-Verbindungsaufbau erkennen und gegebenenfalls
blockieren durch Abweisen des ersten Paketes. Ohne die Informationen des
ersten Pakets können nachfolgende Pakete (mit gesetztem ACK-Bit) vom
Empfänger nicht zusammengesetzt werden.
TCP verwendet Sequenznummern um die Reihenfolge der Pakte bestimmen zu
können. ,,Da sich die Startlaufnummer für neue Verbindungen ständig
ändert, ist es TCP möglich, alte Pakete aus vorangegangenen Inkarnationen
derselben virtuellen Verbindung (also mit dem gleichen 4-Tupel, siehe Tabelle 2.3)
zu erkennen.`` [FSI-96]
Folgende Angriffe können auf TCP verübt werden:
Bei einigen TCP-Implementierungen erfolgte die Auswahl der Sequenznummern ,,nicht zufällig genug``, so daß es einem Angreifer möglich war, diese vorherzusagen. In [Morris-85] und [Bellovin-89] ist dieser Angriff beschrieben. Dadurch kann ein Angreifer unter bestimmten Vorraussetzungen seinem Opfer eine Verbindung mit einem vertrauten System vorspielen. Protokolle, die sich zur Authentifikation nur auf IP-Adressen verlassen (z.B. die ,,r-Befehle`` von BSD, siehe Abschnitt 2.18), können damit zum Eindringen in das System mißbraucht werden.
Diese Attacke ist in [CA-96.21] genauer beschrieben. Wenn ein Client-Programm eine TCP Verbindung zu einem Server aufbaut, wird ein sogennanter Three-Way-Handshake zum Verbindungsaufbau angestoßen (vgl. Abbildung 2.7). Dies ist bei allen TCP Verbindungen gleich (z.B. Telnet,EMail,etc.). Das Client-Programm startet den Verbindungsaufbau durch Senden einer SYN-Nachricht zum Server. Der Server bestätigt den Empfang dieser Nachricht durch eine SYN, ACK-Nachricht, die wiederum der Client mit ACK bestätigt. Die Verbindung ist nun aufgebaut und die beiden Programme können mit dem Datenaustausch beginnen. Beim Tcp-Syn-Flooding Angriff sendet der Client die letzte ACK-Nachricht nicht und es entsteht eine halb offene Verbindung. Alle ,,halb offenen Verbindungen`` werden in einer Datenstruktur gespeichert. Durch ständiges Erzeugen solcher Verbindungen kann ein System lahm gelegt werden. D.h., es ist dann nicht mehr in der Lage, weitere TCP-Verbindungen anzunehmen. In schlimmeren Fällen kommt es zum Systemabsturz, das hängt vom verwendeten Betriebssystem (und der Version des OS) ab.
Bei dieser Methode kann ein Angreifer bestehende TCP-Verbindungen übernehmen. Um diesen Angriff durchführen zu können sind Superuserrechte nötig, da der UNIX-Kernel dynamisch modifiziert werden muß. Es existieren Programme, die diese Veränderungen durchführen. Dadurch kann ein Eindringling starke Authentisierungsmechanismen umgehen, indem er wartet, bis die Verbindung zu stande gekommen ist und dann das Programm startet um die Verbindung zu übernehmen. In [CA-95.01] ist diese Methode beschrieben.