Zur Startseite

29.09.2021 von René Hifinger

Protokollanalyse mit Wireshark

Die Netzwerkanalyse kann viele nützliche Informationen liefern. Zum einen können Ungleichgewichte in der Auslastung des Netzwerks aufgespürt werden, so dass Maßnahmen zum Load-Balancing ergriffen werden können, zum anderen lässt sich auch der Netzwerkverkehr detailliert überwachen. Administratoren nutzen diese Möglichkeit, um Angriffe aufzuspüren. Sehr leicht lassen sich so Netzwerkscans oder andere Aktivitäten von Angreifern erkennen. Mithilfe von Netzwerkanalyse lassen sich auch Indizien, die auf das Vorhandensein von Trojanern, Würmern oder ähnlicher Malware im eigenen Netz hinweisen, finden. Die Kehrseite der Medaille ist, dass auch Angreifer die Möglichkeiten der Netzwerkanalyse nutzen können, um sensible Daten wie Passwörter auszuspionieren. Nicht zuletzt hat jeder, der sich auf einer Paketroute befindet, Zugriff auf sämtliche übertragenen Daten, womit potentiell auch ISPs oder staatliche Organe als Anwender von Netzwerkanalyse in Betracht kommen.

In diesem Artikel verfolge ich zweierlei Ziele: Erstens will ich Anwendern, die sich bisher noch nicht mit Protokollanalyse beschäftigt haben, einige Tricks zeigen, wie sie ihr eigenes Netz überwachen und sichern können. Auch Betreiber von Einzelplatzrechnern mit Internetanbindung können von diesen Tricks profitieren. Ich werde dabei allerdings lediglich einige grundlegende Kenntnisse vermitteln. Zweitens möchte ich die Sensibilität für die Gefahren des elektronischen Nachrichtenaustausches erhöhen. Ich werde an einem kleinen Beispiel zeigen, wie einfach es ist, sensible Daten auszuspähen, um damit für verschiedene Arten der Absicherung von Daten zu argumentieren. Um die beiden Ziele zu erreichen, verwende ich das Open-Source-Tool Wireshark (wireshark.org). Dieses ist für die meisten Betriebssysteme frei erhältlich. Die ausführliche Dokumentation im Internet ermöglicht es jedem, sich weiter in das Thema einzuarbeiten.

Netzwerkgrundlagen

Bevor wir in die Welt der Netzwerkanalyse eintauchen, müssen wir einige Eigenheiten der Internetkommunikation beleuchten. Treten zwei Rechner miteinander in Verbindung, so geschieht dies über einen sogenannten Protokollstack. Anwendungen generieren Daten zum Versenden, diese werden innerhalb des Rechners über den Protokollstack hinabgereicht, zerlegt, dabei mit zusätzlichen, für den Versand benötigten Informationen versehen und letztendlich über die Datenleitung gesendet. Jede Schicht [1] übernimmt dabei spezielle Aufgaben. Besonders interessant sind zu diesem Thema die IP- und die darüber liegende TCP/UDP-Schicht. Die TCP-Schicht sorgt dafür, dass eine dauerhafte Verbindung zustande kommt, in der Daten nicht verloren gehen, nicht dupliziert werden und in der richtigen Reihenfolge ankommen. TCP stellt damit im Gegensatz zu UDP ein verbindungsorientiertes Protokoll dar. Bildlich kann man sich den Unterschied am besten so vorstellen: TCP entspricht am ehesten der Verbindung bei einem Telefongespräch: Eine Verbindung wird aufgebaut und die Gesprächspartner kommunizieren über diesen Kanal nach einem bestimmten Schema. UDP ist vergleichbar zu einer Verbindung, die auf den Versand von Briefen zurückgreift: Pakete werden versandt, ohne Annahmen darüber zu treffen, wann der Empfänger die Nachricht erhält, ob er sie liest oder ob er antworten wird. Dabei ist der Versand per UDP nicht unbedingt langsamer, das UDP-Protokoll gibt lediglich keine Garantien bezüglich der Verlässlichkeit der Kommunikation. Der große Vorteil liegt darin, dass Prozesse kommunizieren können, ohne auf eine Reaktion des Kommunikationspartners angewiesen zu sein. TCP dagegen ist ein synchrones Protokoll, auf jede Nachricht wird innerhalb einer gewissen Zeitspanne eine Antwort erwartet. Erfolgt diese nicht, wird die Nachricht erneut gesendet. Daher kann TCP bestimmte Garantien bzgl. Zuverlässigkeit und Reihenfolge geben. Welches der beiden Protokolle zum Einsatz kommt, hängt stark von der Anwendung ab.

