Bernhard J. Hauser Wireshark Einführung in die Netzwerkanalyse Open Source Press
Alle in diesem Buch enthaltenen Programme, Darstellungen und Informationen wurden nach bestem Wissen erstellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grunde sind die in dem vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor(en), Herausgeber, Übersetzer und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen oder Teilen davon entsteht, auch nicht für die Verletzung von Patentrechten, die daraus resultieren können. Ebensowenig übernehmen Autor(en) und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. werden ohne Gewährleistung der freien Verwendbarkeit benutzt und können auch ohne besondere Kennzeichnung eingetragene Marken oder Warenzeichen sein und als solche den gesetzlichen Bestimmungen unterliegen. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdrucks und der Vervielfältigung des Buches oder Teilen daraus vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlags in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Copyright 2015 Open Source Press GmbH, München Gesamtlektorat: Dr. Markus Wirtz Satz: textovia web application (http://textovia.com) Umschlaggestaltung: Elena Levitina Gesamtherstellung: Kösel, Krugzell ISBN: 9783955391249 (gedruckte Ausgabe) http://www.opensourcepress.de
3 Erste Netzwerkanalyse Machen wir uns nach den Grundlagen nun direkt an die Arbeit: Sie starten Wireshark durch Doppelklick auf das Icon oder durch Aufruf an der Konsole: ~$ wireshark Je nach Installation (siehe Anhang A) und Konfiguration müssen Sie das Programm mit Administratorrechten ausführen, was allerdings nicht zu empfehlen ist: Kapitel ~$ sudo wireshark 33
3 Erste Netzwerkanalyse 3.1 Erste Schritte Abbildung 3.1: Der Aufbau des Hauptfensters HINWEIS Der Startbildschirm (Abbildung 3.1) ist übersichtlich und zeigt die Interfaces, deren Datenverkehr mitgeschnitten werden kann. Man wählt die Schnittstelle aus, die überwacht werden soll hier eth0. Um nur wenige Datenpakete zu sehen, beenden Sie zuvor alle überflüssigen Netzwerkdienste. Es sollte kein E-Mail-Programm, kein Chat-Programm, kein Messenger, keine Datensynchronisationssoftware wie Dropbox oder sonstige Cloud-Dienste und kein anderes Netzwerkprogramm laufen! Öffnen Sie jetzt ein Browserfenster und geben Sie beispielsweise die Adresse google.de ein. Danach wechseln Sie sofort wieder zu Wireshark und stoppen die Aufzeichnung. Sie sehen, dass dieser triviale Aufruf bereits ziemlich viel Datenverkehr verursacht hat. Zunächst wird google.de in eine IP-Adresse übersetzt. Das übernimmt der Domain Name Service, der die DNS-Pakete verursacht. Paket Nummer 3 ist die Anfrage des PC an den Router (DNS Standard query). Paket Nummer 4 ist die Antwort des Routers an den PC. Der PC kennt nun die IP-Adresse von google.de. Man erkennt den TCP-Verbindungsaufbau des PC. Die verwendete IP- Adresse (hier 209.85.149.147) ist die von google.de. Um das zu über- 34
3.2 Filterung prüfen, geben wir diese Adresse einmal direkt im Adressfeld des Browsers ein und landen auf der Seite google.de. 1 Nach erfolgreichem Aufbau der Verbindung mit Google (Pakete 5, 6 und 7) wird eine HTTP-Anfrage geschickt (GET). Sie können sich vorstellen, wie viele Daten anfallen, wenn parallel noch andere Netzwerkdienste laufen das Ganze wird folglich sehr schnell sehr unübersichtlich. Abhilfe schaffen Filter, die jenen Datenverkehr extrahieren, der Sie gerade interessiert. 3.2 Filterung Wireshark verfügt über zwei Filter-Typen: Capture-Filter Display-Filter Abbildung 3.2: Anzeige der Pakete Der Capture-Filter filtert Datenpakete schon vor der Aufzeichnung. Nur Pakete, die den Filter passieren, gelangen weiter über das Betriebssystem 1 Google betreibt Lastverteilung, so dass wir eine IP-Adresse von einem Rechner bekommen, der gerade Zeit für unsere Anfragen hat. Die Adresse kann bei Ihnen also eine andere sein. 35
3 Erste Netzwerkanalyse Abbildung 3.3: Filtereinstellungen (Display) zu Wireshark. Der Capture-Filter arbeitet sehr nah an der Netzwerkkarte und kann keine komplizierten Filterausdrücke bearbeiten; dafür ist er sehr schnell. Der Display-Filter sucht aus allen Paketen, die vom Capture-Filter geliefert werden, jene heraus, die angezeigt werden sollen. Der Display-Filter lässt auch sehr komplexe Filterregeln zu, indem z. B. mehrere Regeln über logische Operatoren verknüpft werden. Abbildung 3.3 zeigt, wie die verschiedenen Filter wirken. Nahe der physikalischen Ebene, auf dem Data-Link-Layer, filtert normalerweise die Netzwerkkarte alle Daten heraus, die für sie bestimmt sind. Nur Frames, die entweder an die MAC-Adresse der Netzwerkkarte oder an eine Multicast-MAC-Adresse oder an alle Netzwerkkarten (Broadcast-MAC- Adresse ff-ff-ff-ff-ff-ff) adressiert sind, werden angenommen und ans Betriebssystem weitergereicht. Um auch Frames empfangen zu können, die im Normalfall nicht empfangen werden, muss die Netzwerkkarte in den Promiscuous Mode versetzt werden. Diese Einstellung erledigt Wireshark. Um empfangene Daten aufzeichnen zu können, wird ein Treiber namens pcap (bei Windows WinPcap) eingesetzt. Hier setzt der Capture-Filter, der Aufzeichnungsfilter, an und entsorgt überflüssigen Datenverkehr. Nur der gewünschte Datenverkehr wird zum System weitergeleitet. In großen Netzen herrscht sehr (!) viel Netzverkehr, der bei einer Analyse nur störend wäre und Empfangspuffer und Festplatte bei der Aufzeichnung unnötig belegt. Dieser Filter hält die Datenmenge in Grenzen. Der Display-Filter erlaubt es, aus den verbliebenen/aufgenommenen Daten bestimmte Pakete für die Ansicht herauszufiltern. Alle Daten liegen noch vor, erscheinen aber nicht in der Liste. Erst nach dem Löschen des Filterausdrucks sind wieder alle Pakete zu sehen. 3.3 Erste Analyse: ping Für ein erstes Kennenlernen des Sniffers führen Sie am sinnvollsten eine einfache Operation aus. Schließen Sie alle überflüssigen Programme und beenden Sie ebenso alle Programme und Dienste, die eventuell im Hintergrund eine Verbindung ins Netz aufbauen. Hierzu zählen auch Chat- Programme, IP-Telefonie-Programme usw. Öffnen Sie auf dem Desktop eine Konsole für die Befehlseingabe sowie Wireshark zur Aufzeichnung auf dem entsprechenden Interface; das ist 36
3.3 Erste Analyse: ping meist die erste Ethernet-Schnittstelle eth0. In Wireshark sollten nun möglichst keine Pakete erscheinen. Wechseln Sie in das Konsolenfenster und pingen Sie eine existierende Adresse im Internet an: 2 ~$ ping google.de Sofort wechseln Sie wieder zu Wireshark. Jetzt müssten, wenn alles korrekt funktioniert, einige Pakete in der Paketliste zu sehen sein. Vor dem Kontakt mit einem Server von google.de wird ein anderer Rechner angefragt, um die IP-Adresse des Ziels zu ermitteln. Dies geschieht mit Hilfe des Domain Name System (DNS). Abbildung 3.4: ping auf google.de an der Konsole Abbildung 3.5: ping zu google.de in Wireshark Schauen wir uns die DNS-Pakete etwas genauer an: Wir erkennen den Rechner, der für die Namensauflösung angesprochen wurde (DNS Stan- 2 Der eigentliche Befehl, also das, was Sie eintippen, lautet hier ping google.de. Die Zeichenfolge ~$ steht für die sog. Eingabeaufforderung (Prompt), der in Ihrem System auch anders aussehen kann. 37
3 Erste Netzwerkanalyse Abbildung 3.6: DNS-Namensauflösung von google.de Abbildung 3.7: ARP-Adressauflösung Abbildung 3.8: Der eigentliche ping von google.de dard query), wie auch die Antwort (DNS Standard query response), die dem PC die IP-Adresse von google.de mitteilt. Im Falle von google.de fällt auf, dass wir nicht nur eine einzige IP- Adresse erhalten, sondern drei. Hinter der Domain google.de steckt nicht nur ein einziger Server, sondern mehrere. Die IP-Adressen werden lastabhängig verteilt, so dass die Server bei Google gleichmäßig ausgelastet werden. Um nur die DNS-Pakete zu sehen, geben Sie in der Filterleiste DNS als Filterregel ein. Apply wendet diesen Filter an, so dass nur noch DNS-Pakete in Wireshark erscheinen. Clear löscht den Filter, und man sieht wieder alle Pakete. Eventuell sieht man auch ARP-Pakete, die dazu dienen, IP-Adressen in MAC-Adressen aufzulösen. Das Verfahren ist ähnlich dem DNS. Geben Sie ARP in die Filterzeile ein, so lassen sich diese Pakete herausfiltern. Die eigentlichen ping-pakete sind ICMP-Pakete (Internet Control Message Protocol). Sie filtern Sie über die Eingabe ICMP heraus. Man beachte die Angaben in der Zeit-Spalte des Paketfensters. Hier ist zu sehen, wann ICMP-Anfragen (request) abgesendet wurden und wann die Antworten (reply) eingingen. Die Differenzzeit ist die ping-antwortzeit, wie sie auch im Konsolenfenster beim ping-befehl zu sehen ist. 3.4 Webseitenaufruf mit einem Browser Nach diesen ersten Sniffingversuchen starten wir einen Browser und eine neue Wireshark-Aufzeichnung; anschließend geben Sie im Browser 38
3.5 Hypertext-Transfer Protocol (HTTP) die Adresse einer geläufigen Domäne ein, z. B. google.de. Sobald das Google-Fenster steht, geben Sie einen Suchbegriff ein, z. B. Klumpen Gold. Stoppen Sie anschließend die Aufzeichnung, die vermutlich schon einige Pakete erfasst hat. Wieder sind DNS- und ARP-Adressauflösungen zu sehen. Nun starten Sie die Analyse der obersten Schicht des OSI-Modells und arbeiten sich Schicht für Schicht nach unten. 3.5 Hypertext-Transfer Protocol (HTTP) Auf der Anwendungsschicht (OSI-Schicht 7 bzw. TCP/IP-Schicht 4) findet sich das Hypertext Transfer Protocol (HTTP), mit dem Webserver und Webbrowser ihre Daten austauschen. Abbildung 3.9 zeigt die HTTP- Pakete als Ergebnis des Aufrufs einer einfachen Serverseite. Um nur die HTTP-Pakete zu sehen, filtern Sie die Aufzeichnung nach diesen Paketen und geben dafür http in das Feld des Anzeigefilters ein. Per Klick auf Apply wenden Sie den Filter an und sind damit in der Lage, das HTTP-Protokoll zu untersuchen. Abbildung 3.9: HTTP in Wireshark (Anfrage) 39
3 Erste Netzwerkanalyse In Abbildung 3.9 wird in Paket 4 der Server angefragt (GET). In den Paketdetails im mittleren Fenster sieht man, welche Daten der Browser an den Server sendet, und zwar im Klartext: Abbildung 3.10: HTTP in Wireshark (Antwort) Abbildung 3.11: Browser-Ergebnis der Anfrage GET / HTTP/1.1 was soviel bedeutet wie gib mir die Daten vom root-verzeichnis (/) im Format HTTP1.1. Host: 134.103.220.125 gibt an, von welchem Server Daten gewünscht werden. Es folgen Angaben über verwendete Zeichensätze, Browser, Betriebssystem des Clients und einige andere. In Paket 6 in Abbildung 3.10 sehen Sie die Antwort des Servers. Er antwortet mit einem Statuscode 200 OK, was dem Browser anzeigt, dass alles in Ordnung ist. In den Paketdetails sieht man den HTML-Code, den der Server zum Browser schickt. In Paket 8 in Abbildung 3.12 fragt der Browser den Server nach einem Icon, das er im Adressfeld des Browsers vor der Adresse anzeigen möchte. Paket 9 ist die Antwort des Servers: 404 Not Found, da er das Icon nicht liefern kann. 40
3.6 Transport Control Protocol (TCP) Abbildung 3.12: HTTP Server- Antwort: 404 Not Found Um sich in die Protokolle einzuarbeiten, sollten Sie sich die Pakete eines bestimmten Typs genauer ansehen, um Gemeinsamkeiten und Unterschiede zu erkennen. 3.6 Transport Control Protocol (TCP) Nach den Daten auf der Anwendungsschicht kommen wir zu jenen auf der darunterliegenden Transportschicht (OSI-Layer 4). Wählen Sie dazu ein HTTP-Paket aus der Paketliste aus. In der Detailansicht (mittleres Fenster) wählen Sie Transmission Control Protocol aus und öffnen weitere Details, indem Sie auf das Dreieck (oder Plus-Zeichen, je nach Betriebssystem) klicken. Abbildung 3.13: TCP in Wireshark (1) Man sieht deutlich, dass TCP mit Ports arbeitet, also den Adressen der Anwendungen, um diese direkt anzusprechen. In diesem Beispiel (Abbil- 41
3 Erste Netzwerkanalyse dung 3.13) wird auf dem Zielrechner der Port 80 adressiert, der HTTP- Port. Quellport ist ein freier Port, hier 38809. Abbildung 3.14: TCP in Wireshark (2) Abbildung 3.15: TCP Header-Aufbau Abbildung 3.14 zeigt das Antwortpaket auf das vorangegangene; die beiden Ports sind entsprechend vertauscht. Um sicherzustellen, dass die Daten korrekt ankommen, dient ein Mechanismus aus Sequence Number und Acknowledgement Number. Die Bytes einer Kommunikation werden durchnummeriert das ist die Sequence Number. Der andere Rechner quittiert den korrekten Empfang eines Datenpakets mit einer Acknowledgement Number die Nummer des nächsten Bytes, das der Sender schicken soll. Bleibt eine Quittung aus, wiederholt der Sender seine Sendung. Abbildung 3.15 zeigt den Aufbau des TCP-Headers. 42