Einführung
In diesem Labor lernen Sie die Grundlagen der Netzwerktraffic-Analyse auf einem Linux-System mit dem leistungsstarken Befehlszeilentool tcpdump. Das Hauptziel ist das Erfassen und Untersuchen von Ethernet-Frames auf der Data-Link-Schicht, um praktische Erfahrungen damit zu sammeln, wie Daten für die Übertragung in einem lokalen Netzwerk strukturiert sind. Sie erwerben praktische Fähigkeiten zur Identifizierung und Interpretation von Low-Level-Netzwerkkommunikationen.
Sie beginnen mit der Vorbereitung Ihrer Umgebung, die die Installation von tcpdump und die Identifizierung Ihrer aktiven Netzwerkschnittstelle umfasst. Als Nächstes starten Sie eine Live-Paketerfassung, um Netzwerkaktivitäten in Echtzeit zu überwachen. Um verschiedene Kommunikationsmuster zu verstehen, generieren Sie sowohl Unicast-Traffic mit dem ping-Befehl als auch Broadcast-Traffic über ARP. Durch die Untersuchung der erfassten Ausgabe lernen Sie, Ethernet-Frame-Header zu analysieren und zwischen Unicast- und Broadcast-MAC-Adressen zu unterscheiden.
tcpdump installieren und Ihr Netzwerkinterface identifizieren
In diesem Schritt bereiten Sie Ihre Umgebung für die Netzwerkanalyse vor. Dies umfasst zwei wichtige Aktionen: die Installation von tcpdump, einem leistungsstarken Befehlszeilen-Paket-Sniffer, und die Identifizierung des Namens Ihrer primären Netzwerkschnittstelle. Ein Paket-Sniffer ermöglicht es Ihnen, die Daten zu "sehen", die über das Netzwerk übertragen werden, und tcpdump muss wissen, welche spezifische Netzwerkverbindung überwacht werden soll.
Zuerst stellen wir sicher, dass tcpdump installiert ist. Obwohl es ein Standardwerkzeug ist, ist es gute Praxis, seine Anwesenheit zu bestätigen. Wir verwenden den Paketmanager apt. Der Befehl sudo apt update synchronisiert Ihre Paketliste mit den Software-Repositories, und sudo apt install tcpdump -y installiert das Tool, wobei -y die Installation automatisch bestätigt.
Führen Sie die folgenden Befehle in Ihrem Terminal aus:
sudo apt update
sudo apt install tcpdump -y
Nach Abschluss der Installation können Sie diese überprüfen, indem Sie die Version von tcpdump abfragen.
tcpdump --version
Sie sollten eine Ausgabe ähnlich dieser sehen, die bestätigt, dass das Tool einsatzbereit ist. Die Versionsnummern können variieren.
tcpdump version 4.99.x
libpcap version 1.10.x
OpenSSL 3.0.x [Date]
Als Nächstes müssen Sie den Namen der Netzwerkschnittstelle ermitteln, die Sie überwachen werden. Ein Computer kann mehrere Schnittstellen haben (z. B. für kabelgebundenes Ethernet, WLAN oder virtuelle Netzwerke). Wir verwenden den Befehl ip addr, um alle verfügbaren Netzwerkschnittstellen und ihre Konfigurationen aufzulisten.
Führen Sie diesen Befehl aus:
ip addr
Die Ausgabe listet mehrere Schnittstellen auf. Sie suchen nach Ihrer primären aktiven Schnittstelle. Sie wird oft als eth0 oder enp0s3 bezeichnet. Suchen Sie nach einem Eintrag, der eine inet-Adresse (Ihre IP-Adresse) hat und sich im Zustand UP befindet.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:01:be:b3 brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.8/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159786sec preferred_lft 1892159786sec
inet6 fe80::216:3eff:fe01:beb3/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:8a:88:cd:da brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Aus der obigen Beispielausgabe ist der Schnittstellenname eth0. Notieren Sie sich den Namen Ihrer spezifischen Schnittstelle, da Sie ihn im nächsten Schritt benötigen werden.
Breite Erfassung starten und Traffic beobachten
In diesem Schritt beginnen Sie mit der Erfassung von Live-Netzwerkverkehr. Die grundlegende Dateneinheit auf der Data-Link-Schicht (Schicht 2) ist der Ethernet-Frame. Jeder Frame fungiert als digitaler Umschlag, der nicht nur die gesendeten Daten, sondern auch wichtige Adressierungsinformationen wie die Quell- und Ziel-MAC-Adressen enthält. Wir verwenden tcpdump mit der Option -e, um speziell diese Layer-2-Details anzuzeigen. Diese anfängliche Erfassung wird ungefiltert sein, um Ihnen einen Eindruck von der gesamten Aktivität in Ihrem Netzwerk zu vermitteln.
Nun starten wir den Erfassungsprozess. Sie benötigen den Schnittstellennamen, den Sie im vorherigen Schritt identifiziert haben (z. B. eth0). Die Erfassung von Netzwerkpaketen erfordert Administratorrechte, weshalb wir sudo verwenden. Wir fügen auch das Flag -n hinzu, um zu verhindern, dass tcpdump IP-Adressen in Hostnamen auflöst, und -q für eine sauberere Ausgabe.
Führen Sie in Ihrem Terminal den Befehl tcpdump aus. Denken Sie daran, eth0 durch Ihren tatsächlichen Schnittstellennamen zu ersetzen.
## Ersetzen Sie eth0 durch Ihren tatsächlichen Schnittstellennamen aus Schritt 1
sudo tcpdump -i eth0 -e -n -q
Lassen Sie uns diesen Befehl aufschlüsseln:
sudo: Führt den Befehl mit Superuser-Privilegien aus, die erforderlich sind, um auf diese Weise auf Netzwerkschnittstellen zuzugreifen.tcpdump: Das Paket-Erfassungswerkzeug selbst.-i eth0: Das Flag-igibt die zu überwachende Netzwerkschnittstelle (interface) an.-e: Diese Option ist für unser Labor entscheidend. Sie weisttcpdumpan, für jedes Paket den Link-Layer-Header (Ethernet) auszugeben, der die Quell- und Ziel-MAC-Adressen enthält.-n: Verhindert die Hostnamenauflösung und zeigt rohe IP-Adressen an.-q: "Quiet"-Modus, der die Menge der protokollspezifischen Ausgaben reduziert.
Nachdem Sie den Befehl ausgeführt haben, beginnt tcpdump mit dem Lauschen. Sie sehen eine anfängliche Meldung, und dann beginnt Ihr Terminal, alle erfassten Pakete anzuzeigen. Abhängig von Ihrem Netzwerk sehen Sie möglicherweise viel Traffic, der für das, was wir tun wollen, nicht relevant ist. Dies können ARP-Anfragen, Hintergrunddienste usw. sein.
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:24:00.123456 ARP, Request who-has 172.16.50.1 tell 172.16.50.254, length 28
10:24:01.567890 IP6 fe80::... > ff02::...: ICMP6, router advertisement, length 80
Lassen Sie dies einige Sekunden laufen, um die Aktivität zu beobachten, und stoppen Sie dann die Erfassung, indem Sie Ctrl+C drücken. Dies verdeutlicht die Herausforderung, in einer belebten Umgebung spezifische Informationen zu finden.
Erfassung mit einem ICMP-Filter verfeinern
Wie Sie im letzten Schritt gesehen haben, kann eine ungefilterte Erfassung unübersichtlich sein. Um uns auf den spezifischen Traffic zu konzentrieren, den wir analysieren möchten, können wir einen Capture-Filter verwenden. Da wir den ping-Befehl verwenden werden, der das ICMP-Protokoll nutzt, weisen wir tcpdump an, nur ICMP-Pakete zu erfassen. Wir fügen auch das Flag -n hinzu, um zu verhindern, dass tcpdump IP-Adressen in Hostnamen auflöst, und -q für eine sauberere Ausgabe. Dies erleichtert die Analyse der Ausgabe erheblich.
Starten Sie nun tcpdump erneut, aber fügen Sie diesmal den Filter icmp und die neuen Flags hinzu.
## Ersetzen Sie eth0 durch Ihren tatsächlichen Schnittstellennamen aus Schritt 1
sudo tcpdump -i eth0 -e -n -q 'icmp'
Der Teil 'icmp' des Befehls ist der Filter. Er weist tcpdump an, alle Pakete außer denen, die das ICMP-Protokoll verwenden, zu ignorieren.
Nachdem Sie diesen Befehl ausgeführt haben, wird tcpdump erneut lauschen, aber das Terminal sollte nun ruhig sein, da es speziell auf ICMP-Traffic wartet.
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Wichtig: Lassen Sie dieses Terminal laufen! tcpdump muss aktiv bleiben, um den Traffic zu erfassen, den wir im nächsten Schritt generieren werden. Sie müssen einen neuen Terminal-Tab oder ein neues Fenster für die nachfolgenden Befehle öffnen. Dies können Sie tun, indem Sie auf das +-Symbol im Terminal-Panel klicken.
Unicast-Traffic mit 'ping' generieren und Frame-Header analysieren
In diesem Schritt generieren und beobachten Sie Unicast-Traffic. Unicast ist eine Eins-zu-Eins-Kommunikationsmethode, bei der ein Frame von einer einzelnen Quelle an ein einzelnes Ziel im Netzwerk gesendet wird. Dazu verwenden Sie das gängige Dienstprogramm ping, das ICMP-Pakete (Internet Control Message Protocol) an einen Zielhost sendet, um die Konnektivität zu überprüfen. Diese Pakete werden für die Übertragung in Ethernet-Frames gekapselt.
Während tcpdump (mit dem icmp-Filter) weiterhin in Ihrem ersten Terminal läuft, müssen Sie etwas Netzwerkaktivität generieren.
Öffnen Sie ein neues Terminal, indem Sie auf das +-Symbol im Terminal-Panel klicken. Verwenden Sie in diesem neuen Terminal den Befehl ping, um einige Pakete an google.com zu senden. Wir verwenden die Option -c 4, um genau vier Pakete zu senden und dann automatisch zu stoppen.
ping -c 4 google.com
Sie sehen in Ihrem zweiten Terminal eine Ausgabe, die dieser ähnelt und die Antworten vom Google-Server anzeigt:
PING google.com (142.250.191.174) 56(84) bytes of data.
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=1 ttl=115 time=1.58 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=2 ttl=115 time=1.55 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=3 ttl=115 time=1.62 ms
64 bytes from fra16s51-in-f14.1e100.net (142.250.191.174): icmp_seq=4 ttl=115 time=1.51 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.510/1.565/1.621/0.040 ms
Wechseln Sie nun zurück zu Ihrem ersten Terminal, in dem tcpdump läuft. Sie sehen mehrere neue Ausgabenzeilen, die während des Pingens erfasst wurden.
Analysieren wir einen der ausgehenden "echo request"-Pakete. Er wird ungefähr so aussehen (MAC- und IP-Adressen unterscheiden sich auf Ihrem System):
10:25:01.123456 00:16:3e:01:be:b3 > de:ad:be:ef:00:01, ethertype IPv4 (0x0800), length 98: 172.16.50.8 > 142.250.191.174: ICMP echo request, id 123, seq 1, length 64
Hier ist die Bedeutung dieser Zeile:
10:25:01.123456: Der Zeitstempel, wann der Frame erfasst wurde.00:16:3e:01:be:b3: Die Quell-MAC-Adresse (die MAC-Adresse Ihrer VM).>: Ein Trennzeichen, das die Richtung des Traffics anzeigt (von der Quelle zum Ziel).de:ad:be:ef:00:01: Die Ziel-MAC-Adresse. Beachten Sie, dass dies wahrscheinlich das Gateway (Router) Ihres lokalen Netzwerks ist, nicht der Google-Server. Ihre VM sendet den Frame an das Gateway, das ihn dann ins Internet weiterleitet.ethertype IPv4: Dieses Feld zeigt an, dass die Daten-Payload des Ethernet-Frames ein IPv4-Paket ist.172.16.50.8 > 142.250.191.174: Dies sind die Layer-3-Informationen (IP), die die Quell- und Ziel-IP-Adressen anzeigen.ICMP echo request: Dies identifiziert das Paket als Teil einerping-Anfrage.
Sie sehen auch die entsprechenden "echo reply"-Frames, die zurückkommen. Beachten Sie, wie die Quell- und Ziel-MAC-Adressen vertauscht sind.
Gehen Sie schließlich zurück zum tcpdump-Terminal und drücken Sie Ctrl+C, um die Erfassung zu stoppen.
Broadcast-Traffic über ARP generieren und die Broadcast-MAC-Adresse identifizieren
In diesem Schritt vergleichen Sie Unicast-Traffic mit Broadcast-Traffic. Während Unicast eine Eins-zu-Eins-Nachricht ist, ist ein Broadcast eine Eins-zu-Allen-Nachricht, die an jedes Gerät im lokalen Netzwerksegment gesendet wird. Ein Hauptbeispiel hierfür ist das Address Resolution Protocol (ARP), das verwendet wird, um die MAC-Adresse zu ermitteln, die mit einer bestimmten IP-Adresse verknüpft ist. Dazu sendet ein Gerät einen Broadcast-Frame mit der Frage: "Wer hat diese IP-Adresse?"
Zuerst starten wir eine neue tcpdump-Erfassung. Diesmal fügen wir einen Filter hinzu, um nur ARP-Pakete anzuzeigen. Wir verwenden auch das Flag -n, um zu verhindern, dass tcpdump IP-Adressen in Hostnamen auflöst, und -q für eine sauberere Ausgabe.
Führen Sie in einem Terminal den folgenden Befehl aus und denken Sie daran, eth0 durch Ihren Schnittstellennamen aus Schritt 1 zu ersetzen.
## Ersetzen Sie eth0 durch Ihren tatsächlichen Schnittstellennamen
sudo tcpdump -i eth0 -e -n -q 'arp'
tcpdump lauscht nun, aber nur auf ARP-Traffic.
Als Nächstes müssen wir eine ARP-Anfrage auslösen. Ein zuverlässiger Weg, dies zu tun, ist das Leeren des ARP-Caches Ihres Systems und dann der Versuch, ein anderes Gerät im lokalen Netzwerk, wie Ihren Gateway-Router, zu kontaktieren. Das Leeren des Caches zwingt Ihr System, die MAC-Adresse des Gateways mithilfe von ARP neu zu ermitteln.
Öffnen Sie ein neues Terminal. Finden Sie zuerst die IP-Adresse Ihres Gateways mit dem Befehl ip route.
ip route | grep default
Die Ausgabe zeigt Ihre Standardroute an, und die IP-Adresse nach "via" ist Ihr Gateway.
default via 172.16.50.1 dev eth0
Hinweis: Ihre Gateway-IP-Adresse wird wahrscheinlich anders sein. Es ist entscheidend, die IP-Adresse aus diesem Befehl in den folgenden Schritten zu verwenden. Ein häufiger Fehler ist die Verwendung einer anderen IP wie
172.17.0.1, die oft das Gateway für ein lokales Docker-Netzwerk ist und für diese Übung nicht das richtige Ergebnis liefert.
In diesem Beispiel ist das Gateway 172.16.50.1. Leeren Sie nun Ihren ARP-Cache mit dem Befehl ip neigh flush. Dadurch werden bekannte MAC-Adresszuordnungen entfernt, was Ihr System zwingt, ARP zu verwenden, um sie erneut zu finden.
sudo ip -s -s neigh flush dev eth0
Sie sehen möglicherweise eine Ausgabe, die bestätigt, dass Einträge gelöscht wurden. Schließlich pingen Sie das Gateway nur einmal, um die ARP-Auflösung auszulösen.
## Ersetzen Sie 172.16.50.1 durch Ihre tatsächliche Gateway-IP
ping -c 1 172.16.50.1
Wechseln Sie nun zurück zu Ihrem ersten Terminal, in dem tcpdump läuft. Sie sehen den generierten ARP-Traffic. Suchen Sie nach der Zeile "Request":
10:30:01.123456 00:16:3e:01:be:b3 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: ARP, Request who-has 172.16.50.1 tell 172.16.50.8, length 28
Analysieren wir diesen Broadcast-Frame:
00:16:3e:01:be:b3: Die Quell-MAC-Adresse (Ihre VM).ff:ff:ff:ff:ff:ff: Dies ist die spezielle Broadcast-MAC-Adresse. Wenn ein Switch einen Frame mit dieser Zieladresse sieht, leitet er ihn über alle seine Ports an jedes angeschlossene Gerät weiter.ethertype ARP: Dies zeigt an, dass die Payload des Frames ein ARP-Paket ist.ARP, Request who-has 172.16.50.1 tell 172.16.50.8: Dies ist die ARP-Nachricht selbst, eine Broadcast-Frage an das gesamte Netzwerk nach der MAC-Adresse von172.16.50.1.
Sie sehen auch das "Reply"-Paket, das ein Unicast-Frame ist, der direkt vom Gateway an die MAC-Adresse Ihrer VM gesendet wird.
Sie können die tcpdump-Erfassung nun stoppen, indem Sie in seinem Terminal Ctrl+C drücken.
Zusammenfassung
In diesem Lab haben Sie den grundlegenden Prozess der Analyse von Ethernet-Frames mit tcpdump in einer Linux-Umgebung kennengelernt. Sie begannen mit der Vorbereitung Ihres Systems, was die Installation des tcpdump-Dienstprogramms mit dem apt-Paketmanager und die Identifizierung Ihrer primären Netzwerkschnittstelle mit dem Befehl ip addr umfasste. Anschließend lernten Sie, wie Sie eine Paketerfassung starten, zunächst durch Ausführen einer ungefilterten Erfassung, um den gesamten Netzwerkverkehr zu beobachten und die Notwendigkeit von Filtern zu erkennen. Nach dem Stoppen der anfänglichen Erfassung lernten Sie, einen icmp-Filter mit sudo tcpdump -i eth0 -e -n -q 'icmp' anzuwenden, um sich speziell auf den zu analysierenden Traffic zu konzentrieren.
Das Lab führte Sie dann durch die Generierung und Analyse von zwei Haupttypen von Netzwerkverkehr. Sie verwendeten den ping-Befehl, um Unicast-Traffic zu erzeugen, und untersuchten die gefilterte tcpdump-Ausgabe, um die spezifischen Quell- und Ziel-MAC-Adressen in den Ethernet-Frame-Headern zu identifizieren. Anschließend generierten Sie Broadcast-Traffic, indem Sie eine ARP-Anfrage mit einer separaten, mit arp gefilterten Erfassung initiierten, und lernten, die eindeutige Broadcast-MAC-Adresse ff:ff:ff:ff:ff:ff zu erkennen, die einen Frame kennzeichnet, der für alle Geräte im lokalen Netzwerksegment bestimmt ist.