TCPUDP
ZuverlässigkeitHochNiedriger
GeschwindigkeitNiedrigerHoch
TransfermethodeNacheinanderDatenstrom
Fehlererkennung und -behebungJaNein
Congestion controlJaNein
EmpfangsbestätigungJaNur die Prüfsumme

Eine Schicht unter TCP oder UDP liegt die IP Schicht. Diese übernimmt die Aufgabe, einen Weg über verschiedene Subnetze vom Sender zum Empfänger zu finden und ist in keinem Fall verbindungsorientiert. TCP-Ströme werden aufgeteilt und in IP-Pakete verpackt. Diese werden dann je nach "Verkehrslage" über verschiedene Routen über das Netz verschickt. Auf dem Weg von einem Rechner zum nächsten liegen in der Regel eine Reihe von Knotenpunkten (Routern), die die Weiterleitung der IP-Pakete organisieren. Die Pakete werden bezüglich ihres Ziels und anderer Parameter analysiert, die ressourcengünstigste Route berechnet und auf dieser weitergeleitet. Beim nächsten Knoten wird diese Prozedur wiederholt, bis das Paket letztendlich am Ziel angekommen ist. Dies ermöglicht mehr Flexibilität bei der Wahl der Routen und hilft durch den Einsatz ausgeklügelter Routingalgorithmen Staus zu vermeiden. Allerdings hat dieses Verfahren auch zur Folge, dass zwei Datenpakete, die virtuell zusammen ein Datum ergeben (z. B. zu einem TCP-Stream gehören), unterschiedliche Wege durch das Netz nehmen können und erst am Zielpunkt wieder zusammengesetzt werden. Das Zusammensetzten übernimmt in diesem Fall die TCP-Schicht. Ein ähnliches Verfahren kann natürlich auch auf höheren Protokollebenen angewendet werden. Eine Anwendung könnte UDP verwenden und selbst dafür Sorge tragen, dass der Datenverkehr zuverlässig ist. In der Tat wird das z. B. bei OpenVPN so angewendet. In der Regel ist es jedoch einfacher, sich auf die Fähigkeiten der einzelnen Ebenen zu verlassen.

Durch die Tatsache, dass IP-Pakete über verschiedene Routen an ihr Ziel gelangen, ergibt sich, dass protokollierte Daten unter Umständen unvollständig sind. Daher muss jemand, der den Netzwerkverkehr überwachen will, nach Möglichkeit an zentraler Stelle sitzen (oder aber die Routen manipulieren, was aber in der Regel extrem aufwendig ist). Typischerweise sind gut geeignete Stellen Internetgateways, ISPs oder ähnlich zentral aufgestellte Rechnerinfrastrukturen wie Switches.


Wer sich genauer über die technischen Voraussetzungen der Netzwerkkommunikation informieren will, dem sei [2] empfohlen. Hier werden der Protokollstack, Routingprotokolle und andere interessante Aspekte sehr ausführlich beschrieben. Für unsere Zwecke reicht es aus zu wissen, dass IP-Pakete fragmentierte Daten von Anwendungen transportieren, diese anhand von Markierungen durch die TCP-Schicht wieder zusammengesetzt werden können und Routen über das Netzwerk einer starken Dynamik unterliegen.

Wireshark in a Nutshell

Wireshark ist eine freie Software zum Protokollieren von Datenpaketen. Sie unterscheidet sich nicht von anderer Protokollsoftware wie z. B. TCP-Dump. Was die reinen Protokollfähigkeiten angeht, sind die beiden Programme sogar gleichwertig (Wireshark greift auf TCP-Dump Bibliotheken zurück). Was Wireshark auszeichnet, sind eine Reihe weiterer Tools, die es dem Analysten erleichtern, die protokollierten Pakete zu analysieren. Das wahrscheinlich mächtigste Werkzeug in Wireshark ist die Möglichkeit, Filter zu schreiben. Hierdurch lassen sich gezielt bestimmte Angriffe erkennen. Ohne jedoch genau zu wissen, wonach man sucht, ist es eine enorm schwierige Aufgabe, in einer großen Menge an Daten, wie sie üblicherweise in einem (wenn auch kleinen) Netzwerk anfallen, Unregelmäßigkeiten zu entdecken. Ohne viel Erfahrung und Hintergrundwissen über typische Muster bei einem Angriff ist dies fast unmöglich, auch wenn Tools wie Wireshark viel Arbeit abnehmen. An dieser Stelle sei nochmals erwähnt, dass dieser Artikel lediglich eine Einführung in das Thema bieten soll, um sich bei Interesse weiter in das spannende Thema der Protokollanalyse einarbeiten zu können.

