Tags: Netzwerk, Monitoring, Sicherheit
Neben UDP ist TCP das meistverwendete Protokoll der TCP/IP-Familie auf der OSI-Schicht 4. Es arbeitet verbindungsorientiert, wozu es eine Sitzung aufbaut. Dies passiert mit Hilfe eines 3-Wege-Handshakes. Die folgende Anleitung zeigt, wie man diesen Handshake für eine FTP-Kommunikation in Wireshark visualisiert.
Bei unserem Mitschnitt greifen wir mit einem FTP-Client auf einen im lokalen Netzwerk befindlichen FTP-Server zu. Der Client hat die IP-Adresse 192.168.1.200, der Server auf Basis von Ubuntu 18.04 LTS ist unter 192.168.1.124 erreichbar.
Mitschnitt beginnen
Als Client nutzen wir Filezilla auf einer Windows-Maschine. Wir verwenden den Passiv-FTP-Mode. Dies und der Verzicht auf SFTP (FTP via TLS) muss auch am Client entsprechend konfiguriert werden. Außerdem ist darauf zu achten, dass keine Firewall-Regel auf dem Server oder Client den Verbindungsaufbau verhindert.
Das Mitschneiden in Wireshark soll auf dem Client erfolgen. Wir starten daher dort die Windows-Version und definieren im Menü Aufzeichnen => Optionen nach dem Markieren der gewünschten Netzwerkschnittstelle unter dem Eingabe-Dialog in der Zeile Mitschnittfilter für die ausgewählte Schnittstelle einen neuen Mitschnittfilter.
Diesmal wollen wir den Mitschnitt auf den gewünschten Ziel-Host beschränken. Das klappt mit dem Schlüsselwort host gefolgt von der Ziel-IP, also "host 192.160.0.124".
Dann starten wir den Mitschnitt und initiieren anschließend einen FTP-Zugriff mit Filezilla und betätigen, dass wir unverschlüsseltes FTP auf Port 21 erlauben möchten.
Nach dem Verbindungsaufbau zeigen wir zum Beispiel den Verzeichnisinhalt des FTP-Users an und beenden die Aufzeichnung.
Aufzeichnung auswerten
Werfen wir nun einen Blick auf den Mitschnitt.
Relevant für den TCP-Handshake sind hier die 3 Zeilen mit den Flags [SYN], [SYN] und [ACK]. Diese drei Pakete werden zu Beginn jeder TCP-Sitzung ausgetauscht, wie die Abbildung weiter unten illustriert.
Zeile 1 zeigt die Verbindungsaufnahme vom Client (192.168.1.200) zum Server (192.168.1.124). FTP baut den Kontrollkanal über einen vom FTP-Client frei gewählten High-Port (hier 23913) zu Ziel-Port 21 des Servers auf.
Bereits in der Zeilendarstellung ist das SYN-Flag in eckigen Klammern zu erkennen, ebenso wie in der Detaildarstellung im mittleren Fenster, das heißt, es handelt sich um ein SYN-Paket (streng genommen "Segment") im Rahmen des TCP-3-Wege-Handshakes.
Der Client, der die Verbindung aufbauen möchte, sendet dem Server also ein SYN-Paket (für "synchronize") mit einer so genannten Sequenznummer, hier "0". Übrigens sind während der späteren Datenübertragungsphase (active open) die Rollen von Client und Server (aus TCP-Sicht) symmetrisch, sodass jeder der beiden Partner einen Verbindungsabbau initiieren kann.
Mit Hilfe der Sequenz-Nummern stellt TCP im Rahmen der Verbindungssteuerung die Vollständigkeit einer Übertragung in der korrekten Reihenfolge und ohne Duplikate sicher. Das SYN-Paket ist ein spezielles Paket, bei dem das SYN-Flag (SYN-Bit) im TCP-Header gesetzt ist.
Bei der Start-Sequenznummer handelt es sich eigentlich um eine beliebige Zahl, deren Generierung von der jeweiligen TCP-Implementierung abhängt. Zwecks nutzerfreundlicher Verfolgbarkeit einer TCP-Kommunikation verwendet Wireshark allerdings per Default so genannte relative Sequenznummern, weshalb die Kommunikation hier mit der Sequenz-nummer 0 beginnt.
Dies lässt sich, falls gewünscht, in der Protokollkonfiguration im Dialog Wirehark-Einstellungen unter Bearbeiten => Einstellungen im Knoten Protocols bei TCP ändern.
Die echte Sequence-Number sollte möglichst zufällig sein, um Sicherheitsrisiken zu vermeiden. Wir bleiben aber bei relativen Sequenznummern und betrachten das Paket im mittleren Fenster etwas genauer.
Die Darstellung beginnt mit der Zusammenfassung in der Zeile
Transmission Control Protocol, Src. Port: <Port>, Dst Port: 21, Seq: 0, Len:0
Hat man die Ansicht mit einem Klick auf den Rechtspfeil entfaltet, folgen die Zeilen:
- Source Port:
- Destination Port:
- [Stream index:]
- TCP Segment Len:
- Sequence number:
- Next sequence number:
- Acknowledgement-Number:
Daran anschließend findet sich der Knoten Flags, der sich ebenfalls mit einem Klick auf den Rechtspfeil entfalten lässt.
Dahinter folgen noch die so genannte TCP-Window-Size als Sende- bzw. Empfangspuffer, eine Checksum, der Checksum Status und der noch eingeklappte Bereich Options.
Die drei Schritte des Handshakes
Im Rahmen des 3-Wege-TCP-Handshakes mit (SYN, SYN/ACK, SYN) muss im ersten Paket des Handshakes immer das SYN-Flag gesetzt sein. Ist der Port geöffnet, antwortet der Server von seinem Port (hier 23913) auf Port 21 des Clients und bestätigt den Erhalt des ersten SYN-Pakets.
Das tut er, indem er dem gewünschten Verbindungsaufbau durch Senden eines SYN/ACK-Paket zustimmt. Dabei handelt es sich ebenfalls um ein spezielles Paket, bei dem im TCP-Header sowohl das SYN-Flag als auch das ACK-Bit (Acknowledgement) gesetzt sind.
Im dritten Paket des 3-Wege-Handshakes ist dann nur das ACK-Flag gesetzt, womit der Client signalisiert, dass er die Zustimmung des Servers zur Verbindungsaufnahme registriert hat und jetzt bereit für die Übertragung ist. Damit ist die Verbindung aufgebaut und die Sitzung steht. Alles, was hierauf folgt, ist anwendungsspezifisch.
Täglich Know-how für IT-Pros mit unserem Newsletter
Thomas Drilling arbeitet seit mehr als 20 Jahren selbständig als Redakteur und Autor für viele ehemalige und aktuelle IT-Magazine sowie Blogs. Thomas ist zudem Buchautor und IT-Consultant.
Seit 5 Jahren ist Thomas neben seiner journalistischen Tätigkeit hauptberuflicher, selbständiger IT-Trainer für VMware und Microsoft.
Seine Themenschwerpunkte sind Virtualisierung und Cloud Computing, speziell VMware, Amazon Web Services, Google Cloud und Microsoft Azure. Thomas ist zertifizierter VMware Professional, Advanced Professional und wurde von VMware in den Jahren 2016, 2017, 2018, 2019 und 2020 mit dem Blogger-Status vExpert ausgezeichnet.
Thomas ist außerdem zertifizierter AWS Solutions Architect, Sysops Engineer und Devops Engineer sowie Microsoft Certified Azure Administrator.
Thomas führt aktuell jeden zweiten Montag einen 4-tägigen Grundlagenkurs in Cloud Computing mit AWS via Zoom-Meeting durch. Weitere Informationen und Anmeldung über sein AWS-Blog.
Ähnliche Beiträge
- Fortgeschrittene Techniken mit Nmap: TCP-Window-, FIN-, NULL- und XMAS-Scans
- Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
- Portscanner Nmap: die wichtigsten Funktionen im Überblick
- Netzwerk-Analyse mit Wireshark: Datenströme verfolgen mit Verbindungsfiltern
- Netzwerk-Analyse mit Wireshark am Beispiel von Ping
Weitere Links
1 Kommentar
Guter Artikel - meines Wissens wird jedoch bei der Antwort des Servers als Source Port der vorangegangene Destination Port (in diesem Fall 21) verwendet und nicht der Port des Clients, wie im letzten Abschnitt des Artikels beschrieben.
Zitat:
"Ist der Port geöffnet, antwortet der Server von seinem Port (hier 23913) auf Port 21 des Clients und bestätigt den Erhalt des ersten SYN-Pakets."
Lass mich aber auch gern eines besseren belehren :)
Gruß
Finn