Analyse eines verteilten Datenstromes auf Vollständigkeit

Werbung
Lehrstuhl für
Datenverarbeitung
Prof. Dr.-Ing. Dr. E.h. Wolfgang Weber
Studienarbeit S293
Analyse eines verteilten Datenstroms auf Vollständigkeit
In einem lokalen Netz ist es möglich mittels einer verteilten Datenakquisition ein Abbild
des gesamten Datenverkehrs zu erhalten. Folglich kann die Kommunikation zwischen
einzelnen Systemen nicht nur lokal an den beiden kommunizierenden Systemen, sondern
zusätzlich dezentral rekonstruiert werden.
Ziel dieser Arbeit ist es, verteilt aufgenommenen Datenstrom bzgl. der Vollständigkeit zu
analysieren. Dabei ist zwischen physikalischer und logischer Vollständigkeit zu
differenzieren. Physikalische Vollständigkeit bedeutet die Prüfung, ob alle transferierten
Datenpakete real aufgezeichnet worden sind. Logische Vollständigkeit bezieht sich auf
die Einhaltung einer definierten Kommunikation (Ablaufkontrolle) bzw. Einhaltung der
Protokollsyntax.
Für die Analyse ist es notwendig, den Gesamtdatenstrom in verschiedene Verbindungen
sequenziell zu klassifizieren. Fehlende Pakete müssen erkannt werden, ebenso
Verbindungen, welche lückenhaft oder unvollständig sind. Hierzu sind geeignete
Kriterien am Beispiel von TCP- und UDP-Verbindungen zu entwickeln und umzusetzen.
Das Ergebnis soll in eine Statistik die analysierten Pakete mit den entsprechenden
Verbindungen aufschlüsseln.
Die Analyse bzw. die Software ist durch Tests geeignet zu verifizieren.
Die Analysesoftware 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. Katrin Höper
108 096 210 773
Dipl.-Ing Thomas Droste
SS 2001 – WS 2001/02
Inhalt
Inhalt
1
2
Motivation ............................................................................................................... 3
Grundlagen .............................................................................................................. 4
2.1 Transmission Control Protocol/Internet Protocol ............................................... 4
2.1.1 Einordnung in die Schichtenmodelle........................................................... 4
2.1.2 Interaktionen der Protokollinstanzen........................................................... 5
2.2 Das Internet Protocol........................................................................................... 6
2.3 Das Transmission Control Protocol .................................................................... 9
2.3.1 Verbindungsablauf .................................................................................... 10
2.4 Das User Datagram Protocol............................................................................. 13
2.5 Das Hypertext Transfer Protocol ...................................................................... 14
2.6 Das File Transfer Protocol ................................................................................ 14
3
Die Quell-Datei ..................................................................................................... 16
3.1 Aufbau............................................................................................................... 16
3.2 Auswertung ....................................................................................................... 22
4
Das Programm....................................................................................................... 23
4.1 Ablauf................................................................................................................ 23
4.2 Behandlung von Verbindungen und Paketen.................................................... 25
4.2.1 TCP-Verbindungen und Pakete................................................................. 25
4.2.2 UDP-Verbindungen und Pakete ................................................................ 27
4.3 Die Analysefunktionen...................................................................................... 29
4.3.1 Analyse des allgemeinen Frame-Headers ................................................. 29
4.3.2 Analyse des IP-Headers............................................................................. 29
4.3.3 Analyse des TCP-Headers und der dazugehörigen Verbindung ............... 30
4.3.4 Analyse des UDP-Headers und der dazugehörigen Verbindung .............. 33
4.4 Die Ausgabe ...................................................................................................... 34
4.4.1 Protokollzähler........................................................................................... 35
4.4.2 Analysierten Verbindungen....................................................................... 35
4.5 Funktionen......................................................................................................... 37
4.5.1 Auslesen der Parameter der Quell-Datei ................................................... 37
4.5.2 Formatkonvertierung ................................................................................. 38
4.5.3 Auswertung der TCP-Flags ....................................................................... 38
4.5.4 Timeout-Abfrage ....................................................................................... 39
4.5.5 Einsortierung der TCP-Pakete................................................................... 39
4.5.6 Berechnung der Anzahl der Pakete einer TCP-Verbindung ..................... 41
5
Tests ...................................................................................................................... 42
1
Inhalt
6
7
Resümee und Ausblick.......................................................................................... 44
Literatur................................................................................................................. 46
2
Kapitel 1
Motivation
1 Motivation
Ziel dieser Studienarbeit ist es, den von einer Monitoringsoftware protokollierten
Datenstrom eines lokalen Netzes auszuwerten. Die Monitoringsoftware erstellt mittels
einer verteilten Datenakquisition ein Abbild des gesamten Datenverkehrs. Dabei trennt
sie die Protokoll-Header von den übermittelten Daten und schreibt die so extrahierten
Informationen in eine Datei, welche die Grundlage für weitere Verarbeitungen und
Analysen, und somit auch für diese Arbeit, bildet. Die so protokollierten Verbindungen sollen statistisch ausgewertet und auf Vollständigkeit überprüft werden.
Dies stellt gleichzeitig eine Kontrolle der bereits durchgeführten Protokollroutinen dar,
da nach der Aufbereitung der aufgezeichneten Daten z.B. keine Duplikate von Paketen
existieren sollten. Aus der von der Monitoringsoftware generierten Datei kann unter
anderem abgeleitet werden, welches Protokoll wie häufig verwendet worden ist und
wieviele Verbindungsaufbauversuche zustande gekommen oder erfolglos geblieben
sind.
Die Analyse soll fehlende Pakete sowie lückenhafte oder unvollständige
Verbindungen erkennen. Hierzu müssen entsprechende Algorithmen entworfen
werden, welche die Eigenschaften von TCP1- und UDP2-Verbindungen zur Untersuchung der protokollierten Verbindungen ausnutzen.
Da das TCP und das UDP die wohl am häufigsten verwendeten Protokolle in
Computernetzen sind und sowohl HTTP3 als auch FTP4 diese als Grundlage für ihre
Verbindungen verwenden, gibt die Betrachtung dieser beiden Services einen guten
Überblick über die Funktionsfähigkeit der Monitoringsoftware. Aus demselben Grund
kann die Analyse auch zur statistischen Auswertung der Zuverlässigkeit der Verbindungen im Netzwerk herangezogen werden.
1
TCP - Transmission Control Protocol
2
UDP - User Datagram Protocol
3
HTTP - Hyper Text Transfer Protocol
4
FTP - File Transfer Protocol
3
Kapitel 2
Grundlagen
2 Grundlagen
2.1 Transmission Control Protocol/Internet Protocol
Die TCP/IP-Protokollfamilie bildet die Grundlage für das Internet, denn sie ermöglicht
die weltweite Kommunikation in heterogenen Netzen. TCP/IP steht für eine Reihe von
Protokollen, der so genannten „Internet Protocol Suite“. Zu den größten Vorteilen bei
der Nutzung von TCP/IP- Protokollen gehören das einheitliche Adressierungsschema
und die standardisierte Schnittstelle (API - Application Program Interface) zu Anwendungsprogrammen. Die beiden wichtigsten Protokolle TCP und IP sind zum Synonym
für diese Familie geworden.
2.1.1 Einordnung in die Schichtenmodelle
In der Abbildung 2-1 ist die Einordnung einiger Internetprotokolle der TCP/IPProtokollfamilie in das TCP/IP-Schichtenmodell dargestellt. Auf der linken Seite der
Abbildung wird das Modell auf das ISO/OSI5-Schichtenmodell abgebildet, welches
aus sieben Schichten besteht. Es ist üblich in TCP/IP-Netzen das TCP/IP-Schichtenmodell zu verwenden, da es nur in vier Schichten unterteilt und für diese Gruppe von
Verbindungen ausgelegt ist. Die für eine spätere Analyse betrachteten Protokolle sind
grau hervorgehoben.
Das Address Resolution Protocol (ARP) unterstützt die Zuordnung von IP-Adressen in
der Internetschicht (bzw. der Vermittlungsschicht im ISO/OSI-Schichtenmodell) zu
den entsprechenden Adressen der darunterliegenden Schicht. Wobei das Reverse
Address Resolution Protocol (RARP) die Umkehrfunktion dieses Protokolls zur
Verfügung stellt.
Obwohl das Internet Control Message Protocol (ICMP) und das Internet Group
Management Protocol (IGMP) den IP-Dienst nutzen, werden sie dennoch der
Vermittlungsschicht im ISO/OSI- und der Internetschicht im TCP/IP-Schichtenmodell
(jeweils Schicht 3) zugeordnet. ICMP unterstützt den Austausch von Kontrollinformationen innerhalb dieser Schicht. IGMP ist für die Verwaltung von Kommunikationsgruppen zuständig.
Die anwendungsbezogenen Schichten 5-7 im ISO/OSI-Schichtenmodell (Kommunikationssteuerungs-, Darstellungs-, Anwendungsschicht) werden im TCP/IP-Schichten-
5
ISO / OSI - International Standardization Organization / Open Systems Interconnection
4
Kapitel 2
Grundlagen
modell zu einer Anwendungsschicht zusammengefasst. Ihr werden z.B. Protokolle wie
FTP, Telnet, HTTP oder SMTP6 zugeordnet, die im Internet eingesetzt werden.
Anwendungsbezogene
Schichten
5-7
Transportschicht
Telnet
HTTP
FTP
...
Anwendungsschicht
4
TCP
UDP
4
Transportschicht
3
IGMP
Vermittlungsschicht
3
ICMP
Internetschicht
IP
ARP
RARP
Datensicherungs- &
Bitübertragungsschicht
1-2
2
physikalische Schicht
1
Abbildung 2-1: Die Internetprotokolle im TCP/IP-Schichtenmodell auf das
ISO/OSI- Schichtenmodell abgebildet
2.1.2 Interaktionen der Protokollinstanzen
In Abbildung 2-2 sind die Interaktionen der im Kapitel 2.1.1 vorgestellten
Internetprotokolle im TCP/IP-Schichtenmodell dargestellt. Die für die spätere Analyse
betrachteten Protokolle sind grau hervorgehoben. Eine Kommunikation findet sowohl
zwischen den Schichten (hier zwischen den Schichten eins und zwei, sowie zwischen
Schicht zwei und drei) als auch innerhalb der Schichten (hier Schicht zwei) statt.
Der Ablauf der Sendung einer Nachricht kann z.B. nach Abbildung 2-2 wie folgt
skizziert werden: Die TCP- bzw. UDP-Instanz übergibt die zu übermittelnden Daten
zusammen mit der IP-Adresse des Empfängers (der genaue Ablauf sowie die
detaillierte Beschreibung der Protokolldaten folgt in Kapitel 2.3 und 2.4) an die IPInstanz innerhalb der Internetschicht. Hier beauftragt die IP-Instanz die ARP-Instanz
6
SMTP - Simple Mail Transfer Protocol
5
Kapitel 2
Grundlagen
mit der Ermittlung der entsprechenden MAC7-Adresse. Diese wird zusammen mit den
Daten und weiteren Protokolldaten an die darunterliegende Sicherungsschicht übergeben. Andersherum reicht die IP-Instanz empfangene Pakete an die TCP- bzw. UDPInstanz weiter.
Probleme während der Übermittlung können den Partenerinstanzen über ICMP-Meldungen mitgeteilt werde, wobei das IP zur Übertragung benutzt wird. Zur Übermittlung von Informationen über Gruppenzugehörigkeiten mittels IGMP wird ebenfalls
das IP genutzt.
Schicht 4
Anwendungsschicht
TCP
UDP
ICMP
ARP
IP
IGMP
RARP
Schicht 1
physikalische Schicht
Abbildung 2-2: Zusammenspiel der Protokolle im TCP/IP-Schichtenmodell
2.2 Das Internet Protocol
Das Internet Protocol (IP) ist ein verbindungsloses Protokoll der TCP/IP-Protokollfamilie und stellt die Grundlage zur Übermittlung von Daten zwischen Geräteeinheiten
in Netzwerken dar. Verbindungslos bedeutet, dass dieses Protokoll keinen Verbindungszustand kennt. Es ist also nicht notwendig, eine IP-Verbindung zu einem
Rechner zu "öffnen", bevor Daten zu diesem Rechner gesendet werden können. Der
Verbindungsaufbau und -abbau gehören nicht in den Zuständigkeitsbereich dieses
Protokolls.
7
MAC - Media Access Control
6
Kapitel 2
Grundlagen
Die Hauptaufgabe des IP ist es die Unterschiede zwischen den verschiedenen darunter
liegenden Netzwerkschichten zu verbergen und eine einheitliche Sicht auf die verschiedensten Netzwerktechnologien zu präsentieren. Eine weitere Aufgabe ist die Ermittlung und Realisierung des optimalen Weges zwischen Sender und Empfänger für
jedes Datenpaket. Um dies zu ermöglichen, werden vom IP ein einheitliches Adressierungsschema und ein Fragmentierungsmechanismus, der es ermöglicht große
Datenpakete durch Netze mit kleiner maximaler Paketgröße zu senden, genutzt.
Das IP-Paket kann ohne vorherige Verhandlungen mit dem Empfänger direkt an ihn
versandt werden. Es gibt keine Garantie, dass das versandte Paket beim gewünschten
Empfänger ankommt. Verlorene Pakete werden nicht automatisch neu versandt. Auch
die Reihenfolge in der dieser Empfänger die Pakete erhält, muss nicht der Reihenfolge
entsprechen, in der die Pakete verschickt worden sind. Es kann passieren, dass auf dem
Übertragungsweg IP-Pakete verloren gehen oder mehrfach ankommen. Sind Dienste
wie Ende-zu-Ende-Datensicherheit, Flußkontrolle, Datenabfolge und/oder Fehlererkennung erwünscht, müssen zusätzlich Protokolle aus höheren Schichten eingesetzt
werden.
In Abbildung 2-3 ist der IP-Header abgebildet, wobei die in der Quell-Datei aufgezeichneten Felder grau hervorgehoben sind. Im weiteren werden diese Felder kurz
erläutert. Für weiterführende Informationen zu diesem Thema sei auf [PFL01] und
[POS81] verwiesen.
1
4
Version
IHL
8
12
TOS
20
Flags
Identifikation
TTL
16
Protokoll
24
Paketlänge
28
32
Fragmentabstand
Prüfsumme
IP–Senderadresse
IP–Empfängeradresse
Optionen
Füllzeichen
Abbildung 2-3: IP-Header
• Version
In diesem 4 Bit grossem Feld befindet sich die Versionsnummer des verwendeten
Internet Protokolls. In dieser Arbeit wird nur Version 4 (IPv4) behandelt.
• Internet Header Length (IHL)
Das IHL-Feld ist 4 Bit lang und enthält die Länge des Protokollkopfes. Die Länge
wird in 32-Bit-Worten angegeben und ist abhängig von der Größe des OptionenFeldes.
7
Kapitel 2
Grundlagen
• Type of Service (TOS)
Das TOS-Feld ist 8 Bit lang. In ihm können mehrere Service-Qualitäten (Quality of
Service) festgelegt werden. Es wird zwischen low-delay, high-reliability und highthroughput unterschieden. Durch diese Klassifizierung können Diensten verschiedene Prioritäten zugeordnet werden.
• Flags
Dieses Feld ist drei Bit lang und enthält drei Kontroll-Flags. Das 1. Bit (MSB8) ist
reserviert und immer gleich null gesetzt. Das 2. Bit gibt an, ob fragmentiert werden
darf (=0) oder nicht (=1). Das 3. Kontroll-Flag ist gleich null, wenn es sich beim
Paket um das letzte Fragment handelt und gleich eins, wenn noch weitere
Fragmente folgen.
• Time to Live (TTL)
Das TTL-Feld ist 8 Bit lang. Es zeigt die maximale Zeit an, die ein Datenpaket in
einem Netzwerk existieren darf. Jede Station, die das Datenpaket bearbeitet (z.B.
weiterleitet), dekrementiert die TTL. Wird der Wert null erreicht, wird das Paket
verworfen.
• Protokoll
Das Protokoll-Feld ist 8 Bit lang und legt das Protokoll der höheren Schicht
(Transportschicht) fest. Diese wird zur Weiterverarbeitung des Paketes benutzt.
Eine Liste der hier relevanten Werte ist in Tabelle 2-1 aufgelistet, eine vollständige
Liste aller zugeordneten IP-Nummern ist in [REY94] angegeben.
Nummer
1
2
6
17
89
Protokoll
ICMP
IGMP
TCP
UDP
OSPF
Tabelle 2-1: IP nutzende Protokolle
• IP-Senderadresse
Das 32 Bit lange Feld enthält die IP-Adresse des Senders.
• IP-Empfängeradresse
Dieses 32 Bit lange Feld enthält die IP-Adresse des Empfängers.
8
MSB - Most significant bit / LSB - Least significant bit
8
Kapitel 2
Grundlagen
2.3 Das Transmission Control Protocol
Das Transmission Control Protocol (TCP) unterstützt im Gegensatz zum IP eine zuverlässige, verbindungsorientierte Datenübertragung. Verbindungsorientiert bedeutet,
dass das Protokoll eine logische Ende-zu-Ende-Verbindung herstellt. Das hohe Maß an
Zuverlässigkeit wird durch Bestätigungs-, Flusskontroll-, Zeitüberwachungs- und Verbindungssteuerungsmechanismen erreicht. Die transferierten Dateneinheiten (Pakete)
bestehen aus einem mindestens 20 Byte großen Protokollkopf und den zu übertragenden Nutzdaten. In jedem Paket ist eine Prüfsumme zur Fehlerkontrolle der Daten
enthalten. Im Falle einer fehlerfreien Übertragung sendet der Empfänger eine Empfangsbestätigung an den Sender, andernfalls wird das Datenpaket verworfen und
keine Empfangsbestätigung verschickt.
Wird nach einer bestimmten Zeitperiode (retransmission timeout, [STE94]) beim
Sender keine Empfangsbestätigung empfangen, verschickt der Sender das betreffende
Paket erneut.
In Abbildung 2-4 ist der TCP-Header abgebildet, wobei die für die Analyse verwendeten Felder grau hervorgehoben sind. Nähere Beschreibungen befinden sich unter
anderem in [PFL01] und [POT81].
1
Abstand
4
8
Sendeport
Reserviert
12
16
20
Sequenznummer
Acknowledgenummer
Kontrollbits
Prüfsumme
24
28
Empfangsport
32
Fenstergröße
Urgent-Zeiger
Optionen
Füllzeichen
Abbildung 2-4: TCP–Header
• Sendeport
Der Sendeport ist ein 16 Bit langes Feld, welcher die Portnummer der Quelldaten
enthält. Für die spätere Analyse ist er von Bedeutung, da an Hand des Wertes entschieden werden kann, welcher Service bei der Verbindung benutzt wird oder
werden soll (vgl. Kapitel 2.5 und 2.6).
• Empfangsport
Der Empfangsport ist ein 16 Bit langes Feld, welches den Zielport der zu
übertragenden Daten enthält. Er bleibt für die Dauer der Verbindung gleich.
9
Kapitel 2
Grundlagen
• Sequenznummer
Dieses Feld ist 32 Bit lang und enthält eine Nummer mit deren Hilfe die Position
eines Paketes innerhalb eines Datenstroms bestimmt werden kann. Ausgehend von
der ersten Sequenznummer einer Verbindung, die zufällig gewählt wird, erhalten
alle darauffolgenden Pakete (desselben Senders) eine inkrementierte Sequenznummer. So können fehlende Pakte erkannt werden.
• Acknowledgenummer
Mit dieser ebenfalls 32 Bit langen Zahl wird die Sequenznummer des nächsten
Paketes angegeben. Sie ist die inkrementierte Sequenznummer des letzten Paketes
des Kommunikationspartners. Gesendet wird die Acknowledgenummer als vom jeweiligen Empfänger. Beide Kommunikationspartner wählen jeweils eine zufällige
Sequenznummer die von der jeweiligen anderen Partei bestätigt wird. Der genaue
Ablauf wird im Kapitel 2.3.1 erläutert.
• Kontrollbits
Dieses 6 Bit lange Feld dient zur Kontrolle der Übertragung. Die 6 Kontrollbits
sind in Abbildung 2-5 aufgeführt, wobei die für die Analyse relevanten und verwendeten wieder grau hervorgehoben sind.
1
URG
2
ACK
3
PSH
4
RST
5
SYN
6
FIN
Abbildung 2-5: TCP-Kontrollbits
• Acknowledge (ACK)
Das ACK -Bit ist gesetzt (= eins) wenn eine Anfrage zum Verbindungsaufbau
oder -abbau bestätigt wird (vgl. Kapitel 2.3.1).
• Synchronize (SYN)
Das SYN-Bit ist bei der Verbindungsanfrage, also beim ersten Paket, gesetzt.
• Finish (FIN)
Das FIN-Bit ist übernimmt die Rolle des SYN-Bit beim Verbindungsabbau. Ist
es gesetzt, handelt es sich um die Anfrage zur Beendung der aktuellen TCPVerbindung.
2.3.1 Verbindungsablauf
Die festen TCP-Verbindungen werden über ein Dreiwege-Handshake (three way
handshake) aufgebaut. Über das Dreiwege-Handshake werden Steuerinformationen
ausgetauscht, welche die logische Ende-zu-Ende-Verbindung regeln. Auch der Abbau
einer TCP-Verbindung wird mittels eines Handshake-Protokolls realisiert.
10
Kapitel 2
Grundlagen
In Abbildung 2-6 wird beispielhaft eine TCP-Verbindung zwischen einem Client und
einem Server skizziert. Die Verbindung wird allgemein in drei Phasen unterschieden:
Verbindungsaufbau, Datenaustausch und Verbindungsabbau.
Client
Sequencenr.: 456
Acknowlegdenr.: beliebig
Sendeport: 1250
Empfängerport:80
Server
SYN=1
ACK=0
F
=0
K=1 FIN
C
A
1
=
SYN
Sequencenr.: 457
Acknowlegdenr.: 790
Sendeport: 1250
Empfängerport:80
ACK=1
F
IN=0
SYN=0
ACK=0
F
IN=1
SYN=0
ACK=1
F
Sequencenr.: 790 + n
Acknowlegdenr.:458 + n
Sendeport: 80
Empfängerport:1250
Verbindungsabbau
FIN=1
ACK=1
SYN=0
FIN=1
ACK=0
0
=
N
Y
S
Sequencenr.: 458 + n
Acknowlegdenr.: 791 + n
Sendeport: 1250
Empfängerport:80
Sequencenr.: 789
Acknowlegdenr.: 457
Sendeport: 80
Empfängerport:1250
Datenaustausch
Sequencenr.: 457 + n
Acknowlegdenr.: 790 + n
Sendeport: 1250
Empfängerport:80
SYN=0
Verbindungsaufbau
IN=0
IN=1
Abbildung 2-6: Beispielhafter Ablauf einer TCP-Verbindung
2.3.1.1 Verbindungsaufbau
Der Aufbau einer TCP-Verbindung zwischen Sender und Empfänger (in der Abbildung Server und Client) findet durch einen Dreiwege-Handshake statt. Wobei die drei,
für drei gesendete Pakete und Handshake für Anfrage und Bestätigung stehen.
11
Kapitel 2
Grundlagen
Im Beispiel aus Abbildung 2-6 möchte der Client eine Verbindung zum Server aufbauen. Hierzu schickt er ein Paket mit gesetzten SYN-Bit an den Server. Die
Sequenznummer für das erste Paket wird zufällig gewählt und liegt zwischen 0 und
232–1 (32 Bit). Der Wert für die Acknowledgenummer des ersten Paketes ist ebenfalls
zufällig, im weiteren Verlauf jedoch unwichtig und deshalb in der Abbildung als
beliebig bezeichnet. Der Sendeport des Clients liegt standardmäßig zwischen 1024 und
5000, im Beispiel bei 1250. Der Empfangsport der ersten Nachricht gibt (im
Normalfall) Aufschluß über den angeforderten Dienst. Er wird als „well-known-port“
bezeichnet, da es standardmäßige Zuordnungen von Portnummern und Diensten gibt
(die vollständige Liste dieser Zuordnungen ist in [REY94] angegeben). Der Empfangsport 80 bedeutet, dass der Client eine HTTP-Verbindung anfordert. Akzeptiert der
Empfänger die Anfrage, schickt er ein Antwortpaket an den Sender (Client) mit gesetzten SYN- und ACK-Bit. Hierbei wählt er ebenfalls eine zufällige Sequenznummer
zwischen 0 und 232-1. Im Acknowledgenummern-Feld des zweiten Paketes befindet
sich die inkrementierte Sequenznummer des ersten Paketes (also des Absenders).
Sende- und Empfangsport sind im Vergleich zum ersten Paket vertauscht, da auch
Sender und Empfänger nun ihre Rollen getauscht haben. Das dritte und somit letzte
Paket des Verbindungsaufbau quittiert wiederum den Erhalt des zweiten Paketes mit
einem gesetzten ACK-Bit. Der Client inkrementiert seine eigene Sequenznummer und
schreibt in das Acknowledgenummern-Feld die inkrementierte Sequenznummer des
empfangenen (zweiten) Paketes. Sende- und Empfangsport sind wie beim ersten Paket
gewählt. Mit dem dritten Paket ist der Verbindungsaufbau erfolgreich abgeschlossen
und es können gleichzeitig erste Nutzdaten übermittelt werden.
2.3.1.2 Datenaustausch
Über die etablierte TCP-Verbindung können Client und Server nun Daten austauschen.
Hierbei wird jedes empfangene Paket quittiert (mittels der Acknowledgenummer).
Client und Server werden abwechselnd zum Sender und Empfänger. Durch die
Sequenznummer können fehlende Pakete detektiert werden. Wird ein Paket nach einer
bestimmten Zeit nicht bestätigt, wird es erneut versendet. Nach einer festgelegten
Zeitspanne (timeout period) in der keine Pakete bestätigt oder empfangen worden sind,
wird die Verbindung beendet.
Wie am Beispiel zu erkennen ist, wählen Sender und Empfänger jeweils eine eigene
Sequenznummer, die beim senden des nächsten Paketes inkrementiert wird. Die Sequenznummer des anderen wird inkrementiert und in das Feld für die Acknowledgenummer geschrieben. Die Ports bleiben während der gesamten Verbindung unverändert und werden, je nach Rolle des Senders, getauscht.
12
Kapitel 2
Grundlagen
2.3.1.3 Verbindungsabbau
Zum Beenden der TCP-Verbindung wird wiederum ein Handshake-Protokoll ausgeführt. Da TCP-Verbindungen fullduplex Verbindungen sind, dass heißt es wird in
beide Richtungen gesendet und beide Rechner können die Rolle des Senders oder Empfängers übernehmen, muss die Verbindung für beide Richtungen einzeln abgebaut
werden. Dazu sendet der Teilnehmer, der die Verbindung beenden will, ein Paket mit
gesetzten FIN-Bit. Der Empfänger bestätigt mit einem Paket bei dem sowohl das FINals auch das ACK-Bit gesetzt sind. Soll auch die Verbindung in die andere Richtung
(als Sender) beendet, sendet der ein weiteres Paket mit gleicher Sequenz- und Acknowledgenummer und gesetztem FIN-Bit. Wird dieses letzte Paket wiederum mit gesetztem ACK- und FIN-Bit bestätigt, ist die Verbindung erfolgreich für beide Richtungen abgebaut und die TCP-Sitzung wird geschlossen.
2.4 Das User Datagram Protocol
Das User Datagram Protocol (UDP) bietet höheren Protokollen einen definierten
Dienst zum transaktionsorientierten Versand von Datenpaketen. Es setzt unmittelbar
auf dem IP auf. Das UDP verfügt nur über minimale Protokollmechanismen zur
Datenübertragung und bietet keine Ende-zu-Ende-Verbindung. Der Empfang des
Datenpakets sowie der von Duplikaten kann nicht erkannt werden. Die korrekte
Reihenfolge der Datenpakete auf der Empfängerseite ist nicht gewährleistet. Minimale
Protokollmechanismen haben einen dementsprechend kurzen Paket-Header zur Folge.
Daher wird UDP häufig als Datentransportdienst gewählt, wenn nur geringe Datenmengen zu übertragen sind. Werden geringe Datenmengen mit dem TCP übertragen,
kann es durchaus passieren, dass der Verwaltungsaufwand für die Herstellung der
Verbindung und das Sicherstellen einer korrekten Übertragung größer ist, als der
Aufwand für eine erneute Übertragung der gesamten Daten. In Abbildung 2-7 ist der
UDP-Header abgebildet, wobei die in der Quell-Datei protokollierten Felder grau
hervorgehoben sind. Nähere Beschreibungen befinden sich unter anderem in [JUN00]
und [PFL01].
1
4
8
Sendeport
Paketlänge
12
16
20
24
28
Empfangsport
Prüfsumme
32
Abbildung 2-7: UDP-Header
13
Kapitel 2
Grundlagen
• Sendeport
Der Sendeport ist ein 16 Bit großes Feld, welcher die Portnummer der Quelldaten
enthält. Er gibt bei der späteren Analyse Aufschluss über den angeforderten oder
bereits genutzten Dienst.
• Empfangsport
Der Empfangsport ist ein 16 Bit großes Feld, welcher den Zielport der Daten
enthält. Er gibt wie der Sendeport Aufschluss über den genutzten Dienst während
der Verbindung. Beide Ports bleiben während der Verbindung unverändert.
• Paketlänge
Die Paketlänge ist ein 16 Bit langes Feld, welche die Gesamtlänge, also Headerund Nutzdaten, des Paketes enthält.
2.5 Das Hypertext Transfer Protocol
Das Hypertext Transfer Protocol (HTTP) ist das wichtigste Transportprotokoll für
webbasierte Inhalte. Dieses Protokoll ermöglicht die Übertragung von Information in
Form von Internetseiten. Die Kommunikation zwischen Client und Webserver erfolgt
durch den Austausch von HTTP-Nachrichten. Diese übertragen die Anfragen und
Antworten zwischen Sender und Empfänger. Zum Austausch der Nachrichten wird im
Standardfall eine TCP-Verbindung auf Port 80, ein sogenannter „well-known-port“
aufgebaut. Der Client schickt eine Anfrage an den HTTP-Port des Servers und dieser
schickt seine Antwort an den Empfangsport des Clients, der im Normalfall zwischen
1024 und 5000 liegt. Die Request und Response genannten Nachrichten bestehen im
Wesentlichen aus zwei Teilen: Header und Daten. Der Header enthält Steuerinformationen, wie zum Beispiel die verwendete Methode und den gewünschten
URL9. Der Datenabschnitt der Nachricht selbst besteht aus einem HTML10-Dokument
oder Formulardaten, die der Client an den Server sendet.
2.6 Das File Transfer Protocol
Das File Transfer Protocol (FTP) wird im Internet zum Datentransfer zwischen zwei
Rechnern eingesetzt. Da nahezu jede Internetseite Dateien zum Download anbietet,
besteht laut [REI01] ungefähr die Hälfte des gesamten Datenaufkommens im Internet
aus FTP-Verbindungen. Das FTP baut zwischen Server und Client zwei Verbindungen
auf. Die Erste, auch Steuerkanal genannt, dient ausschließlich der Übermittlung von
FTP-Kommandos und den zugehörigen Antworten, die Zweite als Datenkanal. Über
9
URL - Uniform Resource Locator
10
HTML - Hypertext Markup Language
14
Kapitel 2
Grundlagen
den Steuerkanal tauschen beide Seiten Kommandos aus, die dann eine Datenübertragung über einen zweiten Kanal einleiten. Dabei werden in den Standardeinstellungen Port 21 für die Kommandos und Port 20 für die Dateiübertragung genutzt.
Leitet der Server den Datentransfer ein, gehorcht der Datentransferprozess des Clients
den Befehlen des Servers, bis die Daten vollständig übertragen worden sind. Das FTP
sieht dabei simultane Verbindungen vor. Die Kontrollverbindung muß während des
kompletten Datentransfers bestehen bleiben.
15
Kapitel 3
Die Quell-Datei
3 Die Quell-Datei
Die Grundlage der Analyse bildet die von der Monitoringsoftware generierte Datei
[BAU99], die im weiteren als Quell-Datei bezeichnet wird. Dort sind die Protokolldaten und Verbindungsinformationen aller aufgezeichneten Pakete aufgeführt. Die
Protokolldaten sind zuvor von den gesendeten Nutzdaten getrennt worden. Die Protokoll-Header der verwendeten Protokolle werden dabei ausgewertet, Informationen
daraus extrahiert und teilweise neu zusammengestellt.
3.1 Aufbau
Der allgemeine Aufbau der Datei wird mit Hilfe der Abbildungen 3-1 bis 3-12
dargestellt. Dabei handelt es sich um sogenannte Syntaxdiagramme, in denen Rechtecke als nicht-terminale und Kreise als terminale Symbole verwendet werden. Grau
unterlegte Felder stehen wieder für die von der Analyse benötigten Informationen.
Eine Zeile der Quell-Datei enthält jeweils alle zu einem Paket einer Verbindung
aufgezeichneten Informationen. Dabei sind die einzelnen Informationen durch ein
Semikolon getrennt, nach dem letzten Feld folgt ein Zeilenumbruch.
In Abbildung 3-1 wird der allgemeine Aufbau einer Zeile in der Quell-Datei
dargestellt. Die Zeilen bestehen aus dem allgemeinen Frameheader und dem nachfolgenden Frametype-Header. Allgemeiner Frameheader bedeutet, dass diese Information für jedes Paket aufgezeichnet und protokolliert werden und für alle verwendeten Protokolle im gleichen Format vorliegen. Handelt es sich beim FrametypeHeader um den IP-Header, folgt zusätzlich der Header des verwendeten IPProtokolls. Jede Zeile wird mit einem End-of-Line-Symbol abgeschlossen. Bei der
Analyse wird der untere Pfad des Syntaxdiagramms betrachtet, bei dem es sich um ein
Paket einer IP-Verbindung handelt.
Der allgemeine Frameheader (vgl. Abbildung 3-2) setzt sich für alle Pakete aus dem
Timestamp, mehreren MAC-Adressen und dem Frametype zusammen. Der Timestamp
besteht aus dem Datum und der Uhrzeit (vgl. Abbildung 3-3), wobei es sich bei den
Angaben um Zeit und Datum der Aufzeichnung des jeweiligen Paketes im Netzwerk
handelt. Die Datumsangabe besteht aus der vierstelligen Jahreszahl, dem Monat und
dem Tag, wobei diese Angaben durch einen Schrägstrich getrennt sind, wie in
Abbildung 3-4 zu sehen ist. Die Uhrzeit setzt sich aus den Stunden, Minuten und
Sekunden zusammen, wobei hier der Doppelpunkt als Seperator dient (vgl. Abbildung
3-5). Bei den angegebenen MAC-Adressen handelt es sich um die MAC-Adresse des
Hosts, auf dem die Protokollierung des Datenverkehrs stattgefunden hat, die MACAdresse des Senders und des Empfängers des jeweiligen Paketes (vgl. Abbildung 3-6).
16
Kapitel 3
Die Quell-Datei
allgemeiner Frameheader
;
Frametype-Header*
IP-Header
eol
IP-Protokoll-Header
;
Abbildung 3-1: allgemeines Format einer Quell-Datei
Timestamp
;
MAC-Adressen
;
Frametype
;
Abbildung 3-2: Format des allgemeinen Frameheaders
Datum
Zeit
Abbildung 3-3: Format des Timestamps
JJJJ
/
MM
/
DD
Abbildung 3-4: Format des Datums
HH
:
MM
SS
:
Abbildung 3-5: Format des Time-Feldes
Host-MAC
;
Source-MAC
;
Destination-MAC
Abbildung 3-6: Format des MAC-Adressen-Feldes
17
Kapitel 3
Die Quell-Datei
Im letzten Feld des allgemeinen Frameheaders steht die vierstellige Nummer des
Frametypes. Diese Zahlen sind bestimmten Protokollen zugeordnet, wobei die Zuordnungen aller aufgezeichneten Protokolle in Tabelle 3-1 angegeben sind.
Nummer
0800h
0806h
0835h
0805h
6001h
6004h
8137h
809bh
Frametype
IP
ARP
RARP
X.25 Level3
DECnet
DECLAT
IPX/SPX
AppleTalk
Tabelle 3-1: Frametypes und die zugehörigen hexadezimalen Zahlenwerte
Für die spätere Analyse ist nur die Frametype-Nummer 0800h von Interesse, da dies
für eine IP-Verbindung steht. Nach diesem Feld kann nur der zugehörige FrametypeHeader folgen. In Abbildung 3-7 ist dies durch nicht mehr zusammengeführte Pfeile
nach der Frametype-Nummer angedeutet.
In Abbildung 3-8 sind alle aufgezeichneten Protokoll-Header (ohne das IP)
aufgeführt. Da dessen Vorkommen nur gezählt wird und diese Verbindungen nicht
näher untersucht werden, wird an dieser Stelle darauf verzichtet die Struktur der
jeweiligen Header anzugeben.
Die Struktur der bei IP-Verbindungen aufgezeichneten Header-Informationen ist in
Abbildung 3-9 zu sehen. Der entsprechende Abschnitt in der Protokollzeile beginnt
immer mit [IP] und wird von der IP-Sender- und IP-Empfängeradresse gefolgt. Die
nachfolgende Zahl gibt an, um welche IP-Version es sich bei der aktuellen Verbindung
handelt. Gefolgt von den Feldern Internet Header Length, Type of Service, Flags, Time
to Live und Protokoll (vgl. Kapitel 2.2).
Im Protokollfeld des IP-Headers ist angegeben, welches höhere Protokoll für die Verbindung genutzt wird. In Tabelle 2-1 sind alle Werte und die zugehörigen Protokolle,
in Abbildung 3-10 der Aufbau innerhalb der Quell-Datei zu sehen. Da in der Analyse
nur TCP- und UDP-Verbindungen näher untersucht werden, sind in den Abbildungen
3-11 und 3-12 der Aufbau der TCP- und UDP-Header dargestellt.
Die aufgezeichneten TCP-Paketdaten beginnen jeweils mit [TCP] gefolgt vom Sendeund Empfangsport. Diese Ports lassen Rückschlüsse auf die angeforderten und verwendeten Dienste der Verbindung zu. Die Sequenznummer, die Acknowledgenummer
18
Kapitel 3
Die Quell-Datei
und die Flags werden für jedes TCP-Paket angegeben und werden für die Analyse
dieser Verbindungen benötigt.
0800h
0806h
0835h
0805h
6001h
6004h
809bh
8137h
Abbildung 3-7: Format des Frametype-Feldes
Die aufgezeichneten Informationen einer UDP-Verbindung fallen kürzer aus, da dieses
Protokoll (vgl. Kapitel 2.4) einen kürzeren Header verwendet. Die UDP-Daten beginnen jeweils mit [UDP] gefolgt von den zwei Ports. Im letztem Feld wird die Paketlänge angegeben.
19
Kapitel 3
Die Quell-Datei
ARP
RARP
X.25 Level 3
DECnet
DECLAT
AppleTalk
IPX/SPX
Abbildung 3-8: mögliche Frametypes einer Quell-Datei
[IP]
IP-Senderadresse
;
IP-Empfängeradresse
;
Version
;
IHL
;
TOS
;
Flags
;
TTL
;
Protokoll
Abbildung 3-9: Format des IP-Headers einer Quell-Datei
20
Kapitel 3
Die Quell-Datei
TCP-Header
UDP-Header
ICMP-Header
IGMP-Header
OSPF-Header
Abbildung 3-10 : mögliche IP-Protokolle einer Quell-Datei
[TCP]
Sendeport
;
Empfängerport
;
Sequenznummer
;
Acknowledgenummer
;
Flags
Abbildung 3-11:Format des TCP-Headers einer Quell-Datei
[UDP]
Sendeport
;
Empfängerport
;
Paketlänge
Abbildung 3-12 : Format des UDP-Headers einer Quell-Datei
21
Kapitel 3
Die Quell-Datei
In Abbildung 3-13 ist ein Ausschnitt von fünf Zeilen (entspricht fünf aufgezeichneten
Paketen) aus einer Quell-Datei abgebildet.
Abbildung 3-13: Auszug aus einer Quell-Datei
3.2 Auswertung
Die Auswertung der Quell-Datei findet zeilenweise statt, wobei das jeweilige Zeilenende am Zeilenumbruch erkannt wird. Die einzelnen Felder werden durch Semikolon
getrennt. Somit können die Informationen zwischen diesen Seperatoren bei Bedarf
zwischengespeichert und ausgewertet werden.
Durch die verwendeten Trennsymbole (Semikolon, Schrägstriche, Doppelpunkte, das
eol-Symbol) und den Symbolen der IP-Protokoll-Header wie z.B. [TCP] und [UDP]
wird die Analyse erheblich erleichtert, da direkt nach gewissen Schlüsselwörtern
innerhalb einer Zeile gescannt werden kann. Die Quell-Datei bleibt während und nach
Abschluß der Analyse in ihrer Ursprungsform erhalten.
22
Kapitel 4
Das Programm
4 Das Programm
Das Analyseprogramm ConnectionChecker ist in MS Visual C++ unter MS Windows
NT programmiert und dokumentiert worden. Zur Bedienung existiert eine einfache
Benutzeroberfläche (vgl. Abbildung 4-1) mit Ausgabefenster. In diesem Fenster wird
die analysierte Datei, die Statistik über alle Verbindungen, sowie die Auswertungen
der untersuchten Verbindungen inklusive ihrer Pakete ausgegeben. Im Programm wird
die zu untersuchende Quell-Datei zeilenweise eingelesen und ausgewertet. Dabei wird
das Vorkommen der verschiedenen Protokolle gezählt und insbesondere die TCP- und
UDP-Verbindungen genauer untersucht.
Abbildung 4-1: Benutzeroberfläche des ConnectionChecker
4.1 Ablauf
Das Programm wertet alle aufgezeichneten Pakete statistisch in Hinsicht auf die
verwendeten Protokolle aus. Dazu werden beim Programmaufruf Protokollzähler
initialisiert, die während der Analyse inkrementiert werden. Bestimmte Verbindungen
(hier TCP- und UDP-Verbindungen) werden genauer untersucht, indem die Pakete
nach Verbindungen sortiert und auf Vollständigkeit untersucht werden. Für jede dieser
Verbindungen wird geprüft, ob der Verbindungsaufbau und/oder Verbindungsabbau
23
Kapitel 4
Das Programm
erfolgreich war, ob Pakete verloren gegangen sind oder es einen timeout gab. Auch
diese Daten werden statistisch erfasst und ausgegeben.
Bei Programmaufruf wird aus einer Initialisierungs-Datei ausgelesen, in welchen
Verzeichnis sich die zu analysierende Datei befindet und welche Dateiendung sie
besitzt.
Nach dem Betätigen des CheckConnection-Buttons wird die Hauptroutine OnCheckConnections() aufgerufen. Zunächst wird das aktuelle Verzeichnis, der gesetzte DateiFilter und der Status der Quell-Datei (File open oder File not found) ausgegeben.
Konnte die Datei geöffnet werden, wird die erste Zeile ausgelesen, und ausgegeben.
Anschließend wird die Funktion FrameAnalyse aufgerufen, die die aktuelle Zeile
analysiert. Danach beginnt die Prozedur von vorne. Dies geschieht solange, bis das
Dateiende der Quell-Datei erreicht wird. Sind alle Zeilen analysiert, wird die Ausgaberoutine für die Protokollzähler CounterOutput und für die analysierten TCP(ConnectionOutput) und UDP-Verbindungen (UDPConnectionOutput) aufgerufen und
die Quell-Datei geschlossen. Die Abbildung 4-2 zeigt den Programmablaufplan des
beschriebenen Hauptprogramms. Einige der in dieser Funktion aufgerufenen Unterprogramme werden in den folgenden Kapitel näher erläutert.
Verzeichnispfad und Dateiendung für Quell-Datei festlegen
Öffnen der Datei
Datei konnte geöffnet werden
Wahr
Ausgabe: "Filename:"
Falsch
Ausgabe: "no files to
analyse found"
Dateiende nicht erreicht
neue Zeile einlesen
aktuelle Zeile ausgeben
aktuelle Zeile analysieren
%
Ausgabe Protokollzähler
Ausgabe analysierter Verbindungen
Schließen der Quell-Datei
Abbildung 4-2: Struktogramm der Funktion OnCheckConnection
24
Kapitel 4
Das Programm
4.2 Behandlung von Verbindungen und Paketen
Im Programm werden die TCP- und UDP-Verbindungen analysiert. Dazu werden
zunächst alle detektierten TCP- und UDP-Pakete nach Verbindungen sortiert. Sowohl
die Anzahl der Verbindungen als auch die Anzahl der Pakete pro Verbindung sind im
Programm dynamisch mittels Listen realisiert. Um ein Paket eindeutig einer bereits
bestehenden Verbindungen zuordnen zu können, müssen charakteristische Werte für
jede Verbindung definiert werden. Diese Werte stellen die „Visitenkarte“ der Verbindung dar. Um die Zugehörigkeit zu überprüfen, werden die Visitenkarten aller
offenen Verbindungen mit den entsprechenden Werten des aktuellen Paketes verglichen und werden ggf. der Verbindung zugeordnet. Kann ein Paket nicht zugeordnet
werden oder existiert noch keine Verbindung, wird eine neue Verbindung generiert
und gleichzeitig das aktuelle Paket als erstes zugewiesen. Dementsprechend enthält
jede Verbindung mindestens ein Paket. Das erste eingelesene Paket legt jeweils die
Visitenkarte der Verbindung fest. Zusätzlich zur Visitenkarte werden für jede Verbindung Status-Bits abgespeichert, die für die anschließende Analyse der gesamten
Verbindung von Bedeutung sind. Diese Status-Bits werden mit jedem neuen Paket,
welches in die Verbindung eingelesen wird, aktualisiert. Für jedes Paket werden
zusätzliche Informationen abgespeichert.
4.2.1 TCP-Verbindungen und Pakete
Ein TCP-Paket kann einer TCP-Verbindung zugeordnet werden, wenn sowohl die IPAdressen des Senders und Empfängers, als auch die Sende- und Empfangsports genau
oder vertauscht übereinstimmen. Diese Daten bilden dementsprechend die Visitenkarte
einer TCP-Verbindung. Die Status-Bits der TCP-Verbindung sind Flags, die gesetzt
werden, wenn die Pakete des Verbindungsaufbaus und -abbaus vorhanden sind.
Zusätzlich gibt es im Programm ein Status-Bit namens Timeout, welches gesetzt wird,
wenn die Verbindung auf Grund zu langer Wartezeiten (Timeout period wurde
überschritten) geschlossen worden ist. Wenn das Timeout-Bit gesetzt ist, können dieser
Verbindung keine weiteren Pakete mehr zugeordnet werden.
In Abbildung 4-3 ist die Behandlung von TCP-Verbindungen und ihren Paketen
dargestellt. Bei den dargestellten Verbindungen befinden sich die Werte der Visitenkarte oberhalb und die einzelnen Status-Bits unterhalb des Querstrichs. Diese Werte
sind im Programm stellvertretend für jede Verbindung abgespeichert und repräsentieren diese. Die für jedes Paket abgespeicherten Daten sind: IP-Sender- und IP-Empfängeradresse, Sende- und Empfangsport, Sequenz- und Acknowledgenummer, die
drei Kontroll-Bits ACK, SYN und FIN und der Timestamp. Die vier ersten Werte sind
charakteristisch für die zugehörige Verbindung und entsprechen genau oder jeweils
vertauscht der Visitenkarte der zugehörigen Verbindung. Sequenz- und Acknowledge25
Kapitel 4
Das Programm
nummer werden zur Sortierung der Pakete innerhalb der Verbindung verwendet. Da
diese Nummern jeweils beim nächsten Paket inkrementiert werden, können die Pakete
mittels dieser Werte in Reihenfolge gebracht werden. Die Herstellung der richtigen
Reihenfolge der Pakete wird für die spätere Analyse der gesamten Verbindung benötigt. Nur so kann festgestellt werden, ob und wieviele Pakete fehlen.
TCP-Verbindungen
Verbindung 2
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
___________________
1.Paket
2.Paket
3.Paket
vorletztes Paket letztes
Paket
Timeout
____________________________
Verbindung 1
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
1.Paket
Paket 1
2.Paket
IP-Senderadresse
IP-Empfängeradresse
3.Paket
Sendeport
Empfangsport
vorletztes Paket
Sequenznummer
letztes PaketAcknowledgenummer
ACK-Bit
Timeout SYN-Bit
FIN-Bit
Timestamp
Verbindung n-1
Verbindung n
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
___________________
1.Paket
2.Paket
3.Paket
vorletztes Paket letztes
Paket
Timeout
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
___________________
1.Paket
2.Paket
3.Paket
vorletztes Paket letztes
Paket
Timeout
Paket m2
Paket 1
Paket mn-1
Paket 1
Paket mn
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
Paket 1
Paket m1
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Sequenznummer
Acknowledgenummer
ACK-Bit
SYN-Bit
FIN-Bit
Timestamp
Abbildung 4-3: Behandlung von TCP-Verbindungen und Paketen im Programm
Da es bei TCP-Paketen eine Ordnung gibt, wird zwischen einlesen (Funktion Read()
im Programmcode) und einsortieren (Funktion insert) der Pakete unterschieden. Sind
die Pakete in der richtigen Reihenfolge angekommen, müssen sie nur in die bestehende Verbindung eingelesen werden. Das bedeutet, das aktuelle Paket wird als
letztes Paket der Verbindung angefügt (vgl. Abbildung 4-4).
26
Kapitel 4
Das Programm
V.1: aktuelles Paket
...
Sequenznummer
Acknowledgenummer
...
V.1:
V.1:
Paket 5
V.1: ...
Paket 4
V.1: ... Sequenznummer
Paket 3
Acknowledgenummer
V.1: ... Sequenznummer
Paket
2
...
Acknowledgenummer
V.1:
Paket
1
... Sequenznummer
...
Acknowledgenummer
... Sequenznummer
...
Acknowledgenummer
Sequenznummer
...
Acknowledgenummer
...
Paket 6
V.1: ...
Paket 5
V.1: ... Sequenznummer
Paket 4
Acknowledgenummer
V.1: ... Sequenznummer
Paket
3
...
Acknowledgenummer
V.1: ... Sequenznummer
Paket 2
Acknowledgenummer
V.1:
Paket
1 ...
... Sequenznummer
...
Acknowledgenummer
... Sequenznummer
...
Acknowledgenummer
Sequenznummer
...
Acknowledgenummer
...
Abbildung 4-4: Einlesen eines TCP-Paketes in eine Verbindung
Stimmt die Reihenfolge nicht, muss das Paket einsortiert werden. Anhand der
Sequenz- und Acknowledgenummer wird die Position bestimmt und das Paket an entsprechender Stelle eingefügt. Die Pakete, die in der Reihenfolge davorliegen, bleiben
unbeeinflusst, die dahinter liegenden werden eine Position nach hinten gerückt (vgl.
Abbildung 4-5).
V.1: aktuelles Paket
...
Sequenznummer
Acknowledgenummer
...
V.1:
V.1:
Paket 5
V.1: ...
Paket 4
V.1: ... Sequenznummer
Paket 3
Acknowledgenummer
V.1: ... Sequenznummer
Paket
2
Acknowledgenummer
V.1: ... Sequenznummer
Paket
1 ...
...
Acknowledgenummer
... Sequenznummer
...
Acknowledgenummer
Sequenznummer
...
Acknowledgenummer
...
Paket 6
V.1: ...
Paket 5
V.1: ... Sequenznummer
Paket 4
Acknowledgenummer
V.1: ... Sequenznummer
Paket
3
...
Acknowledgenummer
V.1: ... Sequenznummer
Paket 2
Acknowledgenummer
V.1:
Paket
1 ...
Sequenznummer
...
...
Acknowledgenummer
... Sequenznummer
...
Acknowledgenummer
Sequenznummer
...
Acknowledgenummer
...
Abbildung 4-5: Einsortieren eines TCP-Paketes in eine Verbindung
Die Kontroll-Bits werden zum setzen der Status-Bits der Verbindung benötigt. Der
Timestamp der Pakete wird für die Timeout-Abfrage der Verbindung verwendet.
4.2.2 UDP-Verbindungen und Pakete
Wie bei der Behandlung von TCP-Paketen können erkannte UDP-Pakete einer Verbindung zugeordnet werden, wenn sowohl die IP-Adressen des Senders und Empfängers, als auch die Sende- und Empfangsports genau oder vertauscht übereinstimmen. Diese Daten bilden wiederum die Visitenkarte der Verbindung. Das Timeout-Bit
ist hier das einzige Status-Bit, da UDP als verbindungsloses Protokoll keinen Ver27
Kapitel 4
Das Programm
bindungsaufbau und -abbau vorsieht und dementsprechend keine Flags dafür benötigt.
Ist das Timeout-Bit gesetzt, können der Verbindung keine weiteren Pakete zugeordnet
werden.
In Abbildung 4-6 ist die Behandlung von UDP-Verbindungen und den zugehörigen
Paketen dargestellt. Bei den dargestellten Verbindungen befindet sich die Visitenkarte
oberhalb und das Status-Bit unterhalb des Querstrichs. Diese Werte werden im
Programm stellvertretend für jede Verbindung abgespeichert und repräsentieren diese.
Der für jedes UDP-Paket zusätzlich zur Visitenkarte abgespeicherten Parameter ist der
Timestamp. Dieser Wert wird für die Timeout-Abfrage benötigt. Weitere Daten stehen
aus dem UDP-Header der Quell-Datei nicht zur Verfügung. Da es bei UDP-Paketen
keine spezifische Reihenfolge innerhalb einer Verbindung gibt, müssen diese auch
nicht einsortiert werden. Anders als bei TCP-Paketen, werden UDP-Pakete immer als
letzes Paket zur Verbindung hinzugefügt (entspricht dem Einlesen eines TCP-Paketes
in Abbildung 4-4). Es wird dementsprechend nur eine Funktion (Read()) im Programm
zum Einlesen benötigt.
UDP-Verbindungen
Verbindung 1
Verbindung 2
Verbindung n-1
Verbindung n
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
_________________
Timeout
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
_________________
Timeout
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
_________________
Timeout
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport Paket 1
IP-Senderadresse
____________________________
Timeout
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
Paket m2
Paket 1
Paket mn-1
Paket 1
Paket mn
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
Paket 1
Paket m1
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
IP-Senderadresse
IP-Empfängeradresse
Sendeport
Empfangsport
Timestamp
Abbildung 4-6: Behandlung von UDP-Verbindungen und Paketen im Programm
Da die Anzahl der Pakete einer UDP-Verbindung nicht bekannt ist, kann bei der
Analyse nicht ermittelt werden, ob und wieviele Pakete fehlen. Es kann nach Abschluss der Analyse die Anzahl der Pakete der analysierten offen und geschlossenen
(durch Timeout) Verbindungen ermittelt werden
28
Kapitel 4
Das Programm
4.3 Die Analysefunktionen
Nach dem Auslesen der ersten Zeile aus der Quell-Datei, wird diese analysiert. Es
werden nacheinander die einzelnen Felder der Zeile ausgelesen, wobei nur die TCPund UDP-Verbindungen vollständig analysiert werden. Von diesen wiederum können
in dieser Programmversion nur HTTP und FTP als benutzte Dienste erkannt werden.
Bei allen anderen Verbindungen wird nur der entsprechende Protokoll-Zähler
inkrementiert. Anschließend wird die Analyse dieser Zeile abgebrochen. Die verschiedenen Analysefunktionen werden in den folgenden Unterkapiteln ausführlich behandelt und mit Hilfe von Struktogrammen veranschaulicht (Abbildungen 4-7 bis 4-12).
4.3.1 Analyse des allgemeinen Frame-Headers
Die erste Analysefunktion FrameAnalyse (vgl. Struktogramm 4-7) liest alle Felder des
allgemeinen Frame-Headers der aktuellen Zeile in entsprechende Variablen ein. Je
nach Frametypenummer wird der entsprechende Protokollzähler inkrementiert. Handelt es sich bei der Nummer um 0800h, also der Frametypenummer für das IP (vgl.
Tabelle 3-1), wird die Analyse des Pakets weitergeführt. Bei allen anderen Protokollen
wird die Analyse nach der statistischen Erfassung abgebrochen.
Einlesen der Felder des allgemeinen Frame-Headers der aktuellen
Zeile
Wahr
Frametype= 0800h?
IP-Protokollzähler inkrementieren
Analyse des IP-Headers der aktuellen
Zeile
Falsch
entsprechenden
Protokollzähler
inkrementieren
Abbildung 4-7: Struktogramm der Analysefunktion FrameAnalyse
4.3.2 Analyse des IP-Headers
Handelt es sich bei der aktuellen Zeile um die aufgezeichneten Daten eines Paketes
einer IP-Verbindung, wird innerhalb der FrameAnalyse-Funktion die Funktion
AnalyseIPHeader (vgl. Abbildung 4-8) aufgerufen. Dieser Funktion wird die aktuelle
Zeile, ohne die bereits eingelesenen Felder, übergeben. Aus der so gekürzten Zeile
werden nun die einzelnen Felder des IP-Headers ausgelesen und in entsprechenden
Variablen gespeichert.
Wenn es sich beim verwendeten Internet Protokoll um die IPv4 handelt, wird die
Analyse fortgesetzt. Da IPv6 einen anderen Protokoll-Header und verschiedene Betriebs-Modi besitzt, kann dies hier nicht weiter behandelt werden. Bei der fortgeführ29
Kapitel 4
Das Programm
ten Analyse wird anschließend nach dem verwendeten IP-Protokoll sortiert. Nur
Zeilen mit den Werten 6 (TCP, vgl. Tabelle 2-1) oder 17 (UDP) im entsprechenden
Protokoll-Feld des IP-Headers, werden nach der Inkrementierung des entsprechenden
Protokollzählers noch weiter ausgewertet. Alle anderen IP-Protokolle werden statistisch erfasst, die Analyse der aktuellen Zeile an dieser Stelle abgebrochen und die
nächste Zeile der Quell-Datei eingelesen. Handelt es sich beim aktuellen Paket um ein
Paket einer TCP-Verbindung wird eine weitere Funktion zur Auswertung des TCPHeaders und anschließend zur Analyse der zugehörigen Verbindung aufgerufen. Handelt es sich um ein Paket einer UDP-Verbindung werden zwei äquivalente Funktionen
ausgeführt.
Einlesen der Felder des IP-Headers der aktuellen Zeile
IP-Version= 4?
Wahr
Falsch
switch (IP-Protokoll)
case 6
case 17
sonst
InkremenInkremenInkrementierung TCPtierung UDPtierung des
Protokollzähler Protokollzähler entsprechenden
Protokollzählers
Analyse des
TCPHeaders der
aktuellen
Zeile
Analyse des
UDPHeaders der
aktuellen
Zeile
Analyse der
aktuellen
TCPVerbindung
Analyse der
aktuellen
UDPVerbindung
%
%
Abbildung 4-8: Struktogramm der Analysefunktion AnalyseIPHeader
4.3.3 Analyse des TCP-Headers und der dazugehörigen Verbindung
Nach der Feststellung, dass es sich um ein TCP-Paket handelt, wird die Funktion
AnalyseTCPHeader aufgerufen (vgl. Struktogramm 4-9). Der Funktion wird die
gekürzte Zeile, mit den noch nicht ausgelesenen und ausgewerteten Feldern,
übergeben. Die Funktion liest die Felder des TCP-Headers aus und speichert sie in
entsprechenden Variablen. Anschließend werden einige Werte in andere Formate
konvertiert. Als nächstes werden die TCP-Kontroll-Flags ausgewertet. Für die Ver30
Kapitel 4
Das Programm
bindungsanalyse werden nur die Werte der ACK-, SYN- und FIN-Kontroll-Bits, die
sich an der 2., 5. und 6. Position (vgl. Abbildung 2-5) befinden, benötigt. Ob diese Bits
gesetzt sind oder nicht, wird in entsprechenden Variablen für die folgende Analyse der
kompletten TCP-Verbindung gespeichert.
Einlesen der Felder des TCP-Headers der aktuellen Zeile
Auswertung der TCP-Flags
Abbildung 4-9: Struktogramm der Analysefunktion AnalyseTCPHeader
Nach dem Auslesen der TCP-Headerdaten aus der aktuell betrachteten Zeile findet in
der AnalyseIPHeader der nächste Funktionsaufruf statt. Zur Einordnung des Paketes in
die zugehörige Verbindung und anschließende Analyse der Verbindung wird die
Funktion AnalyseTCPConnection (vgl. Struktogramm 4-10) aufgerufen.
In dieser Funktion wird zunächst abgefragt, ob bereits TCP-Verbindungen existieren.
Die Existenz einer solchen Verbindung bedeutet, dass bei der Analyse der Quell-Datei
bereits TCP-Pakete gefunden und entsprechenden TCP-Verbindungen zugeordnet
worden sind. Existiert mindestens eine solche Verbindung wird die Timeout-Abfrage
durchgeführt. Hiermit wird überprüft, ob bereits erfasste offene TCP-Verbindungen
schon zu lange auf das nächste Paket warten. Die sogenannte Timeout-Zeit bezeichnet
den Zeitraum, in der auf das nächste Paket der etablierten TCP-Verbindung gewartet
werden darf. Bei überschrittener Wartezeit wird die Verbindung geschlossen.
Anschließend wird versucht das aktuelle Paket einer offenen (kein Timeout), bereits
existierenden TCP-Verbindung zuzuordnen. Das Paket wird dabei mit den
Visitenkarten aller offenen Verbindungen verglichen. Wird die passende gefunden,
muss das Paket an richtiger Position in die Verbindung einsortiert werden. Die
Position eines Paketes wird an Hand der Acknowledge- und der Sequenznummer
bestimmt. Zunächst wird der einfachste Fall, das Paket kommt in der richtigen
Reihenfolge an, überprüft. Ist dies der Fall, wird das Paket in die zugehörige
Verbindung als letztes Paket mittels der Funktion Read() eingelesen. Anschließend
werden die Flags des Paketes mit dem der Verbindung abgeglichen. Hierbei wird ggf.
gespeichert, ob alle Pakete des Verbindungsaufbaus bzw. -abbaus vorhanden sind.
Nach dem Einlesen des Paketes wird die Schleife abgebrochen und die Funktion
beendet.
31
Kapitel 4
Das Programm
TCP-Verbindung/en existiert/existieren bereits
Wahr
Falsch
Timeout-Abfrage
alle Verbindungen durchsucht oder Paket einsortiert
Paket paßt zur akt. Verbindung
Wahr
Falsch
Paket in richtiger Reihenfolge
Wahr
Falsch
Paket in Verbindung
einlesen
%
Flags in Verbindung
setzen
alle Positionen durchsucht oder Paket
einsortiert
%
Paket in Reihenfolge
Wahr
Falsch
Paket in Verbindung
einsortieren
Flags in Verbindung
setzen
%
Position
dekrementieren
Paket nicht eingelesen
Wahr
Falsch
Paket an erster Pos.
in Verbindung
einsortieren
%
keine TCP-Verbindung existiert oder Paket konnte keiner
zugeordnet werden
Wahr
Falsch
neueTCP-Verbindung erzeugen
Paket in Verbindung einlesen
%
Flags in Verbindung setzen
Abbildung 4-10: Struktogramm der Analysefunktion AnalyseTCPConnection
32
Kapitel 4
Das Programm
Ist das Paket nicht in der richtigen Reihenfolge angekommen, wird es mit allen bereits
eingetroffenen Paketen der Verbindung verglichen, um die richtige Position innerhalb
der Verbindung zu finden. Das Paket wird anschließend an dieser Stelle mittels der
Funktion insert() eingefügt. Abschließend findet die Auswertung der Flags statt.
Danach wird die Schleife abgebrochen und die Funktion beendet.
Konnte das Paket keiner existierenden TCP-Verbindung zugeordnet werden oder
existiert noch keine, wird eine neue TCP-Verbindung erzeugt und das Paket in diese
mit Read() eingelesen. Abschließend wird die Bedeutung der Flags des Paketes für die
Verbindung ausgewertet und die Funktion beendet.
4.3.4 Analyse des UDP-Headers und der dazugehörigen Verbindung
Ähnlich wie bei der Behandlung von TCP-Paketen, wird nach der Feststellung, dass es
sich beim aktuellen Paket um ein Paket einer UDP-Verbindung handelt, die Funktion
AnalyseUDPHeader aufgerufen (vgl. Abbildung 4-11). An diese wird die gekürzte
aktuelle Zeile übergeben, wobei anschließend die Felder des UDP-Headers ausgelesen
und in Variablen gespeichert werden. Einige Werte werden in andere Formate konvertiert, danach findet in der übergeordneten Funktion AnalyseIPHeader der nächste
Funktionsaufruf statt.
Einlesen der Felder des UDP-Headers der aktuellen Zeile
Abbildung 4-11: Struktogramm der Funktion AnalyseUDPHeader
Dieser startet die Funktion AnalyseUDPConnection (vgl. Struktogramm 4-12) zur
Einsortierung des Paketes in die zugehörige Verbindung und zur anschließenden
Analyse der bereits bestehenden Verbindungen. Diese Analyse ist nicht so komplex
wie bei einer TCP-Verbindung, da das UDP verbindungslos ist. Dementsprechend
entfällt das Einsortieren der Pakete in bestimmte Positionen innerhalb einer
Verbindung. Es kann hier nur festgestellt werden, welches Paket zu welcher Verbindung gehört und ob es zu einem Timeout gekommen ist. Auch die Auswertung von
Flags entfällt, da es keinen Verbindungsaufbau und –abbau gibt.
Mit der ersten Abfrage in der Funktion wird überprüft, ob bereits eine oder mehrere
UDP-Verbindungen existieren. Existiert zumindest eine, wird untersucht, ob das
aktuelle Paket einer von ihnen zugeordnet werden kann. Zuvor findet, wie bei der
Analyse der TCP-Verbindungen, eine Timeoutabfrage statt. Warten offene Verbindungen schon zu lange (länger als die gesetzte Timeout-Zeit) auf das nächste Paket,
wird das Timeout-Flag gesetzt und die Verbindung für geschlossen erklärt. Anschliessend wird das Paket mit den Visitenkarten aller offenen Verbindungen verglichen. Bei
33
Kapitel 4
Das Programm
Übereinstimmung wird das Paket in die entsprechende Verbindung eingelesen. Konnte
das Paket keiner existierenden UDP-Verbindung zugeordnet werden oder existiert
noch keine, wird eine neue UDP-Verbindung erzeugt. Anschließend wird das aktuelle
Paket in diese Verbindung eingelesen.
UDP-Verbindung/en existiert/existieren
bereits
Wahr
Falsch
Timeout-Abfrage
alle Verbindungen durchsucht oder
Paket einsortiert
Wahr
Paket paßt zur akt.
Verbindung
Paket in
Verbindung
einlesen
%
Falsch
Zeiger auf
nächste
Verbindung
setzen
keine UDP-Verbindung existiert oder Paket
konnte keiner zugeordnet werden
Wahr
Falsch
neue UDP-Verbindung erzeugen
%
Paket in Verbindung einlesen
Abbildung 4-12: Struktogramm der Anaylsefunktion AnalyseUDPConnection
4.4 Die Ausgabe
Im Ausgabefenster der GUI11 (vgl. Abbildung 4-1) wird zunächst die zu analysierende
Quell-Datei mit Dateiendung und -pfad angegeben. Anschließend werden alle Zeilen
der gewählten Quell-Datei zur Kontrolle der Daten ausgegeben.
Nach der Auswertung aller Zeilen der gewählten Quell-Datei, werden die Ergebnisse
im Fenster der GUI dargestellt. Alle TCP- und UDP-Verbindungen werden separat mit
zugehörigen Paketen und Analyseergebnissen aufgeführt. Über die restlichen Verbindungen, die nur gezählt worden sind, wird eine zusammengefaßte Statistik ausgegeben.
11
GUI - Graphical User Interface
34
Kapitel 4
Das Programm
4.4.1 Protokollzähler
Nach vollständiger Analyse der Quell-Datei, wird im Hauptprogramm die Funktion
CounterOutput() zur Bildschirmausgabe der einzelnen Protokoll-Zähler aufgerufen.
Hier wird die Statistik aller Pakete nach ihren Protokollen sortiert ausgegeben
(Statistics of used protocols). Zunächst wird die Anzahl der Pakete der verschiedenen
Protokollen angegeben, die dann wiederum nach verwendeten IP-Protokollen, wie z.B.
TCP und UDP, aufgeschlüsselt werden (vgl. Abbildung 4-13). Die im Programm unbehandelten Protokolle werden jeweils mittels der Zähler unknown erfasst.
Abbildung 4-13: Beispiel für Ausgabe der Protokollzähler
4.4.2 Analysierten Verbindungen
Nach der Ausgabe der Protokoll-Zähler werden alle analysierten Verbindungen inklusive ihrer Pakete ausgegeben. Dabei wird zwischen der Ausgabe der TCP-Verbindungen (Aufruf der Funktion ConnectionOutput()) und der UDP-Verbindungen unterschieden (Aufruf der Funktion UDPConnectionOutput()).
4.4.2.1 Die TCP-Verbindungen
Die durchnumerierten TCP-Verbindungen werden mit ihren charakteristischen
Werten, Analyseergebnissen und allen zugeordneten Paketen der Reihe nach im
Fenster der GUI ausgegeben (vgl. Abbildung 4-14).
35
Kapitel 4
Das Programm
Abbildung 4-14: Beispiel für Ausgabe der TCP-Verbindungen inklusive ihrer
Pakete
Zu den charakteristischen Werten jeder Verbindung zählen die Visitenkarte und die
Kontroll-Bits (vgl. Abbildung 4-3). Zu den Analyseergebnissen gehören unter anderem die Auswertungen der Kontroll-Bits und des Ports.
Als ein Analyseergebnis wird der genutzte Dienst (used service) ausgegeben. In dieser
Version des Programms werden nur HTTP- und FTP-Verbindungen als solche erkannt.
Sind alle drei Pakete des Verbindungsaufbaus vorhanden, wird ausgegeben, dass der
Dreiwege-Handshake zum Verbindungsaufbau vollständig (Establishment complete),
ansonsten unvollständig war (Establishment incomplete). Das gleiche gilt für den Verbindungsabbau.
Danach wird die Anzahl der analysierten, der ursprünglichen und der evtl. fehlenden
Pakete der Verbindung ausgegeben. Ist die Anzahl der Pakete der vollständigen
Verbindung nicht berechenbar, wird dies gemeldet (# of total packets: unknown).
Anschließend folgen alle Pakete der Verbindung, die sortiert und durchnumeriert ausgegeben werden. Für jedes Paket werden beide IP-Adressen und Ports, sowie die
Sequenz- und Acknowledgenummer angegeben.
4.4.2.2 UDP-Verbindungen
Nach der Ausgabe aller analysierten TCP-Verbindungen, folgt die Ausgabe aller UDPVerbindungen. Zunächst wird die Anzahl der ermittelten UDP-Verbindungen angegeben (Total # of UDP-connections). Danach folgen die Angaben der einzelnen Ver36
Kapitel 4
Das Programm
bindungen, die aus der Visitenkarte und der Anzahl der Pakete der Verbindung, sowie
ihrem Status (open oder Timeout) bestehen. Danach wird der genutzte Dienst angezeigt, wobei in der derzeitigen Version ebenfalls nur FTP und HTTP als Service erkannt werden.
Abbildung 4-15:Beispiel für Ausgabe der UDP-Verbindungen inklusive ihrer Pakete
Abschließend folgen alle Pakete der aktuellen Verbindung. Für jedes Paket werden
Sende- und Empfangsport angegeben (vgl. Abbildung 4-15).
4.5 Funktionen
Im Programmcode müssen die Protokollabläufe von UDP und TCP in programmierbare Regeln umgesetzt werden, die für die Analyse genutzt werden können. Die
für die Analyse benötigten Daten müssen an richtiger Stelle aus der Quell-Datei ausgelesen und anschließend in ein auswertbares Format konvertiert werden.
4.5.1 Auslesen der Parameter der Quell-Datei
Zum Auslesen einzelner Parameter aus einer Zeile der Quell-Datei ist die Funktion
ExtractFirstParameter aus dem Programm PacketParser [DRO02] übernommen
worden. Diese Funktion nutzt aus, dass die einzelnen Felder durch Semikola getrennt
sind. Der Funktion wird die aktuelle Zeile übergeben. Sie extrahiert den ersten Parameter der Zeile, indem sie alle Daten bis zum ersten Semikolon ausliest. Die Funktion
gibt sowohl den ausgelesen Wert, sowie die um diesen gekürzte Zeile zurück. Der
37
Kapitel 4
Das Programm
ausgelesene Wert kann anschließend bei Bedarf in einer entsprechenden Variablen
zwischengespeichert werden. Die gekürzte Zeile wird zur weiteren Analyse verwendet, bis alle benötigten Parameter ausgelesen worden sind.
4.5.2 Formatkonvertierung
Im Programm wird die Konvertierung von einem Speichertyp in einen anderen aus
zwei Gründen benötigt. Einmal, um aus der Quell-Datei ausgelesene Parameter für die
Analyse weiterverwenden zu können und zweitens um Werte auszugeben.
Die aus der Quell-Datei ausgelesenen Zeilen liegen als CString im Programm vor.
Dementsprechend sind alle daraus ausgelesenen Parameter vom selben Datentyp.
Die Inhalte der Felder Frametype und IP-Protokoll müssen in integer-Werte umgewandelt werden, damit sie für case-Abfragen im Programm benutzt werden können.
Diese case-Abfragen werden benötigt, um zu entscheiden, welche Pakete weiter analysiert und welche nur für die Statistik gezählt werden.
Auch die Felder Sendeport, Empfangsport (für TCP- und UDP-Verbindungen),
Sequenznummer, Acknowledgenummer und Kontroll-Bits (für TCP-Verbindungen)
müssen in integer-Werte konvertiert werden. Bei den Portnummern muss überprüft
werden können, ob sie in einem bestimmten Intervall liegen. Die Sequenz- und
Acknowledgenummern müssen der Größe nach verglichen werden können und die
TCP-Kontrollbits in einen auswertbaren Format vorliegen (Vgl. Kapitel 4.5.3).
Eine weitere wichtige Formatierung stellt die Umwandlung des Timestamps in eine
entsprechende CTime-Variable dar. Mit diesen Datentyp können Daten verglichen und
sortiert werden. Außerdem kann so zwischen zwei Daten die Differenz gebildet
werden, was für die Timeout-Abfrage nötig ist.
Für die Bildschirmausgabe müssen alle zuvor umgewandelten Größen wieder in
CStrings konvertiert werden.
4.5.3 Auswertung der TCP-Flags
Nach ihrer Konvertierung liegen die Kontroll-Bits des TCP-Paketes als 6-stellige
Binärzahl vor. Da für die Analyse aber nur das 2. (ACK), 5. (SYN) und 6. (FIN) Bit
(vgl. Kapitel 4.3.3 und Abbildung 2-5) von Bedeutung sind, müssen diese Bits einzeln
betrachtet werden. Um herauszufinden, ob ein bestimmtes Bit innerhalb eines Bytes
gesetzt (=1) ist, muss das Byte mit einer bestimmten Binärzahl logisch UND-verknüpft werden. Prinzip und Wahrheitstabelle der UND-Verknüpfung in [WEB92].
Die Binärzahlen mit denen die TCP-Flag-Variable zur Auswertung der einzelnen
Kontrollbits UND-verknüpft werden, sind in Tabelle 4-1 angegeben. Zum Auswerten
des ACK-Bits wird die TCP-Flag-Variable mit der Binärzahl 10000b (entspricht der
Zahl 32 im Dezimalsystem) UND-verknüpft. Bei gesetztem ACK-Bit, ist das Ergebnis
38
Kapitel 4
Das Programm
der Verknüpfung eins und das entsprechende Kontroll-Bit wird im Programm gesetzt
und für das Paket zwischengespeichert. Dasselbe Verfahren wird auf das SYN- und das
FIN-Bit angewendet.
Flag X1 MSB X2
ACK 0
1
0
0
0
X6 LSB
0
SYN
FIN
0
0
0
0
1
0
0
1
0
0
0
0
X3
X4
X5
Tabelle 4-1: Binärzahlen der logischen UND-Verknüpfung mit dem TCP-Flags
4.5.4 Timeout-Abfrage
In realen Anwendungen findet die Timeout-Abfrage bei TCP- und UDP-Verbindungen
für jede Verbindung einzeln statt. Das bedeutet, dass der auf das nächste Paket wartende Teilnehmer einer Verbindung, die Verbindung für geschlossen erklärt, wenn
eine bestimmte Wartezeit (timeout period, [STE94]) überschritten wird. Da es aber für
das direkte Übernehmen dieser Methode nötig wäre, für alle offenen Verbindungen
eine Stoppuhr laufen zu lassen, ist es hier einfacher diese Abfrage etwas anders zu
gestalten.
Bevor im Programm ein Paket zugeordnet wird, findet sowohl bei einer UDP- als auch
bei einer TCP-Verbindung eine sogenannte Timeout-Abfrage (vgl. Abbildungen 4-10
und 4-12) statt. Hierbei wird der Timestamp des aktuellen Paketes sukzessive mit dem
Timstamp des letzten Paketes jeder offenen Verbindung verglichen. Ist die Differenz
beider Timestamps größer als die erlaubte Wartezeit (TCP- bzw. UDP-timeout period),
wird die Verbindung der das Paket angehört geschlossen. Der Timestamp des aktuell
betrachteten Paketes stellt die globale Uhr für alle offenen Verbindungen dar und das
Mitlaufen von Timern für jede Verbindung ist somit überflüssig. Die Timeout-Abfrage
muss stattfinden um ein Timeout zu erkennen. Es beschleunigt gleichzeitig die Analyse, da geschlossene Verbindungen nicht weiter betrachtet werden. Diese Verbindungen gehen als nicht vorschriftsmäßig abgebaut in die Statistik ein.
4.5.5 Einsortierung der TCP-Pakete
Die TCP-Pakete werden innerhalb ihrer Verbindungen an Hand der Sequenz- oder der
Acknowledgenummer sortiert. Beim Einlesen neuer Pakete werden zwei Fälle unterschieden:
1. Das letzte Paket der Verbindung und das neue haben denselben Sender und
Empfänger.
2. Sender und Empfänger der beiden Pakete sind vertauscht.
39
Kapitel 4
Das Programm
Im ersten Fall wird die Sequenznummer beider Pakete verglichen. Ist die des aktuellen
Paketes größer, ist die Reihenfolge richtig und das Paket kann eingelesen werden.
Im zweiten Fall wird die Acknowledgenummer des aktuellen Paketes mit der Sequenznummer des letzen Paketes verglichen. Ist die Acknowledgenummer größer als
die Sequenznummer, ist die Reihenfolge ebenfalls richtig und das Paket kann eingelesen werden.
Sind die Pakete nicht in der korrekten Reihenfolge angekommen, muss die richtige
Position des aktuellen Paketes in der Verbindung gesucht werden. Dazu wird die
Sequenz- bzw. Acknowledgenummer des Paketes sukzessive mit denen aller Pakete
der Verbindung verglichen. Beim letzen Paket der Verbindung beginnend, werden bei
jeden Schritt jeweils die beiden Fälle unterschieden und die entsprechenden Nummern
verglichen, bis die richtige Position gefunden worden ist. Mittels der Funktion insert()
wird das Paket dann an der richtigen Stelle in die Verbindung eingelesen.
Beim Vergleich der Sequenz- und Acknowledgenummern unter- und miteinander
muss der „Nulldurchgang“ der Zahlenwerte besonders beachtet werden. Dies bedeutet,
dass nach der Nummer 232-1 die Nummern 0-1-2 usw. folgen. Dies ist wichtig für die
Einsortierung der Pakete, da diese Pakete zwar einen kleineren Zahlenwert besitzen,
aber in der Reihenfolge trotzdem hinter den vorherigen Paketen liegen. Die
Schwierigkeit besteht in der Unterscheidung, ob bei der Sequenz- und/oder Acknowledgenummer ein Nulldurchgang stattgefunden hat oder das Paket nur in falscher
Reihenfolge in der Quell-Datei vorliegt. Ist die Differenz zweier Sequenz- bzw.
Acknowledgenummern einer Verbindung zu hoch um für die Anzahl der Pakete einer
Verbindung realistisch zu sein, wird davon ausgegangen, dass ein Nulldurchgang
stattgefunden hat. Zur Unterscheidung wird im Programm ein Schwellwert gewählt
(treshold). Wie in Gleichung 4.1 a)-d) zu sehen, werden vier Fälle unterschieden. Die
Gleichung 4.1 a) und c) werden verwendet, wenn der oben beschriebene erste Fall
(Sender und Empfänger gleich) vorliegt, die Gleichung 4.1 b) und d) entsprechend
beim zweitem.
a) ∆(Seqn, Seqcur) < t
Gleichung 4.1 a)-d)
b) ∆(Seqn, Ackcur) < t
c) ∆(Seqn, Seqcur) > t
d) ∆(Seqn, Ackcur) > t
Es wird jeweils die Differenz zwischen der Sequenznummer des letzten Paketes der
Verbindung und der Sequenznummer bzw. der Acknowledgenummer des aktuellen
gebildet und mit dem Schwellwert t verglichen. Ist die Differenz kleiner als der
Schwellwert (Gleichung 4.1 a) und b)) liegt der Normalfall vor und die entsprechen40
Kapitel 4
Das Programm
den Zahlen werden verglichen und aufsteigend einsortiert. Ist sie kleiner, liegt ein
Nulldurchgang vor und die Zahlen werden absteigend geordnet.
Da Pakete zwischendurch fehlen können, muss diese Abfrage bei der Einsortierung
sukzessive mit jedem Paket durchgeführt werden, bis die korrekte Position gefunden
worden ist.
4.5.6 Berechnung der Anzahl der Pakete einer TCP-Verbindung
Um die Anzahl der Pakete einer TCP-Verbindung berechnen zu können, müssen
mindestens ein Paket des Verbindungsaufbaus und eins des Verbindungsabbaus vorhanden sein, da sonst jegliche Bezugspunkte fehlen.
Stimmen die IP-Adressen des Senders und Empfängers des ersten und letzten Paketes
der Verbindung überein, berechnet sich die Anzahl der Pakete nach Gleichung 4-2.
2 ∆( Seq1, Seqn ) + 1 + µ
Gleichung 4-2
Wobei ∆(Seq1,Seqn) die Differenz der Sequenznummern des 1. und des letzen Paketes
bezeichnet. Die Variable µ, im Programmcode missingEnd genannt, berechnet sich aus
der Anzahl der fehlenden Pakete vor dem ersten und hinter dem letzten aufgezeichneten Paket der Verbindung. Dies können das 1. Paket oder das 1. und 2. Paket des
Verbindungsaufbaus und/oder das letzte Paket des Verbindungsabbaus sein.
Sind die IP-Adressen des Senders und Empfängers beim letzen und ersten Paket
vertauscht berechnet sich die Anzahl nach Gleichung 4-3.
2 ∆( Ackn, Seq1) + µ
Gleichung 4-3
Der Term ∆(Ackn,Seq1) bezeichnet in diesem Fall die Differenz der
Acknowledgenummer des letzen und der Sequenznummer des ersten Paketes.
Die Anzahl der fehlenden Pakete einer Verbindung kann anschließend aus der
Differenz der gerade bestimmten Anzahl der TCP-Pakete und der Anzahl der protokollierten Pakete der Verbindung bestimmt werden
Fehlen alle Pakete des Verbindungsaufbaus oder -abbaus ist keine Aussage über die
Anzahl der Pakete möglich. In diesem Fall kann auch nicht die Anzahl der fehlenden
Pakete berechnet werden.
41
Kapitel 5
Tests
5 Tests
Während der Programmierphase sind alle neuen Funktionen umgehend mit einer
entsprechend präparierten Quell-Datei getestet worden.
Zunächst ist das zeilenweise Auslesen der Quell-Datei mit einer gekürzten Datei (10
Pakete) getestet worden. Zur Überprüfung sind die eingelesenen Zeilen unverändert im
Ausgabefenster ausgegeben worden. Diese Funktionalität steht noch, bei Markierung
des entsprechenden Kontrollkästchens (Show Sourcefile), zur Verfügung.
Die Funktionen FrameAnalyse und AnalyseIPHeader, in der die Protokollzähler
inkrementiert werden, ist mit Hilfe einer Quell-Datei getestet worden, in der jedes
bekannte Protokoll sowie jeweils ein unbekanntes mindestens einmal vorgekommen
ist. Durch Ausgabe aller Zählerstände konnte die Funktionalität direkt überprüft
werden.
Da die Behandlung von UDP-Paketen einfacher als die von TCP-Paketen ausfällt, ist
zunächst die Erzeugung von UDP-Verbindungen und die Einordnung der UDP-Pakete
implementiert und getestet worden. Hierzu wird erst eine Quell-Datei mit mehreren
UDP-Verbindungen und jeweils einen zugehörigen Paket verwendet. Die im
Ausgabefenster ausgegebenen UDP-Verbindungen konnten sofort mit der Quell-Datei
verglichen werden. Anschließend ist die verwendete Test-Datei modifiziert worden,
um alle einzelnen Abfragen der Funktion AnalyseUDPConnection zu überprüfen.
Dazu gehören die Zugehörigkeit der Pakete zur gleichen Verbindung bei gleicher und
vertauschter Sender-Adresse (IP-Senderadresse und Sendeport) und EmpfängerAdresse (IP-Empfängeradresse und Empfangsport) sowie die Überprüfung eines
Timeouts der einzelnen Verbindungen.
Nach Implementierung der Funktion AnalyseTCPConnection sind dieselben
Funktionalitäten wie bei den UDP-Verbindungen mit entsprechend angepasster QuellDatei überprüft worden. Zusätzlich ist die korrekte Einordnung der Pakete innerhalb
einer Verbindung getestet worden. Dazu sind die Acknowledge- und Sequenznummern der TCP-Pakete innerhalb der verwendeten Test-Datei variiert worden. Erste
Tests haben ergeben, dass der Zahlenbereich dieser Nummern zu gering gewählt
worden ist und deshalb ein Variablen-Typ mit grösseren Wertebereich erforderlich ist.
Die Nummern sind anschließend innerhalb der Test-Datei so gewählt worden, dass
teilweise Pakete gefehlt und/oder in der falschen Reihenfolge vorgelegen haben.
Abschließend ist noch der Nulldurchgang der laufenden Sequenz- und/oder Acknowledgenummer unter gleichen Bedingungen getestet worden.
Nach Fertigstellung des Programms sind zwei abschließende Tests zur Überprüfung
der Gesamtfunktionalität durchgeführt worden. Erstens mit einer selbsterstellten
Quell-Datei die alle Protokolle und alle oben aufgeführten Fälle gemeinsam enthält
42
Kapitel 5
Tests
und zweitens mit einer von der Monitoringsoftware erzeugten Quell-Datei, die real
aufgezeichneten Datenverkehr eines Netzwerks enthält. Letztere Datei ist wesentlich
länger (10.000 Pakete) als die zuvor präparierten Test-Dateien und konnte somit
gleichzeitig zur Kontrolle der Analysegeschwindigkeit des Programms herangezogen
werden.
43
Kapitel 6
Resümee und Ausblick
6 Resümee und Ausblick
Das Programm ConnectionChecker analysiert bisher TCP- und UDP-Verbindungen
mittels dynamischer Speicherverwaltung im Detail, alle anderen Protokolle werden
bisher nur rudimentär behandelt. Auf Grund der dynamischen Speicherverwaltung
werden die im Programm verwendeten Listen automatisch in ihrer Größe angepasst.
Das bedeutet, die Anzahl der Verbindungen und Texte muss vor der Analyse nicht
festgelegt werden. Außerdem gewährleistet sie eine optimale Speicherplatzverwaltung.
Die Analyse der Quell-Datei findet zur Laufzeit statt, das bedeutet, die Datei muss
nicht erst komplett ausgelesen werden. Es wird zeilenweise ausgelesen und direkt
analysiert, so dass nur Daten relevanter Zeilen, hier Pakete der TCP- und UDPVerbindungen, gespeichert werden und die Analyse der anderen sofort abgebrochen
wird. Auf Grund der dynamischen Speicherverwaltung und der Laufzeitanalyse wird
das Programm hinsichtlich des Speicherplatzes und Laufzeit optimiert. Die allgemein
gehaltene Programmstruktur, ermöglicht das Programm leicht zu erweitern und
einzelne Komponenten, z.B. für andere Verbindungsprotokolle, wiederzuverwenden.
Wie schon in vorherigen Kapiteln angedeutet, ist die Erweiterung und/oder Modifikation des Programms ConnectionChecker an einigen Stellen möglich und sinnvoll.
Eine mögliche Erweiterung wäre, die Erkennbarkeit von genutzten Diensten auf eine
größere Anzahl auszuweiten. In der aktuellen Version des Programms wird in der
Funktion AnalyseService nur zwischen HTTP, FTP und sonstige Dienste unterschieden. Die Liste der Dienste kann leicht erweitert werden, da diese an Hand des „wellknown-ports“ mittels einer case-Abfrage unterschieden werden.
In der aktuellen Programm-Version ist die Behandlung der offenen Verbindungen bei
abgeschlossener Analyse einer Quell-Datei noch unbehandelt. Eine Quell-Datei enthält
eine Anzahl von Paketen, die über eine gewisse Zeitdauer im Netzwerk aufgezeichnet
worden sind. Die Quell-Datei enthält nur einen gewissen Ausschnitt des Netzwerkverkehrs ohne Anspruch auf Vollständigkeit der aufgezeichneten Verbindungen. Die
protokollierten Verbindungen können sich somit über mehrere Quell-Dateien erstrecken. Aus diesem Grund wäre es wünschenswert, dass mehrere Quell-Dateien hintereinander analysiert werden können und offene Verbindungen für die nächste QuellDatei weiter zur Verfügung stehen. Nur so können Pakete derselben Verbindung, die
aber in einer späteren Quell-Datei aufgezeichnet worden sind, auch der gleichen
Verbindung zugeordnet werden. Um diese Erweiterung zu ermöglichen, behalten
derzeit Verbindungen mit noch fehlenden Paketen, die kein Timeout erhalten haben,
ihren Status als offene Verbindung bei.
Eine weitere Verbesserung wäre das Speichern der Analyse-Ergebnisse in einer neuen
Datei. Die Ergebnisse werden im aktuellen Programm nur auf dem Bildschirm aus44
Kapitel 6
Resümee und Ausblick
gegeben, wobei bei Abspeicherung der Werte auch später auf vergangene Ergebnisse,
z.B. zum Vergleich, zurückgegriffen werden könnte.
Auch die einfach gehaltene GUI könnte in ihrer Funktionalität erweitert werden. Mit
Auswahl der zu analysierenden Quell-Dateien, Ein- bzw. Ausblendung von bestimmten Analyseergebnissen und zusätzlichen Funktionen.
Für die Zukunft absehbar ist, dass eine neue Version der Programmierumgebung die
Möglichkeit einer höheren Auflösung des Zeitstempels mit sich bringt. Der als CTimeVariable abgespeicherte Timestamp kann in der derzeitigen Version nur sekundengenau behandelt werden. Dies ist für die aufgezeichneten Pakete nicht ausreichend,
da die Übertragungsgeschwindigkeiten eine genauere Auflösung erfordern.
45
Kapitel 7
Literatur
7 Literatur
[BAU99]
Baumann, Heiko
Entwicklung eines Softwaretools zur Protokollierung und Analyse des
Datenstroms in Netzwerken
Diplomarbeit D344, Lehrstuhl für Datenverarbeitung
Ruhr-Universität Bochum, 1999
[CHA98]
Chapman, Davis
Visual C++6 in 21 Tagen
Haar bei München :SAMS, 1998
[CHE96]
Cheswick, William R. / Bellovin, Steven M.
Firewalls und Sicherheit im Internet
Schutz vernetzter Systeme vor cleveren Hackern
Addison-Wesley, Bonn, 1996
[DET97]
Deutsche Telekom
Glossar, Begriffe aus der Welt der Netze
http://www.t-lan.de/GLOSSAR/
[DRO02]
Droste, Thomas / Ruhl, Alexander
Aufgaben bei verteilter Datenakquisition und dessen Zusammenführung
für die Analyse
In: Horster, Patrick: Enterprise Security 2002
IT-Verlag, 2002
[JUN00]
Junker, Holger
TCP und UDP
Institut für Rechnerentwurf und Fehlertoleranz,
Proseminar Rechnerkommunikation und Telefon
Universität Karlsruhe, WS 2000/2001
http://goethe.ira.uka.de/seminare/rkt/tcp+udp/
[KAD01]
Kaderali,. Firoz
Network Security
Skript zur Vorlesung
Fernuniversität Hagen, 02.05.2001
46
Kapitel 7
Literatur
[KAUF99]
Kauffels, Franz-Joachim
Lokale Netze
MITP-Verlag GmbH, Bonn, 1999
[LIE01]
Lienemann, Gerhard
TCP/IP-Praxis
Dienste, Sicherheit, Troubleshooting, Kapitel 1: TCP/IP im Internet
Heinz Heise Verlag, März 2001
http://www.dpunkt.de/leseproben/3-88229-184-2/Kapitel_1.pdf
[PFL01]
Pfliegl, Konstantin
So funktioniert TCP/IP
tecChannel-Artikel vom 02.11.2001
http://www.tecchannel.de/internet/209/index.html
[POS81]
Postel, Jon
RFC: 791: Internet Protocol
Information Sciences Institute
University of Southern California, September 1981
http://www.ietf.org/rfc/rfc0791.txt
[POT81]
Postel, Jon
RFC: 793: Transmission Control Protocol
Information Sciences Institute
University of Southern California, September 1981
http://www.ietf.org/rfc/rfc0793.txt
[PRA92]
Prata, Stephen
C++
Einführung in die objektorientierte Programierung
Te-wi Verlag (Waite Group), 1992
[REB01]
Reibold, Holger
Hypertext Transfer Protocol
tecChannel-Artikel vom 30.08.2001
http://www.tecchannel.de/internet/208/index.html
47
Kapitel 7
[REI01]
Literatur
Reibold, Holger
File Transfer Protocol
tecChannel-Artikel vom 05.01.2000
http://www.tecchannel.de/internet/207/index.html
[REY94]
Reynolds, J. / Postel, J.
RFC: 1700: Assigned Numbers
ISI, Oktober 1994
http://www.ietf.org/rfc/rfc1700.txt
[STE94]
Stevens, W. Richard
TCP/IP, Illustred, Volume 1
Addison-Wesley, Reading, 1994
[THO99]
Thormählen, Thorsten
Entwicklung einer Internetkamera und deren Anbindung über PPP und
TCP/IP an das ISDN
Diplomarbeit, Fachgebiet Elektronische Bauelemente und Schaltungen
Gerhard-Mercator-Universität-Gesamthochschule Duisburg, 1999
http://www.thormahlen.de/diplhtml/thor_pri.html
[WAS94]
Washburn, Kevin / Evans, Jim
TCP/IP
Aufbau und Betrieb eines TCP/IP-Netzes
Addison-Wesley, Bonn, 1994
[WEB92]
Weber, Wolfgang / Alef, Andreas
Grundlagen der Datenverarbeitung
Lehrstuhl für Datenverarbeitung
Ruhr-Universität-Bochum, Bochum, 1992
[ZIT96]
Zitterbart, M.
Telematik 1
Skript Kapitel 8: Internet
Institut für Telematik, Universität Karlsruhe 1996
http://www.telematik.informatik.uni-karlsruhe.de/lehre/alt/vorlesungen/Tele1Folien_WS9697/K8-Inter/index.htm
48
Herunterladen