Wie bereits erwähnt, bietet Wireshark eine Reihe nützlicher Tools, die das Leben des Administrators vereinfachen. Bei den Tools unterscheidet man zwischen Paketfiltern und Displayfiltern. Paketfilter wirken auf die Menge der mitzuschneidenden Pakete, nur wenn eine Regel auf ein Paket zutrifft, wird dieses protokolliert. Paketfilter basieren auf pcap und sind von vergleichsweise geringer Komplexität, deshalb können auch nur grundlegende Einschränkungen getroffen werden. Displayfilter dagegen regeln die Menge der anzuzeigenden Pakete, nachdem diese protokolliert wurden. Da die Protokolldaten in der Regel gespeichert sind, lassen sich nacheinander unterschiedliche Filter anwenden, so dass verschiedene Aspekte betrachtet werden können. Displayfilter sind sehr mächtig und lassen es zu, nach jedem Parameter und Wert eines Paketes zu filtern. Hierbei bedarf es bei der Handhabung allerdings auch einer gehörigen Portion an Übung. Wir werden lediglich einige einfache Filter verwenden, jedoch nicht Filteroptionen im Detail erklären. Weiterführende Informationen zu Filtern finden sich in der Dokumentation auf der Wireshark-Hompage.

Ein weiteres sehr nützliches Feature, auf das wir ebenfalls in diesem Artikel zurückgreifen werden, ist die Möglichkeit, TCP-Datenströme nachzuvollziehen. Wie bereits erwähnt, werden TCP-Datenströme zerteilt und als IP-Pakete versendet. Wireshark kann nun anhand von Stempeln, die die Pakete durch das TCP-Protokoll bekommen haben, um am Zielort wieder zusammengefügt werden zu können, ebenfalls die richtige Reihenfolge herausfinden und so größere, für den Versand zerteilte Daten wieder rekonstruieren.

Netzwerkanalyse: Analyse von Netzwerkaktivität

In diesem Abschnitt betrachten wir einfache Möglichkeiten, Muster von Angreifern in einem Netzwerk aufzuspüren. Die meisten Angreifer haben zu Beginn ihrer Bemühungen nicht viele Informationen über das Zielsystem. Angriffe werden in der Regel gestartet, indem Sicherheitslücken in bestimmten Softwarekomponenten auf dem Zielsystem ausgenutzt werden. Da die Kommunikation in der Regel über Ports stattfindet und bestimmte Ports typisch für bestimmte Protokolle (auf der Anwendungsschicht) sind, ist der erste Schritt eines Angreifers sehr oft ein Portscan. Bei einem solchen werden Verbindungsversuche zu bestimmten Ports des Zielrechners unternommen. Erfolgt eine Reaktion des Zielrechners, so ist der Port offen und ein entsprechender Server aktiv. Neben zum Beispiel Web- oder Fileservern betreibt nahezu jeder vernetzte Rechner eine Reihe von "Servern", die zum Betrieb des Rechners notwendig sind, zum Beispiel "Remote Procedure Call Handler" unter Windows. Wer wissen will, welche Ports an seinem Rechner offen sind, kann dies mit dem Programm nmap, einem freien Portscanner, prüfen.

Ein echter Verbindungsaufbau zu einem Port soll aber in der Regel nicht stattfinden, weil dieser in den Logdateien des Servers vermerkt werden könnte. Aus diesem Grund gibt es eine Reihe verschiedener Abwandlungen, die ein unauffälliges Prüfen auf offene Ports ermöglichen.

