Lehrstuhl für Datenverarbeitung Prof. Dr.-Ing. Dr. E.h. Wolfgang Weber Studienarbeit S294 Speicherformat zur Datenakquisition in verteilten Systemen Ein zuverlässiger und vollständiger Datenmitschnitt ist Voraussetzung für ein spätere Analyse. Bereits in der Diplomarbeit D344 ist ein Monitoringsoftware zum Datenmitschnitt des Netzwerkverkehrs entwickelt worden, welcher in dieser Arbeit durch Nutzung einer anderen –bereits existierenden– Lösung verifiziert werden soll. Ziel ist es, das binäre Speicherformat einer alternativen Monitoringsoftware zu analysieren und eine entsprechende Formatkonvertierung durchzuführen. Dazu muss das Speicherformat an das im verteilten Sicherheitssystem genutzte angepasst und modifiziert werden. Die Realisierung, als Einbindung der alternativen Monitoringsoftware in einen Dienst, ist ein weiteres Ziel. Automatisiert soll hierbei der Datenmitschnitt von der Netzwerkkarte in kontinuierlichen Intervallen durchgeführt werden. Die Aufnahme des Datenverkehrs selbst und die Formatkonvertierung sollen dabei entkoppelt voneinander in zwei getrennten Projekten stattfinden. Die Software ist mit MS Visual C++ unter MS Windows NT/2000 zu realisieren. Alle Entwicklungsschritte sind zudem projektbegleitend zu dokumentieren. (Prof. Dr.-Ing. Wolfgang Weber) Bearbeiter: Matrikel-Nummer: Betreuer: Bearbeitungszeitraum: cand.-Ing. Thorsten Kisner 108 096 220 557 Dipl.-Ing Thomas Droste WS 2001/02 Inhalt Inhalt 1 2 Einleitung ................................................................................................................ 3 Grundlagen der Netzwerkkommunikation .............................................................. 4 2.1 Das OSI Schichtenmodell ............................................................................... 4 2.2 Network Driver Interface Specification (NDIS) ............................................. 5 2.3 Logical Layer (Layer 2)................................................................................... 6 2.3.1 Beschreibung der Funktionen...................................................................... 6 2.3.2 Ethernet 802.3 ............................................................................................. 6 2.4 Network Layer (Layer 3)................................................................................. 7 2.4.1 Beschreibung der Funktionen...................................................................... 7 2.4.2 Internet Protocol.......................................................................................... 7 2.5 Transport Layer (Layer 4) ............................................................................... 9 2.5.1 Beschreibung der Funktionen...................................................................... 9 2.5.2 Ports............................................................................................................. 9 2.5.3 Transmission Control Protocol.................................................................. 10 2.5.4 User Datagramm Protocol ......................................................................... 11 2.5.5 Internet Control Message Protocol............................................................ 11 3 Problemstellung..................................................................................................... 12 4 Ethereal.................................................................................................................. 13 4.1 Beschreibung................................................................................................. 13 4.2 Windows Packet Capture Driver (WinPcap)................................................. 14 4.2.1 Kernel Ebene: Packet Capture Driver ....................................................... 15 4.2.2 Benutzer Ebene: Packet Capture Library .................................................. 15 4.2.3 Installation................................................................................................. 15 4.3 Kompilieren des Projektes ............................................................................ 16 4.3.1 Benötigte Pakete........................................................................................ 16 4.3.2 Zusätzliche Pakete..................................................................................... 16 4.3.3 Umgebungsvariabeln und Aufruf des Compilers...................................... 16 4.4 Tethereal........................................................................................................ 17 4.4.1 Capture-Filterregeln .................................................................................. 19 4.4.2 Tethereal Verbose-Ausgabe ...................................................................... 21 4.5 Ethereal.......................................................................................................... 24 4.5.1 Anzeigoptionen ......................................................................................... 25 4.5.2 Analysefunktionen .................................................................................... 28 5 LibPcap Capture Format ....................................................................................... 34 5.1 Beschreibung................................................................................................. 34 1 Inhalt 6 7 8 9 5.2 LibPcap Format ............................................................................................. 34 5.2.1 Arrival Time.............................................................................................. 35 5.2.2 Capture Lenght und Packet Lenght........................................................... 35 5.2.3 Debug Informationen ................................................................................ 36 5.3 Analyseprogramm und Konvertierung in das Zielformat ............................. 36 5.3.1 Extrahierte Informationen ......................................................................... 39 5.3.2 Beispiel einer Analyse eines ICMP-Datenpaketes.................................... 42 5.3.3 Ausgabe des Analyseprogramms .............................................................. 44 Dienste................................................................................................................... 45 6.1 Allgemein ...................................................................................................... 45 6.2 Aufrufe von Programmen.............................................................................. 45 6.3 Alternative: srvany.exe.................................................................................. 46 6.4 Realisierung................................................................................................... 48 6.4.1 Programmstruktur...................................................................................... 48 6.4.2 EventLog Komponenten ........................................................................... 50 6.4.3 Installation................................................................................................. 50 Test ........................................................................................................................ 53 7.1 Testumgebung ............................................................................................... 53 7.2 Capture-Service............................................................................................. 53 7.2.1 Dateiübertragung....................................................................................... 54 7.2.2 Nutzung der maximalen Bandbreite.......................................................... 55 7.3 Capture-Parser............................................................................................... 56 Ausblick ................................................................................................................ 57 8.1 Verbesserungen ............................................................................................. 57 8.2 Schwächen..................................................................................................... 57 Literatur................................................................................................................. 59 2 Kapitel 1 Einleitung 1 Einleitung Ein Bestandteil von Netzwerksicherheit ist die Kontrolle der über Netzwerke gesendeten Daten. Diese Kontrolle ist nur durch entsprechendes Beobachten des Netzwerkmediums möglich. Und zwar ohne die Kommunikation in irgendeiner Weise zu beeinflussen. Dazu muss jedes Paket unabhängig von Quelle und Ziel berücksichtigt und aufgezeichnet werden. Eine weitere Schwierigkeit ist die große Anzahl von Protokollen und die immer mehr zunehmende Geschwindigkeit in Netzwerken. An dieser Stelle ist die Performance der Monitoring Applikation von entscheidender Bedeutung, um den Paketverlust vor allem in Hochgeschwindigkeitsnetzen zu vermeiden oder auf eine Minimum zu reduzieren. Ziel dieser Studienarbeit ist es, zu einer bereits existierenden Monitoring Software eine unabhängige Lösung zu bieten, um die Ergebnisse der vorhandenen Software zu verifizieren. Dabei wird auf die ebenfalls vorhandene Software Ethereal zurückgegriffen. Diese Software wird als NT-Dienst implementiert und die Ausgabe des Programms an das gewünschte Zielformat angepasst. 3 Kapitel 2 Grundlagen der Netzwerkkommunikation 2 Grundlagen der Netzwerkkommunikation Wesentliche Grundlage für die Entwicklung des Analyseprogramms sind die Protokollschichten des in Kapitel 2.1 besprochenen OSI Schichtenmodells. In den weiteren Unterkapiteln werden die Header der benötigten Protokolle der Schichten zwei bis vier dargestellt. Diese Beschreibung gibt lediglich eine Übersicht über die Struktur der einzelnen Datenpakete, genaue Definitionen können in [Bau99] nachgeschlagen werden. 2.1 Das OSI Schichtenmodell 7. Application Layer (Anwendungschicht) 6. Presantation Layer (Präsentationsschicht) 5. Session Layer (Sitzungschicht) 4. Transport Layer (Transportschicht) 3. Network Layer (Netzwerkschicht) 2. Logical Layer (Datenverbindungschicht) 1. Physical Layer (Physiche Schicht) Abbildung 2-1: ISO/OSI Schichtrnmodell Wichtig für das Verständnis von Netzwerkverbindungen ist das in Abbildung 2-1 gezeigte ISO1/OSI2 – Schichtenmodell. Definiert sind die Schnittstellen zwischen den einzelnen Schichten (Service Access Points, SAP). Das Schichtmodell gibt keinerlei Vorgaben über die Implementierung einer einzelnen Schicht, sondern beschreibt lediglich die Schnittstellen zwischen den Schichten. 1 ISO - International Standardisation Organisation 2 OSI - Open System Interconnect 4 Kapitel 2 Grundlagen der Netzwerkkommunikation 2.2 Network Driver Interface Specification (NDIS) Die Abbildung 2-2 zeigt die Implementierung des in Abbildung 2-1 dargestellten ISO/OSI – Schichtenmodells, wie in [MIC00] nachzulesen ist. Wesentlich für den Mitschnitt von Paketen auf einem Netzwerkmedium ist die NDIS3 Schnittstelle. Diese ist wesentlicher Bestandteil des Netzwerkkodes von Win32-Systemen. NDIS ist für die Kommunikation zwischen Netzwerkadaptern bzw. den Treibern dieser Adapter und den darüber liegenden Transport Protokollen verantwortlich. Es wird eine Methode bereitgestellt, die es erlaubt, Daten auf einem Netzwerk zu senden oder zu empfangen, ohne genaue Kenntnis über die einzelnen Netzwerkadapter zu besitzen. 7. Anwendung RPC Provider Named Pipes 6. Präsentation 5. Sitzung NetBIOS-Treiber 4. Transport Redirector Server Winsock-Treiber Transport Driver Interface 3. Netzwerk Transport Protokolle Streams 2. Datenverbindung LLC MAC NDIS-Schnittstelle NDISNetzwerkkartentreiber Treiber d. Netzwerkkarten 1. Physisch Netzwerkkarten Abbildung 2-2: Microsoft Windows NT-Netzwerkarchitektur Es werden drei Arten von NDIS Schnittstellen unterstützt: • Netzwerkkartentreiber An dieser Stelle können vollständige Netzwerkkartentreiber implementiert werden. Diese beinhalten alle hardwarespezifische Informationen zum Senden, Synchronisieren und Empfangen von Daten und der Weiterleitung an die Transport Protokolle. • Zwischentreiber Ein Zwischentreiber ist das Bindeglied zwischen den Transportprotokollen und den eigentlichen Netzwerkkartentreibern. Für eine Transportprotokoll sieht dieser Treiber wie eine Netzwerkkarte aus, ein Netzwerkkartentreiber kommuniziert mit diesem Zwischentreiber wie mit einem Transportprotokoll. 3 NDIS - Network Driver Interface Specification 5 Kapitel 2 Grundlagen der Netzwerkkommunikation • Protokolltreiber An dieser Stelle können Netzwerkprotokolle definiert werden. Diese stellen die Dienste direkt den Netzwerkkarten zur Verfügung. Die NDIS Implementierung als Zwischentreiber ist für die spätere Betrachtung des Packet Capture Drivers in Kapitel 4.2 von Bedeutung. 2.3 Logical Layer (Layer 2) 2.3.1 Beschreibung der Funktionen Die Datenverbindungsschicht sorgt für eine fehlerfreie Übertragung der Daten-Frames über die physische Schicht. Unterschieden wird diese Schicht in eine Media Access Control (MAC) und Logical Link Control (LLC) Unterschicht in den Projekt 802 Definitionen. Diese beinhalten unter anderem noch weitere Kategorien: 802.2 LLC, 802.3 CSMA/CD, 802.5 Token Ring. Funktionen der LLC Schicht: • Auf- und Abbau von logischen Verbindungen • Frame-Flußkontrolle Funktionen der MAC Schicht: • Verwalten des Medienzugriffs • Überprüfen der Frames auf Fehler • Prüfen der Zieladresse und Entscheidung ob das Datenpaket an eine höhere Schicht weitergegeben wird. Die MAC-Schicht ist in den Netzwerkkartentreiben implementiert, die LLC Schicht ist den NDIS-(Network Device Interface) Spezifikationen zugeordnet. 2.3.2 Ethernet 802.3 Das Ethernet hat sich in den letzen Jahren als Standard in lokalen Netzwerken (LAN, Local Area Network) etabliert. Nicht zuletzt durch einfach handhabbare Hardwarekomponenten und günstige Preise hat es andere Protokolle aus dem Massenmarkt verdrängt. Die Abbildung 2-3 zeigt den Aufbau eines Frames im Ethernet. Neben Quell- und Zieladresse und dem eigentlichen Datenteil sind 2 Byte für den Typ des übergeordneten Protokolls spezifiziert. Die Präambel signalisiert der Beginn der Verbindung und ist im Carrier Sense Multiple Access / Collision Detect (CSMA/CD) – Protokoll spezifiziert. Die Framekontrollsequenz beinhaltet eine Prüfsumme der übertragenden Daten, um Fehler zu korrigieren oder eine erneute Sendung des Frames anzufordern. 6 Kapitel 2 Grundlagen der Netzwerkkommunikation Präambel Zieladresse Sendeadresse 8 Byte 6 Bytes 6 Bytes Typ Datenteil 2 Bytes max. 1500 Bytes Framekontrollsequenz 4 Bytes Abbildung 2-3: Ethernet Frame 2.4 Network Layer (Layer 3) 2.4.1 Beschreibung der Funktionen Die Netzwerkschicht basiert auf der Datenverbindungsschicht und bestimmt die physischen Wege, auf denen die Daten verschickt werden. Diese Schicht stellt folgende Funktionen zur Verfügung: • Unterteilen des Netzes in logische Subnetze • Weiterleitung der Frames an Router • Aufteilen der Frames in mehrere Blöcke, falls ein maximale Größe (MTU, Maximum Transfer Unit) erreicht ist • Auflösen der logischen Adresse eines Netzknotens in eine physikalische Netzwerkadresse Das Internet Protokoll (IP) ist nur ein Beispiel für ein Protokoll der Ebene 3. In den letzten Jahren hat es sich allerdings als das bedeutsamste herausgestellt. Weitere, hier nicht behandelte Protokolle, sind z.B. Apple Talk oder NetBEUI. 2.4.2 Internet Protocol Die wichtigste Funktion des Internet Protokolls (IP) ist zweifellos das Routing. Jedes Datenpaket, in dieser Schicht auch Datagramm genannt, beinhaltet die IP-Sende- und Empfängeradresse. Anders als in der Datenverbindungsschicht bleiben diese Adressen unverändert. Die Abbildung 2-4 zeigt dieses an einem einfachen Routingbeispiel. Host A (192.168.111.100) will ein Paket an Host B (192.168.222.2) senden. Diese Quellund Zieladressen werden in den Feldern des IP-Frames eingetragen. Er findet in seiner IP-Routingtabelle für das Zielnetz 192.168.222.0 das Gateway 192.168.111.1. Nun kommen die MAC Adressen hinzu. Quelladresse ist die von Host A, Zieladresse ist jedoch die des Routers. Der Router bekommt nun das Paket und entscheidet anhand der IP-Zieladresse, dass er es über sein anderes Netzwerkinterface versenden muss. Die MAC-Adressen werden entsprechend der neuen Adressen dieses Netzes entsprechend geändert. 7 Kapitel 2 Grundlagen der Netzwerkkommunikation Router Host A MAC: 00:10:4B:45:B4:53 IP: 192.168.111.100 IP-Routingtabelle Netzwerkziel 192.168.111.0 192.168.222.0 Gateway 192.168.111.100 192.168.111.1 MAC: 00:AF:C4:D6:3B:9C IP: 192.168.111.1 MAC: 00::3C:42:4E:5B IP: 192.168.222.1 Host B IP-Routingtabelle Netzwerkziel 192.168.222.0 192.168.111.0 IP-Routingtabelle Netzwerkziel 192.168.222.0 192.168.111.0 MAC: 00:80:C8:87:BB:EF IP: 192.168.222.2 Gateway 192.168.222.1 192.168.111.1 Ethernet Gateway 192.168.222.2 192.168.222.1 Ethernet SrcMAC DstMAC SrcMAC DstMAC 00:10:4B:45:B4:53 00:AF:C4:D6:3B:90 00::3C:42:4E:5B 00:80:C8:87:BB:EF SrcIP DstIP SrcIP DstIP 192.168.111.100 192.168.222.2 192.168.111.100 192.168.222.2 Abbildung 2-4: Routingbeispiel IP Die Abbildung 2-5 zeigt die Struktur eines IP-Headers. Im Beispiel oben sind nur die Informationen IP-Sendeadresse und IP-Empfängeradresse berücksichtigt worden. Diese jeweiligen 4 Byte können an den entsprechenden Stellen ausgelesen werden. Das Feld Protokoll gibt wiederum den Typ des übergeordneten Protokolls an. Im IP-Header wird sowohl die Länge des Headers selbst (Internet Header Lenght, IHL) als auch die gesamten Paketlänge angegeben. Dies ist notwendig, da beide Längen variieren können. 1-8 9-16 17-24 25-32 Version IHL Type of Service Paketlänge Identifikation Flags Fragmentabstand TTL Protokoll Prüfsumme IP-Sendeadresse IP-Empfängeradresse Optionen Füllzeichen Abbildung 2-5: IP Header 8 Kapitel 2 Grundlagen der Netzwerkkommunikation 2.5 Transport Layer (Layer 4) 2.5.1 Beschreibung der Funktionen Die Transportschicht kümmert sich um die richtige Reihenfolge der ankommenden Daten. Damit nimmt sie höheren Schichten die Verantwortung für die Kontrolle der Integrität der Daten ab. Da die Transportschicht Daten unbegrenzter Größe bearbeiten kann, in darunter liegenden Schichten jedoch Größenbeschränkungen vorliegen, erfolgt hier eine Unterteilung der Daten in Frames. Darüber hinaus stellt diese Schicht folgende Dienste zur Verfügung: • Vollständige und fehlerfreie Übertragung der Daten durch Bestätigungen des Empfängers • Annahme der Daten von oberen Schichten und Unterteilung in Frames • Anweisung zum Unterbrechen des Datenstroms, falls der Empfangspuffer belegt ist 2.5.2 Ports Speziell auf das TCP/IP Protokoll bezogen, sind Ports in der Transportschicht angesiedelt. Es sind 65535 Ports vorhanden, wobei die ersten 1023 reserviert sind. Aufgabe der Ports ist es, ankommende Datenpakete an die richtigen überliegenden Schichten (bzw. die richtigen Anwendungen) zu transportieren. Anfragen an Port 80 werden z.B. an den Webserver-Dienst weitergeleitet. Wie in Abbildung 2-6 gezeigt, bilden die Sockets den SAP zwischen der Transportschicht und der Sitzungsschicht. Hier wird von der Anwendung ein Socket erzeugt und an einen Port gebunden. Ein Webserver hört z.B. den Port 80 ab und reagiert auf den über das Socket empfangenden String. Session Layer Ports Socket Service Access Point Sockets Webserver 0 1 2 ... 80 ... 65535 Transport Layer Abbildung 2-6: Ports und Sockets 9 Kapitel 2 Grundlagen der Netzwerkkommunikation 2.5.3 Transmission Control Protocol Der Header eines TCP Paketes ist in Abbildung 2-7 gezeigt. Die Länge eines Feldes für Sende- und Empfängerports haben jeweils die Größe von 2 Byte. Dies ergibt die im vorigen Kapitel angegebene maximale Portgröße von 65535. Für die oben angegebenen Funktionen dieser Schicht sind die darauffolgenden Felder von großer Bedeutung. Durch die Sequenznummer kann ein einzelner Frame an die richtige Stelle des Übertragungsstromes eingeordnet werden. Die Länge des Paketes ist durch das Feld Abstand definiert, die Prüfsumme ermöglicht eine Fehlererkennung und – beseitigung. 1-8 9-16 17-24 Sendeport Abstand 25-32 Empfängerport Sequenznummer Quittungsnummer Kontrollbits Reserviert Prüfsumme Optionen Fenstergröße Urgent-Zeiger Füllzeichen Abbildung 2-7: TCP Header Die Abbildung 2-8 zeigt das Zusammenfügen der Daten durch die Sequenznummern anhand einem stark vereinfachten Beispiel. Die unterschiedliche Empfangsreihenfolge der Daten kann z.B. durch unterschiedliche Netzwerkrouten hervorgerufen werden. Host A Sequenznummern werden vergeben DATENPAKET DATENPAKET DATE 1 NPAK 2 ET 3 Empfangsbestätigungen werden geschickt 2 NPAK 1 DATE 3 ET Host B Sequenznummern ergeben richtige Reihenfolge Abbildung 2-8: TCP Sequenznummern 10 Kapitel 2 Grundlagen der Netzwerkkommunikation 2.5.4 User Datagramm Protocol Die Verwendung des User Datagramm Protocol (UDP) entspricht einer verbindungslosen Kommunikation. Weder korrekte Reihenfolge der Pakte noch der Empfang eines Paketes überhaupt kann sichergestellt werden. Als Fehlererkennung dient lediglich die Prüfsumme. Die Abbildung 2-9 zeigt den sehr kleinen Header eines UDP Paketes. Lediglich Sende- und Empfängerport, Paketlänge und Prüfsumme sind im Vergleich zu einem TCP Header vorhanden. Durch die fehlenden Empfangsbestätigungen ist dieses Protokoll jedoch äußerst schnell und eignet sich vor allem für zeitkritische Übertragungen von Sprache und Bild, bei denen einzelne fehlende Pakete keine signifikanten Fehler hervorrufen. Sendeport (2 Byte) Paketlänge (2 Byte) Empfängerport (2 Byte) Prüfsumme (2 Byte) Abbildung 2-9: UDP Header 2.5.5 Internet Control Message Protocol Das Internet Control Message Protocol (ICMP) ist ein Verwaltungsprotokoll, dessen Daten über die IP-Schicht transportiert werden. Besonderes Augenmerk liegt bei der Diagnose von Verbindungsproblemen in der IP Kommunikation. Das Protokoll stellt folgende Funktionen zur Verfügung: • Diagnosemöglichkeiten über die Dienstprogramme ping und tracert (bzw. traceroute) • Erstellen und Verwalten von Routing-Tabellen • Ermitteln der PMTU Die verschiedenen Funktionen sind im Feld Typ des ICMP-Headers (vgl. Abbildung 2-10) kodiert. Typ 8 entspricht beispielsweise einer Echo-Anfrage (echo request) und Typ 0 einer Antwort (echo reply). Typ (1 Byte) Code (1 Byte) Prüfsumme (2 Byte) Unbenutzt (4 Byte) IP-Header + 64 Bit des ursprünglichen Datagramms (4 Byte) Abbildung 2-10: ICMP-Header 11 Kapitel 3 Problemstellung 3 Problemstellung In dieser Studienarbeit solle ein Software entwickelt werden, die automatisiert Datenmitschnitte des Netzwerkverkehres erstellt. Dabei soll auf die frei verfügbare Software Ethereal zurückgegriffen werden. Die Aufgabe lässt sich damit in zwei voneinander unabhängige Bereiche unterteilen. Die Schnittstelle zwischen beiden Bereichen ist das Dateiformat LibPcap. Die Datenakquisition ist als NT-Dienst zu implementieren und gibt, bedingt durch die Verwendung von Ethereal, eine Binärdatei im LibPcap Format aus. Dieses muss in einem zweiten Schritt in das gewünschte Zielformat konvertiert werden. Der wesentliche Grund für die Unterteilung in zwei verschiedene Bereiche ist die Vermeidung des Verlustes von Paketen. Eine integrierte Lösung würde während der Datenaufnahme die Pakete analysieren und dann bereits im gewünschten Format ausgeben, dies jedoch auf Kosten der Systemressourcen. 12 Kapitel 4 Ethereal 4 Ethereal 4.1 Beschreibung Ethereal ist ein Protokoll-Analysator für MS Windows und Unix. Es ist ein OpenSource Produkt und unter der Gnu Public Licence (GPL) verfügbar. Das Programm ermöglich Mitschnitt, Darstellung und Analyse des gesamten Datenverkehrs bezogen auf ein oder mehrere Netzwerk-Interfaces. Das Programm ist in einer graphischen Benutzeroberfläche Ethereal und als Konsolenanwendung Tethereal verfügbar. Beide Anwendungen haben im Kern den identischen Funktionsumfang: Mitschnitt der Datenpakete, Im- und Exportfunktionen in verschiedene Formate, Analyse und Filterung der Daten. Filterregeln unterscheiden sich in sogenannte Capture-Filter und Read- bzw. Display-Filter Die Möglichkeiten der Konsolenanwendung, besonders in Hinblick auf die Analyse des Datenstroms, sind durch die fehlende graphische Benutzeroberfläche natürlich begrenzt. Abbildung 4-1: Ethereal Die Abbildung 4-1 und Abbildung 4-2 zeigen die beiden Programme Ethereal und die Hilfe-Ausgabe von Tethereal. 13 Kapitel 4 Ethereal Abbildung 4-2: Tethereal 4.2 Windows Packet Capture Driver (WinPcap) Ethereal benötigt zwingend den Windows Packet Capture Driver. Dieser stellt eine Schnittstelle zwischen der eigentlichen Applikation Tethereal (bzw. Ethereal) und dem Netzwerkadapter dar. Application Tetheral.exe libpcap.dll Dynamic Link Library Packet Capture Driver User Level packet.dll packet.sys NDIS Datenpaket Kernel Level Network Adapter Abbildung 4-3: Struktur des Capture-Stacks Wie in Abbildung 4-3 gezeigt ist diese Schnittstelle auf zwei verschiedenen Ebenen der Win32-Netzwerkarchitektur verteilt. Auf Benutzerebene ist die dynamische Biblio14 Kapitel 4 Ethereal thek packet.dll und die in der Applikation enthaltenen statischen Bibliothek wpcap.dll zu finden, auf Kernel Ebene der Capture Drivers packet.sys. Beide Ebenen sind getrennt und unabhängig voneinander. 4.2.1 Kernel Ebene: Packet Capture Driver Hauptaufgabe dieses NDIS Treibers ist die Aufnahme der Daten aus der Datenverbindungsschicht und Weitergabe an die Applikation. Während eines Datenmitschnittes muss sich die Netzwerkkarte in einem besonderen Modus (promiscuous mode) befinden, der es erlaubt, alle Pakete an übergeordnete Schichten weiterzuleiten. Im normalen Modus der Netzwerkkarte werden nur Pakete weitergeleitet, die z.B. im Ethernet an speziell diese Media Access Control (MAC) Adresse oder an Broadcast Adressen adressiert sind. Der Packet Capture Driver muss dafür sorgen, dass alle Pakete ohne Veränderungen an übergeordnete Schichten weitergeleitet werden ohne den Netzwerkverkehr in irgendeiner Weise zu beeinflussen. Der Treiber ist stark Betriebssystem abhängig und unter Windows NT als Kernel Treiber (packet.sys) und unter Windows 9x als virtueller Gerätetreiber (packet.vxd) implementiert. 4.2.2 Benutzer Ebene: Packet Capture Library An oberster Stelle des Protokollstacks steht, wie in Abbildung 4-3 gezeigt, die Applikation selbst. Tethereal benutz für den Datenmitschnitt die statische Bibliothek libpcap.dll. Diese Bibliothek ist fest mit der Anwendung verbunden und identisch mit der UNIX Packet Capture Library (LibPcap) für das Programm Tcpdump. Tethereal kommuniziert nicht mit der Hardware, sondern nutzt lediglich die Funktionen wie die Datenaufnahme oder Filterregeln, die die Bibliothek zu Verfügung stellt. Da der Packet Capture Driver auf Kernel Ebene systemabhängig ist, ist zwischen diesem und der Packet Capture Library der Applikation noch eine weitere Bibliothek angeordnet. Die dynamische Bibliothek packet.dll ermöglicht eine systemunabhängige Implementierung der Applikation. 4.2.3 Installation Der Windows Packet Capture Driver ist unter [Pcap01] sowohl als Installations- als auch als Quellkodeversion verfügbar. Die Installation erfolgt ohne weitere Parametereingabe, alle Applikationen, die diesen Treiber benötigen sind danach direkt einsetzbar. 15 Kapitel 4 Ethereal 4.3 Kompilieren des Projektes Ethereal ist für die MS Windows Plattform ebenfalls als Quellcode und als ausführbare Datei erhältlich. Beide Versionen benötigen den in Kapitel 4.2 beschriebenen Windows Packet Capture Driver. Zusätzlich werden verschiedene Pakete direkt als IncludeDateien und andere Programme lediglich als Hilfsmittel benötigt. 4.3.1 Benötigte Pakete Zur Kompilation von Ethereal sind folgende Pakete zwingend notwendig. • Ethereal (ethereal-0.9.1) Der Quellcode von Ethereal selbst. • Windows Packet Capture Driver (WinPcap) Neben dem installierten Packet Capture Treibers zur Ausführung von Ethereal sind zur Kompilation von Ethereal auch die Quelldateien notwendig. Der Capture Driver wird an dieser Stelle allerdings nicht mitkompiliert, sondern es wird lediglich die statische Bibliothek libpcap für Ethereal benötigt. • GTK+ Das Gimp Toolkit stellt eine plattformunabhängige Lösung zum Erstellen von graphischen Benutzungsoberflächen bereit. • GLib Stellt mehrere Bibliotheken für das Gimp Toolkit zur Verfügung. • ZLib Diese Bibliothek stellt Routinen zur Kompression von Daten bereit. 4.3.2 Zusätzliche Pakete Einige generierte Quellen benötigen klassische UNIX-Tools (z.B. sed). Hierzu empfiehlt es sich, das Paket „cygwin“ zu installieren. Dieses installiert eine UNIX-Umgebung und stellt die benötigten Tools zur Verfügung. • Cygwin – Eine Unix-Umgebung für Windows • Sed – Ein Stream Editor • Bison – Ein Parser Generator • Flex – Ein schneller lexikalischer Analysator • Bash – Die GNU Bourne Again Shell • Grep – Das GNU Utility grep • Python – Eine objektorientierte Skriptsprache 4.3.3 Umgebungsvariabeln und Aufruf des Compilers Ethereal wird über die Kommandozeile kompiliert. Vorher ist eine Anpassung der Pfade für die notwendigen Pakete in der Datei „config.nmake“ erforderlich. 16 Kapitel 4 Ethereal Abbildung 4-4: Anpassung von config.nmake Danach erfolgt die Kompilierung über den Kommandozeilenaufruf nmake -f makefile.nmake. Hierzu müssen allerdings die Umgebungsvariablen so eingestellt sein, dass ein Aufruf Microsoft Visual C++ von der Kommandozeile her möglich ist, Dies kann durch einen Aufruf der Batch-Datei „vcvars32.bar“ im Visual C++ Verzeichnis erreicht werden. 4.4 Tethereal In diesem Kapitel werden die Funktionen beschrieben, die Tethereal bereitstellt. Wie in Abbildung 4-2 bereits gezeigt, ist Tethereal eine Kommandozeilenapplikation, deren Verhalten durch im Programmaufruf übergebene Parameter gesteuert wird. Im Falle mehrerer Netzwerkschnittstellen wird immer die erste Schnittstelle genutzt, der Programmaufruf (tethereal –D) listet wie in Abbildung 4-5 dargestellt alle verfügbaren Netzwerkschnittstellen auf. Abbildung 4-5: Tethereal: Auflistung der Netzwerkschnittstellen 17 Kapitel 4 Ethereal Ein Aufruf von Tethereal – im einfachsten Fall ohne Parameterübergabe – startet Tethereal und zeigt verschiedenen Informationen der übertragenen Frames an. Die erste Zeile gibt immer Auskunft über das gerade verwendete Netzwerkinterface an. In den weiteren Zeilen folgen die einzelnen Frames. Je nach Protokolltyp werden verschiedene Informationen angezeigt. Im Falle des Ineternet Protokolls sind es Angaben über Quell-IP- und Ziel-IP-Nummern. Der verwendete Protokolltyp der Ebene 4 ist ebenfalls dargestellt und in Abhängigkeit davon werden auch hier verschiedene Informationen aufgeschlüsselt. Die Fehlermeldung in den letzten beiden Zeilen im abgebildeten Beispiel in Abbildung 4-6 ist auf einen manuellen Abbruch des Programms über STRG+C zurückzuführen. Abbildung 4-6: Tethereal Weitere Optionen zum Start von Tethereal sind in Abbildung 4-7 dargestellt: Befehl Bedeutung -c (count) Gibt die Anzahl von Paketen an, die aufgezeichnet werden sollen. Ist diese Anzahl erreicht, wird Tethereal beendet -i (interface) Gibt die zu benutzende Netzwerkschnittstelle an. -s (snapshot) Gibt die Grenze an, bis zu der Pakete maximal protokolliert werden. -w (write) Gibt eine Datei an, in die der Daten-Mitschnitt geschrieben werden soll. -F (Format) Gibt das Format der ausgegebene Datei an. -f (filter) Nach dieser Option können Capture-Filterregeln angegeben werden. Abbildung 4-7: Startoptionen von Tethereal 18 Kapitel 4 Ethereal 4.4.1 Capture-Filterregeln Dieser Teil der Filterregeln bezieht sich sowohl auf Ethereal als auch auf Tethereal. Die Syntax der Filterregeln ist identisch zu denen von TcpDump unter UNIX. Ein Blick auf den Capture-Stack in Abbildung 4-3 verdeutlicht den Grund: Beide Programme beinhalten die identische Packet Capture Library (LibPcap). Eine detaillierte Darstellung der Regeln ist in der Dokumentation zu TcpDump [TCP97] zu finden. 4.4.1.1 Primitive Elemente Die einzelnen Elemente beziehen sich auf die Datenverbindungsschicht, Netzwerkschicht und Transportschicht. Zusätzlich können Filterregeln bezüglich der Länge der Pakete erstellt werden. Jede einzelne Regel gibt den Wahrheitswert true oder false zurück. Ist der Wert der gesamten Filterregel true, wird das Paket aufgezeichnet. Das Format für die in Abbildung 4-8 gezeigte Ethernetadresse ehost muss in der Form xx:xx:xx:xx:xx:xx erfolgen. ether dst ehost Die Zieladresse entspricht ehost. ether src ehost Die Quelladresse entspricht ehost. ether host ehost Die Adresse ehost ist entweder Ziel oder Quelle. Abbildung 4-8: Filter im Ethernet (Layer 2) Der Platzhalter host in Abbildung 4-9 steht für eine IP-Adresse im Format xxx.xxx.xxx.xxx. Alternativ kann der Name des Hosts angegeben werden. Dieser wird dann durch eine DNS4-Abfrage aufgelöst. dst host host src host host host host dest net net src net net net net tcp, udp, icmp Die Zieladresse entspricht host. Die Quelladresse entspricht host. Die Adresse host ist entweder Ziel oder Quelle. Das Zielnetz wird mit net definiert Das Quellnetz entspricht net. Das Netz ist entweder Quelle oder Ziel Der Protokolltyp IP-Paketes entspricht tcp, udp oder icmp Abbildung 4-9: Filter im IP-Protokoll (Layer 3) 4 DNS - Domain Name Service 19 Kapitel 4 Ethereal Der Platzhalter port in Abbildung 4-10 gibt die Portnummer als dezimale Zahl an. Alternativ können die Namen der Ports verwendet werden. Die Verwendung von „domain“ entspricht beispielsweise der Portnummer „53“. Die Länge lenght muss als Dezimalzahl angegeben werden. dst port port src port port port port less lenght greater lenght Ein TCP oder UDP Paket mit dem Ziel-Port port. Ein TCP oder UDP Paket mit dem Quell-Port port. Ein TCP oder UDP Paket mit dem Quell- oder Ziel-Port port. Das gesamte Paket ist kleiner als lenght. Das gesamte Paket ist größer als lenght. Abbildung 4-10: Weitere Filterregeln 4.4.1.2 Boolsche Operatoren Alle oben genannten Filterregeln lassen sich beliebig mit Boolschen Operatoren verknüpfen. Einzelne Regeln lassen sich durch Klammern zusammenfassen. Hierbei ist die jeweilige Interpretation der Klammer innerhalb des verwendeten Kommandointerpreters zu berücksichtigen. Bei Verwendung einer UNIX-Shell sind alle Klammerausdrücke mit einer Escape-Sequenz “\)“ zu versehen. ! oder not && oder and || oder or Verneinung des folgenden Ausdruckes UND-Verknüpfung ODER-Verknüpfung Abbildung 4-11: Boolsche Verknüpfungen 4.4.1.3 Beispiele Während des Aufrufes von Tethereal ist die Angabe des Filterausdrucks in Anführungszeichen zu beachten: tethereal –f “Filterausdruck“ Abbildung 4-12 zeigt einige Beispiele der Filteregeln. Die Abkürzungen A, B und C stehen für IP-Adressen. Die letzten drei Beispiele in Abbildung 4-12 zeigen, dass diese Filterregeln auch auf einzelne Bytes des Datenstroms angewandt werden können. 20 Kapitel 4 Ethereal host A host A and host B host A and not (host B or host C) icmp and host A src host A and (port 20 or port 21) icmp[0] = 8 icmp[0] != 8 and icmp[0] != 0 tcp[13] & 3 != 0 Alle ausgehenden und ankommenden Pakete. IP-Verkehr zwischen A und B Alle Daten von A außer der Kommunikation mit B oder C. Alle ICMP-Pakete die von Host A verschickt oder empfangen werden. Ausgehenden FTP-Verkehr von Host A. Nur ICMP Echo Requests. ICMP-Pakete, die keine Echo Requests oder Replies sind. Start und Ende Pakete (SYN und FIN) einer TCP-Kommunikation. Abbildung 4-12: Beispiele für Filteregeln 4.4.2 Tethereal Verbose-Ausgabe Tethereal kann in einem sogenannten „Verbose-Mode“ (tethereal –V) gestartet werden. In diesem Modus wird jedes Datenpaket einzeln ausgegeben. Jede Netzwerkbzw. Protokollebene wird in einem eigenen Abschnitt angezeigt. Netzwerkadressen werden aufgelöst, zusätzlich werden Adressen aufgelöst und einzelne Flags interpretiert ausgegeben. Im Folgenden sind die Ausgaben für die Pakete der Typen TCP, UDP und ICMP aufgelistet. Für die spätere Verarbeitung interessierende Daten sind gelb hinterlegt. 4.4.2.1 Transmission Control Protocol Frame 1 (337 on wire, 337 captured) Arrival Time: Feb 22, 2002 12:39:47.721488000 Time delta from previous packet: 0.000000000 seconds Time relative to first packet: 0.000000000 seconds Frame Number: 1 Packet Length: 337 bytes Capture Length: 337 bytes Ethernet II Destination: 00:10:4b:45:b4:53 (3Com_45:b4:53) Source: 00:a0:c9:cd:81:a1 (Intel_cd:81:a1) Type: IP (0x0800) Internet Protocol, Src Addr: thor.kisner.local (192.168.111.101), Dst Addr: img.web.de (217.72.195.84) Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 323 Identification: 0xd571 Flags: 0x04 21 Kapitel 4 Ethereal .1.. = Don't fragment: Set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 128 Protocol: TCP (0x06) Header checksum: 0x5798 (correct) Source: thor.kisner.local (192.168.111.101) Destination: img.web.de (217.72.195.84) Transmission Control Protocol, Src Port: 1911 (1911), Dst Port: http (80), Seq: 408086031, Ack: 1313334976 Source port: 1911 (1911) Destination port: http (80) Sequence number: 408086031 Next sequence number: 408086314 Acknowledgement number: 1313334976 Header length: 20 bytes Flags: 0x0018 (PSH, ACK) 0... .... = Congestion Window Reduced (CWR): Not set .0.. .... = ECN-Echo: Not set ..0. .... = Urgent: Not set ...1 .... = Acknowledgment: Set .... 1... = Push: Set .... .0.. = Reset: Not set .... ..0. = Syn: Not set .... ...0 = Fin: Not set Window size: 17424 Checksum: 0x4559 (correct) Hypertext Transfer Protocol GET /web/img/v4/home/club_icon_30.gif HTTP/1.1\r\n Accept: */*\r\n Referer: http://web.de/?id=V00-020222--2n7P-00\r\n Accept-Language: de\r\n Accept-Encoding: gzip, deflate\r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; DT)\r\n Host: img.web.de\r\n Connection: Keep-Alive\r\n \r\n 4.4.2.2 User Datagramm Protocol Frame 1 (86 on wire, 86 captured) Arrival Time: Feb 22, 2002 12:30:06.185166000 Time delta from previous packet: 0.000000000 seconds Time relative to first packet: 0.000000000 seconds Frame Number: 1 Packet Length: 86 bytes Capture Length: 86 bytes Ethernet II Destination: 00:10:4b:45:b4:53 (3Com_45:b4:53) Source: 00:a0:c9:cd:81:a1 (Intel_cd:81:a1) Type: IP (0x0800) Internet Protocol, Src Addr: thor.kisner.local (192.168.111.101), Dst Addr: diz.kisner.local (192.168.111.1) Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 72 Identification: 0xb4ad Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 22 Kapitel 4 Ethereal Time to live: 128 Protocol: UDP (0x11) Header checksum: 0x2640 (correct) Source: thor.kisner.local (192.168.111.101) Destination: diz.kisner.local (192.168.111.1) User Datagram Protocol, Src Port: 1880 (1880), Dst Port: domain (53) Source port: 1880 (1880) Destination port: domain (53) Length: 52 Checksum: 0xd893 (correct) Domain Name System (query) Transaction ID: 0x0001 Flags: 0x0100 (Standard query) 0... .... .... .... = Query .000 0... .... .... = Standard query .... ..0. .... .... = Message is not truncated .... ...1 .... .... = Do query recursively .... .... ...0 .... = Non-authenticated data is unacceptable Questions: 1 Answer RRs: 0 Authority RRs: 0 Additional RRs: 0 Queries 1.111.168.192.in-addr.arpa: type PTR, class inet Name: 1.111.168.192.in-addr.arpa Type: Domain name pointer Class: inet 4.4.2.3 Internet Control Message Protocol Frame 1 (74 on wire, 74 captured) Arrival Time: Feb 19, 2002 13:07:52.598908000 Time delta from previous packet: 0.000000000 seconds Time relative to first packet: 0.000000000 seconds Frame Number: 1 Packet Length: 74 bytes Capture Length: 74 bytes Ethernet II Destination: 00:10:4b:45:b4:53 (3Com_45:b4:53) Source: 00:a0:c9:cd:81:a1 (Intel_cd:81:a1) Type: IP (0x0800) Internet Protocol, Src Addr: thor.kisner.local (192.168.111.101), Dst Addr: DIZ (192.168.111.111) Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 60 Identification: 0x76be Flags: 0x00 .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 128 Protocol: ICMP (0x01) Header checksum: 0x63dd (correct) Source: thor.kisner.local (192.168.111.101) Destination: DIZ (192.168.111.111) Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0x1358 (correct) Identifier: 0x0200 Sequence number: 38:04 23 Kapitel 4 Ethereal Data (32 bytes) 0000 0010 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 abcdefghijklmnop qrstuvwabcdefghi 4.5 Ethereal Ethereal ist nicht nur eine mit einer graphischen Benutzungsoberfläche versehene Version von Tethereal, sonder um einige Merkmale erweitert. Die Abbildung 4-13 zeigt die Oberfläche mit einem Beispielhaften ICMP Paket. Dieses Paket ist zum Vergleich der Darstellungen ebenfalls in Kapitel 4.4.2.3 und Kapitel 5.3.2 behandelt. Die Benutzungsoberfläche ist in drei Teile geteilt. Im oberen Teil erfolgt eine tabellenartige Zusammenfassung der Pakte, wie sie auch in Tethereal (vgl. Abbildung 4-6) gegeben ist. Im mittleren Teil lassen sich Detailinformationen in einer Baumstruktur einsehen. Beispielhaft sind die Informationen zum Ethernet angezeigt. Eine gesamte Auflistung aller Baumelemente ergibt die Informationen, wie sie auch im VerboseMode von Tethereal in Kapitel 4.4.2.3 zu finden sind. Der untere Teil stellt den aktuell markierten Frame in eine hexadezimalen Schreibweise dar. Abbildung 4-13:Darstellung eines ICMP Paketes in Ethereal Für die weitere Betrachtung von Ethereal ist ein Datenstrom aufgezeichnet, der einen Aufruf der Startseite der Ruhr-Universität Bochum darstellt (http://www.ruhr-unibochum.de/). Die Abbildung 4-14 zeigt den resultierenden Datenstrom. Die ersten beiden Pakte zeigen eine DNS-Abfrage des Hostnamens www.ruhr-uni-bochum.de, die restlichen Pakete den TCP-Datenverkehr mit dem Webserver. 24 Kapitel 4 Ethereal Abbildung 4-14: Aufruf der Startseite der Ruhr-Universität Bochum 4.5.1 Anzeigoptionen Ethereal bietet eine Vielzahl von Anzeigeoptionen. Kern jeder Anzeigeoption ist die Möglichkeit, die Daten zu filtern. Es lassen sich generelle Anzeigefilter definieren, aber auch die Darstellung entsprechende den Optionen einfärben. 4.5.1.1 Filter Die Anzeigefilter in Ethereal sind wesentlich umfangreicher als die in Kapitel 4.4.1 besprochenen Capture Filter und unterscheiden sich von der Syntax. Ethereal bietet an dieser Stelle allerdings eine komfortable Möglichkeit, diese Regeln über Dialogfelder zusammenzustellen. Die Abbildung 4-15 zeigt das Auswahlmenü für diese Anzeigefilter. Über den Button Add Expression können sehr leicht eigene Filter definiert werden. Die Abbildung 4-16 zeigt die Zusammenstellung einer Filterregel, die alle Pakete zeigt, bei denen das Flag SYN im TCP Protokoll gesetzt ist. Eine Bestätigung stellt die Regel in der entsprechenden Syntax zusammen: tcp.flags.syn == 1 25 Kapitel 4 Ethereal Abbildung 4-15: Auswahl von Display Filter Abbildung 4-16: Zusammensetzung einer einfachen Filterregel 26 Kapitel 4 Ethereal Eine auf die Regel angewandte Darstellung von Ethereal ist in Abbildung 4-17 gezeigt. Abbildung 4-17: Angewandte Filteregel TCP SYN 4.5.1.2 Farbfilter Die tabellarische Zusammenstellung im Hauptfenster von Ethereal kann durch Farbunterlegungen dargestellt werden. Falls auf eine Zeile eine Filterregel zutrifft, wird sie den Angaben nach farblich dargestellt. Abbildung 4-18 zeigt zwei Farbfilter. Alle Pakete, die DNS-Abfragen beinhalten werden rot hinterlegt und aller HTTP-Daternverkehr wird auf grünem Hintergrund dargestellt. Abbildung 4-19 zeigt die Anwendung dieser Farbfilter auf den BeispielDatenmitschnitt „Startseite der Ruhr-Universität-Bochum“. Abbildung 4-18: Einfache Farbfilter 27 Kapitel 4 Ethereal Abbildung 4-19: Anwendung der Farbfilter aus Abbildung 4-18 4.5.2 Analysefunktionen Ethereal bietet eine Vielzahl an Analysefunktionen. Die Abbildung 4-20 zeigt eine einfache Zusammenfassung eines Datenmitschnittes. Abbildung 4-20: Zusammenfassung 28 Kapitel 4 Ethereal Die Informationen in Abbildung 4-21 sind schon detaillierter. Neben der Anzahl der Pakete, wird dargestellt welchen Anteil die einzelnen Protokollebenen an der Gesamtanzahl haben. Aus der Abbildung ist ersichtlich, dass alle Pakete auf der Datenverbindungsschicht über Ethernet und auf der Netzwerkschicht über das Internet Protokoll verschickt worden sind. In der Transportschicht sind zwei Pakete mit dem User Datagram Protocol und die restlichen 79 mit dem Transmission Control Protocol verschickt worden. Die Daten der Transportschicht werden teilweise noch weiter in den höheren Schichten aufgeschlüsselt. Wie oben bereits erwähnt, stellen die ersten beiden Pakete eine DNS-Abfrage dar. Im Zweig Transmission Control Protocol sind 53 Pakete über das Hypertext Transfer Protocol verschickt worden. Die restlichen 26 Pakete haben Informationen für den Verbindungsauf- und abbau oder Bestätigungsmeldungen für empfangene Pakete als Inhalt. Abbildung 4-21: Analysefunktion: Protocol Hierarchy Statistics 29 Kapitel 4 Ethereal Eine weitere interessante Funktion verbirgt sich hinter dem Menüpunkt Follow TCP Stream des Tools-Menü von Ethereal. Die Abbildung 4-22 zeigt diese Funktion. Rot eingefärbt sind gesendete, blau eingefärbt sind empfangene Daten. Der gesamte Datenverkehr wird in logisch richtiger Weise zusammengesetzt. Genutzt werden bei dieser Funktion die Sequenz- und Quittungsnummern im TCP Protokoll. Abbildung 4-22: Follow TCP Stream 30 Kapitel 4 Ethereal Weitere auf TCP-Datenstöme bezogene Funktionen sind unter TCP Stream Analysis zu finden. Die Aussagekraft der Graphen sind allerdings auf den Datenmitschnitt „Startseite der Ruhr-Uni-Bochum“ recht begrenzt. Daher beziehen sich die folgenden Abbildung 4-23 bis Abbildung 4-25 auf einen Mittschnitt von 100K Paketen, überwiegend Kommunikation über das SMB-Protokoll im lokalen Netzwerk an einem 10/100 Mbit Dual Speed Hub. Dateiübertragungen fanden zwischen einem MS Windows 2000 Server (100Mbit) und sowohl einer MS Windows 2000 Professional Workstation (100Mbit) und einem Windows 95-System (10Mbit) statt. Abbildung 4-23: TCP Analysefunktion Time/Sequence Graph Die Abbildung 4-23 zeigt die benutzen Sequenznummern aufgetragen über der Zeit. Die aufgetragenen Nummern sind relativ zur ersten benutzen Nummer aufgetragen. Deutlich zu erkennen ist ein inkrementeller Anstieg der Sequenznummern. Die Steigung des Graphen kann bei – in diesem Szenario gerechtfertigter – Annahme ähnlich großer Datenpakete als Durchsatz interpretiert werden. Die Abbildung 4-24 zeigt den Graphen für den Durchsatz über der Zeit an. Die Vermutung ausbleibenden Datenverkehres in der Unterbrechung des Time/Sequence Graphen in der Zeit von 13s bis 31 Kapitel 4 Ethereal 16s wird durch die Anzeige des Durchsatzes in Abbildung 4-24 bestätigt. Ebenso der große Anstieg des Time/Sequence Graphen in der Zeit um 50s. Der Durchsatz-Graph zeigt in dieser Zeit einen erhöhten Durchsatz an. Abbildung 4-24: Analysefunktion Throughput Graph Die letzte Möglichkeit der graphischen Auswertung ist der Round Trip Time Graph (vgl. Abbildung 4-25). Aufgetragen ist die Verzögerungszeit über der Sequenznummer. Sichtbar ist in einem breitem Bereich der Sequenznummern die Anordnung der Punkte im Bereich des Nulldurchganges (<10ms). Zwei Dateiübertragungen sind mit einem Notebook und einer 10 Mbit Netzwerkkarte durchgeführt worden. Diese Übertragungen sind mit einer sichtbaren Verzögerungszeiten von 10-12ms zu erkennen. Die besonders lange Antwortzeit um die Sequenznummer 450000 ist durch eine Kommunikation mit Webservern im Internet zu begründen. 32 Kapitel 4 Ethereal Abbildung 4-25: Analysefunktion RTT Graph 33 Kapitel 5 LibPcap Capture Format 5 LibPcap Capture Format 5.1 Beschreibung Das LibPcap Capture Format wird von allen Programmen genutzt, die diese Bibliothek beinhalten. Sowohl Tethereal als auch Ethereal ermöglichen eine Abspeicherung des Datenmitschnittes in einer binären Datei. Abbildung 5-1 zeigt einen Mitschnitt, angezeigt in einem Hex-Editor, an. Markiert ist genau ein Frame. Beide Programme bieten die Möglichkeit, abgespeicherte Binärdateien einzulesen und mit diesen eine Analyse durchzuführen. Abbildung 5-1: Screenshot der binären Protokolldatei 5.2 LibPcap Format Das Format enthält neben dem eigentlichen Frame noch drei weitere Felder (vgl. Abbildung 5-2). Zuerst wird die Ankunftszeit des Frames in einem 8 Byte großem Feld gespeichert. Die nächsten beiden Felder geben die Größe des Frames an. Das Feld Frame hat die Größe der aufgezeichneten Länge Capture Lenght. Arrival Time 8 Byte Capture Lenght 4 Byte Packet Lenght 4 Byte Frame Capture Lenght Abbildung 5-2: LibPcap-Format 34 Kapitel 5 LibPcap Capture Format 5.2.1 Arrival Time Die Zeit wird im Unix Time Format (UTF) abgespeichert. Dieses Format gibt die seit dem 1. Januar 1970 00:00:00 GMT vergangenen Sekunden an. Sekunden 4 Byte 20 28 Millisekunden 4 Byte 216 2 24 20 28 216 2 24 Abbildung 5-3: UTF Die ersten 4 Byte geben die vergangenen Sekunden, die nächsten 4 Byte die Zeitdifferenz in Millisekunden an. Die einzelnen der 4 Bytes entsprechen den wie oben angedeuteten Gewichtungen mit Potenzen von zwei, die in dem Beispiel in Abbildung 5-4 verdeutlicht werden. Das Ergebnis ist gleich der Addition der gewichteten Größen. Sekunden 16 55 C5 197 ⋅ 2 0 22 ⋅ 2 8 16 85 ⋅ 2 3C 60 ⋅ 2 Millisekunden FC 00 E1 24 225 ⋅ 2 0 252 ⋅ 2 1012209349 8 16 0⋅2 00 0 ⋅ 2 24 064,737 Abbildung 5-4: Beispiel für den 28. Januar 2002 10:15:49.064737000 5.2.2 Capture Lenght und Packet Lenght Diese beiden Felder geben die tatsächliche Länge des Datenpaketes (Packet Lenght) und die von Tethereal tatsächlich aufgezeichnete Länge (Capture Lenght) an. Unterschieden werden diese Angaben aufgrund der Möglichkeit von Tethereal, die Pakete lediglich bis zu einer bestimmten Länge zu protokollieren, um z.B. nur die Header Informationen zu speichern. Danach werden weitere im Frame enthaltene Informationen verworfen. Capture Lenght 4 Byte 20 28 216 Packet Lenght 4 Byte 2 32 20 28 216 2 32 Abbildung 5-5: Capture und Packet Lenght 35 Kapitel 5 LibPcap Capture Format 5.2.3 Debug Informationen Das Analyseprogramm kann in mit verschiedenen Debug-Leveln kompiliert werden. Dabei lassen sich gezielt Informationen zu der Datenverbindungs-, Netzwerk- und Transportschicht anzeigen. Zusätzlich können, wie in Abbildung 5-6 gezeigt, Informationen des LibPcap Formates angezeigt werden. Abbildung 5-6: Debug-Informationen eines LibPcap-Headers 5.3 Analyseprogramm und Konvertierung in das Zielformat Das Analyseprogramm CaptureParser erwartet eine Capture Datei im LibPcap Format. Die Programmstruktur ist in Abbildung 5-9 dargestellt. Die Abbildung 5-22 zeigt dieses an einem konkretem Beispiel für ein ICMP Paket. Das Programm prüft nach dem Start, ob alle Eingabeparameter vorhanden sind, andernfalls wird die Eingabesyntax wie in Abbildung 5-7 gezeigt ausgegeben. Abbildung 5-7: Syntax von CaptureParser. In den Eingabeparameter wird sowohl die Angabe der Ein- und Ausgabedatei als auch das Vorhandensein der Eingabedatei überprüft. Danach wird überprüft, ob ein nächster Frame vorhanden ist. Diese Stelle dient gleichzeitig als Sprungstelle, nachdem ein einzelner Frame analysiert worden ist. Ist kein Frame vorhanden, beendet sich das Programm mit Ausgabe seiner Programminformationen wie in Abbildung 5-8 dargestellt. Neben den Eingabeparametern wird auch die Anzahl der Pakete und die Dateilänge angezeigt. 36 Kapitel 5 LibPcap Capture Format Abbildung 5-8: Ausgabe von CaptureParser Ist ein Frame vorhanden, wird automatisch ein Ethernet Frame angenommen. Aus diesem werden alle Informationen analysiert und in die Zieldatei geschrieben. Zusätzlich enthält der Ethernet Header die Information über das übergeordnete Programm. Mit dieser Information verzweigt das Analyseprogramm in den Abschnitt, der das entsprechenden Layer 3 Protokoll enthält. Ist das Protokoll unbekannt, wird dies protokolliert und der nächste Frame wird untersucht. Handelt es sich um einen IPHeader, wird zusätzlich die Transportschicht untersucht. Hier wird aus dem entsprechenden Feld der IP-Header der Typ übergeordneten Protokolls der Netzwerkebene 4 herausgelesen und das Programm verzweigt an diese Stelle. Ist auch hier ein unbekanntes Protokoll, wird dies ebenfalls vermerkt und das Programm fährt mit dem nächsten Frame fort. Diese Programmstruktur des Analyseprogramms ist in Abbildung 5-9 gezeigt. 37 Kapitel 5 LibPcap Capture Format Start Eingabeparameter vorhanden? nein Programm abbrechen nein Programm beenden ja nächster Frame vorhanden? ja Protokolliere Ethernet II Headerinformationen Layer 3? Protokolliere [??] unbekannt Protokolliere [??] ARP Protokolliere ARP Headerinformationen IP Protokolliere IP Headerinformationen unbekannt Protokolliere TCP Headerinformationen TCP Protokolliere UDP Headerinformationen UDP Protokolliere ICMP Headerinformationen ICMP Protokolliere OSPF Headerinformationen OSPF Layer 4? Abbildung 5-9: Programmstruktur 38 Kapitel 5 LibPcap Capture Format 5.3.1 Extrahierte Informationen Aus den in der Protokolldatei verfügbaren Informationen werden meist nur Teile benötigt. Diese sind jeweils in den zugehörigen Tabellen zusammengefasst. Die erste Zeile einer Tabelle gibt jeweils eine Erklärung der einzelnen Felder an, die mittlere Zeile zeigt die relative Position der Bytes bezüglich des Frame-Anfangs. In der letzten Zeile wird an einem Beispiel gezeigt, wie diese Informationen bezüglich dieses Headers ausgegeben werden. Ausgewertet werden neben dem Ethernet 802.2 die Protokolle IP, TCP, UDP und ICMP. Die Protokolle ARP und OSPF werden erkannt, aber nicht detailliert aufgeschlüsselt, sondern lediglich mit der Kennung [ARP] bzw. [OSPF] versehen. Die fettgedruckten Zahlen in der zweiten Zeile jeder Tabelle geben jeweils die Position der Informationen bezogen auf den Anfang jedes Header an. Setzt sich eine Information aus mehreren Stellen zusammen, ist der Bereich angegeben. Ist ein Wert gewichtet, ist eine Multiplikation mit der Gewichtung im Dezimalformat und gegebenenfalls eine Addition mit einer anderen Stelle angegeben. Die dritte Zeile gibt ein Beispiel für die Ausgabe im Zielformat an. 5.3.1.1 Ethernet 802.2 Im LibPcap Format werden an dieser Stelle die Informationen zu Sende- und Empfängeradresse des Ethernets sowie dem Typ gespeichert. Die im Ethernet 802.2 definierten Felder Präambel und Framekontrollsequenz fehlen, werden in der weiteren Auswertung auch nicht benötigt. Sende MAC Empfänger MAC Typ Datenteil 6 - 11 12 – 13 max. 1500 Byte 0–6 00:10:4B:45:B4:53;00:A0:C9:CD:81:A1;0800 Abbildung 5-10: Ausgewertete Daten im Ethernet-Frame Die Abbildung 5-10 zeigt die ausgelesenen Felder des Header eines Ethernet Frames, diese Informationen können mit den Debug Informationen des Analyseprogramms in Abbildung 5-11 verglichen werden. Abbildung 5-11: Debug Informationen Ethernet 39 Kapitel 5 LibPcap Capture Format 5.3.1.2 Internet Protocol In dieser Protokollschicht werden alle verfügbaren Informationen im LibPcap Format gespeichert. Abbildung 4-13 zeigt die Positionen der einzelnen Informationen im IP Header. Die Informationen IP Version, Internet Header Length (IHL) und Flags beziehen sich jedoch nicht auf ein einzelnes Byte, sondern auf bestimmte Bits innerhalb dieses Bytes. Durch bitweise UND-Verknüpfung mit der entsprechenden Maske lassen sich diese Informationen leicht extrahieren. Src IP Dst IP IPVersion IHL TOS Flags TTL L4-Prot 12 - 15 16 - 19 0 & F0 0 & 0F 6 & E0 1 8 9 [IP];192.168.111.101;192.168.111.111;4;05;00;00;80;1 Abbildung 5-12: Ausgewertete Daten im Internet Protocol Feld IP Version IHL Flags Wert 0x45 0x45 0x00 Maske 11110000 00001111 11100000 Ergebnis 4 5 0 Abbildung 5-13: UND-Verknüpfung der Felder Die Abbildung 5-13 zeigt die detaillierten UND-Verknüpfung um die Felder IP Version, IHL und Flags aus dem entsprechenden Byte herauszulesen. Das Datenbeispiel kann mit Abbildung 5-14 verglichen werden. Abbildung 5-14:Debug Informationen IP 5.3.1.3 Transmission Control Protocol Die Abbildung 5-15 zeigt die Aufschlüsselung des TCP Header. Beide Port Informationen sind auf zwei Bytes aufgeteilt und entsprechend gewichtet. Die Informationen zum Feld Kontrollflag stehen in den untersten 6 Bits des 13. Byte. 40 Kapitel 5 Src Port 0 · 256 + 1 LibPcap Capture Format Dst Port Seq. Number Ack. Number 2 · 256 + 3 4-7 8 - 11 [TCP];1910;80;1852E60F;4E47E6C0;18 Kontrollflag 13 & 3F Abbildung 5-15: Ausgewertete Daten im Transmission Control Protocol Die Abbildung 5-15 und Abbildung 5-16 können mit der detaillierten Programmausgabe von Tethereal in Kapitel 4.4.2.1 verglichen werden. Abbildung 5-16: Debug Informationen TCP 5.3.1.4 User Datagramm Protocol Src Port 0 · 256 + 1 Dst Port 2 · 256 + 3 [UDP];1880;53;52 Paketlänge 4 · 256 + 5 Abbildung 5-17: Ausgewertete Daten im User Datagramm Protocol Die in Abbildung 5-17 gezeigten Debug Informationen können mit den in Kapitel 4.4.2.2 ausführlich dargestellten Informationen der Ausgabe von Tethereal verglichen werden. Zusätzlich zeigt Abbildung 5-18 die kompakten Informationen des Analyseprogramms. Abbildung 5-18: Debug-Informationen UDP 41 Kapitel 5 LibPcap Capture Format 5.3.1.5 Internet Control Message Protocol Die Übersicht des ICMP Header ist in Abbildung 5-19 gegeben. Dieses Datenpaket ist im Kapitel 5.3.2 ausführlich beschrieben. Zum Vergleich stehen die Ausgabeinformationen des Analyseprogramms in Abbildung 5-20 zur Verfügung. ICMP Typ 0 Code 1 [ICMP];08;00;1385 Checksum 2 · 256 + 3 Abbildung 5-19: Ausgewertete Daten im Internet Control Message Protocol Abbildung 5-20: Debug Informationen ICMP 5.3.2 Beispiel einer Analyse eines ICMP-Datenpaketes In diesem Beispiel wird das in Abbildung 5-21 dargestellte Datenpaket betrachtet. Zum Vergleich sind die ausführliche Informationen in der Ausgabe von Tethereal im Kapitel 4.4.2.3 angegeben. Abbildung 5-21: Beispiel ICMP Die detaillierte Analyse dieses Datenpaketes ist in Abbildung 5-22 dargestellt. 42 Kapitel 5 Frame LibPcap Capture Format 18 00 00 6f 67 77 40 10 3c 6f 68 61 72 4b 76 08 69 62 3c 45 be 00 6a 63 7c b4 00 13 6b 64 23 53 00 58 6c 65 09 00 80 02 6d 66 Frame 00 4a a0 c9 01 63 00 38 6e 6f 67 68 Output 00 cd dd 04 70 69 00 81 c0 61 71 xx 00 a1 a8 62 72 xx 4a 08 6f 63 73 xx 00 00 65 64 74 xx 00 45 c0 65 75 xx 00 00 a8 66 76 xx LibPcap UTF-Zeit CaptureLenght PacketLenght 18 40 72 3c 7c 23 09 00 4a 00 00 00 4a 00 00 00 Output 20020219;130752598; [RECHNERNAME]; Daten Ethernet 802.3 00 00 6f 67 77 10 3c 6f 68 61 4b 76 08 69 62 45 be 00 6a 63 b4 00 13 6b 64 53 00 58 6c 65 00 80 02 6d 66 a0 01 00 6e 67 c9 63 38 6f 68 cd dd 04 70 69 81 c0 61 71 a1 a8 62 72 08 6f 63 73 00 65 64 74 45 c0 65 75 00 a8 66 76 Ethernet Src MAC Dst MAC L3-Protokoll 00 10 4b 45 b4 53 00 a0 c9 cd 81 a1 08 00 Daten 45 c0 65 75 00 a8 66 76 00 6f 67 77 3c 6f 68 61 76 08 69 62 be 00 6a 63 00 13 6b 64 00 58 6c 65 80 02 6d 66 01 00 6e 67 63 38 6f 68 Output 00:10:4B:45:B4:53; 00:A0:C9:CD:81:A1; 0800;[IP]; dd c0 a8 6f 65 04 61 62 63 64 70 71 72 73 74 69 Layer 3 IP Version IHL 4 5 TTL 80 TOS Paketlänge Identifikation Flags Fragmentab 00 3c 76 be Protokoll Prüfsumme 01 63 dd Src IP 000 00000 00000000 Src IP Output 192.168.111.101;192.1 68.111.111;4;05;00;00; 80;1;[ICMP]; c0 a8 6f 65 c0 a8 6f 6f Daten 08 00 13 58 02 00 38 04 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 Layer 4 ICMP Typ Code Prüfsumme unbenutzt 08 00 13 58 02 00 38 04 Output 08;00;1358 Daten 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69 Abbildung 5-22: Analyse eines ICMP-Paketes 43 Kapitel 5 LibPcap Capture Format Ausgehend von einem Frame-Beginn werden im ersten Schritt die Informationen des LibPcap Header ausgewertet. Die „xx xx xx xx xx xx“ deuten Daten des nächsten Frames an. In die Zieldatei wird an dieser Stelle Datum und Uhrzeit geschrieben. Das Feld CaptureLenght gibt nun die genau Länge des Frames an. Diese Daten werden der Analyseeinheit für Ethernet übergeben. In der Ausgabedatei werden die MAC Adressen sowie das Layer 3 Protokoll hinzugefügt. Die restlichen Daten, sowie die Information über den Layer 3 Protkoll werden im nächsten Schritt benötigt. Der Typ entscheidet über die weitere Analysestruktur. Das Feld Protokoll verzweigt im nächsten Schritt auf die Analysefunktion eines ICMP Headers. 5.3.3 Ausgabe des Analyseprogramms Das Analyseprogramm liest die Capture Dateien im LibPcap Format ein und gibt die benötigten Informationen im gewünschten Format wieder aus. Abbildung 5-23 zeigt eine solche Ausgabedatei an. Die Zeilenumbrüche sind eingefügt worden, um die Lesbarkeit zu verbessern. Die erste Zeile jedes Datenpaketes gibt Datum und Uhrzeit, Rechnername, Sende- und Empfänger-MAC-Adresse sowie den Typ des übergeordneten Protokolls an. Die nächste Zeile gibt in diesem Fall die Informationen des IP Protokolls, die letzte Zeile die des TCP Protokolls wieder. Abbildung 5-23: Ausgabe von CaptureParser 44 Kapitel 6 Dienste 6 Dienste 6.1 Allgemein Dienste laufen als eigenständige Prozesse im Hintergrund ab, ohne dass Benutzereingaben möglich oder notwendig sind. Die auf dem Ethereal Projekt aufbauende Monitoring Software soll als NT Dienst konzipiert sein. Aufgrund der hohen Komplexität von Ethereal ist es mit angemessenem Aufwand nicht möglich, Ethereal selbst als Dienst anzupassen. Auch wäre es so nicht möglich, die ständige Weiterentwicklung von Ethereal zu berücksichtigen. Stattdessen besteht die Möglichkeit, die Kommandozeilenversion Tethereal im Hintergrund aus einem NT Dienst heraus zu starten und den Datenmitschnitt als binäre Protokolldatei zu speichern. Die Auswertung der Daten geschieht explizit nicht in diesem Schritt, um an dieser Stelle keine weiteren CPU Ressourcen zu nutzen. Tethereal erkennt die Anzahl der nicht berücksichtigten Pakete und gibt dieses als Meldung „packets dropped“ an. Dies tritt bei sehr hohem Datendurchsatz und vielen IO Operationen des Rechners auf. In Abbildung 6-1 ist dieser Fall durch sehr starke Nutzung der lokalen Festplatte simuliert worden. Diese Information sollte nicht verloren gehen. Abbildung 6-1: Paketverluste von Tethereal 6.2 Aufrufe von Programmen Ein Aufruf von anderen Programmen kann über mehrere Verfahren erfolgen. Für die vorliegende Problemstellung sind zwei Kriterien von wesentlicher Bedeutung: • Parameterübergabe an das Programm • Protokollierung der Programmausgabe Die Realisierung mit einfachen spawn Befehlen unter C++ ist nicht möglich, da mit diesem Befehl die Ausgabe von Tethereal verloren geht. Eine Möglichkeit, dieses zu umgehen, liegt im Befehl popen. Hierbei wird ein Programmaufruf initiiert und gleichzeitig eine Pipe mit der Ausgabe stdout dieses 45 Kapitel 6 Dienste Programms verbunden. Das Problem ist jedoch, dass Tethereal die gewünschten Informationen nicht an stdout, sondern an stderr weitergibt. Letztendlich konnte das Problem mit dem Befehl system gelöst werden. Dieser Befehl startet einen Systenaufruf, dessen stderr-Ausgabe mit „2>“ in eine Datei umgelenkt werden kann. Ein Aufruf von Tethereal hat beispielsweise folgende Syntax: tethereal.exe –c 1000 –w log.bin 2> log.txt 6.3 Alternative: srvany.exe Eine weitere Möglichkeit, zum Aufruf eines Programmes aus einem Dienst heraus bietet das Tool „srvany.exe“ aus dem Microsoft Windows NT Server 4.0 Resource Kit. Mit diesem Tool ist es nicht nötig, das ursprüngliche Programm als Dienst zu realisieren, es reicht eine übliche Kommandozeilenapplikation. Der eigentliche Dienst ist bereits in srvany.exe implementiert. Srvany.exe läuft als Dienst und ruft das Kommandozeilenprogramm auf. Die Installation von srvany.exe ist einfach. Das Programm „instsrv.exe“ aus dem Resource Kit registriert beliebige Dienste im Service Control Manager (SCM). Abbildung 6-2: Hilfetext von instsrv.exe Das oben aufgeführte Beispiel würde das Programm „DiskService“ unter dem Dienstnamen „MyService“ installieren. In Verbindung mit srvany.exe ist folgender Aufruf der Form instsrv Capture C:\winnt\srvany.exe notwendig. An dieser Stelle ist der Dienst srvany.exe mit dem Dienstnamen Capture installiert. Wiederzufinden ist dieser Dienst unter „Dienste und Anwendungen“ und in der Systemregistrierung unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Capture. 46 Kapitel 6 Dienste Abbildung 6-3: Dienst „Capture“ unter Windows 2000 Im weiteren muss das Programm spezifiziert werden, dass die eigentliche Aufgabe ausführen soll. Dies geschieht in der Systemregistrierung im oben angegebenen Bereich. Eingefügt werden muss eine Zeichenfolge mit Namen „Application“ von Typ REG_SZ, die den vollen Pfadnamen des Programmes enthalten muss. Abbildung 6-4: „Capture“ in der Systemregistrierung Ein Nachteil dieser Lösung ist erhöhte Ressourcenverbrauch durch den Dienst srvany.exe. Durch den kaskadierten Aufrufe von Programmen ist auch mit einer verlangsamten Verarbeitungsgeschwindigkeit und einer erhöhten Fehleranfälligkeit zu rechnen. srvany.exe ruft auf capture.exe ruft auf tethereal.exe Abbildung 6-5: Kaskadierter Aufruf von Prgrammen 47 Kapitel 6 Dienste 6.4 Realisierung Um diesen kaskadierten Aufruf nicht durchführen zu müssen und um über erweiterte Möglichkeiten der Dienststeuerung und Protokollierung zu verfügen, ist das Programm als eigenständiger NT Dienst realisiert worden. In ein festgelegtes Zielverzeichnis werden sowohl die binären Protokollmitschnitte als auch die zugehörige Ausgabe von Tethereal gespeichert. Jede Datei trägt als Dateinamen das aktuelle Datum und die aktuelle Uhrzeit. Abbildung 6-6 zeigt Beispiele für die Syntax JJJJMMTTHHMMSS. Abbildung 6-6: Protokollverzeichnis von Capture-Service 6.4.1 Programmstruktur Die Programmstruktur des Dienstes ist in Abbildung 6-7 gezeigt. Ausgehend von einem Startbefehl des Service Control Managers (SCM) startet der Dienst und registriert sich sowohl beim SCM als auch bei der Ereignisanzeige. Beiden Instanzen wird der Startbefehl mitgeteilt. Ist der Dienst gestartet, wirkt der SCM direkt auf die boolsche Variable bRun. Ist diese Variable false, wird der Dienst gestoppt und das Ereignis wird der Ereignisanzeige und dem SCM mitgeteilt. Ist der Wert true, wird der Thread gestartet, der letztendlich Tethereal aufruft. Nach jedem Durchlauf von Tethereal wird bei gleichzeitigem true der Variablen bRun ein 48 Kapitel 6 Dienste weiterer Thread gestartet und danach der ursprüngliche Thread beendet. Erreicht die Variable den Wert false, wird kein weiterer Thread gestartet. START_SERVICE_EVENT start main() registriert Dienst START PENDING SERVICE RUNNING Dienst wird gestartet Thread starten register Event Handles Dienst gestartet Event Log SCM true Tethereal starten true bRun Tethereal beendet false STOP PENDING STOPPED Dienst wird gestoppt unregister Event Handles Dienst beendet SERVICE_STOPPED_EVENT bRun true false Thread beenden ServiceMain Thread Abbildung 6-7: Programmstruktur des Dienstes Die fettgedruckten Linien in Abbildung 6-7 zeigen die aktiv vom SCM ausgehenden Befehle. Eine Meldung an die Prozedur main() startet den Dienst, die Dienststeuerung erfolgt durch direktes Einwirken auf die Variable bRun, die den Wert true bei aktiven Dienst und den Wert false bei ausgeschaltetem Dienst annimmt. Die beiden Hauptkomponenten, die ServiceMain Routine des Dienstes selbst und der Thread, der die Aufrufe von Tethereal übernimmt, sind mit grauen Kästchen hinterlegt. 49 Kapitel 6 Dienste Die weiteren externen Instanzen Ereignisanzeige (EventLog) und Service Control Manager (SCM) sind in den Rechtecken an der linken Seite verdeutlicht. 6.4.2 EventLog Komponenten Zusätzlich zum Dienst wird eine Dynamic Link Library benötigt, die die Textelemente enthält, die letztendlich im EventLog protokolliert werden. Dazu muss eine MessageDatei angelegt werden, die zu jedem symbolischen Namen den Text des Ereignisses bereitstellt (vgl. Abbildung 6-8). Abbildung 6-8: Message Datei 6.4.3 Installation Die Installation erfolgt in zwei Teilschritten. Zuerst muss der Dienst registriert werden, danach muss dem Ereignisprotokolldienst mitgeteilt werden, an welcher Stelle das Event-Message File gesucht werden muss. 6.4.3.1 NT Dienst Der NT Dienst NP-Suite: CaptureParser-Service wird über die Installationsroutine ServiceInstall.exe installiert. Die Syntax ist in Abbildung 6-9 angegeben. 50 Kapitel 6 Dienste Abbildung 6-9: Syntax von ServiceInstall.exe Nach erfolgreicher Installation ist der markierte Eintrag in der Dienstanzeige wie in Abbildung 6-10 hinzugefügt worden. Abbildung 6-10: Dienst Capture-Service Nach dem Start des Dienstes sind im Task Manager die Prozesse NPs_cs.exe und Tethereal.exe bemerkbar. 6.4.3.2 Ereignisanzeige Damit der Dienst Einträge in die Ereignisanzeige schreiben kann, muss der Ereignisanzeige selbst der Pfad für die benötigte Message Datei übergeben werden. Anhand dieser werden symbolische Namen in Ereignistexte umgesetzt. Der Eintrag in der Systemregistrierung ist in Abbildung 6-11 gezeigt. 51 Kapitel 6 Dienste Abbildung 6-11: Registrierung der EventLog Komponenten Statusmeldungen des Dienstes werden wie in Abbildung 6-12 in die Ereignisanzeige geschrieben. Abbildung 6-12:Ereignisanzeige 52 Kapitel 7 Test 7 Test 7.1 Testumgebung Die Testumgebung besteht aus 3 Computern, die über einen 3Com SuperStack II Dual Speed Hub verbunden sind. Auf allein drei Rechnern werden ausschließlich die Protokolle Ethernet und TCP/IP benutzt. Die Merkmale der Computer ist in Abbildung 7-1 zusammengefasst. Die einzelnen Rechner werden im weiteren Kapitel mit Fileserver, Workstation und Webserver bezeichnet. Fileserver Microsoft Windows 2000 Server SP2 1024 MB RAM Dual Pentium III 500 MHz 3Com Etherlink XL 10/100 IBM DTLA-305040 Workstation Microsoft Windows 2000 Professional SP2 256 MB RAM Pentium II 350 MHz Intel Management Pro 100 IBM DJNA-352030 Webserver Suse Linux 7.3 256 MB RAM Celeron 1GHz Intel Management Pro 100 IC35L040AVER07-0 Abbildung 7-1: Testumgebung 7.2 Capture-Service Der Systemprozess NPc_cs.exe benötigt sowohl bei geringen als auch bei hohen Netzwerkauslastungen kaum CPU Ressourcen. Tethereal hingegen abhängig vom Netzwerkverkehr nimmt doch erhebliche Ressourcen in Anspruch. Untersucht werden zwei Arten von Netzwerkverkehr: eine Dateiübertragung einer 100 MB Datei über FTP und bei maximaler Auslastung der Bandbreite. Jeder Fall wird durch vier weitere Kombinationen untersucht. Abbildung 7-2 zeigt die verschieden Aufzeichnungsmöglichkeiten. Die waagerechten Pfeile geben die an der Datenübertragung beteiligten Rechner an, der senkrechte Pfeil jeweils den Computer, auf dem der Datenmitschnitt erfolgt. Der Testfall „Benutzer arbeitet“ wird sowohl durch die Nutzung von Microsoft Office als auch die Verwendung von Matlab simuliert. 53 Kapitel 7 Test Fileserver Workstation Webserver Ethernet 1. Passiv Fremder Stream 2. Aktiv Fremder Stream Benutzer arbeitet 3. Aktiv Eigener Stream 4. Aktiv Eigener Stream Abbildung 7-2: Testfälle 7.2.1 Dateiübertragung Simuliert wird die Dateiübertragung durch eine Übertragung einer 102 MB großen Datei. Bereitgestellt wird sie auf dem Webserver durch einen ProFTPD 1.2.2 Server. Die Anzahl der Pakete dieser Datei beträgt ungefähr 120.000. Die Abbildung 7-3 zeigt die während dieser Übertragung aufgenommene CPU-Nutzung und die verlorenen Pakete. Testfall Beschreibung 1 Fileserver Fileserver zeichnet fremden Stream auf 1 Workstation Workstation zeichnet fremden Stream auf Verlauf der CPU-Nutzung Verlorene Pakete 0 125 54 Kapitel 7 Testfall Test Beschreibung 2 Word Workstation zeichnet fremden Stream auf 2 Matlab Workstation zeichnet fremden Stream auf 3 Fileserver Fileserver zeichnet eigenen Stream auf 4 Workstation Workstation zeichnet eigenen Stream auf Verlauf der CPU-Nutzung Verlorene Pakete 1.423 26.324 1.124 58.547 Abbildung 7-3: Dateiübertragung FTP 7.2.2 Nutzung der maximalen Bandbreite In diesem Testfall kann auf eine detaillierte Darstellung der CPU-Ressourcen verzichtet werden. Diese liegt in allen Testfällen auf dem Maximum. Generiert werden die Pakete auf dem Webserver mit Hilfe des Dienstprogramms „bing“. Die Mittelwerte aus jeweils fünf Messungen ergeben die Tabelle in Abbildung 7-4. Die Anzahl der verlorenen Pakete bezieht sich auf 1.000.000 aufgezeichnete Pakete. Testfall 1 Fileserver 1 Workstation 2 Word 2 Matlab 3 Fileserver 4 Workstation Beschreibung Fileserver zeichnet fremden Stream auf Workstation zeichnet fremden Stream auf Workstation zeichnet fremden Stream auf Workstation zeichnet fremden Stream auf Fileserver zeichnet eigenen Stream auf Workstation zeichnet eigenen Stream auf Verlorene Pakete 547.550 1.121.312 2.427.635 3.212.214 687.245 3.545.931 Abbildung 7-4: Paketverluste im Grenzfall 55 Kapitel 7 Test Es zeigt sich deutlich eine stark reduzierte Leistung bei erhöhter Rechnernutzung. Ein Vergleich von „1 Workstation“ mit „4 Workstation“ zeigt eine deutlichen Anstieg der Paketverluste bei angestiegener CPU-Nutzung durch das Beantworten der ECHOPakete. Der Vergleich von „1 Fileserver“ mit „3 Fileserver“ zeigt nur einen geringen Anstieg der Paketverluste. In diesem Fall konnten notwendige CPU Ressourcen durch den zweiten Prozessor bereitgestellt werden. Drastischer erhöhen sich die Paketverluste bei direkter Benutzung des aktiven Systems. Hier zeigt sich besonders eine Anstieg der Paketverluste bei mehrfachen Festplattenzugriffen. 7.3 Capture-Parser Im Gegensatz zum NT-Dienst kommt es bei diesem Programm nicht auf eine schonende Auslastung der CPU Ressourcen an. Das Programm liest die Eingabedatei ein und verarbeitet mit maximaler Geschwindigkeit die Daten, um sie in der Ausgabedatei abzuspeichern. Die benötigte Zeit für eine Binärdatei im LibPcap Format mit einer Länge von 1.000.000 Pakten bewegt sich auf dem Fileserver bei ungefähr 9 Minuten. Die Dateigröße der Eingabedatei betrug 1.1 GB, die der Ausgabedatei lediglich 156 MB. Dies ergibt eine durchschnittliche Zeit pro Paket von 0,54 Millisekunden. 56 Kapitel 8 Ausblick 8 Ausblick 8.1 Verbesserungen Eine Verbesserungswunsch ist die Vermeidung der Paketverluste bei hohem Netzwerkverkehr. Da jedoch die Datenaufnahme allein durch das Programm Tethereal geschieht, ist an dieser Stelle keine Optimierung möglich. An dieser Stelle kann jedoch Tethereal mit anderen verfügbaren Programmen wie WinDump verglichen werden. 8.2 Schwächen Der NT Dienst NP-Suite: CaptureParser-Service lässt sich nur mit im Programm fest verankerten Parametern aufrufen. An dieser Stelle scheitert besonders der Versuch, die in C++ vorhandenen Routinen GetPrivateProfileInt() bzw. GetPrivateProfileString() in den Dienst zu implementieren. Diese ermögliche ein Einlesen von INI-Dateien wie in Abbildung 8-1. Abbildung 8-1: INI-Datei Die Abbildung 8-2 zeigt ein einfaches funktionierendes Beispiel wie dieser Einlesevorgang in C++ definiert wird. Dieses Beispiel lässt sich jedoch nicht in den NTDienst übernehmen. #include <stdio.h> #include <windows.h> char *FileNameINI = "C:\\capture.ini"; int AnzahlPakete; char PfadTetherealEXE[255]; char LogDir[255]; int main(int argc, char *argv[]) { AnzahlPakete=GetPrivateProfileInt(("Parameter"),("Pakete"),60, 57 Kapitel 8 Ausblick (FileNameINI)); GetPrivateProfileString(("Pfade"),("Tethereal"), "default",PfadTetherealEXE,50, (FileNameINI)); GetPrivateProfileString(("Pfade"),("LogDir"), "default",LogDir,50, (FileNameINI)); printf("Pfad Tethereal printf("Pfad LogDir printf("Anzahl der Pakete %s\n",PfadTetherealEXE); %s\n",LogDir); %d\n",AnzahlPakete); return 0; } Abbildung 8-2: ReadINI 58 Kapitel 9 Literatur 9 Literatur [MIC00] Microsoft Corporation MS Windows NT 4 Server: Die technische Referenz, Netzwerk Microsoft Press, Redmond 1996 [MIC01] Microsoft Corporation MS Windows 2000 Server: Die technische Referenz, Verteilte Systeme Microsoft Press, Redmond 2000 [MIL98] Miller, Kevin Professional NT Services Wrox Press, Birmingham 1998 [WIL97] Willms, Gerhard C++, Das Grundlagenbuch Data Becker, Düsseldorf 1997 [CIS99] Cisco Systems, Inc. Internetworking Technology Overview, June 1999 http://www.cisco.com [BAU99] Baumann, Heiko Entwicklung eines Softwaretools zur Protokollierung und Analyse des Datenstroms in Netzwerken Diplomarbeit D344, Lehrstuhl für Datenverarbeitung Ruhr-Universität Bochum, Bochum 1999 [KIS01] Kisner, Thorsten Redundanz bei der Kommunikation im Internet Seminar Datenverarbeitung SS 01, Lehrstuhl für Datenverarbeitung Ruhr-Universität Bochum, Bochum 2001 [Eth02] Ethereal – A free network protocol analyzer for Unix and Windows. http://www.ethereal.com [Pcap01] WinPcap – The Free Packet Capture Architecture for Windows http://netgroup-serv.polito.it/winpcap 59 Kapitel 9 Literatur [TCP97] TCPDUMP http://www.ethereal.com/tcpdump.8.html 60