Ein wichtiger Weg, um an Informationen zu gelangen und einen Angriff vorzubereiten, besteht im Sniffing, zu Deutsch: Schnüffeln. Darunter verstehen wir das Mitschneiden von (Netzwerk-)Traffic mit dem Ziel, die Kommunikation mitzulesen und ggf. wichtige bzw. geheime Informationen zu erhalten. Grundsätzlich ist das Sniffing bei jeder Art von Kommunikation möglich, wobei bestimmte Protokolle einfacher zu interpretieren sind als andere.
Wenn Sie dieses Kapitel durchgearbeitet haben, sind Sie in der Lage, Netzwerk-Sniffer effektiv einzusetzen, um wertvolle Informationen aus dem Netzwerk-Datenverkehr herauszufiltern und in weiteren Schritten im Rahmen eines Hacking-Angriffs bzw. Penetrationstests einzusetzen.
16.1 Grundlagen von Netzwerk-Sniffern
Sogenannte »Sniffer« sind Tools, die Informationen innerhalb eines Datenstroms mitschneiden und analysieren. Netzwerk-Sniffer tun dies, wie der Name schon sagt, im Netzwerk. Dabei lauschen sie auf dem ihnen zugewiesenen Interface. Dies kann kabelgebunden (Ethernet) oder kabellos (WLAN) geschehen.
16.1.1 Technik der Netzwerk-Sniffer
Ein Netzwerk-Sniffer kann nur die Daten bzw. Datenpakete analysieren, die von der entsprechenden Schnittstelle empfangen bzw. gesendet werden.
Dabei unterscheiden wir zwischen zwei verschiedene Varianten:
Non-promiscuous Mode: Hierbei werden nur diejenigen Pakete betrachtet, die von der NIC (Network Interface Card) gesendet oder an die eigene Adresse gerichtet sind, einschließlich Broadcast- und Multicast-Pakete. Dieser Modus ist der Standard-Modus.
Promiscuous Mode: Dieser Modus verarbeitet darüber hinaus auch diejenigen Datenpakete, die lediglich von der NIC empfangen, aber nicht explizit an sie gerichtet sind, z.B. Nachrichten mit anderen Zieladressen. Dieser Modus ist für das Sammeln von Informationen wünschenswert, benötigt jedoch Administratorprivilegien.
Okay, gleich vorab zur Klarstellung: Wir schreiben von »Datenpaketen«, meinen aber eigentlich die Ethernet-Frames, also die Layer-2-Dateneinheiten (PDUs). Denn tatsächlich können Netzwerk-Sniffer auch die Layer-2-Informationen aus dem Ethernet-Frame-Header sammeln und analysieren.
Grundsätzlich können bei kabelgebundenen Medien, sprich: im Ethernet, nur diejenigen Frames mitgeschnitten werden, die auch bei der NIC ankommen, auf der der Mitschnitt (engl. Capture genannt) läuft. Das bedeutet, wir müssen für unseren Mitschnitt eine möglichst effektive Stelle finden, an der wir in das Netzwerk lauschen. Dabei gelten folgende Einschränkungen und Bedingungen:
Nur Hubs leiten empfangene Frames an alle anderen Ports weiter. Hubs sind heutzutage kaum noch im Einsatz.
Ein Switch leitet an den Access-Port (Endgeräte-Port) nur passende Frames weiter, also Unicast-Frames an die eigene MAC-Adresse, Broadcast- und Multicast-Frames. Nur, wenn eine Ziel-MAC-Adresse noch nicht bekannt ist, wird der entsprechende Frame zunächst »geflutet« (engl. to flood), also an alle Ports weitergeleitet.
Alle anderen Unicast-Frames gehen an einem Standard-Access-Port vorbei, da sie das angeschlossene Endgerät nichts angehen. Ausnahmen sind hier nur Tagged-Ports bzw. Trunk-Ports (Cisco-Terminologie), über die unter bestimmten Bedingungen auch Traffic geleitet wird, der in unterschiedlichen VLANs mit verschiedenen Ziel-MAC-Adressen liegt.
Bestimmte Frames (insbesondere Broadcast und Multicast) werden in der Regel nicht über Subnetzgrenzen hinweg transportiert und können daher nicht in einem anderen Segment mitgelesen werden.
Daraus resultiert, dass es gar nicht so leicht ist, einen effektiven Mitschnitt vorzunehmen. Je nach Szenario muss das Ziel also sein:
Entweder auf einem der betreffenden Systeme lokal einen Mitschnitt zu starten, um möglichst direkt die gewünschten Informationen zu erhalten, oder
auf einem Switch oder Router einen sogenannten »Mirror-Port« einzurichten, um Traffic an einen anderen Port zu duplizieren und auf den Mirror-Port zu spiegeln – dann kann dort der Mitschnitt erfolgen, oder aber
eine klassische Man-in-the-Middle-Attacke auszuführen, um den Traffic zwischen zwei oder mehreren Systemen über den eigenen Host zu leiten. Dies ist auch eine der wenigen Möglichkeiten, verschlüsselte Daten unter bestimmten Bedingungen mitlesen zu können.
Im nächsten Kapitel zeigen wir Ihnen, wie Sie vorgehen können, um sich in eine optimale Position für einen effektiven Mitschnitt mittels Netzwerk-Sniffer zu bringen. An dieser Stelle werden wir uns zunächst mit der Analyse des Mitschnitts an sich begnügen und gehen davon aus, dass wir die gewünschte Position bereits erreicht haben.
16.1.2 Wireshark und die Pcap-Bibliotheken
Wireshark (früher: Ethereal) ist der bekannteste und beliebteste aller Netzwerk-Sniffer. Er ist Open Source und kann daher kostenfrei unter www.wireshark.org/download.html heruntergeladen werden. Wireshark ist für diverse Plattformen erhältlich, unter anderem für Windows und Linux.
Damit Wireshark seinen Dienst tun kann, benötigt er eine Bibliothek namens »Pcap«. Diese Abkürzung steht für »Packet Capture«. Während unter Linux-Systemen das Paket libpcap heißt, wird die Windows-Portierung als Npcap bezeichnet. Npcap ist ein Teil des Nmap-Projekts und löst WinPcap ab. Die Bibliothek ist wesentlich aktueller und hat damit auf neueren Systemen weniger Kompatibilitätsprobleme. So oder so müssen Sie sich keine großen Gedanken darum machen, da die notwendigen Pakete und Bibliotheken mit der Wireshark-Installationsroutine bzw. dem jeweiligen Paketmanager der Distribution als Abhängigkeit mitinstalliert werden. Und damit wären wir auch schon beim nächsten Thema ...
16.2 Wireshark installieren und starten
Die gute Nachricht zuerst: Auf Kali Linux sind Wireshark und andere Netzwerk-Sniffer, wie tcpdump oder TShark, bereits vorinstalliert. Letzteres ist Bestandteil des Lieferumfangs von Wireshark und damit in der Regel mit diesem verknüpft. Mehr dazu in Abschnitt 16.8.
Auf anderen Plattformen müssen Sie Wireshark ggf. zunächst installieren, bevor Sie das Tool nutzen können. Schauen wir uns die wichtigsten beiden Betriebssysteme, Linux und Windows, kurz an.
16.2.1 Installation unter Linux
Fast jede Distribution liefert Wireshark mit, sodass die Installation in der Regel sehr einfach mit dem jeweiligen Paketmanager erfolgt. Auf Debian-Derivaten (insbesondere Debian selbst, Ubuntu und Kali) nutzen wir in der Regel das Kommandozeilen-Tool apt
. Sind Sie als Superuser root angemeldet, können Sie den Befehl direkt eingeben und entweder Wireshark und/oder TShark separat installieren:
# apt install wireshark
# apt install tshark
Sollten Sie einen nicht-privilegierten User mit Sudo-Rechten nutzen, fügen Sie sudo
vor dem Befehl ein, um für diesen Vorgang Administrator-Privilegien zu erhalten.
Der große Vorteil von distributionseigenen Paketmanagern ist die Fähigkeit, Abhängigkeiten automatisch aufzulösen. So ist z.B. die Bibliothek libpcap essenziell für den Betrieb von Wireshark & Co. Diese müssen Sie jedoch nicht separat zur Installation auswählen. Stattdessen kümmert sich der Paketmanager automatisch darum. Sie werden feststellen, dass im Rahmen der Installation der o.a. Pakete auch andere Abhängigkeiten aufgelöst werden.
Die Installation sollte somit keine größere Herausforderung darstellen und ist in der Regel rasch abgeschlossen.
16.2.2 Installation unter Windows
Windows-üblich gestaltet sich die Installation von Wireshark und TShark sehr einfach. Alles ist im Installer enthalten – einschließlich der entsprechenden Pcap-Bibliothek und aller sonstigen Kommandozeilentools.
Die Pcap-Bibliothek ist zwingend erforderlich. Sollte sie noch nicht installiert sein, wird dies automatisch durchgeführt. Ab der Wireshark-Version 2.9.0 wird NPcap anstelle von WinPcap mitgeliefert (siehe Abbildung 16.2).
Darüber hinaus bietet Wireshark in neueren Versionen die Option, auch USB-Traffic mitschneiden zu können. Dies mag in speziellen Szenarien nützlich sein, allerdings werden wir uns in diesem Rahmen nicht näher damit beschäftigen. Daher lassen wir das Häkchen leer, wie in Abbildung 16.3 gezeigt.
Anschließend läuft der Installationsassistent anstandslos durch und wird ggf. nur durch die Zwischeninstallation von Npcap unterbrochen. Die Installationsoptionen können Sie wie voreingestellt übernehmen. Am Ende steht Ihnen Wireshark für den ersten Start zur Verfügung.
16.2.3 Der erste Start
In Kali Linux können Sie Wireshark aus dem Anwendungsmenü aufrufen, wie Abbildung 16.4 zeigt.
Direkter ist es manchmal, wenn Sie Wireshark über ein (ohnehin offenes) Terminal aufrufen können. Dies tun Sie in Kali Linux bitte ggf. im Kontext des Benutzers kali und nicht als root
, sonst kann es zu Fehlermeldungen kommen. Dabei starten Sie das Programm am besten mit &
im Hintergrund, um das Terminalfenster weiterhin zur Verfügung zu haben:
Auf anderen Linux-Systemen verhält es sich – je nach Distribution – analog. Es ist möglich, dass Wireshark bei einigen Distributionen nur im Kontext des Systemadministrators root korrekt funktioniert.
Auf einem Windows-System können wir bequem über das Desktop-Symbol (falls erstellt) oder das Startmenü zugreifen. Wireshark startet als Fensteranwendung und präsentiert sich wie in Abbildung 16.5 gezeigt. Gegebenenfalls sind deutlich mehr Schnittstellen zu sehen.
Die Oberfläche ist auf allen Plattformen weitgehend identisch, Unterschiede bestehen nur im Detail. So finden sich z.B. auf Linux-Systemen andere Schnittstellen-Bezeichnungen als auf Windows. Oft werden mehrere Schnittstellen angezeigt, sodass Sie zunächst die richtige für den Mitschnitt auswählen müssen.
Zunächst einmal müssen wir nun einige Einstellungen vornehmen, um einen Mitschnitt sinnvoll und zielgerichtet starten zu können. Was Sie hier beachten müssen, lernen Sie in den nächsten Abschnitten.
16.3 Die ersten Schritte mit Wireshark
Wir werden nun einen ersten Mitschnitt vornehmen, um uns einen Überblick zu verschaffen. Dabei lernen Sie die wichtigsten Dialogfenster kennen und erfahren, wie die Oberfläche und die Anzeige von Wireshark aufgebaut sind.
16.3.1 Grundeinstellungen
Für einen Mitschnitt mittels Wireshark gibt es diverse Einstellungsmöglichkeiten. Um diese anzupassen, klicken Sie in der Menüleiste auf Aufzeichnen|Optionen, um zum Haupt-Dialogfenster für den Mitschnitt zu gelangen. Im Register Eingabe in der Spalte Schnittstelle können Sie wählen, auf welcher NIC der Mitschnitt erfolgen soll. Markieren Sie diese, auch wenn es sich um die einzige Option handelt, wie in Abbildung 16.6 zu sehen. Damit stellen Sie sicher, dass Sie auf dem gewünschten Interface mitschneiden.
Darüber hinaus sollten Sie sicherstellen, dass das Häkchen für den promiskuitiven Modus (Promiscuous Mode) aktiviert ist, um möglichst umfangreich mitschneiden zu können. Klicken Sie nun direkt auf Start, so wird ein Standard-Mitschnitt ohne Filter durchgeführt. An dieser Stelle wollen wir uns jedoch zunächst noch einige weitere Optionen anschauen, klicken Sie daher auf das Register Optionen. Hier können Sie weitere wichtige Einstellungen vornehmen, wie Abbildung 16.7 zeigt.
Die Anzeigeoptionen links bestimmen, wie sich Wireshark während des Mitschnitts verhält. In den meisten Fällen passen die Einstellungen. Möchten Sie jedoch während des Mitschnitts bereits in Ruhe die einzelnen Pakete studieren, entfernen Sie das Häkchen vor Automatisches Scrollen während des Mitschnitts.
Besonders wichtig sind die Einstellungen für die Namensauflösung (in Abbildung 16.7 umrahmt). Wireshark kann die OUIs (Organizationally Unique Identifier, sprich: die Hersteller) der MAC-Adressen auflösen und entsprechend anzeigen. Dies wird per Default auch getan und hilft oftmals, sich zu orientieren, von welchem Gerätetyp (z.B. Cisco-Router) ein Frame kommt.
Die Netzwerknamen dagegen sind DNS-Namen. Oftmals ist es besser, die numerischen IP-Adressen zu sehen, als die aufgelösten DNS-Namen, daher ist diese Option per Default nicht gesetzt.
Auch für die TCP- und UDP-Ports kann Wireshark versuchen, eine Auflösung vorzunehmen – dies versteckt sich hinter der Option Transportschichtnamen auflösen. Auch hier ist jedoch Vorsicht geboten, da dies häufig eher zu Irritationen als zu einer besseren Übersichtlichkeit führt. Im Zweifel testen Sie diese Optionen selbst aus und entscheiden fallweise, was für Sie besser passt.
Möchten oder müssen Sie die Größe des Mitschnitts beschränken, so können Sie dies in den Stopp-Optionen unten tun. Dies ist jedoch nur in ausgewählten Szenarien sinnvoll, z.B. wenn Sie einen Mitschnitt genau eine Stunde laufen und anschließend automatisch stoppen lassen möchten bzw. wenn der Speicherplatz beschränkt ist.
Das mittlere Register dieses Dialogfensters namens Ausgabe beinhaltet die Optionen zum automatischen Speichern von Dateien. Es wird dann interessant, wenn Sie längere, unbeaufsichtigte Mitschnitte durchführen und bereits während des Mitschnitts in Dateien speichern möchten. Diese Optionen ergänzen die Einstellungen im Register Optionen unter Mitschnitt automatisch stoppen nach...
Damit haben wir einen ersten Blick in die Aufzeichnungsoptionen geworfen. Jetzt wird es Zeit, Wireshark in Aktion zu erleben!
16.3.2 Ein erster Mitschnitt
Wir gehen hier mal davon aus, dass wir uns in einer relativ kleinen und abgeschotteten Umgebung befinden (also z.B. unsere Laborumgebung), sodass der Mitschnitt etwas übersichtlicher wird. Etwas später lernen Sie, wie Sie effektiv Filter setzen können, um den Mitschnitt auf Ihre Anforderungen zuzuschneiden. Zu diesem Zeitpunkt wird Ihr eigener Mitschnitt im Detail sicherlich anders aussehen als nachfolgend gezeigt. Das tut uns aber nicht weh, da wir uns hier nur einen ersten Überblick verschaffen wollen. Sie sollten die folgenden Schritte unbedingt praktisch nachvollziehen.
Also los: Klicken Sie auf Start, um den Mitschnitt ohne Filter zu starten. Öffnen Sie einen Browser auf dem System, auf dem Sie »sniffen«, und rufen Sie eine beliebige Webseite auf. Warten Sie, bis die Seite angezeigt wird. Anschließend klicken Sie auf das rote Stopp-Symbol, um den Mitschnitt zu beenden (siehe Abbildung 16.8).
Nun sind diverse Pakete mitgeschnitten worden. Da wir keinen Filter gesetzt haben, könnte es sich um einige Hundert Pakete handeln. Wireshark zeigt uns ein dreigeteiltes Hauptfenster an, wie in Abbildung 16.9 gezeigt.
Im oberen Teil sehen Sie die Paketübersicht. Jede Zeile zeigt ein Paket an. Die Pakete werden entsprechend ihrer Art eingefärbt, um sie besser unterscheiden zu können. Die Spalten sind konfigurierbar. In der Voreinstellung werden sieben Spalten angezeigt, dies sind die wichtigsten:
Der Zeitstempel in der Spalte Time gibt den Zeitpunkt relativ zum ersten mitgeschnittenen Paket an.
Die Spalten Source und Destination sind selbsterklärend.
Die Spalte Protocol enthält das höchste Protokoll im Paket im Sinne des OSI-Modells.
In der Spalte Info findet sich eine Übersicht über die wichtigsten Informationen im Paket.
Der Mittelteil zeigt die Paketdetails an. Hier können Sie bis auf Bitebene genau erkennen, welche Informationen in welchem Protokoll enthalten sind. Je nachdem, welche Informationen Sie in den Paketdetails angeklickt haben, wird dieser Bereich in den Rohdaten im unteren Fenster markiert und angezeigt – in Abbildung 16.9 ist dies das Transmission Control Protocol (TCP). Die Ansicht und die Aufteilung können Sie in den Einstellungen konfigurieren.
Unter Umständen fällt es Ihnen zunächst schwer, in der Vielfalt der mitgeschnittenen Pakete irgendwo einen Zusammenhang zu erkennen. Daher sollten wir nun anfangen, ein wenig Ordnung in das Paket-Chaos zu bringen.
16.4 Mitschnitt-Filter einsetzen
Wie Sie vielleicht in unserem ersten Mitschnitt feststellen könnten, wächst die Menge der Pakete eines Mitschnitts unter Umständen sehr schnell an, wenn wir die Anzeige der für uns relevanten Pakete nicht näher eingrenzen. Wir können dies auf zwei Wegen tun, die sich nicht gegenseitig ausschließen:
Im Rahmen eines Mitschnittfilters (Capture Filter): Die mitgeschnittenen Pakete werden von Anfang an schon beim Mitschnitt begrenzt.
Als Anzeigefilter (Display Filter): Wir schneiden alle ein- und ausgehenden Pakete mit und steuern erst im Anschluss, was wir uns anzeigen lassen wollen.
Falls Sie einen umfangreicheren Mitschnitt vornehmen möchten, ist ein Mitschnitt-Filter häufig die bessere Wahl, weil Sie damit den Umfang des Mitschnitts von Anfang an begrenzen können. Schauen wir uns also zunächst einmal an, wie diese Filtertechnik funktioniert.
16.4.1 Analyse eines TCP-Handshakes
Schauen wir uns als Erstes einmal einen 3-Way-Handshake an. Dazu setzen Sie im Schnittstellen-Dialog einen Mitschnittfilter wie in Abbildung 16.10 gezeigt.
Dieser Filter reduziert den Mitschnitt auf das Protokoll TCP und auf den Quell- oder Zielport 80. Damit sollten wir die unverschlüsselte Kommunikation zu einem Webserver mitschneiden können.
Wireshark prüft die Syntax des Mitschnittfilters. Wird das Eingabefeld grün, so wurde der Filter erkannt. In einigen Fällen dauert diese Prüfung etwas länger, haben Sie Geduld!
Starten Sie den Mitschnitt, öffnen Sie einen Browser und geben Sie die Adresse einer beliebigen Website an, die HTTP verwendet und keine automatische Umleitung auf HTTPS hat, z.B. neverssl.com. Anschließend können Sie den Mitschnitt beenden. Schauen wir uns das Ergebnis an, wie es in Abbildung 16.11 dargestellt ist. Achten Sie zwecks Referenzierung auf die erste Spalte mit den Paketnummern.
Deutlich ist zu sehen, wie im Beispiel in Paket Nr. 1 von der IP-Adresse 192.168.8.112 eine Verbindungsanfrage [SYN] an die IP-Adresse 93.184.220.29 vom Quellport 43898 (einem dynamischen Port) auf den Zielport 80 über das Transportprotokoll TCP geht. Die Antwort kehrt Quell- und Zielport um, wobei die Flags [SYN, ACK] gesetzt werden (Paket Nr. 2).
Das dritte Paket ist dann eine Antwort vom Client zum Server, bei dem nur noch das ACK-Flag gesetzt wird – fertig ist der 3-Way-Handshake! Dies können Sie übrigens auch schön im Detailfenster sehen, wenn Sie die Details zum TCP öffnen, wie in Abbildung 16.12 gezeigt.
Genauso, wie Sie die Details zum TCP betrachten können, ist es möglich, für alle anderen Protokolle, wie z.B. ARP, IP, ICMP, UDP, oder auch eines der Anwendungsprotokolle, wie HTTP oder FTP, sämtliche Details zu analysieren.
16.4.2 Der Ping in Wireshark
Lassen Sie uns für den folgenden Versuch weitere Mitschnittfilter betrachten. Es ist möglich, Filter miteinander zu kombinieren. So können wir einen Filter setzen, um den Mitschnitt auf die ICMP- oder ARP-Kommunikation zwischen zwei bestimmten IP-Adressen zu beschränken, wie in Abbildung 16.13 dargestellt.
Wie Sie sehen, können Sie Bedingungen mit and
bzw. or
logisch kombinieren, sodass das entsprechende Paket nur dann mitgeschnitten wird, wenn die mit and
verknüpften Bedingungen alle erfüllt sind bzw. bei mit or
verknüpften Bedingungen entweder die eine oder die andere.
Im obigen Filterausdruck spielt es keine Rolle, ob die IP-Adresse hinter dem Schlüsselwort host
als Absender- oder Zieladresse im IP-Header auftaucht. Daher werden Hin- und Rückpakete zwischen den beiden Hosts mitgeschnitten.
Der Ausdruck and
(icmp
or
arp)
sorgt dafür, dass zusätzlich die Bedingung erfüllt sein muss, dass es sich entweder um ein ICMP-Paket oder um ein ARP-Paket handeln muss. Die Klammern regeln die Zusammengehörigkeit.
Wählen Sie die eigene und eine definierte Ziel-IP-Adresse (z.B. die des Default-Gateways) für Ihren eigenen Filterausdruck aus. Starten Sie den Mitschnitt und öffnen Sie ggf. ein Terminalfenster. Nun pingen Sie das Ziel an und senden 4 oder 5 Echo-Requests. Anschließend können Sie den Mitschnitt wieder stoppen. Das Ergebnis sollte ungefähr aussehen, wie in Abbildung 16.14 dargestellt:
Sie können die ICMP-Pakete Echo request und Echo reply anhand der Infospalte auf den ersten Blick erkennen. In den Details zu ICMP sind auch der Typ (8 bzw. 0) sowie der Code (0) zu sehen. Oben in der Paketliste eingerahmt sind zwei ARP-Pakete: Hier erkundigt sich das Default-Gateway mit der IP-Adresse 192.168.8.1 nach der MAC-Adresse von 192.168.8.112 (also unserem eigenen System). Die Zieladresse ist die Broadcast-Adresse. Unser System antwortet mit einem entsprechenden ARP-Reply. Zu erkennen ist auch, dass die (nach dem Hersteller aufgelösten) MAC-Adressen als Absender- und Zieladressen angegeben sind, da es sich bei ARP um ein Protokoll handelt, das nur über die MAC-Adressen kommuniziert, und die IP-Adressen nur in der Payload des Protokolls vorkommen.
16.4.3 Weitere Mitschnittfilter
In diesem Abschnitt lernen Sie, wie Sie verschiedene Filter und Filterkombinationen einsetzen können. Dabei nutzen wir Beispiele, die das Prinzip und das jeweilige Schlüsselwort verdeutlichen:
src host 10.1.1.1 and dst host 10.1.1.2
Filtert Kommunikation von der Absender-Adresse (Source) 10.1.1.1 auf die Empfänger-Adresse (Destination) 10.1.1.2. Dabei ist es irrelevant, welche Protokolle verwendet werden (ICMP, TCP oder UDP, Anwendungsprotokolle). Die Kommunikation wird unidirektional gefiltert, mit diesem Ausdruck werden also keine Antwortpakete aufgezeichnet.
(host 10.1.1.1 or host 10.1.1.2) and (port 21 or port 80)
Filtert nach den IP-Adressen 10.1.1.1 oder 10.1.1.2, wobei diese Absender- oder Ziel-Adressen sein können. Zusätzlich muss es sich aber um Port 21 oder Port 80 handeln, wobei auch hier egal ist, ob es sich um den Quell- oder Zielport handelt.
src host 10.1.1.1 and udp dst port 53
Dieser Filter umfasst alle Pakete von der Absenderadresse 10.1.1.1, die an den Zielport 53/udp gehen – egal, welche Zieladresse eingetragen ist.
not broadcast and not multicast
Filtert alle Pakete, die weder an die Broadcast- noch an eine Multicast-Adresse gerichtet sind (übrig bleiben alle Unicast-Pakete).
ether src host 00:aa:bb:11:22:33
Auf diese Weise können Sie MAC-Adressen filtern. In diesem Fall lassen Sie sich nur Pakete von der angegebenen Absender-MAC-Adresse anzeigen. Im Folgenden finden Sie nochmals alle beschriebenen Filterausdrücke in der Übersicht:
Tabelle 16.1: Wichtige Mitschnittfilter in der Übersicht
Filterausdruck
|
Bedeutung
|
host <IP-Adresse/DNS-Name>
|
Diese Adresse (egal ob Quell- oder Zieladresse)
|
port <Portnummer>
|
Dieser Port (egal ob Quell- oder Zielport, egal ob TCP oder UDP)
|
src, dst
|
Absender bzw. Ziel, kann bei Host-, Port- und Ethernet-Adressen angewendet werden
|
and, or, not
|
Filterausdrücke müssen beide (and), entweder oder (or) bzw. dürfen nicht (not) erfüllt sein
|
()
|
Klammern definieren zusammengehörige, zusammengesetzte Ausdrücke
|
arp, icmp, tcp, udp
|
Auswahl des Netzwerk-Protokolls (Anwendungsprotokolle werden indirekt über die Ports ausgewählt)
|
ether host <MAC-Adresse>
|
Diese MAC-Adresse (egal ob Quell- oder Zieladresse)
|
broadcast, multicast
|
Broadcast oder Multicast-Zieladressen
|
Mit dieser Auswahl an Mitschnittfiltern sollten sich die meisten Szenarien und Zielstellungen sehr gut abbilden lassen.
16.5 Anzeigefilter einsetzen
Das Szenario: Sie haben einen umfassenden Wireshark-Mitschnitt gestartet und keinen Mitschnittfilter festgelegt, sodass jetzt viele Tausend Pakete die Übersicht erschweren. An dieser Stelle haben wir eine gute und eine schlechte Nachricht für Sie – zunächst die gute: Mit Anzeigefiltern können Sie jederzeit auch nach dem Abschluss eines Mitschnitts noch Ordnung in das Paket-Chaos bringen.
Und jetzt die schlechte Nachricht: Leider ist die Syntax nicht dieselbe wie beim Mitschnittfilter – wäre ja auch zu einfach gewesen. Die Konsequenz: Wir werden uns im Folgenden auch noch detailliert mit den Anzeigefiltern beschäftigen müssen, um Ihnen das nötige Rüstzeug mit auf den Weg zu geben, um eine effektive Netzwerk-Analyse mithilfe von Anzeigefilter vornehmen zu können.
16.5.1 Eine HTTP-Sitzung im Detail
An dieser Stelle nehmen wir eine HTTP-Sitzung unter die Lupe und filtern die gewünschten Pakete über einen geeigneten Anzeigefilter. Dafür starten wir wieder denkbar einfach: Wählen Sie die passende Schnittstelle aus, entfernen Sie ggf. alle noch vorhandenen Mitschnittfilter und klicken Sie auf Start.
Nun können Sie in aller Ruhe einen Browser öffnen und eine beliebige Webseite aufrufen. Wir zeigen es hier einmal mit unserer alten Testseite http://www.hacking-akademie.de. Nachdem die Webseite im Browser angezeigt wurde, beenden Sie den Mitschnitt, damit wir mit der Analyse beginnen können.
Die hier gezeigte Kommunikation läuft über HTTP. Das ist heutzutage eher selten geworden, die meisten Webpräsenzen wechseln automatisch zu HTTPS. Eine gute Beispielseite ist neverssl.com. Alternativ dazu können Sie auch Ihren eigenen Webserver unter Windows oder Linux aufsetzen. Eine Anleitung hierzu finden Sie für beide Plattformen unter https://www.hacking-akademie.de/buch/member. Nebenbei: Selbstverständlich ist auch die Hacking-Akademie mittlerweile nur noch über HTTPS erreichbar.
DNS-Namensauflösung
Als Erstes möchten wir herausfinden, wie die IP-Adresse der Website lautet. Daher filtern wir nach Port 53/udp und betrachten damit die DNS-Kommunikation. Dies geschieht durch den Filter udp.port
==
53
. Geben Sie diesen in das Feld für die Anzeigefilter über der Paketliste ein und klicken Sie rechts neben der Filterzeile auf den Pfeil oder bestätigen Sie die Eingabe mit Enter, um diesen Anzeigefilter anzuwenden, wie in Abbildung 16.15 gezeigt.
Sollten Sie keine entsprechenden DNS-Pakete zu der von Ihnen besuchten Seite sehen, dann hat die DNS-Auflösung schon zu einem früheren Zeitpunkt stattgefunden und befindet sich ggf. noch im Cache. Diesen können Sie unter Windows in der Eingabeaufforderung mit ipconfig
/flushdns
leeren und den Mitschnitt erneut starten. Auf Linux-Systemen ist es nicht ganz so einfach.
Nun suchen wir nach der Antwort (Standard query response) auf das DNS-Query-Paket für www.hacking-akademie.de. Auch dies ist in Abbildung 16.15 dargestellt.
In den Details finden wir heraus, dass die IP-Adresse der Webpräsenz in unserem Fall 81.169.194.253 lautet. Ganz nebenbei haben Sie damit einen Blick hinter die Kulissen der DNS-Kommunikation geworfen und gesehen, wie A- und AAAA-Einträge für eine Webpräsenz abgefragt und – wenn vorhanden – beantwortet werden. Erinnern Sie sich? A für IPv4 und AAAA für IPv6.
Die HTTP-Kommunikation
Nun wissen wir, wie wir den Filter setzen müssen. Vor dem Hintergrund, dass Web-Traffic via HTTP regelmäßig auf Port 80/tcp stattfindet, formulieren wir folgenden Anzeigefilter:
ip.addr == 81.169.194.253 and tcp.port == 80
Schauen wir uns das Ergebnis an. Die wichtigen Stellen sind umrahmt (Abbildung 16.16).
Nach dem obligatorischen 3-Way-Handshake (Pakete 19, 21 und 22) sendet der Client in Paket 23 einen HTTP-GET-Befehl, um über HTTP/1.1 einen Startpunkt des Wurzelverzeichnisses (/
) der Webpräsenz aufzurufen. Der Inhalt dieser Anfrage lässt sich in Klartext und in allen Details in den Rohdaten erkennen. Wenn Sie möchten, können Sie sich auch die formalen Informationen zum HTTP-Header im Detailfenster anschauen. Hier sehen Sie auch erneut sehr schön, wie die Protokolle ineinander verschachtelt sind und HTTP mithilfe von TCP transportiert wird, das wiederum in IP eingebettet ist.
Der Webserver reagiert in Paket 27, indem er den gewünschten Inhalt liefert. Wie Sie in den folgenden Paketen verfolgen können, ruft der Client weitere Inhalte über die GET-Methode ab. Weitere Details hierzu zeigen wir ab Kapitel 23 Web-Hacking – Grundlagen im Detail.
16.5.2 Weitere Anzeigefilter
Fast alles, auf das Sie mittels Mitschnittfilter filtern können, ist auch mit Anzeigefiltern möglich. Allerdings haben wir bereits festgestellt, dass die Syntax doch deutlich anders ist. So ist die Form grundsätzlich objektorientiert, sodass die Eigenschaften eines Elements immer durch einen Punkt getrennt angegeben werden, also z.B. ip.src_host
==
10.1.1.1
, um eine Absenderadresse festzulegen. In diesem Zusammenhang werden Werte mit ==
angegeben. Die Leerzeichen davor und danach sind optional und dienen nur der besseren Lesbarkeit.
Beginnen Sie mit der Eingabe eines Filters, so öffnet sich ein Drop-down-Feld, das Ihnen die weiterführenden Optionen anzeigt. So können Sie sich bei der Vervollständigung Ihrer Syntax helfen lassen, wenn Sie sich nicht sicher sind. Testen Sie im Zweifel die eine oder andere Option, um ein wenig Routine mit den Filtervarianten zu bekommen.
Hinsichtlich der logischen Verknüpfungen sind Sie etwas flexibler als bei Mitschnittfiltern. So sind die folgenden beiden Ausdrücke identisch:
not tcp.port == 22 and not ip.src == 10.1.1.1
!(tcp.port == 22) and !(ip.src == 10.1.1.1)
Beide zeigen nur Pakete an, die weder Port 22/tcp noch die Absenderadresse 10.1.1.1 enthalten. Wie Sie sehen, können Sie auch ip.src
statt ip.src_host
festlegen. Zudem können Sie and
als &&
und or
als ||
schreiben. Ein häufiger Anwendungsfall für einen solchen Filter ist das Filtern der eigenen Kommunikation zum Remote-Host, falls Sie z.B. via SSH oder RDP verbunden sind. In diesem Fall möchten Sie die eigene Session aus dem Mitschnitt ausschließen.
Falls Sie in einem Mitschnitt Pakete vermissen, sollten Sie zudem kontrollieren, ob Sie evtl. noch einen Anzeigefilter aktiviert haben, der die Ausgabe entsprechend einschränkt. Hier können Sie durch Klicken auf das X-Symbol rechts neben dem Anzeigefilter-Eingabefeld den Filter deaktivieren.
Noch ein wichtiger Hinweis zu den Anzeigefiltern: Während Sie bei Mitschnittfiltern die Anwendungsprotokolle nur mittelbar durch Auswahl bestimmter Ports filtern können, ist bei den Anzeigefiltern die direkte Angabe bzw. das Filtern nach der Spalte Protokoll möglich. So können Sie neben arp
, icmp
, tcp
und udp
z.B. auch dns
, dhcp
, http
, ftp
, ftp-data
, smtp
, ntp
, snmp
etc. ohne weiteren Parameter angeben. Wireshark unterstützt eine Vielzahl von Protokollen. Versuchen Sie es einmal, um ein Gefühl dafür zu bekommen.
Zur Übersicht nachfolgend noch einmal wichtige Anzeigefilter zusammengefasst:
Tabelle 16.2: Wichtige Anzeigefilter in der Übersicht
Anzeigefilter
|
Bedeutung
|
ip.addr == <IP-Adresse>
|
Legt eine IP-Adresse fest
|
ip.src == <IP-Adresse>
|
Gibt eine Absender-IP-Adresse an
|
ip.dst == <IP-Adresse>
|
Gibt eine Ziel-IP-Adresse an
|
ip.src_host == <Adresse>
|
Angabe als IP- oder DNS-Adresse möglich
|
tcp.port == <Portnummer>
|
Legt einen TCP-Port fest
|
udp.srcport == <Portnummer>
|
Legt einen UDP-Quellport fest
|
tcp.dstport == <Portnummer>
|
Legt einen TCP-Zielport fest
|
not <Ausdruck>
|
Diese Bedingung darf nicht erfüllt sein
|
!(<Ausdruck>)
|
Andere Schreibweise für not
|
<Ausdruck> and/&& <Ausdruck>
|
Beide Bedingungen müssen erfüllt sein
|
<Ausdruck> or/|| <Ausdruck>
|
Mindestens eine der Bedingungen muss erfüllt sein
|
eth.addr == <MAC-Adresse>
|
Legt eine MAC-Adresse fest
|
arp, ipv6, icmp, udp, tcp
|
Legt das entsprechende Netzwerk-Protokoll fest
|
http, ftp, ftp-data, smtp, snmp, dns, dhcp etc.
|
Legt das entsprechende Anwendungsprotokoll fest
|
Es existieren noch diverse weitere Filtermöglichkeiten – sowohl für Mitschnittfilter als auch insbesondere für Anzeigefilter. Die hier vorgestellten Ausdrücke sollten jedoch für die meisten Anwendungsfälle ausreichen. Auf https://packetlife.net/library/cheat-sheets finden Sie ein »Cheat Sheet« namens Wireshark Display Filter mit einer umfassenden Übersicht.
16.6 Passwörter und andere Daten ausspähen
Eines der häufigsten und wichtigsten Ziele von Angreifern ist das Sammeln von Login-Daten. Es werden hohe Summen im Darknet bezahlt für einschlägige Listen von aktuellen Bank- und Kreditkartendaten. Das Phishing ist eine effektive Methode, um sich derartige Zugangsdaten von ahnungslosen Kunden frei Haus liefern zu lassen. Diese und andere Möglichkeiten werden wir in Kapitel 20 Social Engineering ausführlich vorstellen.
An dieser Stelle wollen wir uns allerdings anschauen, auf welche Weise ein Netzwerk-Sniffer wie Wireshark uns dabei unterstützen kann, Benutzernamen und Passwörter oder auch andere Daten auszuspähen.
16.6.1 FTP-Zugangsdaten ermitteln
Für dieses Praxisbeispiel benötigen wir einen FTP-Server. Dazu installieren Sie z.B. auf einem Debian-System mit folgendem Befehl ProFTPd, einen der gängigsten FTP-Server:
Im Anschluss erstellen Sie einen Benutzer für unsere FTP-Verbindung und vergeben diesem ein Passwort:
# useradd -m ftpuser1
# passwd ftpuser1
Der Schalter -m
bewirkt das Anlegen des Home-Verzeichnisses. Nun greifen wir einmal von einem anderen System auf diesen FTP-Server zu und schneiden die Kommunikation entweder auf dem Client oder dem Server mit. Den Mitschnittfilter in Wireshark können Sie folgendermaßen setzen:
In unserem Beispiel-Szenario nutzen wir einen Windows-10-Client mit dem nativen FTP-Client. Die Session wird in Abbildung 16.17 gezeigt.
Was passiert hier? Wir verbinden uns mit der IP-Adresse 192.168.1.213, unserem FTP-Server. Dieser meldet sich mit 220
ProFTPD
Server
(Debian)
. Für die Anmeldung nutzen wir ftpuser1 und sein Passwort.
Anschließend rufen wir mit dir
den Inhalt des aktuellen Verzeichnisses ab – da sich im User-Verzeichnis des Benutzers ftpuser1 noch nichts befindet, wird auch kein Verzeichnis-Listing angezeigt. Mittels quit
verlassen wir die FTP-Session.
Werfen wir jetzt einmal einen Blick auf unseren Mitschnitt, den wir nach Abschluss der FTP-Session beenden können. Abbildung 16.18 zeigt die mitgeschnittenen Pakete, die relevanten Bereiche sind markiert.
Nach dem 3-Way-Handshake sehen wir im 4. Paket die Willkommens-Meldung des Servers – wie auch in den Rohdaten unten zu sehen – in Klartext. Anschließend finden wir in Paket 9 unseren Benutzernamen ftpuser1
und in Paket 12 entdecken wir nun auch das eingegebene Passwort in Klartext: Gehe!m
. Voilà! So einfach ist es, wenn der Angreifer die Möglichkeit hat, eine FTP-Session mit einem Netzwerk-Sniffer mitzuschneiden, da FTP in Klartext kommuniziert.
16.6.2 Telnet-Zugangsdaten identifizieren
Ein weiteres altes, aber immer noch verwendetes Protokoll ist Telnet. Hier werden wir im Rahmen eines weiteren Praxisbeispiels erneut das Passwort ausspähen. Dazu ist ein Telnet-Server notwendig. Diesen installieren wir in unserem Szenario auf dem Debian-Server mittels des folgenden Befehls:
Im Anschluss läuft ein Telnet-Server (über den Super-Daemon inetd, der ggf. in diesem Zusammenhang mitinstalliert wird) und hört auf Port 23/tcp. Nun können wir mit einem beliebigen Telnet-Client auf das Linux-System zugreifen. Damit wir die Benutzer eindeutig unterscheiden können, erstellen wir einen Benutzer telnetuser
mit einem eigenen Passwort. Nutzen Sie dazu die folgenden, bereits bekannten Befehle:
useradd -m telnetuser
passwd telnetuser
Zur Abwechslung greifen wir nun mit dem bereits vorinstallierten Telnet-Client von unserem Kali Linux auf den Server zu, prinzipiell können Sie dies auch unter Windows tun, jedoch muss der Telnet-Client zuvor ggf. nachinstalliert werden. In Wireshark (auf Kali Linux) setzen wir den Mitschnittfilter dabei folgendermaßen:
Die Telnet-Session stellt sich in unserem Beispiel aus Sicht des Clients dar, wie in Abbildung 16.19 gezeigt.
Zunächst verbinden wir uns per Telnet mit der IP-Adresse 192.168.1.213, also unserem Linux-Server. Nach einem kurzen Moment fordert das System uns auf, Benutzernamen und Passwort einzugeben. Haben wir uns erfolgreich angemeldet, tun wir in dieser Situation etwas hochgradig Sicherheitskritisches: Wir wechseln mit su
-
unsere Identität zu root, dem Administrator auf dem Linux-System. Dazu müssen wir dessen Passwort eingeben. »Ist ja nicht schlimm, schließlich machen wir das ja auf dem Remote-System direkt«, könnte jetzt manch einer denken ... Doch schauen wir uns den Mitschnitt im Wireshark an. Dieser stellt sich zunächst dar, wie in Abbildung 16.20 gezeigt.
Beim ersten Betrachten liegt die Vermutung nahe, dass die Daten nicht gleichermaßen auf dem Präsentierteller landen, wie bei einer FTP-Session. Dies liegt jedoch am Aufbau des Telnet-Protokolls und ist ein Trugschluss! Markieren Sie nun ein Paket, das in der Protokoll-Spalte TELNET
enthält. Dieses gehört auf jeden Fall zur Telnet-Kommunikation (je nach Mitschnittfilter gehören ggf. alle Pakete zu dieser Kommunikation). Klicken Sie jetzt in der Menüleiste auf Analyse|Folgen|TCP Stream. Das Ergebnis zeigt Abbildung 16.21 und macht deutlich, wie einfach es ist, jede einzelne Eingabe in einer Telnet-Session zu verfolgen.
Während es noch fragwürdig sein mag, wie viel jemand mit den Zugangsdaten des nicht-privilegierten Benutzers telnetuser
anfangen kann, ist das kompromittierte Root-Passwort (Pa$$w0rd
) in jedem Fall eine Katastrophe!
Dass die Zeichen bei der Eingabe doppelt angezeigt werden, liegt übrigens daran, dass Telnet jedes Zeichen kopiert und bestätigt. Nur Passwörter sind davon ausgenommen – was unter dem Strich auch nicht wirklich viel hilft, wie wir sehen.
16.6.3 SSH – sicherer Schutz gegen Mitlesen
Nachdem wir Ihnen nun deutlich gemacht haben, warum es keine gute Idee ist, mit Protokollen wie FTP oder Telnet zu arbeiten, ist die große Frage, wie wir uns am besten vor dem Mitlesen sensibler Daten schützen können. Die pauschale Antwort lautet: durch Verschlüsselung! Die Secure Shell (SSH) ist eine Protokoll-Suite, die sowohl SSH selbst als verschlüsselte Variante von Telnet bereitstellt als auch die verschlüsselten Dateiübertragungsprotokolle SFTP und SCP.
Während SSH bei Kali Linux bereits vorinstalliert ist, können Sie auf dem Debian-System ggf. das Paket openssh-server
nachinstallieren. Anschließend können wir einen Mitschnitt auf Port 22/tcp starten und über einen SSH-Client auf den Server zugreifen. Von einem Linux-Terminal können wir – analog zu FTP und Telnet – mit dem gleichnamigen Client über die Eingabe von ssh
<Zieladresse>
zugreifen.
Windows bringt mittlerweile einen eigenen, textbasierten SSH-Client mit, den Sie mit ssh
<Zieladresse>
analog zu Linux sehr einfach nutzen können. Die Optionen sind identisch.
Das bereits bekannte Open-Source-Tool PuTTY ist dagegen komfortabler und lässt kaum Wünsche offen. Daher bleibt es für uns auf Windows-Systemen meist die erste Wahl. Mit den richtigen Einstellungen haben wir hier schnell eine Verbindung hergestellt – siehe Abbildung 16.22.
Natürlich erfordert auch SSH die Eingabe eines Benutzers und dessen Passwort. Wir machen es uns einfach und nutzen wieder den telnetuser
. Die Auswertung via Wireshark macht deutlich, dass es diesmal keinen »Präsentierteller« mit Login-Daten gibt, wie Abbildung 16.23 zeigt.
Zwar sind die ausgehandelten Algorithmen erkennbar, jedoch unterliegen diese keiner Geheimhaltung, wie Sie bereits in Kapitel 5 Kryptografie und ihre Schwachstellen erfahren haben. Nachdem die Kommunikationspartner die Verschlüsselungsparameter und den Schlüssel festgelegt haben, sind die Pakete verschlüsselt und können nicht mehr sinnvoll von Wireshark interpretiert werden.
16.6.4 Andere Daten ausspähen
Lassen Sie uns noch einmal eine Web-Session mitschneiden. Wie das geht, haben wir ja bereits in Abschnitt 16.5.1 ausführlich vorgestellt. Haben Sie einen solchen Mitschnitt durchgeführt, so sind die einzelnen Pakete in der Regel zwar lesbar (wenn nicht gerade HTTPS zum Einsatz kommt!), aber schwierig zu interpretieren.
Hier hilft uns Wireshark erneut. Markieren Sie in der Paketliste ein Paket, das HTTP als Protokoll anzeigt. Nun können Sie über Analyse|Folgen|HTTP Stream den gesamten Datenaustausch über das Protokoll HTTP verfolgen, wie Abbildung 16.24 zeigt.
Wireshark setzt für uns den kompletten Web-Code wieder zusammen und zeigt diesen übersichtlich an. Doch das ist noch nicht alles: Sie können für bestimmte Protokolle sogar komplette Dateien, die übertragen wurden, wiederherstellen und anzeigen lassen!
Klicken Sie dazu auf den Menüpunkt Datei|Objekte exportieren|HTTP. Nun können Sie aus der Liste der mitgeschnittenen Dateien eine beliebige aussuchen und auf Ihrem Computer regulär speichern.
Die gespeicherte Datei – z.B. ein Bild – können Sie anschließend mit einem normalen Programm anzeigen lassen.
Der Export von Dateien ist nur für einige ausgewählte Anwendungsprotokolle möglich. Hierzu zählen HTTP, SMB und TFTP.
16.7 Auswertungsfunktionen von Wireshark nutzen
Sie haben in den vorhergehenden Abschnitten bereits feststellen können, dass uns Wireshark effektiv bei der Analyse von Netzwerkdaten unterstützen kann. Tatsächlich ist Wireshark in der Lage, ganz verschiedene Aspekte einer Netzwerkkommunikation darzustellen. So finden Sie in der Menüleiste Punkte für Statistiken, Telefonie und Wireless. Unter Statistiken|Flow Graph können Sie z.B. die Details einer TCP-Verbindung beobachten. Abbildung 16.27 zeigt ein Beispiel.
Auch die HTTP-Requests lassen sich detailliert überprüfen über Statistiken|HTTP|Anfragen, wie Abbildung 16.28 zeigt.
Interessant sind oftmals auch die verwendeten Protokolle, die Sie über Statistiken|Protokollhierarchie anzeigen lassen können, siehe Abbildung 16.29.
Wer mit wem kommuniziert hat, verrät die Verbindungsübersicht unter Statistiken|Verbindungen, wie im Beispiel in Abbildung 16.30 dargestellt.
Hier können Sie in den Registern auch zwischen den verschiedenen Protokollen (Ethernet, IPv4/IPv6 sowie TCP und UDP) wählen. Es stehen diverse weitere Auswertungsmöglichkeiten zur Verfügung, die Ihnen die Netzwerk-Analyse leichter machen und helfen, Auffälligkeiten, Probleme, aber auch Angriffsvektoren zu erkennen.
Beschäftigen Sie sich ausgiebig mit den Funktionen von Wireshark und lernen Sie das Tool gut kennen – es lohnt sich! Wireshark wird Ihnen in vielen Situationen ein nützlicher Helfer sein, der das Zünglein an der Waage zwischen Erfolg und Misserfolg sein kann. Wireshark schaut wie kaum ein anderes Tool hinter die Kulissen der Netzwerkkommunikation und liefert gnadenlos ehrliche und direkte Ergebnisse, die zudem noch benutzerfreundlich aufgearbeitet und präsentiert werden.
16.8 Tcpdump und TShark einsetzen
Auch wenn Wireshark der Platzhirsch unter den Netzwerk-Sniffern ist, so hat das Programm doch einen entscheidenden Nachteil: Sie benötigen eine grafische Oberfläche dafür! Während dies unter Windows-Systemen in der Regel keine Rolle spielt, da dort grundsätzlich im grafischen Modus gearbeitet wird, so stehen auf Linux-Systemen keineswegs selbstverständlich immer entsprechende Fenstermanager zur Verfügung.
Was also, wenn Sie sich z.B. mit SSH auf einen Linux-Server verbinden und dort einen Netzwerk-Mitschnitt vornehmen wollen? Nun, ehrlich gesagt ist das kein Problem, da hier bereits die Tools tcpdump und TShark auf ihren Einsatz warten. Begeben wir uns also nun für einen Moment in die Linux-Welt, da beide Tools zwar auch für Windows-Systeme verfügbar sind, aber in der Regel unter Linux und anderen Unix-artigen Systemen verwendet werden.
16.8.1 Tcpdump – der Standard-Sniffer für die Konsole
Der Netzwerk-Sniffer tcpdump ist für diverse Unix-basierende Plattformen verfügbar und bei den meisten Linux-Distributionen als Standard-Sniffer entweder vorinstalliert oder zumindest als gleichnamiges Installationspaket erhältlich. Auch auf Linux-basierenden Firewall-Plattformen, wie z.B. Checkpoint Security Gateways, ist er oft vorhanden.
Im Gegensatz zum Namen kann tcpdump nicht nur TCP-basierende Kommunikation mitschneiden, sondern auch UDP, IP und ICMP sowie andere Pakete. Genau wie Wireshark benötigt auch tcpdump die libpcap-Bibliothek für seine Aufgabe. Dazu kommt auch ein weiterer, ganz essenzieller Punkt: Die Mitschnittfilter von Wireshark können Sie auch bei tcpdump nutzen, das heißt, Sie fangen an dieser Stelle bereits als Semi-Profi an, mit tcpdump zu arbeiten!
Schauen wir uns zunächst einige Optionen an, mit denen tcpdump arbeitet: Mit dem Parameter -D
können Sie sich sämtliche Interfaces anzeigen lassen, auf denen tcpdump mitsniffen kann (Abbildung 16.31).
In der Regel sind nur die Schnittstellen ethX
interessant, da sie die Ethernet-NICs repräsentieren. Lassen Sie uns gleich einen ersten Mitschnitt durchführen. Dabei geht es uns zunächst einmal darum, einen Überblick über die Kommunikation zu bekommen, nicht jedoch sämtliche Details mitzuschneiden. Daher nutzen wir -n
, um die Namensauflösung zu unterdrücken, und -i
<NIC>
zur Angabe der Schnittstelle, die Sie als Nummer oder mit ihrer Bezeichnung angeben können. Ansonsten wollen wir sehen, welche Systeme via HTTP auf Port 80/tcp kommunizieren. Den Mitschnitt können Sie jederzeit über Strg+C abbrechen. Abbildung 16.32 zeigt einen Beispiel-Mitschnitt im Kontext des Benutzers root. Als Benutzer kali müssen Sie mit sudo
arbeiten.
Nun wird sicherlich auch schnell klar, warum tcpdump nur dann zum Einsatz kommt, wenn Wireshark nicht verfügbar ist. Es mangelt zunächst offensichtlich an der Übersichtlichkeit. In Abbildung 16.32 sind die relevanten Stellen markiert. Anhand der Flags können Sie den 3-Way-Handshake erkennen, wobei das ACK-Flag nicht gleichermaßen hervorgehoben wird wie andere Flags, insbesondere [S] für SYN. Darüber hinaus können Sie rudimentäre HTTP-Informationen erkennen, wobei Sie eine GET-Anfrage sowie die Antwort 200
OK
identifizieren können.
Es wird schnell deutlich, dass die Lesbarkeit bei tcpdump stark eingeschränkt ist. Nun können wir einerseits die Ausgabe schrittweise erweitern. Mit -e
sehen wir zusätzlich die Ethernet-Informationen, insbesondere die MAC-Adressen. Die Option -v
(für engl. verbose, also geschwätzig) erweitert den Umfang der Ausgabe und kann durch mehrfaches Anfügen von v
ausgeweitet werden (-v,
-vv,
-vvv
).
Wollen wir uns eine Vorstellung von Rohdaten machen, können wir den Inhalt eines Pakets auch mit -x
hexadezimal ausgeben. Mit -X
dagegen geben wir das Paket hexadezimal und zudem als ASCII codiert aus. Auf das einzelne Paket bezogen sieht die Ausgabe dadurch dann schon ein wenig mehr nach dem vertrauten Bild, das wir von Wireshark kennen, aus. Abbildung 16.33 zeigt den Mitschnitt einer simplen DNS-Anfrage.
Da die Ausgabe standardmäßig im Terminalfenster erfolgt, werden alle anzuzeigenden Informationen direkt hintereinander ausgegeben. Sie haben keine Möglichkeit, aus einer übersichtlichen Paketliste auszuwählen, zu welchem Paket Sie Details sehen wollen. Insgesamt wird das Terminal schnell mit Daten überflutet, sodass hier weniger oftmals mehr ist!
In Abbildung 16.34 sehen Sie die Ansicht des Mitschnitts aus Abbildung 16.33 in Wireshark.
Falls Sie nicht auf den Komfort der grafischen, übersichtlichen Anzeige in Wireshark verzichten möchten, aber andererseits auf dem System, auf dem Sie mitschneiden möchten, keine grafische Oberfläche zur Verfügung haben, können Sie den tcpdump-Mitschnitt über die Option -w
<Dateiname>
in eine Datei schreiben lassen. Sie hat das Pcap-Format und kann dann auf ein anderes System übertragen werden, auf dem Wireshark läuft. Über Datei|Öffnen können Sie die Datei dann jederzeit in Wireshark anzeigen lassen und erhalten den gewohnten Komfort.
16.8.2 TShark – Wireshark auf der Konsole
TShark ist im Grunde die textbasierte Version von Wireshark, ähnelt in der Ausgabe jedoch weit mehr tcpdump als Wireshark. Diverse grundlegende Optionen und Parameter sind identisch. Es gibt jedoch im Detail auch Unterschiede. So geben Sie Filter hinter der Option -f
an. Schauen wir uns als Beispiel an, wie Sie mit TShark einen DNS-Mitschnitt auf dem Interface eth0
starten können und mit -n
die interne Namensauflösung deaktivieren. Abbildung 16.35 zeigt den Befehl und die Ausgabe.
Die Übereinstimmungen mit tcpdump sind offensichtlich. Auch die Ausgabe ist absolut vergleichbar. Daher wollen wir Sie an dieser Stelle nicht mit Altbekanntem langweilen. Aber schauen wir doch mal, ob wir vielleicht das eine oder andere Wireshark-Feature aus TShark herausholen können, um die Auswertungsfunktionen besser zu nutzen. Lassen Sie uns die DNS-Namensauflösungen einmal in Tabellenform gegenüberstellen.
Dazu müssen wir auf bestimmte Felder in den Headern zugreifen. So heißt das Feld für die DNS-Anfrage dns.qry.name
und das Feld für die Antwort auf eine Anfrage nach einem A-Eintrag lautet dns.a
, das für einen AAAA-Eintrag dns.aaaa
. Weiter hinten zeigen wir Ihnen, wie Sie diese Feldnamen identifizieren können. Mit -T
können wir festlegen, dass wir aus dem Mitschnitt bestimmte Felder extrahieren möchten, und mit -e
geben wir die betreffenden Felder an. Schauen Sie sich hierzu das Beispiel in Abbildung 16.36 an.
Auf diese Art ist es möglich, DNS-Anfragen und Antworten (sowohl IPv4 als auch IPv6) übersichtlich gegenüberzustellen. In gleicher Weise können wir z.B. auch HTTP-Anfragen und bestimmte Felder daraus filtern.
Das nächste Beispiel zeigt, wie HTTP-Requests und die entsprechenden Plattformen und Browser ausgelesen werden können. TShark unterstützt auch die Anzeigefilter von Wireshark, die wir mit -Y
<Anzeigefilter>
angeben können. Somit treffen wir eine Vorauswahl, die wir sonst nicht treffen könnten, da der Mitschnittfilter keinen derartigen Ausdruck kennt.
Im Folgenden reduzieren wir über den Anzeigefilter die Ausgabe auf Pakete, die ein Feld http.request
haben, und extrahieren die gewünschten Informationen durch die Felder http.host
und http.user_agent
. Abbildung 16.37 zeigt das Ergebnis.
Das Filtern nach einzelnen Feldern ist eine fortgeschrittene Filtertechnik, die natürlich nicht nur bei TShark funktioniert, sondern auch mit dem Anzeigefilter in Wireshark. Mit Wireshark können Sie auch ganz einfach herausfinden, wie ein bestimmtes Feld heißt. Sobald Sie das entsprechende Feld in der Detailansicht markieren, taucht der Name in der Statusleiste auf:
In Wireshark können Sie hier leicht einen entsprechenden Filter erstellen, indem Sie auf das Feld rechtsklicken und aus dem Kontextmenü Als Filter anwenden|Ausgewählt wählen.
Wireshark unterstützt Hunderttausende von Feldern. In Version 4.0.8 sind es über 285.000 in über 3000 Protokollen. In der Wireshark-Dokumentation unter www.wireshark.org/docs/dfref finden Sie alle Felder alphabetisch sortiert.
Wireshark ist eines der mächtigsten und nützlichsten Netzwerkanalyse-Tools. Damit kann man allein ganze Bücher füllen – auch vom mitp-Verlag gibt es das sehr empfehlenswerte Buch Wireshark 101 von Laura Chappel, dem weiblichen Wireshark-Guru (ISBN-13: 978-3958456839).
Wir hoffen, dass wir mit dieser Einführung Ihr Interesse geweckt und interessante Möglichkeiten aufgezeigt haben, sodass Sie nun in Ihrer Laborumgebung die »Was-passiert-dann-Maschine« zum Glühen bringen. Wireshark ist gleichermaßen nützlich zum Erlernen der Netzwerk-Protokolle und -Kommunikation, deren professioneller Analyse sowie dem Troubleshooting. Entsprechend eingesetzt ist es auch für Hacker ein elementares Tool.
16.9 Zusammenfassung und Prüfungstipps
Werfen wir einen Blick zurück: Was haben Sie gelernt, wo stehen Sie und wie geht es weiter?
16.9.1 Zusammenfassung und Weiterführendes
Netzwerk-Sniffer wie Wireshark, tcpdump und TShark sind mächtige Werkzeuge in den Händen eines fähigen Hackers und Penetration-Testers. Insbesondere Wireshark verfügt über eine sehr übersichtliche Oberfläche und bringt leistungsstarke Auswertungshilfen mit, die kaum Wünsche offenlassen. Aber auch für Systeme, auf denen keine grafische Oberfläche vorhanden ist, stehen effektive Tools für Mitschnitte zur Verfügung. Der Klassiker ist tcpdump, aber auch TShark, die Kommandozeilen-Version von Wireshark, gibt sich hier als vollwertige Alternative keine Blöße.
Alle drei Programme basieren auf der Pcap-Bibliothek. Dies ist nicht zuletzt daher sehr benutzerfreundlich, als dass die Mitschnittfilter durch die Funktionen von Pcap bereitgestellt werden – mit anderen Worten: Alle drei Netzwerk-Sniffer nutzen dieselbe Syntax bei den Mitschnittfiltern.
Andererseits ermöglichen die Anzeigefilter von Wireshark (und TShark), auch im Nachhinein noch Ordnung in das Paketchaos zu bringen. Sie unterstützen weit mehr Optionen und ermöglichen es zum Beispiel, einzelne Felder in einem Paket auszulesen und danach zu filtern. Auch wenn die hier vorgestellten Vertreter ihrer Gattung für die meisten Fälle durchaus ausreichen, existiert natürlich noch eine ganze Menge weiterer Netzwerk-Sniffer. Die Dsniff-Suite ist z.B. eine Sammlung an Tools, die in erster Linie dazu ausgelegt sind, um im Netzwerk mitzusniffen und bestimmte, ausgewählte Informationen zu extrahieren. Die jeweiligen Tools sind dabei auf ganz bestimmte Aspekte spezialisiert. Wir werden uns im nächsten Kapitel damit genauer auseinandersetzen.
Eine entscheidende Frage ist allerdings noch offen: Oftmals sind wir nicht in der luxuriösen Situation, direkten Zugriff auf eines der betreffenden Endgeräte zu haben, um dort den Netzwerk-Sniffer starten zu können. Wie können wir uns also als Angreifer in eine geeignete Position bringen, um Wireshark und Co. zum Einsatz zu bringen? Diese Frage beantwortet das nächste Kapitel, bei dem wir uns mit Eavesdropping-Techniken und den damit verwandten Man-in-the-Middle-Angriffen beschäftigen.
16.9.2 CEH-Prüfungstipps
Wireshark ist eines der Top-Ten-Tools für Hacker und Penetration-Tester. Dementsprechend wichtig ist das Tool sowohl für die Praxis als auch im CEH-Examen. Sie sollten mit der einen oder anderen Prüfungsfrage zu Netzwerk-Sniffern in jedem Fall rechnen.
Sie sollten dafür sowohl Capture- als auch Displayfilter beherrschen. Stellen Sie sicher, dass Sie mit Wireshark, TShark und tcpdump vertraut sind und die letztgenannten Tools mit diversen Schaltern und Parametern nutzen können. Sammeln Sie unbedingt so viel Erfahrung wie möglich mit den Tools und interpretieren Sie so viele Mitschnitte wie möglich im Detail. Zum einen trainiert das Ihre Fähigkeit, Netzwerkkommunikation zu verstehen, und zum anderen werden Sie unter Umständen auf Szenario-Fragen treffen, in denen Sie Ihr Verständnis demonstrieren müssen. In diesem Zusammenhang werden auch gern Fragen zu TCP/IP und zur Netzwerk-Kommunikation an sich gestellt, die nur mittelbar mit dem Hacking zu tun haben. TCP/IP-Kenntnisse sind also elementar.
Sie sollten Begriffe wie Promiscuous Mode und Pcap kennen und verstanden haben, wie Netzwerk-Sniffer mit der Hardware zusammenarbeiten. Denken Sie in diesem Zusammenhang daran, dass Netzwerk-Sniffer keine Man-in-the-Middle-Tools sind und nicht für die Manipulation von Netzwerk-Traffic genutzt werden können. Sie selbst arbeiten passiv, auch wenn wir oft einige aktive Komponenten ins Spiel bringen müssen, um sie nutzen zu können. Doch dazu im nächsten Kapitel mehr.
16.9.3 Fragen zur CEH-Prüfungsvorbereitung
Mit den nachfolgenden Fragen können Sie Ihr Wissen überprüfen. Die Fragestellungen sind teilweise ähnlich zum CEH-Examen und können daher gut zur ergänzenden Vorbereitung auf das Examen genutzt werden. Die Lösungen zu den Fragen finden Sie in Anhang A.
Ben möchte einen Netzwerkmitschnitt im kabelgebundenen Ethernet-Netzwerk durchführen und dabei so viele Pakete wie möglich mitschneiden. Welche Option sollte er wählen?
Auf der Schnittstelle Any mitschneiden
Den Promiscuous Mode aktivieren
Die Firewall deaktivieren
Eine WLAN-Schnittstelle für den Mitschnitt auswählen
Welches der folgenden Tools ist kein Netzwerk-Sniffer?
Nmap
Wireshark
Dsniff
tcpdump
Amanda möchte einen Wireshark-Mitschnitt analysieren und sich alle Pakete anzeigen lassen, die weder SSH-Kommunikation sind noch von der Absender-IP-Adresse 10.1.1.1 stammen. Welchen Anzeigefilter wählt sie?
not ip.src == 10.1.1.1 or not tcp.port == 23
not host 10.1.1.1 and not port 22
!ssh and not ip.addr == 10.1.1.1
!(tcp.port == 22) and !(ip.src == 10.1.1.1)
Sie stellen im Rahmen eines Security Audits fest, dass im Netzwerk des Auftraggebers noch FTP inklusive Klartextkommunikation genutzt wird. Welche Lösung können Sie vorschlagen, um eine verschlüsselte FTP-Kommunikation zu ermöglichen?
HTTPS nutzen
Active FTP konfigurieren
SSH-Suite einsetzen
Auf Dateiübertragungen verzichten
Welche Aussage über Mitschnittfilter (Capture Filter) und Anzeigefilter (Display Filter) ist nicht korrekt?
Capture Filter und Display Filter nutzen eine völlig unterschiedliche Syntax und werden in verschiedenen Situationen eingesetzt.
Capture Filter können gleichermaßen mit Wireshark, TShark und tcpdump eingesetzt werden, während Display Filter nur bei Wireshark zum Einsatz kommen können.
Capture Filter werden dazu genutzt, um die Pakete bereits beim Mitschnitt zu filtern, während Display Filter zur nachträglichen Filterung eingesetzt werden.
Mit Display Filtern ist es möglich, deutlich detaillierter zu filtern als mit Capture Filtern.