Der einfachste Scan ist ein TCP-Connect Scan, bei dem eine Verbindung zu einem Port geöffnet wird. Mithilfe des Filters tcp.flags.syn==1&&tcp.flags.ack;==1 lassen sich alle Pakete filtern, bei denen ein Verbindungsaufbau zu einem Port stattgefunden hat. Natürlich befinden sich darunter auch legitime Versuche. Sind jedoch Vielzahl von Paketen (meist in sehr kurzen Zeitabständen) enthalten, die aufsteigende Portnummern aufweisen und von derselben Quelle stammen, ist dies ein starkes Indiz dafür dass ein einfacher Portscan stattgefunden hat. Zu erkennen sind Port-Scans zum Beispiel durch Abfolgen an einer Sequenz zwischen Quelle (Q) und Ziel (Z):

Q > Syn > Z,
Z > Syn/Ack > Q,
Q > Ack > Z.

Kurz darauf wird die Verbindung wieder beendet:

Q > Rst > Z

Syn ist das erste Paket, das zu Beginn einer Verbindung gesendet wird. Folgt auf solch ein Paket ein Syn/Ack ist Z bereit, eine Verbindung aufzubauen. Das finale Ack-Paket von Q dient dazu, den Verbindungsaufbau zu vervollständigen. Man spricht in diesem Fall von einem 3-Wege-Handshake. Das Paket Rst von Q nach Z dient dazu, die Verbindung wieder zu trennen. Ist Z nicht bereit, auf einem bestimmten Port eine Verbindung aufzubauen, wird statt des Syn/Ack-Pakets ein Rst/Ack-Paket gesendet, wodurch Q mitgeteilt wird, dass der Port geschlossen ist. Ein solcher Portscan ist aber sehr auffällig und wird aus diesem Grund von Angreifern nicht verwendet werden. Er ist typisch für einen Administrator, der einen Rechner überprüfen will.

Etwas ausgefeilter ist der sogenannte Syn-Scan. Hierbei werden ebenfalls Pakete zum Verbindungsaufbau an ein mögliches Ziel gerichtet. Auch hier kann der Angreifer anhand der Antwort des Ziels (Syn/Ack oder Syn/Rst) erkennen, ob ein Port geöffnet ist. Der Verbindungsaufbau wird jedoch nicht beendet. Statt eines Ack-Paketes sendet der Angreifer final ein Rst-Paket, um dem Ziel vorzugaukeln, dass aus irgendwelchen Gründen (Performance, Netzprobleme usw.) die Verbindung nicht zustande gekommen ist. Dies ist nichts Ungewöhnliches und wird im Zielsystem in der Regel nicht protokolliert, IDS (Intrusion Detection Systeme) sind allerdings auch in der Lage solche Scans zu erkennen. Der Protokollanalyst erkennt solche Versuche daran, dass viele Ports auf dem Zielrechner hintereinander mit Syn-Paketen adressiert werden. Ob der Scan erfolgreich war, kann der Analyst natürlich genauso sehen, wie der Angreifer.

Eine dritte Art des Scans, die jedoch nur bei einigen wenigen Betriebssystemen funktioniert, ist der sogenannte "XMAS-Scan". Hierbei werden die Pakete (absichtlich) mit eigentlich falschen Flags ausgezeichnet. Geschlossene Ports antworten darauf mit Rst/Ack, offene gar nicht. Mithilfe des Filters tcp.flags.fin==1||tcp.flags.psh==1||tcp.flags.urg==1 können solche Pakete gefiltert werden. Wir verknüpfen die Bedingungen dabei mit einem logischen ODER, um sämtliche Variationen abzudecken.

Der Null-Scan funktioniert ähnlich, verwendet allerdings Pakete, bei denen alle Flags ausgeschaltet sind.

Während Portscans noch relativ einfach zu erkennen sind, wird es bei echten Angriffen schon schwieriger. Der Analyst muss wissen, wie die Charakteristika des Angriffs sind. Findet der Angriff von innen nach außen statt (wie z. B. bei Malware) oder handelt es sich um einen aktiven Angriff durch Ausnützen einer Sicherheitslücke. Der Analyst kann allerdings hier selektiv vorgehen. Er muss in der Regel nicht alle möglichen Angriffe kennen, sondern nur solche die für die eingesetzte Software geeignet sind. Oft hilft dabei auch die Option "Follow-TCP-Stream", die es ermöglicht, die Kommunikation zwischen Quelle und Ziel nachzuvollziehen. Oft werden bestimmte Zeichenketten eingesetzt, um einen Angriff durchzuführen, die Protokolldaten können auf solche Strings hin untersucht werden. Dies ist jedoch eine Aufgabe, die viel Erfahrung erfordert. Im Folgenden soll anhand eines einfachen Beispiels gezeigt werden, wie die Option "Follow-TCP-Stream" eingesetzt werden kann, um passiv an Daten zu gelangen.

Netzwerkanalyse: Analyse von Inhalten

Die meisten interessierten Internetanwender sind sich der Gefahr bewusst, dass unverschlüsselte Daten durch einen passiven Angreifer mitprotokolliert werden können. Wir werden an einem Beispiel demonstrieren, wie einfach ein Bild aus einem Datenstrom extrahiert werden kann. Die hier angewendete Technik kann auch eingesetzt werden, um zum Beispiel typische Inhalte eines aktiven Angriffs zu erkennen und zu extrahieren, aber eben auch, um sensible Daten wie Passwörter, Kreditkarteninformationen oder Ähnliches abzugreifen.

Zunächst benötigen wir einen Versuchsaufbau, hierzu ist auch ein Einzelplatzrechner mit Internetanschluss ausreichend. Als Erstes starten wir Wireshark und veranlassen eine Protokollierung aller Daten der Netztwerkschnittstelle. Ist dies geschehen, besuchen wir eine Webseite (ohne HTTPS), die ein Bild beinhaltet. Um für den Versuch, die Protokolldaten klein zu halten, empfiehlt es sich bereits vor dem Protokollieren eine geeignete Seite ausfindig zu machen und dann nur noch das Bild im Browser zu laden. Die so erhaltene Protokolldatei lassen wir in Wireshark anzeigen. Da es sich um ein Bild (in unserem Fall im Format .jpg) handelt, suchen wir über "Edit -> Find Packet…" und "Search In: Packet" sowie "Find String" nach dem String "jpg". Es wird ein Paket gefunden, in dem die Übertragung des Bildes angefordert wird. Da es zum Strom der Bildübertragung gehört, können wir "Follow-TCP-Stream" auf dieses Paket anwenden. Daraufhin wird der gesamte Datenverkehr angezeigt. Dieser beinhaltet außer dem Bild auch noch den Austausch der zugehörigen Daten des HTTP-Protokolls.

Dieses Verfahren lässt sich auch auf beliebige andere Inhalte anwenden. Soll zum Beispiel nach einem Passwort gesucht werden, so können wir die Datenpakete nach "passwort", "password" oder "pass" durchsuchen. Der zugehörige TCP-String sollte dann auch das Passwort umfassen, sofern dieses im Klartext übermittelt wird. Um etwas unspezifischer zu suchen, wäre es möglich, etwa über den Filter "http" alle HTTP-Pakete herausfiltern. Mit "ip.dst eq xxx.xxx.xxx.xxx" lassen sich alle Pakete finden, die an ein bestimmtes Ziel gerichtet sind, um zum Beispiel alle Aktivitäten bezüglich eines bestimmten Ziels zu rekonstruieren.

Fazit

Wie dargestellt wurde, ist die Protokollanalyse, wenn richtig eingesetzt, ein mächtiges Werkzeug, um Angriffe zu erkennen, die Charakteristika des Angriffs zu studieren und evtl. auch den Angreifer zu identifizieren. Gerade wenn bekannt ist, dass ein Angriff stattgefunden hat, kann es lohnend sein, diesen zu analysieren (sofern er protokolliert wurde) - um geeignete Gegenmaßnahmen finden zu können. Im Gegenzug ist Protokollanalyse ebenso ein gefährliches Mittel, um Daten auszuspionieren. Letzteres ist ein weiteres Argument, wo möglich und sinnvoll, Verschlüsselung einzusetzten. Das Versenden von E-Mails, das Surfen im Internet und Ähnliches sind prinzipiell unsichere Aktivitäten und extrem anfällig gegen Angriffe dieser Art. Daher sollten sensible Daten im Web ausschließlich über gesicherte Verbindungen (wie zum Beispiel über HTTPS) versendet werden. E-Mails mit wichtigem Inhalt, aber auch Dateien können wirksam mit PGP oder einer anderen geeigneten Verschlüsselungssoftware sicher übertragen werden.

Quellen

  1. Wikipedia: OSI-Modell
  2. Gerhard Lienemann, Dirk Larisch: TCP/IP - Grundlagen und Praxis - Protokolle, Routing, Dienste, Sicherheit (ISBN: 9783944099125)


RH-ITsec