Diplomarbeit - Institut für Angewandte Mikroelektronik und

Werbung
Universität Rostock
Fakultät für Informatik und Elektrotechnik
Institut für Angewandte Mikroelektronik und Datentechnik
Diplomarbeit
Entwicklung einer Struktur zur Zustandsüberwachung
verbindungsorientierter Kommunikationsprotokolle
Bearbeiter:
cand. Ing. Martin Siemroth
Studiengang:
Elektrotechnik
Matrikelnummer:
000201620
Tag der Ausgabe:
01.12.2006
Tag der Abgabe:
31.05.2007
Betreuer:
Dipl.-Ing. Harald Widiger
Dipl.-Ing. Stephan Kubisch
Betreuender Hochschullehrer:
Prof. Dr.-Ing. Dirk Timmermann
Danksagung
An dieser Stelle möchte ich den Mitarbeitern des Instituts für Angewandte Mikroelektronik und Datentechnik der Universität Rostock danken, die durch ihre fachliche und
persönliche Unterstützung zum Gelingen dieser Diplomarbeit beigetragen haben.
Besonderer Dank gebührt meinen Eltern, die mir dieses Studium durch ihre Unterstützung ermöglicht haben.
i
Aufgabenstellung
Entwicklung einer Struktur zur Zustandsüberwachung
verbindungsorientierter Kommunikationsprotokolle
Die Anforderungen an moderne Netzwerkkomponenten, insbesondere im Bereich der
Access Netzwerke, nehmen stetig zu. Mit zunehmender Bandbreite von Teilnehmeranschlüssen durch VDSL oder „Ethernet on The First Mile“ (EFM) und der gleichzeitig
zunehmenden Anzahl von Diensten, die Internet Service Provider anbieten, nimmt die
Notwendigkeit des Einsatzes spezialisierter Hardwarelösungen stark zu, da Softwareäquivalente zukünftig nicht genügend Performance bieten können. Durch den „always-on“Trend in Wirtschaft, Gesellschaft und alltäglichem Leben nimmt das Bedürfnis nach
Sicherheitsmaßnahmen im selben Maße zu. Ziel dieser Arbeit ist die Entwicklung einer
Hardwarelösung, die es ermöglicht, die spezifizierten Zustände von Kommunikationsverbindungen zu überwachen und nicht erlaubte Übergänge und bestimmte Angriffe auf
bzw. durch Nutzer netzwerkseitig zu unterbinden. Diese Lösung soll am Beispiel eines
State-Oberservers für TCP- oder SIP-Verbindungen entwickelt und prototypisch implementiert werden. Anhand dieses Systems sind Abschätzungen über eine Anwendbarkeit
solcher Systeme in Zugangsnetzwerken vorzunehmen.
Im Rahmen der Diplomarbeit sind folgende Teilaufgaben zu lösen:
• Entwurf eines allgemeinen Konzepts zur State-Observation für eine größere Anzahl
von Nutzern, bzw. Kommunikationsverbindungen.
• Analyse typischer Angriffsszenarien auf das TCP-Protokoll und Einschätzung von
Möglichkeiten der Angriffsabwehr durch einen oben beschriebenen Mechanismus.
• Abhängig von den Analyseergebnissen, prototypische Implementierung eines TCPoder eines SIP-State-Observers. Dies geschieht unter Berücksichtigung von GPSOrtsinformationen, die innerhalb einer IP-Option des IP-Protokolls vorliegen.
• Untersuchung und Aufwandsabschätzung der Anbindung eines GPS-Moduls an ein
ii
Aufgabenstellung
ML405-Evaluation Board, zur Erzeugung von IP-Frames mit GPS-Ortsinformationen
in einer IP-Option.
• Ggf. Anbindung eines GPS-Moduls an ein ML405-Evaluation Board. Dazu sind
bereits entwickelte Komponenten zur IP-Paketerweiterung zu verwenden und ggf.
zu erweitern.
iii
Inhaltsverzeichnis
Danksagung
i
Aufgabenstellung
ii
Einleitung
I
xii
Grundlagen
1
1 Protokollübersicht
2
1.1
ISO-OSI 7 Schichtenmodell . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
TCP/IP Referenzmodell . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
Internetprotokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.4
Internet Control Message Protocol . . . . . . . . . . . . . . . . . . . . . .
7
1.5
Transmission Control Protocoll . . . . . . . . . . . . . . . . . . . . . . .
9
1.5.1
TCP Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.5.2
Verbindungsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.5.3
Datenübertragung
. . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.5.4
Verbindungsabbau . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2 Angriffe auf Internetverbindungen
16
2.1
Informationsgewinnung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.2
Denial of Service Attacken . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.3
Angriffe auf einzelne TCP-Verbindungen . . . . . . . . . . . . . . . . . .
19
2.4
Schutzmechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3 Global Positioning System
21
II Konzept
22
iv
Inhaltsverzeichnis
4 Anforderungen an das Observermodul
23
5 Zustandsmodell zur Verbindungsüberwachnung
25
5.1
Verbindungsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.2
Datenversand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.3
Verbindungsabbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.4
Benötigte Paketinformationen . . . . . . . . . . . . . . . . . . . . . . . .
29
5.4.1
Informationen aus dem IP-Header . . . . . . . . . . . . . . . . . .
29
5.4.2
Informationen aus dem TCP-Header . . . . . . . . . . . . . . . .
30
6 Hardwarekonzipierung
6.1
6.2
6.3
6.4
32
Datenpfadlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.1.1
Schnittstellen der Datenpfadlogik zu anderen Modulen . . . . . .
33
6.1.2
Aufgaben und Konzept der Datenpfadlogik . . . . . . . . . . . . .
34
Up-Down-Arbitrierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
6.2.1
Schnittstellen des Arbitrierers zu anderen Modulen . . . . . . . .
39
6.2.2
Aufgabe und Konzept des Arbitrierers . . . . . . . . . . . . . . .
40
Protokollüberwachungslogik . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.3.1
Schnittstellen der Protokollüberwachungslogik zu anderen Modulen 42
6.3.2
Aufgabe und Konzept der Protokollüberwachungslogik . . . . . .
44
Speicherverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
6.4.1
Die Wahl des Suchverfahrens . . . . . . . . . . . . . . . . . . . . .
49
6.4.2
Realisierung des Speichers . . . . . . . . . . . . . . . . . . . . . .
52
6.4.3
Alterungsalgorithmus . . . . . . . . . . . . . . . . . . . . . . . . .
52
III Realisierung und Verifikation
55
7 Realisierung in VHDL
56
7.1
Zwei Prozess Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
7.2
Typdefinition und Informationsübergänge
. . . . . . . . . . . . . . . . .
57
7.3
Realisierung einzelner Elemente der Module . . . . . . . . . . . . . . . .
59
7.3.1
Zwischenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
7.3.2
Überprüfung eines Paketes . . . . . . . . . . . . . . . . . . . . . .
61
8 Verifikation mit SystemC
8.1
62
Struktur der Testbenches unter SystemC . . . . . . . . . . . . . . . . . .
v
62
Inhaltsverzeichnis
8.2
Verifikation der Komponenten . . . . . . . . . . . . . . . . . . . . . . . .
62
IV Zusammenfassung und Ergebnis
65
9 Zusammenfassung
66
9.1
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
9.1.1
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
9.1.2
Version mit vermindertem Funktionsumfang . . . . . . . . . . . .
67
9.1.3
Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
Selbstständigkeitserklärung
70
vi
Tabellenverzeichnis
1.1
ICMP Nachrichtentypen . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
6.1
Schnittstellen der Datenpfadlogik . . . . . . . . . . . . . . . . . . . . . .
34
6.2
Datenpfadlogic, rcv info fsm . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.3
Schnittstellen des Arbitrierers . . . . . . . . . . . . . . . . . . . . . . . .
40
6.4
Schnittstellen der Protokollüberwachungslogik . . . . . . . . . . . . . . .
43
vii
Abbildungsverzeichnis
1.1
ISO-OSI 7 Schichtenmodell, TCP/IP Referenzmodell . . . . . . . . . . .
4
1.2
Beispiel der Protokollkapselung . . . . . . . . . . . . . . . . . . . . . . .
5
1.3
IPv4 Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.4
Aufbau einer mit IP transportierten ICMP-Nachricht . . . . . . . . . . .
8
1.5
TCP Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.6
TCP 3-Wege Verbindungsaufbau . . . . . . . . . . . . . . . . . . . . . .
11
1.7
Datenübertragung mit TCP . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.8
Flusskontrolle und Timermanagement . . . . . . . . . . . . . . . . . . . .
13
1.9
TCP 3-Wege Verbindungsabbau . . . . . . . . . . . . . . . . . . . . . . .
15
4.1
Observer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
5.1
Zustandsmodell; Bereich Verbindungsaufbau . . . . . . . . . . . . . . . .
26
5.2
Zustandsmodell; Bereich Verbindungsabbau . . . . . . . . . . . . . . . .
28
5.3
Benötigte Informationen aus dem IP-Header . . . . . . . . . . . . . . . .
30
5.4
Benötigte Informationen aus dem TCP-Header . . . . . . . . . . . . . . .
30
6.1
Aufbau des Überwachungsmoduls, Schnittstellen zwischen den einzelnen
Modulen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
6.2
Aufbau der Datenpfadlogik . . . . . . . . . . . . . . . . . . . . . . . . . .
33
6.3
Zustandsmaschine zur Bearbeitung der Netzwerkschicht . . . . . . . . . .
35
6.4
Vereinfachte Zustandsmaschine: Auslesen der Paketinformationen . . . .
37
6.5
FSM: Datenpfadlogik, Zwischenspeichern der Pakete
. . . . . . . . . . .
38
6.6
FSM: Datenpfadlogik, Bereitstellen der Paketinformationen . . . . . . . .
38
6.7
FSM: Datenpfadlogik, Versenden/Verwerfen des Paketes . . . . . . . . .
39
6.8
Aufbau des Arbitrierers . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
6.9
FSM: Arbitrierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
6.10 Ablauf der Arbitrierung . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
6.11 FSM: Protokollüberwachungslogik . . . . . . . . . . . . . . . . . . . . . .
45
viii
Abbildungsverzeichnis
6.12 Funktionsdiagramm: Überprüfung der Pakete . . . . . . . . . . . . . . .
46
6.13 a) allgemeiner Schlüssel zur Verbindungsidentifizierung b) Schlüssel für
Paket aus dem Westen c) Schlüssel für Paket aus dem Osten . . . . . . .
46
6.14 Aufteilung des Sequenznummernbereiches . . . . . . . . . . . . . . . . . .
47
6.15 Inhalt der Verbindungsinformationen . . . . . . . . . . . . . . . . . . . .
50
6.16 Vergleich von a) sequentieller Suche und b) binärer Suche . . . . . . . . .
51
6.17 Einfügen eines Elementes in den Speicher1: a) Ausgangszustand b) Einfügevorgang c) Endzustand . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
6.18 Löschen eines Elementes aus dem Speicher1: a) Ausgangszustand b) Löschvorgang c) Endzustand . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
6.19 Alterungsalgorithmus im Speichermodul . . . . . . . . . . . . . . . . . .
54
7.1
Prinzip der 2-Prozess Methode . . . . . . . . . . . . . . . . . . . . . . . .
56
7.2
Realisierung eines Fifo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
8.1
Struktur Datenpfadlogik TB . . . . . . . . . . . . . . . . . . . . . . . . .
62
8.2
Struktur Protokollüberwachungslogik TB . . . . . . . . . . . . . . . . . .
63
ix
Glossar
ACK
Acknowledge
BFM
Bus-functional Model
Broadcastadresse
IP-Adresse für eine Rundnachricht an mehrere Empfänger
DDoS
Distributed Denial of Service
DoS
Denial of Service
DuT
Device under Test
ECN
Explicit Congestion Notification
EOF
End of Frame
FIN
Finalize
FTP
File Transfer Protocol
GPS
Global Positioning System
Host
Verbindungsteilnehmer
HTTP
HyperText Transfer Protocol
ICMP
Internet Control Message Protocol
IP
Internet Protokoll
IP-Spoofing
Generierung von IP-Paketen mit gefälschten IPAdressen
IPv4
Internetprotokoll in der Version 4
IPv6
Internetprotokoll in der Version 6
ISO
International Organzition for Standradization
x
Glossar
MPLS
Multi Protocol Label Switching
NMEA
National Marine Electronics Association, Nationale
Vereinigung für Marineelektronik
OSI
Open Systems Interconnect
POP
Post Office Protocol
RFC
Request for Comments
RST
Reset
RTO
Retransmission Timeout
RTT
Roundtriptime
SOF
Start of Frame
SYN
Synchronisation
TB
Testbench
TCP
Transmision Control Protocoll
UDP
User Datagram Protocol
VHDL
Very High Speed Integrated Circuit Hardware Description Language
VLAN
Virtual Local Area Network
xi
Einleitung
Sicherheitsaspekte bei der Internetanbindung haben heute eine immer größer werdende
Bedeutung. Dies ist auf die steigende Anzahl an Benutzern, Geräten mit Internetzugang
und angeboten Diensten zurückzuführen. Telefonieren über IP und Fernsehstreams über
einen Breitbandinternetanschluss sind Beispiele dafür. Die Zusatzinformationen die bis
vor ein paar Jahren über einen Faxabruf oder auf postalischen Weg zu erhalten waren,
werden heute im Internet angeboten. Der „always-on“ Trend wird vorausgesetzt und ist
nicht mehr wegzudenken. Für den Schutz vor Angriffen muss allerdings individuell gesorgt werden.
Hier setzt die vorliegende Arbeit an. Es soll ein zusätzlicher Schutz zugangsnetzwerkseitig gewährleistet werden. Ziel dabei ist die Zustandsüberwachung von TCP Verbindungen, unter Verwendung von GPS-Ortsinformationen, als ein zusätzliches Sicherheitsmerkmal. Diese Informationen sind in den IP-Optionen enthalten und lassen eine Zuordnung
von IP und geografischen Ort zu. Diese Funktionalität soll aus Geschwindigkeitsgründen
in Hardware umgesetzt werden.
Zunächst wird in dieser Arbeit auf die verwendeten Kommunikationsprotokolle und die
Angriffsarten eingegangen. Daraufhin wird ein Konzept für eine Zustandsüberwachung
entwickelt, welches im Anschluss in VHDL implementiert wird. Abschließend werden die
Vor- und Nachteile des entwickelten Moduls erläutert.
xii
Teil I
Grundlagen
1
1 Protokollübersicht
Unter Protokollen sind Regeln zu verstehen, die das Verhalten sowie den Nachrichtenaustausch zwischen Kommunikationspartnern spezifizieren. Als ein sehr einfaches Protokoll
kann die Vorgehensweise bei der direkten Kommunikation zwischen zwei Personen angesehen werden. Hierbei sollte jeder den anderen ausreden lassen, damit einander verstanden
wird und keine Informationen verloren gehen. In der Kommunikationstechnik sind Protokolle weitaus komplexer und ermöglichen eine Kommunikation zwischen Instanzen in
einem Netzwerk. Aufgrund dieser Komplexität werden die benötigten Funktionen hier
nicht mit einem einzigen Protokoll realisiert, sondern auf mehrere Protokolle verteilt. Diese Protokolle sind in Schichten mit unterschiedlichen Aufgaben organisiert. Grundlage
dafür bildet das Open Systems Interconnect (OSI) 7 Schichtenmodell der International
Organzition for Standradization (ISO), das in [6] spezifiziert ist. Ein weiteres Modell ist
das TCP/IP Referenzmodell, welches für den Einsatz im Internet bestimmt ist.
1.1 ISO-OSI 7 Schichtenmodell
Mit der Zielstellung eine herstellerunabhängige Kommunikation zu ermöglichen, werden
nach diesem Modell die Funktionen auf 7 unabhängige Schichten verteilt. Die Realisierungen dieser Funktionen sind nicht Bestandteil der Spezifikation. Einzelne Schichten
können ausgetauscht werden und sind für die übergeordneten transparent. Wie in Abbildung 1.1 zu sehen, sind die Schichten in transportorientierte (1-4) und anwendungsorientierte (5-7) unterteilt. Die Funktionen der einzelnen Schichten werden im Folgenden
beschrieben.
Bitübertragungsschicht (physical layer)
Dies ist die unterste Schicht und beschreibt die physikalischen Parameter der Übertragung. Die Protokolle dieser Ebene beziehen sich auf die Darstellung der Daten
als elektrische Signale, optische Signale oder Funkwellen für das jeweils eingesetzte
Übertragungsmedium.
2
1 Protokollübersicht
Sicherungsschicht (datalink layer)
Die Hauptfunktionen liegen hier bei der Fehlerkontrolle und den damit verbundenen Korrekturmechanismen. Des Weiteren realisiert diese dieser Schicht die Flusskontrolle, die den Zugriff auf das Übertragungsmedium regelt.
Vermittlungsschicht (network layer)
Aufgabe dieser Schicht ist die Steuerung und Verwaltung der Verbindung zwischen
Quelle und Ziel. Das wichtigste Element ist hier das Routing, wodurch die Information auf einem der möglichen Wege von der Quelle zum Ziel geleitet wird.
Transportschicht (transport layer)
Die Aufgaben dieser Schicht liegen in der Segmentierung und Reassemblierung der
Daten, sowie in der Zuordnung von eintreffenden Datenpaketen zur Zielanwendung.
Kommunikationsschicht (session layer)
Die Aufgabe dieser Schicht ist die Steuerung logischer Verbindungen durch die
Bereitstellung von Diensten zum geordneten und synchronisierten Datenaustausch.
Darstellungsschicht (presentation layer)
In dieser Schicht wird die systemabhängige Datendarstellung in eine systemunabhängige umgesetzt. Die Darstellung der Daten in einer von der Codierung der
darüber liegenden Schicht unabhängigen Form ermöglicht die Kommunikation unterschiedlicher Systeme.
Anwendungsschicht (application layer)
Die Protokolle dieser Ebene werden den Anwendungen zur Verfügung gestellt, beziehungsweise von den Anwendungen spezifiziert.
1.2 TCP/IP Referenzmodell
Das TCP/IP Referenzmodell ist ein Schichtenmodell, welches das ISO-OSI Modell auf
4 Ebenen abbildet. Benannt ist es nach den primär genutzten Protokollen Transmission
Control Protocol (TCP) und Internet Protocol (IP), allerdings schließt das Modell alle
im Internet verwendeten Protokolle ein. Ein Vergleich zum ISO-OSI 7 Schichtenmodell,
sowie eine Zuordnung der Schichten ist in Abbildung 1.1 zu sehen. Auf eine kurze Erläuterung dieses Modells folgt in den nächsten Kapiteln eine genauere Betrachtung der
Protokolle IP und TCP.
3
1 Protokollübersicht
transport-orientiert
anwendungsorientiert
OSI 7 Schichtenmodell
TCP/IP Modell
Protokollbeispiele
Anwendungsschicht
HTTP, FTP, POP3,
Telnet, SSH
7
Anwendungsschicht
6
Dartellungsschicht
5
Kommunikationsschicht
4
Transportschicht
Transportschicht
TCP, UDP
3
Vermittlungsschicht
Internetschicht
IP
2
Sicherungsschicht
Netzwerkschicht
Ethernet, WLAN,
PPP
1
Bitübertragungsschicht
Abbildung 1.1: ISO-OSI 7 Schichtenmodell, TCP/IP Referenzmodell
Netzwerkschicht (network layer)
Diese Schicht stellt das Übertragungsmedium dar, spezielle Funktionen werden im
Referenzmodell nicht beschrieben. Als Beispiele sollen hier nur die Übermittlung
von IP-Paketen über Ethernet oder WLAN aufgeführt werden.
Internetschicht (internet layer)
Die Weitervermittlung und das Routing (Wegfindung) der Pakete werden in dieser
Schicht realisiert. Zur Anwendung kommt hier das Internetprotokoll (IP).
Transportschicht (transport layer)
Wie in dem ISO-OSI 7 Schichtenmodell ermöglicht diese Schicht die Kommunikation zwischen Quell- und Zielsystem durch Segmentierung und Reassemblierung.
TCP und UDP (User Datagram Protocol) sind Protokolle dieser Schicht.
Anwendungsschicht (application layer)
In dieser Schicht sind Protokolle vereinbart, über die die Anwendungen auf den
Protokollstapel zugreifen und ihre Daten versenden. Beispiele für Protokolle dieser
Schicht sind: HTTP (Hypertext Transfer Protocol), FTP (File Transfer Protocol)
oder POP (Post Office Protocol).
Am Beispiel dieses Referenzmodells soll hier das Prinzip der Protokollkapselung näher
betrachtet werden. Ein Segment hat in jeder Ebene den gleichen Aufbau, es besteht aus
einem Protokollkopf (Header) und den Nutzdaten (Payload). In dem Protokollkopf befinden sich Informationen, die für die Realisierung der Funktionen benötigt werden und
4
1 Protokollübersicht
Schicht 4
HTTP-Header
Schicht 3
Payload
TCP-Header
Schicht 2
Payload
IP-Header
Schicht 1
Payload
MAC-Header
Payload
Abbildung 1.2: Beispiel der Protokollkapselung
31
24
Version
IHL
16
Type of Service
0
Packet Length
Identification
TTL
8
Flags
Protocol
Fragment-Offset
Header Checksum
Source IP Address
Destination IP Address
Options
Padding
Abbildung 1.3: IPv4 Header
Schicht- und Protokollabhängig sind. Ein Segment wird an die darunter liegende Schicht
weitergegeben, dort als Nutzdaten betrachtet und der Protokollkopf des dort verwendeten Protokolls vorangestellt. In Abbildung 1.2 wird ein Schicht 4 HTTP-Segment über
die Transport- und Internetschicht zu der Netzwerkschicht weitergegeben. Dabei vergrößert sich das Segment von Schicht zu Schicht um die jeweilige Größe des Protokollkopfes.
Auf dem Weg zum Empfänger und dort angekommen werden in umgekehrter Reihenfolge
zunächst der MAC-Header, dann der IP-Header gefolgt vom TCP-Header ausgewertet
und entfernt, so dass in Schicht 4 wieder das originale Paket eintrifft.
1.3 Internetprotokoll
Das Internetprotokoll, welches in der Internetschicht des TCP/IP-Referenzmodells zum
Einsatz kommt, existiert in unterschiedlichen Versionen. Bei Entstehen dieser Arbeit
liegt der Standard bei IP in der Version 4 (IPv4), welche 1981 in RFC791 [10] spezifiziert wurde. Die Version 6 (IPv6) des Internetprotokolls ist bereits spezifiziert, aber
5
1 Protokollübersicht
in der Nutzung nicht weit verbreitet. Der Grund für die Entwicklung eines neuen Standards liegt in der knapper werdenden Anzahl der IP-Adressen, sowie in einigen Defiziten
betreffend Sicherheit, Mobilität und Qualität von IPv4. Nach Version 4 des Protokolls
hat eine Adresse eine Länge von 32 Bit und begrenzt die Anzahl der Internetbenutzer
auf 4 Milliarden. Durch IPv6 wird das Problem der Knappheit von IP-Adressen gelöst,
da die Adresslänge auf 128 Bit erhöht wurde. Das entspricht einer Benutzeranzahl von
über 3 ∗ 103 8. Im Folgenden wird nur auf IPv4 eingegangen, zu IPv6 sei auf RFC2460
[5] verwiesen. Die Aufgaben, die mit IP gelöst werden, umfassen die Adressierung der
Verbindungsteilnehmer, die Fragmentierung von Paketen, sowie die Wegfindung und das
Weiterleiten der Pakete von der Quelle zum Ziel. Das Internetprotokoll ist ein Verbindungsloses Protokoll, es wird keine Ende-zu-Ende Verbindung zwischen den Teilnehmern
aufgebaut. Deshalb ist eine garantiere Zustellung der Daten mit diesem Protokoll nicht
möglich und muss durch andere Schichten gewährleistet werden. Der Protokollkopf ist
in Abbildung 1.3 gezeigt und die einzelnen Felder haben folgende Bedeutung.
Version (Versionsnummer)
Dieses Feld enthält die Versionsnummer des verwendeten Internetprotokolls. Momentan ist dies meist die Version 4.
IHL (Internet Header Länge)
Da der Header auch optionale Felder enthalten kann, wird in diesem Feld die
Länge des Protokollkopfes des aktuellen Paketes in Vielfachen von 32Bit-Worten
angegeben. Der Mindestwert beträgt 5, da die Headerlänge ohne optionale Felder
5x32 Bit beträgt.
Type of Service (Übertragungskriterien)
Dieses Feld wird seltener genutzt, bietet aber die Möglichkeit das Paket nach bestimmten Kriterien zu kategorisieren. Die Übertragungseigenschaften betreffen die
Zuverlässigkeit, den Durchsatz sowie die Verzögerung.
Length (Länge)
Hier wird die Gesamtlänge des IP-Paketes eingetragen, die den Paketkopf sowie
die Nutzdaten umfasst.
Identification (Datenzugehörigkeit)
Werden die Daten auf IP-Ebene fragmentiert, so kann der Empfänger an Hand der
Identifikationsnummer feststellen zu welchen Daten das Fragment gehört.
6
1 Protokollübersicht
Offset (Fragmentposition)
Dieses Feld beschreibt die Position des aktuellen Fragmentes in den Daten. In Verbindung mit der Identifikationsnummer ist es somit möglich die Gesamtinformation
aus den Fragmenten wiederherzustellen.
TTL (Time to live)
Dieser Wert dient als Zähler zur Begrenzung der Lebensdauer eines Paketes wird.
In RFC791 wurde ursprünglich die Einheit Sekunden definiert, wodurch eine maximale Lebensdauer von 255 Sekunden bei der gegebenen Feldbreite von 8Bit resultierte. Die reale Implementierung weicht allerdings von dieser Definition ab. Auf
dem Weg zum Ziel wird dieser Wert in jedem Netzknoten erniedrigt. Erreicht der
Inhalt dieses Feldes den Wert Null, so wird das Paket verworfen.
Protocol (Protokoll der nächsten Schicht)
Dieser Wert kennzeichnet das im Datenbereich transportierte Protokoll und ist
für die weitere Interpretation der Daten von Bedeutung. Die Verwendung von
TCP in Schicht 3 des TCP/IP Referenzmodells wird mit der Protokollnummer 6
gekennzeichnet.
Source, Destination IP Address (Quell-,Ziel IP Adresse)
Diese Felder enthalten die Quell- und Zielinternetadressen und sind als Absender
und Adressat des Paketes zu verstehen. IP-Adressen sind im Internet eindeutig
zuzuordnen und haben nach IPv4 eine Länge von 32Bit.
Options (zusätzliche Optionen)
In dieses optionale Feld variabler Länge können zusätzliche Informationen an den
Protokollkopf angehängt werden. Diese Informationen haben ein bestimmtes Format, welches in RFC791 näher beschrieben ist. Die Länge dieser Optionen wird
implizit mit dem Wert im Feld IHL festgelegt und is somit auf 10x32Bit begrenzt.
1.4 Internet Control Message Protocol
Das Internet Control Message Protocol (ICMP) ist eng mit IP verbunden und ist in [11]
spezifiziert. Bei Problemen im Versand von IP-Paketen werden diese Steuernachrichten an den Absender versendet. Des Weiteren werden dadurch Netzwerkanalysemöglichkeiten angeboten, wie beispielsweise Laufzeitenermittlung. ICMP-Nachrichten werden
gekapselt in IP-Paketen versendet, obwohl ICMP auf der gleichen Ebene im TCP/IP
7
1 Protokollübersicht
31
24
IP-Header
Version
16
IHL
8
Type of Service
Packet Length
Identification
TTL
Flags
Protocol
Fragment-Offset
Header Checksum
Source IP Address
Destination IP Address
Options
ICMP-Message
0
ICMP Type
Padding
Code
Typespecific
Typespecific
Internet Header + 64Bit of Original Datagram
Abbildung 1.4: Aufbau einer mit IP transportierten ICMP-Nachricht
ICMP Typ
Nummer
0
Echo Reply
3
Destination Unreachable
4
Source Quench
5
Redirect
8
Echo
11
Time Exceeded
12
Parameter Problem
13
Timestamp
14
Timestamp Reply
Tabelle 1.1: ICMP Nachrichtentypen
Referenzmodell angesiedelt ist. Das heißt, diese Nachrichten werden nicht an die Transportschicht weiter gereicht, sondern schon in der Internetschicht verarbeitet. Wie in
Abbildung 1.4 zu sehen, ist im Datenbereich des IP-Paketes die ICMP-Nachricht enthalten. Es gibt mehrere Typen von ICMP-Nachrichten, die unterschiedliche Probleme im
Netzwerk beschreiben. Der Aufbau eines ICMP-Paketes ist abhängig vom Typ. Bezieht
sich die Steuermeldung auf ein IP-Paket, so ist die ICMP Nachricht wie in der Abbildung aufgebaut. Aus dem Typfeld lassen sich die davon abhängigen spezifischen Felder
ableiten. Der IP-Header und die ersten 64 Datenbits des diese Meldung auslösenden
Originalpaketes sind an diese Informationen angehängt. Einige ICMP-Typen sind in Tabelle 1.1 aufgeführt, wobei die Typen 3, 4, 5, 11 und 12 den in der Abbildung gezeigten
Aufbau haben.
8
1 Protokollübersicht
31
24
16
Source Port
8
0
Destination Port
Sequence Number
Acknowledgement Number
Offset
Reserved
Flags
Window
Checksum
Urgent Pointer
Options
Padding
Data
Abbildung 1.5: TCP Segment
1.5 Transmission Control Protocoll
Das Transmission Control Protocoll gehört zur Familie der Internetprotokolle und realisiert die Funktionen der Transportschicht des TCP/IP-Referenzmodells. Es ist ein verbindungsorientiertes Transportprotokoll und dient nach dem Verbindungsaufbau der korrekten Datenübertragung und darauf folgendem Verbindungsabbau zwischen Netzwerkgeräten. Eine erste Standardisierung erfolgte 1981 mit [12], welches später durch [13]
eine Aktualisierung erfuhr.
Bei einer TCP-Verbindung wird ein virtueller Kanal zwischen zwei Verbindungsteilnehmern, den so genannten Sockets, hergestellt. Ein Socket identifiziert sich durch ein geordnetes Paar aus IP-Adresse zur Identifikation des Rechners und Portnummer zur Zuordnung der kommunizierenden Anwendung. Eine einzelne TCP-Verbindung wird identifiziert durch ein Socketpaar, also einem Quadrupel von IP’s und Ports. Durch die Einzigartigkeit von IP-Adressen im Internet ist somit eine eindeutige Identifizierung einer
TCP-Verbindung möglich.
1.5.1 TCP Header
Der Aufbau eines TCP-Paketes ist in Abbildung 1.5 gezeigt. Es umfasst einen Header
mit einer Länge von 20 bis 64 Byte mit darauf folgenden Nutzdaten. Die nachfolgend beschriebenen ersten 20 Byte im TCP-Header enthalten Standardfelder, die verbleibenden
44 Byte können als Speicherplatz für optionale Informationen dienen.
Source-, Destinationport (Quell- und Zielportadresse)
Diese 16 Bit breiten Adressen bezeichnen die lokalen Endpunkte der Verbindung
und sind Teil des Socketpaares.
Sequence, Acknowledgment Number (Sequenznummer und Bestätigungsnummer)
9
1 Protokollübersicht
Die Bytes, beziehungsweise Oktetts, die bei einer TCP-Verbindung übertragen
werden, sind durchnummeriert. Die Sequenznummer gibt die Folgenummer des
ersten in diesem Segment übertragenen Byte an. Die Bestätigungsnummer gibt
das als nächstes erwartete Byte an. Die beiden Felder sind jeweils 32 Bit breit.
Offset (TCP-Headerlänge)
Da der TCP-Header eine variable Länge hat, wird diese in diesem Feld angeben.
Dieses Feld ist 4 Bit breit und bezieht sich in der Angabe auf die Anzahl der
32Bit-Wörter im Header, woraus sich die Maximallänge von 64 Byte ergibt.
Reserved (reservierter Bereich)
Dieses Feld bietet Raum für Erweiterungen, mit RFC3168 wurden 2 neue Flags
eingeführt. Mit den zusätzlichen Flags: CWR und ECE wird in Verbindung mit IP
Explicit Congestion Notification (ECN) unterstützt. Über diese Flags wird TCP
über Gedrängtheit im Datenpfad informiert.
Flags (6 Bits)
Die in diesem Bereich enthaltenen Informationen dienen der Steuerung der Verbindung und umfassen 6 Flags mit unterschiedlicher Bedeutung. Das URG- und
das PSH-Flag dienen bei Empfang der schnellen Weitergabe der Daten an die Anwendung. Das ACK-Flag bestätigt zusammen mit der Bestätigungsnummer die
bis dahin empfangenen Daten und fordert gleichzeitig Daten ab dem angegebenen Byte an. Durch das RST-Flag wird eine Verbindung zurückgesetzt. Ein mit
dem SYN-Flag gekennzeichnetes Segment dient dem Verbindungsaufbau und ein
FIN-gekennzeichnetes dient dem Verbindungsabbau.
Window (Fenstergröße)
Die Fenstergröße gibt die Anzahl der Byte an, die der Empfänger bereit ist zu
empfangen. Dieses Feld ist 16Bit breit und ist somit für heutige Anwendungen
zum Teil zu klein. Aus diesem Grund gibt es die Möglichkeit das Fenster auf ein
in den Optionen angegebenes Vielfaches dieses Wertes festzulegen.
Checksum (Prüfsumme)
Dieses Feld dient zur Erkennung von Übertragungsfehlern und wird aus dem Header, den Daten und einem Pseudoheader berechnet.
Urgent Pointer (Dringlichkeitszeiger)
Dieses Feld ergibt zusammen mit der Sequenznummer die Position der dringlichen
10
1 Protokollübersicht
Daten, falls das URG-Flag gesetzt ist.
1.5.2 Verbindungsaufbau
H
O
S
T
1
syn, seq=x
syn/ack, ack=x+1, seq=y
ack=y+1, seq=x+1
H
O
S
T
2
Abbildung 1.6: TCP 3-Wege Verbindungsaufbau
Der Aufbau einer TCP-Verbindung erfolgt nach dem unter anderem in [15] beschriebenem 3 Wege Handshake Verfahren. Dieses ist ein allgemeines Verfahren und wurde nicht
für TCP entwickelt, ist aber für TCP im RFC793 als Verfahren festgelegt. Es wird ein
Request von einem Teilnehmer (Host) an den anderen geschickt, das bestätigt werden
muss. Mit der Bestätigung wird eine eigene Anforderung versendet, auf die wiederum
eine Antwort erwartet wird. Der Standardablauf beim Aufbau einer TCP-Verbindung
ist in Abbildung 1.6 dargestellt. Bevor die Verbindung aufgebaut werden kann, muss der
Initiator einen TCP-Socket aus seiner eigenen IP-Adresse und dem Port generieren. Des
Weiteren muss der Endpunkt der Gegenstelle bekannt sein, um ein so genanntes SYNPaket zu versenden. In diesem SYN-Paket ist eine zufällige Synchronisationsnummer im
Sequenznummernfeld enthalten, sowie das SYN-Flag gesetzt. Die Ziel-IP in Verbindung
mit dem angegebenen Port bilden den Endpunkt beim gewünschten Verbindungsteilnehmer. Dieser verschickt, nach Eintreffen eines solchen Paketes, seinerseits ein Paket mit
folgendem Inhalt. Die Antwort enthält eine eigene Sequenznummer, eine Bestätigungsnummer, die gleich der um eins erhöhten empfangenen Sequenznummer ist, sowie die
gesetzten Flags ACK und SYN. Bei Ablauf des 3 Wege Handshake Verfahrens können
einzelne Sonderfälle, wie das gleichzeitige Öffnen der Verbindung, auftreten. In diesem
Fall trifft nach Versand eines SYN-Paketes ein SYN-Paket der Gegenstelle ein, worauf
mit einem Bestätigungspaket geantwortet wird. In dem ist das ACK- und SYN-Flag
gesetzt, eine Sequenznummer gleich der in dem zuvor versandten SYN-Paket, sowie
ein Bestätigungsnummer, wie oben beschrieben, enthalten. Der 3-Wege-Handshake zum
Verbindungsaufbau basiert also auf dem Austausch von Sequenznummern und deren Be-
11
1 Protokollübersicht
stätigung. Bestimmte Probleme können durch verloren gehen von Synchronisations und
Bestätigungspaketen oder doppeltes Versenden von Paketen entstehen, welche durch das
TCP-Protokoll gelöst werden und in der Spezifiaktion RFC793, sowie in [15] beschrieben
sind.
1.5.3 Datenübertragung
H
O
S
T
1
seq=0, 1kB Data
syn=200, ack=1024, 512Byte Data
seq=1024 ,ack=712, 1kB Data
H
O
S
T
2
Abbildung 1.7: Datenübertragung mit TCP
Die Übertragung der Daten während einer TCP-Verbindung basiert auch auf dem Versenden von Paketen und deren Bestätigung. Die wichtigsten Merkmale bei der Regelung
einer korrekten Übertragung sind die Sequenz- und Bestätigungsnummern, sowie das
Fenster- und Timermanagement. Das Prinzip der Paketbestätigung soll mit Hilfe der
Abbildung 1.7 erläutert werden. Jedem Byte der übertragenen Daten wird eine Sequenznummer zugeordnet, wobei die im Header angegebene die Nummer des ersten Bytes
im aktuellen Paket ist. In dem Paket von Host 1 zu Host 2 ist in diesem Beispiel die
Sequenznummer gleich Null. Dieses Paket enthält Daten mit einer Länge von 1024 Byte
(1kB), die Nummer des ersten Bytes ist also 0 und die des letzten 1023. Host 2 bestätigt
das Paket mit gesetztem ACK-Flag und der Bestätigungsnummer 1024, was dem als
nächstes erwarteten Byte entspricht. Gleichzeitig werden 512 Byte Daten übertragen,
die Sequenznummer des ersten Bytes ist 200. Trifft das Paket von Host 2 bei Host 1
ein, so werden die empfangenen Daten bestätigt und wiederum gleichzeitig der nächste
Datenblock übertragen. Während einer Übertragung muss nicht jedes Paket einzeln bestätigt werden. Wird beispielsweise nach Empfang eines Paketes ein weiteres erwartet,
so kann ein Host auf das Eintreffen warten und mit Bestätigung des zweiten Paketes
implizit das erste auch bestätigen. Wie viele Byte ein Sender ohne Empfang einer Bestätigung versenden darf, hängt von der Fenstergröße ab die der Empfänger mit jeder
Bestätigungsnachricht im gleichnamigen Headerfeld angibt. Die Verbindungsteilnehmer
12
1 Protokollübersicht
Empfangspuffer
1.
2.
Fenstermax
3.
Timerablauf
H 4.
o
s
t
1
seq=0, 1kB Data
seq=1024, 1kB Data
seq=2048, 1kB Data
seq=0, 1kB Data
ack=3072, Window=0
ack=3072, Window=1024
7.
H
o
5. s
t
6.
leer
1k
1k
1k
1k
1k
1k
1k
voll
1k
1k
1k
1k
Datenverarbeitung
1k
2
1k
1k
Datenverarbeitung
seq=3072, 1kB Data
ack=4096, Window=2048
1k
8.
1k
2k
Abbildung 1.8: Flusskontrolle und Timermanagement
verfügen über einen Buffer mit einer bestimmten Größe und können nur genau so viele
Daten empfangen. Diese Vorgehensweise nennt sich Flusskontrolle und hat den Vorteil,
dass ein schnellerer Host davon abgehalten wird zu viele Pakete zu verschicken, die
sonst verloren gehen würden und somit unnötig Bandbreite im Netz belegen. Zum anderen kann durch ein großes Fenster die Bandbreite einer Verbindung erhöht werden, wenn
die Verzögerungszeiten bis zum Ziel sehr hoch sind. Wenn das Fenster in diesem Fall
sehr klein ist, dann hat der sendende Host schnell die maximale Paketanzahl versendet
und muss lange auf eine Bestätigung warten. Ist das Fenster größer, können mehr Daten
verschickt werden, der Host muss nicht so oft warten und erhält im besten Fall nur eine Bestätigungsnachricht. Des Weiteren werden vom Empfänger nur Pakete verarbeitet,
deren Sequenznummer auch im Fenster liegt. Weil Pakete im Internet verloren gehen
können, müssen diese unter Umständen mehrfach versendet werden. Darum wird für
jedes versandte Paket ein Timer, der so genannte Retransmissiontimer, gestartet. Trifft
vor Ablauf dieses Timers keine Bestätigung für das Paket ein, so wird es ein weiteres Mal
verschickt. Dies kann für alle Pakete solange wiederholt werden, bis die maximale Anzahl
an Sendewiederholungen erreicht ist, danach wird die Verbindung beendet. Der Grund
für die Sendewiederholung kann entweder im versandten Paket oder im verloren gegangenen Bestätigungspaket des Empfängers liegen. Verlorene Bestätigungen lösen sich durch
die Sendewiederholung der Daten auf. Deshalb wird für sie kein Retransmissiontimer gestartet und keine weitere Bestätigung erwartet. Die Wahl des Retransmissiontimers und
der maximalen Anzahl an Sendewiederholungen ist von der TCP-Implementierung ab-
13
1 Protokollübersicht
hängig und nicht in der Protokollspezifikation festgelegt. Der Retransmissiontimer wird
beispielsweise während der Verbindung ständig angepasst und variiert, er ist abhängig
von der Roundtriptime (RTT). Dies ist die Zeit, die vom Versenden der Nachricht bis
zum Eintreffen der Bestätigung vergeht. Zur Bestimmung der Fenstergröße und zum Update der Timer während der Verbindung existieren die Überlastmechanismen: slow start,
congestion avoidance, fast retransmit und fast recovery, die in [8], sowie in [7] genau
beschrieben werden. Durch slowstart und congestion avoidance tastet sich ein Sender an
die maximale Durchsatzfähigkeit des Netzes heran. Die Anzahl der versendeten Pakete
ohne Bestätigung wird schrittweise erhöht, bis ein Fehler in der Übertragung auftritt.
Fast retransmit ist eine Möglichkeit, durch die der Empfänger direkt fehlende Pakete
anfordern kann. Bei Empfang eines Paketes mit falscher Sequenznummer sendet der
Empfänger sofort eine doppelte Bestätigung, mit Bestätigungsnummer des erwarteten
Paketes. Dadurch muss der Sender mit dem wiederholten Senden nicht warten bis der
RTO abgelaufen ist.
Am Beispiel in Abbildung 1.8 soll das Timer- und Fenstermanagement nochmals verdeutlicht werden. Hier haben sich die Hosts auf einen Empfangspuffer von 3kB bei Host2
geeinigt. Host1 verschickt 3 Pakete, die zusammen der Fenstergröße entsprechen und wartet daraufhin auf eine Bestätigung. Diese trifft nicht vor Timerablauf ein, da das erste
Paket verloren ging. Also beginnt Host1 die Pakete ein zweites Mal zu verschicken (Zeitpunkt 4), während dessen die Bestätigung für alle 3 Pakete eintrifft. Host2 gibt mit dieser
Bestätigung an, dass sein Puffer voll ist und setzt die Fenstergröße auf Null. Nachdem
die übergeordnete Anwendung beginnt die Daten zu verarbeiten aktualisiert Host2 zum
Zeitpunkt 6 die Fenstergröße und Host1 setzt den Datenversand fort.
1.5.4 Verbindungsabbau
Auch der Verbindungsabbau läuft nach dem 3-Wege-Handshakeverfahren ab. Der Unterschied zum Aufbau der Verbindung liegt darin, dass ein einseitiger Abbau möglich ist.
Der Versand von Datenpaketen ist danach nur noch in eine Richtung möglich. Wurden
von einem Host alle Datenpakete versandt, so kann dieser den Abbau der Verbindung
mit einem FIN-Paket einleiten. Wie in Abbildung 1.9 zu sehen ist, wird ein Paket mit
gesetztem FIN-Flag wie jedes andere Datenpaket bestätigt. In diesem Fall wünscht auch
der Server einen Verbindungsabbau und schickt mit der Bestätigung (ACK-Flag) gleichzeitig ein FIN, welches wiederum vom Client bestätigt wird. Das Timermanagement ist
14
1 Protokollübersicht
H
O
S
T
1
fin, seq=x
fin, ack=x+1, seq=y
ack=y+1
H
O
S
T
2
Abbildung 1.9: TCP 3-Wege Verbindungsabbau
bei FIN-Paketen das gleiche wie beim Datenversand, bei Nichtbestätigung erfolgt ein
weiterer Versand. Da auch hier die Bestätigungsnachrichten nicht quittiert werden, startet der Host, der nach dem 3-Wege-Handshake das letzte ACK versendet, einen Timer.
Läuft dieser aus, so wird der Empfang durch die Gegenstelle angenommen und die Verbindungsinformationen werden aus dem Speicher gelöscht. Nach Versand und Empfang
aller Daten ist es nicht vorgeschrieben, dass die Verbindung abgebaut werden muss. Sie
bleibt solange bestehen, wie die Hosts die Verbindungsdaten im Speicher behalten. In
der Zeit belegt das die Ressourcen der Verbindungsteilnehmer und es kann jeder Zeit mit
dem Versenden von Daten fortgefahren werden, ohne die Verbindung neu aufzubauen.
15
2 Angriffe auf Internetverbindungen
Im Folgenden soll auf verschiedene Angriffe auf TCP-Verbindungen eingegangen werden,
da mit dem zu entwickelnden Modul das Ziel verfolgt wird diese abzuwehren. Die Angriffe
teilen sich in drei Kategorien.
• angriffsvorbereitende Informationsgewinnung
• Denial of Service (DoS) Attacken, zur Blockierung eines angebotenen Dienstes
• Angriffe auf einzelne TCP-Verbindungen
2.1 Informationsgewinnung
Zur reinen Informationsgewinnung dienen die so genannten Adress- und Portscans. Hierbei werden bestimmte Pakete an Ports des möglichen Angriffziels oder mehreren Zielen
in einem Netzwerk gesendet. Erhält man eine Antwort, so hat man eine mögliche Angriffsstelle beim Ziel gefunden. Anhand der Reaktion eines Ziels, lassen sich Rückschlüsse auf das verwendete Betriebssystem, die Sicherheitseinstellungen und den Status der
Ports ziehen. Bekannte Sicherheitslücken können somit in folgenden Angriffen gezielt
ausgenutzt werden. Portscans können eingeteilt werden in Stealthscans und Half open
Portscans.
Bei ersteren findet keine im Protokoll spezifizierte Kommunikation zwischen Angreifer
und Opfer statt. Der Angreifer schickt ein beliebiges Paket an einen Port des Opfers,
wartet auf eine Antwort und wertet diese ohne weitere Kommunikation aus. Die gesendeten Pakete unterscheiden sich hinsichtlich der gesetzten Flags im TCP-Header. Als
populäre Scans sind folgende zu nennen:
• FIN-Scan: Ein Paket mit gesetztem FIN-Flag wird an einen Port des Opfers geschickt.
• Xmas-Scan: Bei dieser Art des Scans sind mehrere Flags (FIN, URG, PSH) gesetzt.
16
2 Angriffe auf Internetverbindungen
• Null-Scan: Alle Flags sind in diesen Paketen Null.
• Syn/Ack-Scan: Die Flags SYN und ACK sind bei diesem Scan gesetzt.
Die genannten Pakete sind als einzelne Pakete, in einer nicht bestehenden oder sich im
Aufbau befindlichen Verbindung, nicht korrekt. Beim Half open Portscan wird ein Verbindungsaufbau mit einem SYN-Paket initiiert. Bei Erhalt einer Antwort mit gesetztem
SYN und ACK Flag wird die Verbindung sofort wieder getrennt. Des Weiteren sendet
ein Server auch einige Informationen beim Verbindungsaufbau, so genannte Bannertexte.
In der Gesamtheit bilden diese Informationen also einen spezifischen Fingerabdruck des
Zielsystems und dienen der Planung der weiteren Vorgehensweise bei den Angriffen.
2.2 Denial of Service Attacken
Diese Art der Angriffe zielt darauf ab, die Verfügbarkeit von bestimmten Rechnern
oder Diensten einzuschränken. Dies kann beispielsweise die Nichterreichbarkeit einer
Internetseite zur Folge haben. Es gibt drei unterschiedliche Vorgehensweisen bei der
Durchführung dieser Angriffe:
• Bandbreitensättigung
• Ressourcensättigung
• Herbeiführung von Systemabstürzen
Bei der Bandbreitensättigung wird durch so genanntes Flooding mehr Verkehr im Zielnetzwerk erzeugt als dieses verarbeiten kann, wodurch reguläre Anfragen wegen der
Überlastung abgewiesen werden. Diesen Verkehr kann der Angreifer selbst erzeugen
oder erzeugen lassen, beispielsweise durch eine Smurf Attacke. Hier wird ein bestimmtes
ICMP-Paket, ein Pingrequest, an eine Broadcastadresse im Zielnetzwerk geschickt auf
das alle Rechner antworten. Die Antworten gehen an die Quelle des ursprünglichen Paketes. Da der Angreifer als Quelladresse die IP des Opfers angegeben hat, wird dieses
mit Paketen überflutet und regulärer Netzwerkverkehr ist nicht mehr möglich.
Unter Ressourcensättigung ist die Belegung von Systemressourcen auf dem Zielrechner
zu verstehen. Dies kann den Arbeitsspeicher oder auch die Rechenzeit des Zielsystems
betreffen. Die Anzahl Verbindungen, die ein Server gleichzeitig geöffnet haben kann, hängen vom Arbeitsspeicher oder den lokalen Einstellungen ab. Dies nimmt Synflooding als
17
2 Angriffe auf Internetverbindungen
Angriffspunkt, da für jede Verbindung Platz im Speicher benötigt wird. Bei diesem Angriff werden nun so viele Verbindungen initiiert, dass der Speicher des Opfers voll läuft
und reguläre Verbindungen abgewiesen werden müssen. Die TCP-Pakete mit gesetztem
SYN-Flag besitzen gefälschte und unterschiedliche IP-Adressen, diesen Vorgang nennt
man IP-Spoofing.
Für die bisher genannten Angriffe ist es für den Angreifer wichtig eine hohe Bandbreite zur Verfügung zu haben, um viele Pakete in kurzer Zeit schicken zu können. Diese
kann er auch durch den Einsatz eines verteilten Angriffs, dem so genannten Distributed
Denial of Service (DDoS) [3], erlangen. Bei diesem Vorgehen werden zunächst versteckte
Programme bei vielen Internetbenutzern installiert, die dann gleichzeitig mit dem Versand von Angriffspaketen starten. Ein weiterer Nachteil bei dieser Strategie ist, dass
diese Attacken sehr schwierig auf den eigentlichen Angreifer zurückzuverfolgen sind.
Die im Folgenden beschriebenen Angriffe können den Absturz des Zielrechners zur
Folge haben.
• Ping of Death: Hier wird ein überlanges ICMP-Paket verschickt, welches nach der
Reassemblierung einen Speicherüberlauf produziert und so beim Zielrechner einen
Absturz oder Neustart verursacht.
• Teardrop: Auch bei diesem Angriff ist die Fragmentierung des IP-Paketes nicht
korrekt.
• Landattacke: Bei dieser Attacke wir ein Paket verschickt, bei dem Quell- und ZielIP, sowie Ports gleich sind. Die Antwort auf dieses Paket trifft also umgehend
wieder beim Opfer ein. Dies kann zu einer Schleife führen, womit der Rechner
überfordert ist.
• WinNuke: Ein TCP-Paket mit gesetztem URG-Flag wird hier an den Port 139
eines Rechners geschickt, was bei älteren Betriebssystemen zum Systemabsturz
führt.
Die Nichtverfügbarkeit eines Dienstes durch hohes Verkehrsaufkommen muss allerdings
nicht immer kriminellen Ursprungs sein. Ein Beispiel dafür ist der Slashdot Effekt, bei
dem ein Internetdienst auf einer stark frequentierten Internetseite verlinkt ist. Ist dieser
Anbieter der ungewöhnlich hohen Nutzeranzahl, die dem Link folgen nicht gewachsen,
18
2 Angriffe auf Internetverbindungen
so werden seine Ressourcen oder Bandbreite gesättigt und weitere Anfragen müssen
zurückgewiesen werden.
2.3 Angriffe auf einzelne TCP-Verbindungen
Direkte Angriffen auf TCP-Verbindungen unterschiedet man in Manipulation der Verbindung durch ICMP Steuerpakete und Manipulation oder Übernahme der Verbindung
durch Generierung anscheinend korrekter TCP-Pakete. Zum einen kann durch ICMPNachrichten eine Verbindung zurückgesetzt werden, zum anderen ist es möglich verschieden Übertragungsparameter zu ändern. Diese Änderungen bewirken meist eine Reduzierung der Übertragungsgeschwindigkeit durch Änderung der Fragmentierung oder
der TCP-Fenstergröße. Der Angreifer muss zum Versand einer als regulär angesehenen
ICMP Nachricht nur die IPs und Ports der Verbindungsteilnehmer wissen, um diese korrekt im Datenbereich zu integrieren. Der Check auf die Verbindungsidentifikation fällt
somit beim Opfer positiv aus und die Übertragungsparameter werden angepasst.
Angriffe durch generierte TCP-Pakete basieren darauf, sich als Verbindungspartner
auszugeben. Dies passiert durch so genanntes Spoofing, bei dem der Angreifer zunächst
die Verbindungsinformationen ausspioniert und daraufhin Pakete mit den entsprechenden IPs und Ports der Zielverbindung verschickt. Des Weiteren muss sein Paket eine
gültige Sequenznummer besitzen, damit es vom Opfer anerkannt wird. Mit diesen generierten Paketen kann die Verbindung durch gesetztes RST-Flag zurückgesetzt werden
oder der Angreifer gibt sich weiterhin als Verbindungspartner aus um weitere Informationen zu erhalten oder weiterführende Manipulationen am Zielrechner durchzuführen.
2.4 Schutzmechanismen
Der Schutz vor Angriffen liegt in der Verantwortung des Anwenders oder Netzwerkadministrators, deren Einsatzmittel hierbei Firewalls und Systeme zum Aufspüren von
Eindringlingen (Intrusion Detection System - IDS) sind. Eine Firewall lässt aufgrund
bestimmter Regeln den Netzwerkverkehr zu oder blockiert ihn. Sie werden in Paketfilter und Firewalls auf Anwendungsebene unterschieden [16]. Paketfilter analysieren
die die Rohdaten und treffen ihre Entscheidung auf Grund Headerinformationen der
Netzzugangs-, Netzwerk- und Transportschicht. Dadurch ist es möglich, Pakete mit bestimmten Protokolltypen oder Adressen zu blockieren. Nutzen Paketfilter nicht nur Infor-
19
2 Angriffe auf Internetverbindungen
mationen über das aktuelle Paket, sondern auch über andere Pakete und Verbindungen,
so spricht man von zustandsbehafteten Paketfiltern. Firewalls auf Anwendungsebene
beschränken sich nicht auf die Headerauswertung, sondern analysieren zusätzlich die
Nutzdaten auf Anwendungsebene. Diese Firewalls werden auch Proxys genannt und verwalten die Internetverbindungen für den geschützten Bereich. Alle Verbindungen laufen
indirekt über den Proxy ab, er dient als Stellvertreter für die Hosts. Für einen guten
Schutz werden Firewallsysteme aus den unterschiedlichen Komponenten aufgebaut. ([9])
Eine Schwachstelle beim Einsatz von Firewalls ist der Anwender. Es sind umfangreiche
Konfigurationen nötig, um ein Netz gegen Angriffe zu sichern und gleichzeitig den regulären Netzwerkverkehr nicht einzuschränken. Besonders im Bereich der Privatanwender
gibt es keine Sicherheit, dass diese die Schutzmechanismen einsetzen. Unsichere Computer und Netze sind nicht nur Angriffsziele, sondern können von Angreifern auch für
ihre Zwecke ausgenutzt werden und als Ausgangspunkt für weitere Angriffen, wie die
Verbreitung von schädlicher Software und DDoS Attacken, dienen.
20
3 Global Positioning System
Das Global Positioning System (GPS) wird heutzutage in vielen Bereichen zur Positionsbestimmung und Navigation genutzt. So wird beispielsweise die Navigation in Seeund Luftfahrt, sowie im Auto durch GPS unterstützt. Grundlage zur Positionsbestimmung sind GPS-Satelliten in der Erdumlaufbahn, die stetig ihre aktuelle Position, beziehungsweise Positionsänderung und Uhrzeit ausstrahlen. Zur Positionsbestimmung genügt der Kontakt mit 3 Satelliten, handelsübliche GPS-Empfänger benötigen allerdings
die Signale von mindestens 4 Satelliten. Die aufbereiteten Informationen stellt der GPSEmpfänger über eine Schnittstelle im standardisierten Datenformat NMEA-0183 zur
Verfügung. Die ausgegebenen Informationen unterscheiden sich herstellerspezifisch, sollten aber einen Grundumfang bieten. Darin enthalten sind unter anderem die Uhrzeit,
die nördliche Breite, östliche Länge und die Geschwindigkeit. Zur Genauigkeit der Positionsbestimmung lässt sich sagen, dass in 90% der Messungen der Fehler geringer als
10m beträgt.
21
Teil II
Konzept
22
4 Anforderungen an das
Observermodul
In diesem Kapitel werden zunächst die allgemeinen Anforderungen an ein TCP Überwachungsmodul betrachtet. Unter Beachtung einiger Sicherheitsaspekte, sowie Bedingungen, die sich bei der Kommunikation über Ethernet ergeben, wird dann ein Konzept für
die Umsetzung diesen Moduls in VHDL erarbeitet.
Das Überwachungsmodul soll für jede TCP-Verbindung den Zustand überwachen und
nicht zugelassene TCP-Pakete filtern. Es ist somit ein zustandsbehaftetes Paketfilter und
beschränkt sich bei der Analyse auf die Netzwerk-, Internet- und Transportschicht des
TCP/IP-Referenzmodells. Da vom Aufbau bis zum Abbau der Verbinung unterschiedliche Paketarten zugelassen sind, muss ein Zustandsmodell entwickelt werden. Das in [12]
beschriebene Modell für eine TCP-Implementierung kann hierbei nicht übernommen
werden, da bei der Überwachung die Pakete beider Quellen verifiziert werden müssen.
Das Modul darf deshalb den Datenverkehr im Up- und Downstream nicht unabhängig
voneinander analysieren, da Pakete aus beiden Richtungen eine Zustandsänderung im
Modul hervorrufen können. Die reguläre Kommunikation über TCP und andere Protokolle darf dabei nicht behindert werden, es muss transparent für den Netzwerkverkehr
sein. Daraus ergeben sich Anforderungen an die Robustheit. Das Modul sollte in der
Lage sein so viele TCP-Verbindungen zu überwachen, wie es die vorhandene NetzinfraUpstream
H
O
S
T
1
Westen
Analyse
Downstream
Abbildung 4.1: Observer
23
Osten
H
O
S
T
2
4 Anforderungen an das Observermodul
struktur zulässt. Dabei darf es nicht abstürzen und muss gegen Angriffe geschützt sein.
Die Überwachung der TCP-Verbindungen kann nur gewährleistet werden, wenn keine
Pakete an dem Modul vorbei geleitet werden können. Dies ist notwendig, damit die Zustandsinformationen im Speicher konsistent mit dem Zustand der Verbindung bleiben,
keine korrekten Pakete verworfen werden und keine Angriffe unentdeckt bleiben.
24
5 Zustandsmodell zur
Verbindungsüberwachnung
Die TCP-Verbindung vom Verbindungsaufbau über den Datenaustausch bis zum Verbindungsabbau läuft bei jedem Host nach dem Modell einer Zustandmaschine ab. Bestimmte Ereignisse, eintreffende Pakete oder Befehle von der Anwendungsschicht, führen
jeweils in einen Folgezustand. Die Zustandsänderungen sind in dem Überwachungsmodul hingegen abhängig von den Paketen im Up- und Downstream, wobei es für die
Verifikation wichtig ist aus welcher Richtung die Pakete kommen. Wird beispielsweise
die Verbindung einseitig abgebaut, so können weiterhin Datenpakete aus der anderen
Richtung eintreffen. Pakete im Downstream kommen in der folgenden Betrachtung aus
dem Westen und Pakete im Upstream kommen aus dem Osten, wie es in Abbildung 4.1
veranschaulicht ist. Die im Folgenden erörterten Verbindungszustände werden mit den
Verbindungsdaten abgespeichert und stellen nicht die Zustände des Überwachungsmoduls dar.
5.1 Verbindungsaufbau
In Abbildung 5.1 ist das Zustandsmodell für den Verbindungsaufbau vereinfacht dargestellt und zeigt nur Ereignisse, die einen Zustandswechsel zur Folge haben. Beim ersten
Paket zum Aufbau einer TCP-Verbindung ist das SYN-Flag gesetzt. Der Verbindungsstatus ist dann, abhängig von der Richtung, wsyn_rcv oder esyn_rcv. Trifft nach Empfang
eines SYNs ein weiteres aus der entgegengesetzten Richtung ein, wird die Verbindung
synchron von beiden Seiten aus geöffnet und der Folgezustand ist sync_open. Nach dem
3-Wege-Handshake Verfahren müssen die Synchronisationspakete aus beiden Richtungen
bestätigt werden. Trifft eine Bestätigung aus dem Westen ein, so wird in den Zustand
eack_wait gewechselt und auf eine Bestätigung aus dem Osten gewartet. Durch die
letzte Bestätigung befindet sich die Verbindung aus Sicht des Überwachungsmoduls im
Zustand established. Das bedeutet nicht, dass die Verbindungsteilnehmer sich auch in
25
5 Zustandsmodell zur Verbindungsüberwachnung
esyn
no state
esyn_rcv
wsyn
wsyn
esyn
wsyn_rcv
sync_open
wsyn_ack
esyn_ack
wfin
efin
wsyn_ack, ack esyn_ack, ack
eack_wait
wack_wait
wrst
erst
esyn_ack
wfin
established
wsyn_ack
efin
erst
wrst
efin
wfin_rcv
wrst
wfin
wfin
wrst
efin
erst
wrst_rcv
efin_rcv
erst
erst_rcv
Abbildung 5.1: Zustandsmodell; Bereich Verbindungsaufbau
26
5 Zustandsmodell zur Verbindungsüberwachnung
diesem Zustand befinden, da die Pakete auf dem weiteren Weg zum Ziel verloren gehen können. Das ist wichtig für die Verifikation der Pakete, denn deshalb müssen im
Zustand established weiterhin Synchronisations- und Bestätigungspakete weitergeleitet
werden, um die TCP-Verbindung nicht zu behindern. Beim Verbindungsaufbau kann es
vorkommen, dass die Verbindung zurückgesetzt oder beendet wird. Das geschieht durch
den Versand von Paketen mit gesetztem RST oder FIN Flag. Daraufhin wird in die im
Zustandsdiagramm gezeigten Zustände gewechselt.
5.2 Datenversand
Befindet sich die Verbindung im Zustand established, so bewirken nur Pakete mit gesetztem FIN oder RST-Flag eine Zustandsänderung. Die Folgezustände sind dann wfin_rcv
bzw. efin_rcv oder wrst_rcv bzw. erst_rcv, und sind abhängig von der Richtung aus der
das Paket eingetroffen ist. Reguläre Datenkommunikation läuft nach dem in Abschnitt
?? beschriebenem Verfahren ab und hat keine Zustandsänderung zur Folge. Die Verbindungsdaten im Speicher werden dennoch aktualisiert, um die Verifikation der Sequenzund Bestätigungsnummern eintreffender Pakete vornehmen zu können.
5.3 Verbindungsabbau
Hat ein Host keine weiteren Daten zu versenden, so kann er den Verbindungsabbau mit
Versand eines FIN-Paketes einleiten. Die Richtung des FIN-Paketes muss beachtet werden, da der Verbindungsabbau einseitig möglich ist, und in dem Fall der Datenverkehr
in die andere Richtung weiter läuft. Trifft ein FIN Paket vom westlichen Host ein, so
wird in den Zustand wfin_rcv gewechselt. Analog gilt dies für ein FIN aus dem Osten
und dem Folgezustand efin_rcv. Nach Bestätigung des FINs (w-/elack) werden Daten
nur noch aus einer Richtung akzeptiert und im Zustand wfin_wait bzw. efin_wait auf
das FIN aus dem Westen bzw. Osten gewartet. Wird auch der Abbau der verbleibenden Richtung mit dem entsprechenden FIN eingeleitet, so muss dieses mit einem letzten
ACK-Paket bestätigt werden. Aus dem Zustand elack_wait oder wlack_wait wird dann
in den Zustand timed_wait gewechselt. Falls die letzte Bestätigung auf dem Weg zum
Host verloren geht und der andere Host eine Sendewiederholung für das FIN durchführt,
so wird das in diesem Zustand noch weitergeleitet. Da beide Hosts zu diesem Zeitpunkt
keine Daten mehr zu senden haben und alle Daten korrekt empfangen haben, werden die
Verbindungsdaten nach Ablauf eines Timers aus dem Speicher gelöscht. Der Fall eines
27
5 Zustandsmodell zur Verbindungsüberwachnung
wrst
efin_rcv
erst
established
efin
wfin
wfin
efin
wfin_rcv
sync_close
wlack
elack
wsyn_ack, ack esyn_ack, ack
wfin_wait
efin_wait
wrst
erst
erst
wfin
elack_wait
wrst
elack
wlack
timed_wait
wrst
efin
wlack_wait
wrst
erst
erst
wrst_rcv
erst_rcv
Abbildung 5.2: Zustandsmodell; Bereich Verbindungsabbau
28
5 Zustandsmodell zur Verbindungsüberwachnung
synchronen Verbindungsabbaus wird, wie in Bild 5.2 zu sehen, mit dem Übergangszustand sync_close abgearbeitet.
Der Verbindungsabbau kann auch durch RST-Pakete ausgelöst werden. In dem Fall
wird ein Handshake durchgeführt. Nach Verifikation des eintreffenden Resets wird in die
Zustände wrst_rcv oder erst_rcv gewechselt. Diese Zustände ähneln dem Zustand timed_wait, denn hier werden die Verbindungsdaten auch nach dem Timerablauf gelöscht.
Wenn ein oder beide Verbindungsteilnehmer ausfallen und das Modul die Verbindungsdaten nicht mehr aktualisiert, müssen die Verbindungsinformationen manuell aus dem
Speicher gelöscht werden. Für diesen Zweck muss ein konfigurierbarer Timer implementiert werden.
5.4 Benötigte Paketinformationen
Für die Analyse der Pakete und Verwaltung der Verbindungen werden Informationen
benötigt. Welche Paketinformationen ausgelesen werden müssen, wird in diesem Kapitel beschrieben. Hierbei wird sich nicht nur auf die aus den Grundlagen bekannten
Headerinformationen beschränkt, es werden zusätzlich GPS-Daten der Verbindungsteilnehmer bereitgestellt. Diese sind als Optionen im IP-Header enthalten (vgl. Abbildung
1.3). Durch die Benutzung dieser Informationen als ein zusätzliches Verifikationsmerkmal soll Angriffe durch IP-Spoofing verhindern. Die benötigten Informationen werden
in 2 Kategorien eingeteilt. Zum einen gibt es die Paketinformationen, die aus dem eintreffenden Paket ausgelesen werden müssen um das Paket zu verifizieren. Zum anderen
gibt es die Verbindungsinformationen mit dem aktuellen Status, die zur Verwaltung abgespeichert werden und sich aus den Paketinformationen des Westens und des Ostens
zusammensetzen. Die auzulesenden Informationen umfassen Headerbereiche der Internetund Transportschicht.
5.4.1 Informationen aus dem IP-Header
Aus dem IP-Header müssen die in Bild 5.3 gezeigten Informationen ausgelesen werden. Die Länge des gesamten Paketes wird benötigt, um spätere Berechnungen mit den
Sequenz- und Bestätigungsnummern durchführen zu können. Um die Länge der reinen
Nutzdaten zu erhalten muss dieser Wert um die IP- und TCP-Headerlänge erniedrigt
29
5 Zustandsmodell zur Verbindungsüberwachnung
31
24
Version
IHL
16
8
Type of Service
Packet Length
Identification
TTL
0
Flags
Protocol
Fragment-Offset
Header Checksum
Source IP Address
Destination IP Address
Options
Padding
Abbildung 5.3: Benötigte Informationen aus dem IP-Header
werden. Da eine TCP-Verbindung sich durch das Quadrupel aus IP-Adresse und Port
der Teilnehmer identifiziert, müssen hier die Quell- und Zieladresse des IP-Paketes ausgelesen werden. Als weiteres Identifikationsmerkmal sollen die GPS-Ortsinformationen
herangezogen werden. Die GPS-Daten der Quelle sind im Optionsteil des IP-Headers gespeichert. Wird ein Paket von Westen nach Osten geschickt, so sind die Daten des westlichen Hosts enthalten. Um diese Informationen auch vom anderen Host nutzen zu können,
muss auf ein Paket aus dem Osten gewartete werden. Die zur Verbindungsverwaltung
abzuspeichernden Informationen sind die IP-Adressen, sowie die GPS-Informationen der
Teilnehmer.
5.4.2 Informationen aus dem TCP-Header
31
24
16
Source Port
8
0
Destination Port
Sequence Number
Acknowledgement Number
Offset
Reserved
Flags
Window
Checksum
Urgent Pointer
Options
Padding
Data
Abbildung 5.4: Benötigte Informationen aus dem TCP-Header
Die im TCP-Header angegebenen Quell- und Zielportnummern sind Bestandteil der
benötigten Informationen für eine eindeutige Identifikation der TCP-Verbindung und
müssen deshalb ausgelesen und zur Verbindungsverwaltung abgespeichert werden. Die
Sequenz- und Bestätigungsnummern werden zur Paketverifikation benötigt, denn nur
Pakete mit Nummern in einem bestimmten Bereich können eine Veränderung der Verbindungsinformationen bewirken. Dieser Bereich ist durch das Fenstermanagement gege-
30
5 Zustandsmodell zur Verbindungsüberwachnung
ben, weshalb es wichtig ist die Fenstergröße aus dem TCP-Header auszulesen. Die wichtigsten Informationen zur Steuerung der TCP-Verbindung sind die TCP-Flags, die die
Grundlage für die Zustandsänderungen bilden aber nicht zur Verbindungsverwaltung abgespeichert werden müssen. Die Portnummern, die Sequenz- und Bestätigungsnummern,
sowie die Fenstergröße beider Verbindungsteilnehmer sind hingegen Bestandteil der abzuspeichernden Verbindungsdaten. Die auszulesenden Headerfelder sind in Abbildung
5.4 nochmal dargestellt.
31
6 Hardwarekonzipierung
Überwachungsmodul
Data_path_west_out
Data_path_logic
to_out valid
Data_path_east_in
Frame
next
info
uBuffer_stat
Up_Down_Arbiter
u_rcv
rdy
up_down
Mem_if_in
Protocol_check_logic
Memory
Mem_if_out
d_rcv
dBuffer_stat
next
Data_path_west_in
Frame
valid to_out
info
Data_path_logic
Data_path_east_out
Abbildung 6.1: Aufbau des Überwachungsmoduls, Schnittstellen zwischen den einzelnen
Modulen
Das Überwachungsmodul, mit seinen Ein- und Ausgängen im Datenpfad, wird in mehrere Komponenten zerlegt, die unterschiedliche Teilfunktionen realisieren. Diese Vorgehensweise hat den Vorteil, dass man einzelne Komponenten wiederverwenden oder gegen
optimiert Versionen mit derselben Funktionalität austauschen kann. Ein weiterer Vorteil
ist die schrittweise Verifikation der Komponenten, da man beim Testen von kleineren
Funktionseinheiten Fehler schneller findet und behebt.
Die Komponenten des Überwachungsmoduls sind in Abbildung 6.1 gezeigt und haben
die im Folgenden beschriebene Aufgaben. Die Datenpfadlogik extrahiert die benötigten
Informationen aus den Paketen und speichert diese bis sie an die Protokollüberwachungslogik weiter gegeben werden. Die Pakete selbst werden hier auch zwischengespeichert,
32
6 Hardwarekonzipierung
Data_path_logic
crit
next Frame info Frame_info_valid
To_protokoll_FSM
rcv
To_out
wr_en
data_in
wr_addr
InfoFIFO
rd_en
data_out
rd_addr
FrameInfo_FSM
Data_path_in
Push_frame
FSM
wr_en
data_in
wr_addr
DatenFIFO
rd_en
data_out
rd_addr
To_out_FSM
Data_path_out
Abbildung 6.2: Aufbau der Datenpfadlogik
bis sie entweder verworfen oder weitergeleitet werden. Die Protokollüberwachungslogik
verifiziert die Pakete anhand der bereitgestellten Paketinformationen und im Speicher
abgelegten Verbindungsinformationen und gibt den Versand- oder Löschauftrag an die
Datenpfadlogik weiter. Da ein einzelnes Modul den Up- und den Downstream überwacht, wird ein Arbitrierer benötigt, der die Protokollüberwachungslogik dem jeweiligen
Stream zuteilt. Durch Verknüpfung dieser Module über definierte Schnittstellen wird die
Gesamtfunktionalität des Überwachungsmoduls erreicht.
6.1 Datenpfadlogik
6.1.1 Schnittstellen der Datenpfadlogik zu anderen Modulen
Die Ein- und Ausgänge der Datenpfadlogik sind in der Tabelle 6.1 aufgeführt und werden im Folgenden nochmals erläutert. Die Schnittstellen des Überwachungsmoduls im
Datenpfad, über die die Pakete empfangen und versendet werden, sind direkt mit dem
Datenpfadmodul verbunden. Ein Datenpfadmodul besitzt nur einen Ein- und einen Ausgang für die Daten, da jeweils ein Modul im Up- und Downstream die Pakete aus dem
Westen bzw. dem Osten verarbeitet. Die Daten treffen byteweise mit zwei zusätzlichen
Steuerleitungen an dem Modul ein und werden in der gleichen Weise wieder verschickt.
Über weitere Schnittstellen kommuniziert das Modul mit dem Arbitrierer und der Protokollüberwachungslogik. Über eine einfache Leitung signalisiert die Datenpfadlogik dem
33
6 Hardwarekonzipierung
Port
Richtung
Aufgabe
clk
in
Taktsignaleingang
rst
in
asynchroner Reset
data_in
in
Eingangsdatenstrom
observer_next
in
Protokollüberwachung fordert Paketinformationen an
observer_send
in
verwerfen/versenden des Paketes
buffer_crit
out
meldet kritischen Bufferfüllstand an Arbitrierer
arbiter_rcv
out
meldet empfangenes Paket an Arbitrierer
data_out
out
Ausgangsdatenstrom
frame_info_out
out
Übergabe der Paketinformationen an die
Protokollüberwachung
frame_info_valid out
Handshake mit Protokollüberwachung
Tabelle 6.1: Schnittstellen der Datenpfadlogik
Arbitrierer den Empfang eines Paketes und über eine weitere das Erreichen eines kritischen Zwischenspeicherfüllstandes. Über ein einfaches Signal fordert die Protokollüberwachungslogik neue Paketinformationen an, die dann parallel über eine weitere Schnittstelle
übergeben und mit einer Steuerleitung als gültig signalisiert werden. Das Versenden oder
Verwerfen des Paketes wird über eine zwei Bit breite Schnittstelle initiiert.
6.1.2 Aufgaben und Konzept der Datenpfadlogik
Die Aufgabengebiete diesen Moduls umfassen das Auslesen der Paketinformationen, das
Zwischenspeichern der Pakete, die Bereitstellung der Paketinformationen, sowie das Versenden oder Verwerfen der Pakete. Da diese Aufgaben unabhängig voneinander ablaufen, werden in dem Modul mehrere Zustandsmaschinen eingesetzt. Für das Auslesen
der Paketinformationen sind zwei Zustandmaschinen zuständig, eine für den Bereich der
Netzwerkschicht und eine für den Bereich der Internet- und Transportschicht.
Wenn ein Paket eintrifft, beginnt die erste mit der Verarbeitung des MAC-Headers, wie
in Abbildung 6.3 gezeigt. Sie bearbeitet MPLS- und VLAN-Bereiche, entscheidet ob es
sich um ein IP-Paket handelt und ließt das erste Byte des IP-Headers aus, um der zweiten Zustandsmaschine die IP-Headerlänge bereitzustellen. Ein Paket ohne VLAN und
MPLS-Bereiche wird folgendermaßen abgearbeitet. Trifft ein Paket ein, wird zunächst
in den Zustand wait_type gewechselt und auf das erste Byte der Typbeschreibung gewartet. Stimmt das Byte mit der Beschreibung für IP überein, so wird im nächsten
34
6 Hardwarekonzipierung
data = 0x81
vlan_2nd
data = 0x88
wait_type
mpls_2nd
data = 0x00
sof = ‚1'
data = 0x08
mac_type_2nd
get_mpls_3rd
idle
data \= 0x00
wait_ihl
get_mpls_2nd
get_mpls_4th
get_mpls_1st
Abbildung 6.3: Zustandsmaschine zur Bearbeitung der Netzwerkschicht
Zustand mac_type_2nd das zweite Byte verglichen. Wenn das Protokoll der Internetschicht IP ist, wird im Zustand wait_ihl auf das erste Byte des IP-Headers gewartet und
die Headerlänge ausgelesen. Ergibt die Auswertung des Typfeldes, dass kein IP-Paket
im Datenbereich enthalten ist, so wechselt die Zustandsmaschine wieder nach idle.
Die zweite Zustandsmaschine beginnt mit der Verarbeitung, wenn die erste festgestellt hat, ob ein IP-Paket enthalten ist oder nicht. Enthält das eingehende Paket kein
IP-Paket, also auch keinen TCP-Bereich, so wird in den Zustand got_info gewechselt
und die Paketinformationen werden in einen Zwischenspeicher geschrieben. Ist in den
Nutzdaten ein IP-Paket enthalten, beginnt die Zustandsmaschine mit dem Auslesen der
Informationen aus dem IP-Header, wie in der Abbildung 6.4 durch den Wechsel in den
Zustand get_ip_information dargestellt. Die abgebildete Zustandsmaschine stellt den
Ablauf beim Auslesen der Pakete vereinfacht dar und enthält in den Zuständen weitere
Zustände zum Auslesen der Headerinformationen. Alle Zustände und Zustandsübergänge, mit der Zuordnung zur Abbildung, sind in Tabelle 6.2 aufgeführt.
Die wichtigsten Übergänge und Abhängigkeiten sind jedoch in der Abbildung zu sehen. Wenn das IP-Paket ein TCP-Segment im Nutzdatenbereich enthält, werden im
35
6 Hardwarekonzipierung
Zustand lt. Abbildung
idle
Zustand
idle
Ereignis
is IP
Folgezustand
wait_length
is not IP got_information
get_ip_information
wait_length
get_length2nd
wait_protocoll
isTCP
wait_ip
isICMP
wait_icmp
isOther
got_info
IHL=20
get_ports
IHL>20
get_ip_opt
wait_ip
get_src_ip2nd-4th
get_dst_ip1st-3rd
get_dst_ip4th
get_ip_opt
get_opt_len
wait_next_opt
get_gps
get_gps1st-8th
wait_end_ih
get_tcp_information
get_ports
get_src_p2nd
get_dst_p1st
get_dst_p2nd
get_seq_num1st-4th
get_ack_num1st-4th
tcp_offset
get_flags
get_window
get_window2nd
get_icmp_information
got_info
wait_icmp
wait_icmp_data
if IP
get_icmp
if not IP
got_info
get_icmp
got_info
wait_length
got_info
reset_info
idle
Tabelle 6.2: Datenpfadlogic, rcv info fsm
36
6 Hardwarekonzipierung
get_ip_information
isTCP
isICMP
isIP
isIP
get_tcp_information
noTCP
idle
get_icmp_information
noIP
noIP
got_info
Abbildung 6.4: Vereinfachte Zustandsmaschine: Auslesen der Paketinformationen
Zustand get_ip_information nacheinander die in Kapitel 5.4.1 erarbeiteten Informationen ausgelesen. Diese Entscheidung wird im Zustand wait_protocol getroffen, wo der
Protokolltyp des transportierten Paketes ausgelesen wird. Wenn die Typnummer mit
der für TCP übereinstimmt, werden zunächst die IPs, dann die IP-Optionen ausgelesen und vorhandene GPS-Informationen abgespeichert. Bei einem ICMP-Paket wird in
den Zustand get_icmp_information gewechselt, auf das Ende des IP-Headers gewartet
und die ICMP-Bereiche werden abgearbeitet. Ist die Ursache für die Internetkontrollnachricht ein IP-Paket und sind somit der IP-Header plus 64Bit des Originalpaketes im
Anhang enthalten, wird die neue Headerlänge ausgelesen und wieder in den Zustand
get_ip_information gewechselt. Beim Auslesen der Paket-Informationen aus dem Datenbereich des ICMP-Paketes muss man darauf achten, die Quell- und Zieladressen zu
vertauschen, da das Paket ursprünglich aus der anderen Richtung gekommen sein muss
und dies für die späteren Verifikation wichtig ist. Ist in den IP-Nutzdaten ein TCPPaket enthalten und das Ende des IP-Headers erreicht, wird mit dem Auslesen der in
Kapitel 5.4.2 beschriebenen Informationen fortgefahren. Nach Erhalt des zweiten Bytes
der Empfangfenstergröße im Zustand get_window2nd wechselt die Zustandsmaschine zu
got_info und schreibt die Paketinformationen in einen Zwischenspeicher.
Die Zustandsmaschine zum Zwischenspeichern der eintreffenden Pakete enthält zwei
Zustände, wie in dem Bild 6.5 gezeigt. Wenn die Steuerleitung sof den Anfang eines
Paketes kennzeichnet, beginnt die Zustandsmaschine das Paket byteweise in einem Zwischenspeicher abzulegen und wechselt von idle nach push_frame. Dort kopiert sie die
37
6 Hardwarekonzipierung
sof = 1
idle
error
push_frame
eof = 1
Abbildung 6.5: FSM: Datenpfadlogik, Zwischenspeichern der Pakete
observer_next = 1
idle
Info_wait
Push_info
Abbildung 6.6: FSM: Datenpfadlogik, Bereitstellen der Paketinformationen
eintreffenden Bytes so lange in den Zwischenspeicher, bis die Steuerleitung eof das Ende
des Paketes kennzeichnet, oder ein Fehler (error) auftritt. Die Speicherung der eintreffenden Pakete erfolgt nur, wenn im Zwischenspeicher noch Platz für ein Paket maximaler
Länge ist. Dadurch muss die Datenpfadlogik mit der Empfangssignalisierung an den
Arbitrierer nicht warten bis das gesamte Paket eingetroffen ist und die Protokollüberwachungslogik kann die Bearbeitung der Paketinformationen während des Empfangs der
Nutzdaten durchführen. Durch diese Vorgehensweise wird der Zwischenspeicher zwar
nicht komplett ausgelastet, allerdings wird dadurch die Verzögerung der Pakete im Überwachungsmodul geringer.
Wenn die Protokollüberwachungslogik neue Paketinformationen anfordert, so bearbeitet dies die Zustandsmaschine info_to_obeserver, deren Zustandsdiagramm in Abbildung 6.6 gezeigt ist. Zunächst werden die Paketinformationen im Zustand info_wait
aus dem Zwischenspeicher gelesen und danach im Zustand push_info an die Protokollüberwachungslogik übergeben. Nachdem die Gültigkeit der Daten mit einer zusätzlichen
Steuerleitung (info_valid) gekennzeichnet wurde, wechselt die Zustandsmaschine wieder
in den idle Modus.
Das Verwerfen oder Versenden von Paketen wird von der Protokollüberwachungslogik
38
6 Hardwarekonzipierung
Transmit_wait
Discard_wait
send
discard
idle
eof
eof
transmit
discard
Abbildung 6.7: FSM: Datenpfadlogik, Versenden/Verwerfen des Paketes
über die to_out Steuerleitungen initiiert und von der frame_output Zustandsmaschine
bearbeitet. Das Zustandsdiagramm ist in Abbildung 6.7 gezeigt und enthält zwei Richtungen der Abarbeitung, eine für das Versenden in Richtung transmit, die andere für das
Verwerfen der Pakete. In beiden Richtungen wird ein Paket aus dem Zwischenspeicher
gelesen, in den Zuständen wait_transmit und transmit an den Ausgang weitergeleitet
und in den Zuständen wait_discard und discard verworfen.
Die Zwischenspeicher für die Pakete und die Paketinformationen haben die Funktion eines FIFOs (first in first out), damit die Reihenfolge der Pakete im Stream sich
nicht verändert. Des Weiteren ist die Zuordnung der bearbeiteten Informationen zu den
entsprechenden Paketen durch die Nutzung des DatenFIFO und InfoFIFO, wie in Abbildung 6.2, gewährleistet, denn die ersten Informationen im InfoFIFO gehören zu dem
ersten Paket im DatenFIFO.
6.2 Up-Down-Arbitrierer
6.2.1 Schnittstellen des Arbitrierers zu anderen Modulen
Der Arbitrierer besitzt Schnittstellen zu den Modulen der Datenpfadlogik, sowie zur
Protokollüberwachungslogik. Je zwei Steuersignale von der Datenpfadlogik des Up- und
Downstreams informieren den Arbitrierer über den Empfang eines Paketes und den Zustand des Datenspeichers. Dadurch ist es möglich auf einen kritischen Datenspeicherfüllstand zu reagieren und den entsprechenden Stream bei der Arbitrierung zu bevorzugen.
39
6 Hardwarekonzipierung
Up_down_Arbiter
push
logic
uTcp_rcv
dTcp_rcv
counter
Up
down
fifo
rdy
logic,
algorithm
Up_down(1 downto 0)
uBufferfull
dBufferfull
Abbildung 6.8: Aufbau des Arbitrierers
Richtung
Port
Aufgabe
clk
in
Taktsignaleingang
rst
in
asynchroner Reset
uRcv
in
Paket im Upstream empfangen
dRcv
in
Paket im Downstream empfangen
uBufferfull
in
kritischer Bufferfüllstand im Upstream
dBufferfull
in
kritischer Bufferfüllstand im Downstream
observer_rdy
in
Bereitschaft der Protokollüberwachung
up_down
out
Bearbeitung des Up- oder Downstreams
Tabelle 6.3: Schnittstellen des Arbitrierers
Über eine Leitung signalisiert die Protokollüberwachungslogik, ob sie arbeitet oder bereit zur Bearbeitung eines neuen Paketes ist. Über einen zwei Bit breiten Ausgang weist
der Arbitrierer die Bearbeitung des Up- oder Downstreams an. Eine Übersicht der Ports,
deren Richtung und Bedeutung gibt die Tabelle 6.3.
6.2.2 Aufgabe und Konzept des Arbitrierers
Das Überwachungsmodul benötigt einen Arbitrierer, da die Protokollüberwachungslogik
die Paketeinformationen des Up- und Downstream bearbeitet, die eintreffenden Pakete
konkurrieren um Bearbeitungszeit. Die Aufgabe des Arbitrierers liegt darin die Bearbeitungsreihenfolge der Pakete so zu wählen, dass die Zwischenspeicher in den Daten-
40
6 Hardwarekonzipierung
observer_rdy = 1
paketspending > 0
idle
wait_busy
observer_rdy = 0
Abbildung 6.9: FSM: Arbitrierer
pfadlogiken nicht überlaufen und Pakete schon am Eingang verworfen werden müssen.
Das Ziel ist eine schnelle Bearbeitung der Pakete, um die Verzögerung zu minimieren.
Der Up- und der Downstream sind in diesem Modul gleichberechtigt und es wird keine
Richtung bevorzugt verarbeitet. Deshalb arbeitet der Arbitrierer nach dem Prinzip first
come first serve, wonach sich die Bearbeitung der Pakete nach der Reihenfolge ihres Eintreffens richtet, also die Pakete, die das Modul zuerst erreichen auch zuerst bearbeitet
werden. Sollte der Füllstand des Zwischenspeichers in einem der Datenpfadmodule einen
kritischen Wert erreichen, weicht der Arbitrierer von dem Prinzip ab und priorisiert Pakete aus dem kritischen Stream höher. Wird vorausgesetzt, dass die Pakete byteweise
mit jedem Takt eintreffen und die Mindestlänge der Pakete 60 Byte beträgt, so treffen
Paketinformationen in einem Stream mit einer Rate von 1/60 Takte ein. Da Up- und
Downstream bearbeitet werden müssen, beträgt die maximale zulässige Bearbeitungsdauer pro Paket 30 Takte, damit ein Speicherüberlauf auszuschließen ist.
Der Arbitrierer verwaltet Informationen über die Anzahl der Pakete, die noch bearbeitet werden müssen und über die Reihenfolge in der die Pakete an dem Modul eintreffen.
Zur Speicherung der Reihenfolge benutzt der Arbitrierer einen FIFO, in den eine Eins
geschrieben wird, wenn ein Paket im Upstream eintrifft und eine Null für ein Paket im
Downstream. Gleichzeitig erhöht er jeweils einen Zähler für Pakete des Up- bzw. Downstreams. Die Arbitrierung erfolgt nach dem folgenden Ablauf und ist in Abbildung 6.10
gezeigt. Wenn die Protokollüberwachungslogik bereit ist und zur Verarbeitung ausstehende Elemente im FIFO vorhanden sind, nimmt der Arbitrierer das erste aus dem
FIFO, legt die entsprechenden Signale am Ausgang an, erniedrigt den jeweiligen Zähler
und wechselt in den Zustand wait_busy (s.Abbildung 6.9). Der Arbitrierer wechselt wieder in den Zustand idle, sobal die Protokollüberwachungslogik den Bearbeitungsbeginn
signalisiert. Wenn der Speicherfüllstand einer Datenpfadlogik kritisch und die Protokollüberwachungslogik bereit zur Bearbeitung ist, wird ein Paket des entsprechenden
Streams in Auftrag gegeben. Voraussetzung dafür ist, dass noch zu bearbeitende Informationen für den Stream vorhanden sind, der entsprechende Zähler also nicht Null ist.
41
6 Hardwarekonzipierung
false
Arbiter_rdy
&counter>0
true
upstream
F(buffercrit)
false
downstream
false
Ucounter > 0
Up_down = down
Dcounter=Dcounter-1
true
false
Dcounter > 0
Up_down = up
Ucounter=Ucounter-1
true
Up_down = down
Dcounter=Dcounter-1
Up_down = Read(FIFO)
Counter = counter-1
Arbiter_rdy
true
Abbildung 6.10: Ablauf der Arbitrierung
Wenn ein Paket außer der Reihe bearbeitet wird, also nicht dem ersten Element im FIFO
entspricht, muss das Element später verworfen werden, wenn es an der Reihe wäre. Für
diesen Zweck werden zwei zusätzliche Zähler für die zu verwerfenden Pakete benötigt,
um die Reihenfolge und Anzahl mit den Paketen in den Datenpfadlogiken konsistent zu
halten.
6.3 Protokollüberwachungslogik
6.3.1 Schnittstellen der Protokollüberwachungslogik zu anderen
Modulen
Die Protokollüberwachungslogik ist das Kernelement des TCP-Überwachungsmoduls
und besitzt die in Tabelle 6.4 aufgeführten Schnittstellen zu allen weiteren Modulen. Sie
signalisiert dem Arbiter die Bereitschaft zur Bearbeitung eines Streams über eine Signal-
42
6 Hardwarekonzipierung
Port
Richtung
Aufgabe
clk
in
Taktsignaleingang
rst
in
asynchroner Reset
uframe_info
in
Paketinformationen Upstream
uframe_info_v
in
Handshake Upstream
dframe_info
in
Paketinformationen Downstream
dframe_info_v
in
Handshake Downstream
up_down
in
Anweisung vom Arbitrierer
mem_in_access_type
in
durchgeführter Zugriff auf Speicher
mem_in_key
in
Schlüssel zu den ausgegebenen Daten
mem_in_data
in
Daten
mem_in_dv
in
Handshake
mem_data_exists
in
Daten enthalten oder nicht
mem_ack_in
in
Handshake
unext
out
Anfordern von Informationen vom Upstream
usend
out
Versenden oder Verwerfen von Paketen
dnext
out
Anfordern von Informationen vom Downstream
dsend
out
Versenden oder Verwerfen
to_arbiter_rdy
out
signalisiere Bereitschaft
mem_out_access_type
out
Speicherzugriffstyp
mem_out_key
out
Schlüssel zu den Daten
mem_out_data
out
Daten
mem_out_dv
out
Handshake
mem_ack_out
out
Handshake
Tabelle 6.4: Schnittstellen der Protokollüberwachungslogik
43
6 Hardwarekonzipierung
leitung und erhält von ihm Informationen darüber, welcher Stream bearbeitet werden
soll. Zu den Datenpfadlogiken sind jeweils zwei Ausgangssignale vorhanden, über die
neue Paketinformationen angefordert werden und nach der Bearbeitung das Versenden
oder Verwerfen des Paketes eingeleitet wird. Es sind jeweils Eingänge zum Übernehmen
der Paketinformationen vom Up- bzw. Downstream vorgesehen. Zum Abspeichern der
Verbindungsinformationen besitzt die Überwachungslogik Schnittstellen zu dem Memorymodul. Über Accessleitungen wird die Zugriffsart auf den Speicher gesteuert, und mit
dem Schlüssel (key) ein bestimmter Datensatz angesprochen. Nach Anlegen der Daten
an den Datenleitungen wird die Gültigkeit von Zugriffstyp, Schlüssel und Daten über
eine Datavalidleitung signalisiert und vom Speichermodul über die ack-Leitung bestätigt. Daten vom Speicher erhält das Modul über die Eingänge Access, Key, Data und
Datavalid und quittiert den Empfang über eine weitere ack-Leitung. Bei einem Lesezugriff auf den Speicher signalisiert der über dataexists, ob ein entsprechender Datensatz
vorhanden ist oder nicht.
6.3.2 Aufgabe und Konzept der Protokollüberwachungslogik
Dieser Bereich des Überwachungsmoduls wertet die Paketinformationen aus und entscheidet, unter Verwendung der Verbindungsinformationen, über den weiteren Weg der
Pakete. Es werden nur TCP Pakete und ICMP Pakete, die durch ein TCP Paket ausgelöst wurden, kontrolliert, alle anderen werden ohne Kontrolle weiter gesendet. Die
Auswertung der Paketinformationen erfolgt in zwei Schritten, nach dem Zustandsmodell
in Abbildung 6.11, wobei entweder der Weg für die Bearbeitung des Upstream oder der
Weg für die Bearbeitung des Downstream gewählt wird. Das Modul wartet im Zustand
idle, solange es nicht durch den Arbitrierer zur Bearbeitung angewiesen wird. Trifft dieses
Ereignis ein, fordert die Protokollüberwachungslogik neue Paketinformationen von der
Datenpfadlogik des Up- bzw. Downstream an und wechselt in den Zustand uwait_info
bzw. dwait_info.
In diesem Zustand wartet das Modul bis gültige Paketinformationen an den Eingängen anliegen und beginnt daraufhin mit Tests auf Korrektheit, die schon anhand der
Paketinformationen durchgeführt werden können. Die erste Überprüfung bezieht sich
auf die IP-Adressen und verhindert Landattacken. Wenn die Quell-IP gleich der Ziel-IP
ist, signalisiert das Modul der Datenpfadlogik, dass das Paket verworfen werden soll und
wechselt zurück in den Zustand idle. Für den zweiten Test ist es notwendig, dass das
44
6 Hardwarekonzipierung
uwait_info
dwait_info
Updown = 11
Updown = 10
error
isTCP = true
error
idle
uwait_connection_info
isTCP = true
dwait_connection_info
Abbildung 6.11: FSM: Protokollüberwachungslogik
Modul Informationen über den IP-Bereich im Osten besitzt. Die Quell-IPs der Pakete
im Upstream müssen und die Quell-IPs der Pakete im Downstream dürfen nicht in dem
angegebenen Bereich liegen, damit sie weiter verarbeitet werden. Pakete mit falschen
Quell-IPs weisen auf einen Angriff hin, werden verworfen und das Modul wechselt wieder in den idle Zustand. Wenn das Paket diese beiden Tests besteht, wird eine Anfrage
an den Speicher gestartet und in den nächsten Zustand gewechselt. Die Überprüfung
der IP-Adressen ist in dem Funktionsdiagramm 6.12 zur Verifikation der Pakete zum
Entscheidungspunkt fit IP-Range zusammengefasst.
Als Schlüssel für die Speicheranfrage dient das Quadrupel aus IPs und Ports, da
dieses die TCP-Verbindung eindeutig identifiziert. Für die Verwaltung der Verbindungen
wird eine einheitliche Reihenfolge der Werte gewählt, um die Generierung von zwei
Schlüsseln für dieselbe Verbindung zu verhindern. Der Schlüssel wird einheitlich wie
in Abbildung 6.13 generiert. Dementsprechend wird bei der Schlüsselgenerierung für
die unterschiedlichen Streamrichtungen Quell- und Zieladressen, sowie Ports gewählt
werden.
In den Zuständen u- und dwait_connectioninfo wartet die Protokollüberwachungslogik
zunächst auf eine Antwort vom Speicher und überprüft danach die Paketinformationen.
Signalisiert der Speicher, dass zu dem angegebenen Schlüssel keine Daten existieren,
besteht keine entsprechende TCP-Verbindung. In den Paketinformationen werden daraufhin die Flags überprüft. Wenn das Paket ein SYN-Paket zum Verbindungsaufbau
ist, werden aus den Paketinformationen die bisher möglichen Verbindungsinformationen
gewonnen und die GPS-Daten, die Sequenznummer, sowie die Empfangsfenstergröße
des anderen Verbindungsteilnehmers mit Null initialisiert. Die Verbindungsdaten wer-
45
6 Hardwarekonzipierung
true
true
fit IP-Range
isTCP
false
send
false
true
true
dataexists
isICMP
false
isICMP
false
false
true
true
correctGPS
send
Case(connection_state)
Case(flags)
check
false
Flags = SYN
true
false
Connectioninfo = f(paketinfo)
Mem_write
discard
discard
passCheck
false
true
send
discard
Abbildung 6.12: Funktionsdiagramm: Überprüfung der Pakete
a)
b)
c)
95
63
West-IP
95
47
West-Port
63
Quell-IP
95
47
Quell-Port
15
47
Ziel-Port
0
Ost-Port
Ziel-IP
63
Ziel-IP
15
Ost-IP
0
Ziel-Port
15
Quell-IP
0
Quell-Port
Abbildung 6.13: a) allgemeiner Schlüssel zur Verbindungsidentifizierung b) Schlüssel für
Paket aus dem Westen c) Schlüssel für Paket aus dem Osten
46
6 Hardwarekonzipierung
seq_una
schon bestätigt
seq_next
noch nicht bestätigt
ack_num
seq_una + rcv_window
als nächstes erwartet
nicht erlaubt
seq_num
Abbildung 6.14: Aufteilung des Sequenznummernbereiches
den dann zu Schlüssel und Datenbereich geteilt und ein Schreibzugriff auf den Speicher
durchgeführt. Wenn das Paket kein SYN-Paket ist, wird der Datenpfadlogik signalisiert
es zu verwerfen.
Wenn Daten zu dem Schlüssel im Speicher vorhanden sind, besteht bereits eine TCPVerbindung und die Protokollüberwachungslogik übernimmt die Verbindungsdaten vom
Speicher. Beziehen sich die Paketinformationen auf ein ICMP-Paket, so werden die GPSDaten des Ziels mit den aktuell ausgelesenen GPS-Daten verglichen. Dies geschieht bei
ICMP-Paketen auf diese Weise, da die ausgelesenen Paketinformationen sich auf das
Originalpaket beziehen, das die ICMP-Nachricht auslöste und aus der entgegengesetzten Richtung kam. Sind die GPS-Daten nicht korrekt, wird das ICMP-Paket verworfen.
Die Überprüfung von TCP-Paketen teilt sich in mehrere Fälle auf und ist abhängig vom
Status der Verbindung und den Flags der aktuellen Paketinformationen, da in unterschiedlichen Verbindungsstadien unterschiedliche Pakete zugelassen sind, wobei Pakete
mit falschen GPS-Informationen immer verworfen werden. Pakete zum Versand der Daten und deren Bestätigung werden weiter geleitet, wenn die GPS-Informationen übereinstimmen, jedoch bewirkt nur eine Untermenge dieser Pakete eine Aktualisierung der Verbindungsinformationen. Diese Untermenge ergibt sich aus Paketen, die die im nächsten
Kapitel beschriebenen Sequenz- und Bestätigungsnummerntests bestehen. FIN-Pakete
hingegen werden nur weiter geleitet, wenn sie alle Tests bestehen.
Überprüfung der Sequenz- und Bestätigungsnummern
Da ein Teilnehmer einer TCP-Verbindung nur Pakete mit gültiger Sequenz- und Bestätigungsnummer akzeptiert darf auch nicht jedes Paket eine Aktualisierung der Verbindungsdaten im Überwachungsmodul auslösen. Deshalb verwaltet das Modul zwei Sequenznummernbereiche in den Verbindungsinformationen, jeweils einen für jede Richtung.
47
6 Hardwarekonzipierung
Wie in Abbildung 6.14 dargestellt, wird ein Sequenznummernbereich in vier Bereiche
unterteilt, die durch drei Zeiger begrenzt werden. Das aktuelle Sendefenster ergibt sich
aus den Bereichen noch nicht bestätigt und als nächstes erwartet. Der Zeiger seq_una
zeigt dabei auf die erste noch nicht durch den Empfänger bestätigte Sequenznummer
und begrenzt das Fenster nach unten hin. Der Zeiger seq_una + rcv_window zeigt auf
die letzte Sequenznummer im Fenster, wobei rcv_window die Empfangsfenstergröße des
Empfängers ist. Der Zeiger seq_next zeigt auf die als nächstes erwartete Sequenznummer
des Senders. Die Zeiger zur Verwaltung des Sequenznummernbereiches für eine Richtung
sind also abhängig von beiden Verbindungsteilnehmern, von der ersten noch nicht bestätigten Sequenznummer und der Empfangsfenstergröße des einen Hosts, sowie von der
als nächstes erwarteten Sequenznummer des anderen.
Die Aktualisierung des seq_una Zeigers hat eine Verschiebung des Sendefensters und
der akzeptierten Sequenznummern zur Folge. Damit dieser Zeiger aktualisiert wird, muss
die Sequenznummer des aktuellen Paketes (seq_num) im Bereich der als nächstes erwarteten sein und die Bestätigungsnummer (ack_num) im Bereich der noch nicht bestätigten. Das ist in der Abbildung noch einmal mit den gleichnamigen Zeigern verdeutlicht.
Pakete mit kleineren Sequenznummern als seq_next können keine neuen Verbindungsinformationen enthalten, weil die Sequenznummern fortlaufend gewählt werden und solche
Pakete somit älter sind. Pakete mit Bestätigungsnummern größer als seq_next würden
etwas bestätigen, was noch nicht versendet wurde und müssen als Fehler angesehen werden. Bei den Berechnungen für die Nummernüberprüfung muss darauf geachtet werden,
dass der Sequenznummernbereich kontinuierlich durchlaufen wird und danach wieder
von Null begonnen wird. Deshalb werden diese Berechnungen zu Modulo 232 durchgeführt. Für die Überprüfung der Nummern eines Paketes aus dem Osten müssen folgende
Gleichungen erfüllt werden. Die Sequenznummer seq_num des aktuellen Paketes liegt
im akzeptierten Bereich, wenn die Gleichung 6.1 und die Bestätigungsnummer ack_num
liegt im akzeptierten Bereich, wenn die Gleichung 6.2 erfüllt ist.
(seq_num−eseq_next) mod 232 ≤ (eseq_una+wwindow−eseq_next) mod 232 (6.1)
(ack_num − wseq_una) mod 232 ≤ (wseq_next − wseq_una) mod 232
(6.2)
In einigen Verbindungsstadien müssen die Sequenz oder Bestätigungsnummern nicht
nur in einem bestimmten Bereich liegen, sondern genaue Werte annehmen, um eine
Aktualisierung der Verbindungsinformationen zu bewirken. Befindet sich die Verbindung
im Zustand e- oder wsyn_rcv, so muss die Bestätigungsnummer eines Paketes aus der
48
6 Hardwarekonzipierung
anderen Richtung das Syn bestätigen. Empfängt das Modul ein korrektes FIN-Paket
zum Abbau der Verbindung, muss im folgenden Verbindungszustand e- oder wfin_rcv
überprüft werden, ob eine Bestätigung das FIN oder nur vorherige Datenpakete bestätigt.
In diesen beiden Fällen muss die Bestätigungsnummer folgender Gleichung genügen.
ack_num = seq_next
(6.3)
Wenn das Paket die Sequenz- und Bestätigungsnummerntest bestanden hat, wird der
Zeiger seq_una auf den Wert der aktuellen Bestätigungsnummer ack_num gesetzt.
seq_una = ack_num
(6.4)
Die Aktualisierung von seq_next ist abhängig von zwei Werten des Paketes. Zum einen
von der Sequenznummer seq_num und zum anderen von der Größe der Nutzdaten im
TCP-Paket, da die Byte der TCP-Daten fortlaufend nummeriert sind. Für die Aktualisierung von seq_next ergibt sich somit die Gleichung 6.5.
seq_next = seq_num + length
(6.5)
6.4 Speicherverwaltung
Das Modul zur Speicherverwaltung übernimmt die Aufgaben der Suche eines Eintrags,
das Speichern neuer Einträge und das Löschen von Einträgen. Des Weiteren wird in dem
Modul ein Algorithmus zur Alterung integriert, damit Einträge, die keine Aktualisierung
mehr erfahren, gelöscht werden. Die Verwendung eines zusätzlichen Moduls für diese Aufgaben hat den Vorteil, dass die Protokollüberwachungslogik andere Aufgaben während
der Speicherverwaltung abarbeiten kann. Ein Eintrag umfasst die in Abbildung 6.15 gezeigten Informationen und setzt sich aus den in Kapitel 5.4 erarbeiteten Headerbereichen
zusammen.
6.4.1 Die Wahl des Suchverfahrens
Bei der Datenverwaltung haben Sortier- und Suchalgorithmen ([14] eine große Bedeutung, da die Laufzeit für die Suche in den Daten bei zunehmender Datenmenge zunimmt.
Diese Zunahme ist abhängig von dem verwendeten Algorithmus und kann linear oder
auch logarithmisch sein. Bei der Speicherverwaltung sind nur die Suchverfahren von Bedeutung, da ein neues Element zwar einsortiert wird, der Algorithmus dafür aber auf der
49
6 Hardwarekonzipierung
31
24
16
8
0
key
wIP
wPort
eIP...
...eIP
ePort
wGPS
eGPS
data
wwindow
ewindow
Wseq_next
Eseq_next
Wseq_una
Eseq_una
Conn_state
T
Abbildung 6.15: Inhalt der Verbindungsinformationen
Suche der richtigen Stelle basiert. Sortierverfahren hingegen beschäftigen sich mit der
Sortierung von vorhandenen Mengen. Damit man ein Suchverfahren erfolgreich anwenden kann, muss ein eindeutiger Suchschlüssel definiert werden. Bei der Verwaltung von
TCP-Verbindungen wird dafür das Quadrupel aus den IP-Adressen und Portnummern
der Verbindungsteilnehmer gewählt, da das die eindeutige Kennung der TCP-Verbindung
ist. Im Folgenden werden zwei Suchverfahren im Hinblick auf die Verwendung zur Speicherverwaltung aufgezeigt.
Sequentielle Suche
Die Datensätze werden bei diesem Verfahren in einem Feld organisiert, wobei keine sortierte Menge vorhanden sein muss und neue Elemente an das Ende geschrieben werden.
Das Abspeichern benötigt zunächst nur ein Zugriff auf den Speicher, da die Adresse des
letzten Elementes vorhanden ist. Da keine Einträge mit demselben Schlüssel im Speicher
vorhanden sein dürfen, muss vor dem Abspeichern die vorhandene Menge durchsucht werden. Die Suche ist bei diesem Verfahren allerdings linear von der Anzahl der Elemente
abhängig. Eine erfolglose Suche, wie es bei Einfügen eines neuen Elementes der Fall ist,
benötigt bei N Elementen N +1 Vergleiche, da jedes Element sequenziell überprüft wird.
Die erfolgreiche Suche nach einem Eintrag erfordert im Mittel ungefähr N/2 Vergleiche.
Summiert man nun die Laufzeiten für den Ablauf bei der Protokollüberprüfung, erhält man folgende Ergebnisse. Zunächst erhält der Speicher eine Anfrage nach einem
50
6 Hardwarekonzipierung
1
a)
2
1
3
2
4
5
5
9
6
11
7
15
8
22
9
29
10
33
11
44
1
b)
1
2
5
9
11
15
22
29
12
56
67
2
33
44
68
89
95
123
134
155
89
95
123
134
155
3
56
67
68
4
Abbildung 6.16: Vergleich von a) sequentieller Suche und b) binärer Suche
Element, danach soll das Element abgespeichert werden. Die Summe der Laufzeiten beträgt für diesen Vorgang N/2 + N/2 = N . Wird eine neue TCP-Verbindung aufgebaut,
erhöht sich die Laufzeit sogar auf ungefähr N + N = 2N . Diese Laufzeiten können noch
halbiert werden, wenn das Speichermodul so realisiert ist, dass es die gefundene Adresse nach einem Lesevorgang zwischenspeichert und so beim Schreiben keine neue Suche
durchführen muss.
Binäre Suche
Dieses Suchverfahren arbeitet nach dem Prinzip Teile und Herrsche und ist nur anwendbar auf eine sortierte Menge. Man vergleicht dabei den Suchschlüssel mit dem mittleren
Element der Menge und sucht in der Teilmenge weiter, in der das Element erwartet wird.
Von dieser Teilmenge nimmt man wieder das mittlere Element, vergleicht es mit dem
Suchschlüssel und fährt solange fort, bis man das Element gefunden hat. Die Suche nach
einem Element erfordert mit diesem Verfahren maximal log2 n + 1 Vergleiche. Dabei ist
es nicht von Bedeutung, ob eine erfolglose oder erfolgreiche Suche durchgeführt wird.
Die Summe der Laufzeiten für eine Folge von Speicherzugriffen bei der Protokollüberprüfung ergibt folgende Ergebnisse. Bei einer existierenden und einer neuen Verbindung
sind die Ergebnisse mit diesem Suchverfahren gleich: (log2 n +1)+(log2 n +1). Wenn das
Speichermodul die Methode der Adresszwischenspeicherung nutzt, wird auch in diesem
Fall die Laufzeit halbiert.
Der Unterschied und der Ablauf der beiden Suchverfahren ist in Abbildung 6.16 noch
einmal gezeigt. In dem Beispiel wird das Element mit dem Wert 67 gesucht. Für diesen
Vorgang benötigt man mit der sequentiellen Suche 12 Vergleiche und mit der binären
Suche nur 4.
51
6 Hardwarekonzipierung
a)
1
2
5
9
15
33
56
67
68
89
95
123
23
1
2
3
4
5
6
7
8
b)
1
2
5
9
15
33
56
67
68
89
95
123
c)
1
2
5
9
15
23
33
56
67
68
89
95
123
Abbildung 6.17: Einfügen eines Elementes in den Speicher1: a) Ausgangszustand b) Einfügevorgang c) Endzustand
6.4.2 Realisierung des Speichers
In dem Modul wird wegen den Geschwindigkeitsvorteilen die Binäre Suche gewählt, deren
Vorgang im vorangegangenem Kapitel erläutert wurde. Hier sollen nun die Funktionen
zum Einfügen und Löschen näher betrachtet werden. In Hardware wird die sortierte Liste
als Array von Informationselementen dargestellt. Beim Einfügen eines neuen Elementes
zwischen zwei vorhandenen Elementen muss dieser Platz zunächst freigegeben werden,
indem alle folgenden Elemente nach hinten verschoben werden. In Abbildung 6.17 ist
dies durch Einfügen der Zahl 23 dargestellt. Die Dauer für das Einfügen eines Elementes
entspricht also der Summe aus Zeit für die Suche und Aufrücken der folgenden Elemente
(Gleichung 6.6).
Dauer = Suche + Aufrücken der folgenden Elemente
(6.6)
Das Löschen eines Elementes ist dem Ablauf des Einfügens ähnlich. Ein Element wird
gelöscht indem alle folgende Elemente nach vorne verschoben werden, wie in Abbildung
6.18 durch Löschen der 33 gezeigt.
Nimmt man für die Schiebevorgänge im Mittel eine Anzahl an Speicherzugriffen von
N/2 an, so ergibt sich Gleichung 6.7 für die Gesamtanzahl G an Speicherzugriffen bei
Einfügen oder Löschen eines Elementes in einer Menge von N Elementen.
G = log2 n +
N
2
(6.7)
6.4.3 Alterungsalgorithmus
Ein Alterungsalgorithmus wird in dem Überwachungsmodul integriert, damit die Informationen von inaktiven TCP-Verbindungen aus dem Speicher gelöscht werden, um Res-
52
6 Hardwarekonzipierung
a)
1
2
5
9
15
33
56
1
67
2
68
3
89
4
95
5
123
6
b)
1
2
5
9
15
33
56
67
68
89
95
c)
1
2
5
9
15
56
67
68
89
95
123
123
Abbildung 6.18: Löschen eines Elementes aus dem Speicher1: a) Ausgangszustand b)
Löschvorgang c) Endzustand
sourcen zu sparen. Die Protokollüberwachungslogik verwaltet zwar die Verbindungen,
greift aber indirekt über einen Schlüssel auf den Speicher zu und hat keine Kenntnis
darüber, welche Verbindungen abgespeichert sind. Ohne Paketinformationen ist kein
Schlüssel für die Anfrage vorhanden und die Protokollüberwachung müsste sequentiell
alle Schlüssel testen, auch wenn dazu keine Informationen im Speicher vorhanden sind.
Deshalb wird der Alterungsalgorithmus, das Timeout der Verbindung, in dem Speichermodul integriert. Dieses hat direkten Zugriff auf die Einträge und überprüft diese periodisch auf Aktualität.
Dafür wird den Verbindungsinformationen ein Zustandsbit hinzugefügt, das die Protokollüberwachungslogik bei einem Schreibzugriff auf Eins setzt. Das Speichermodul überprüft nach Ablauf eines konfigurierbaren Timers jeden Speichereintrag nach diesem Bit.
Wenn das Bit den Wert Eins besitzt, wird es auf Null gesetzt. Ist das Bit in einem
der Einträge gleich Null, dann bedeutet dies, dass der Speichereintrag seit dem letzten
Timerablauf nicht aktualisiert wurde und wird gelöscht.
53
6 Hardwarekonzipierung
timer = 0
false
timer = timer-1
true
read(addr)
addr = addr+1
true
1
status_bit
write(0, addr)
0
delete(addr)
false
addr_max
Abbildung 6.19: Alterungsalgorithmus im Speichermodul
54
Teil III
Realisierung und Verifikation
55
7 Realisierung in VHDL
7.1 Zwei Prozess Methode
r
rin
Combinational
Process
Seqential
Process
r = rin
rin = f(r,in)
IN
registered, unregistered OUT
clk
rst
Abbildung 7.1: Prinzip der 2-Prozess Methode
Die Module des Überwachungsmoduls werden nach der 2-Prozess Methode entwickelt
[4]. Diese Methode des VHDL Entwurfes bietet einige Vorteile gegenüber dem traditionellen Entwurf. Beim traditionellen Entwurf existieren oft viele parallele Anweisungen,
Prozesse und Signale. Dadurch ist der realisierte Algorithmus oder die realisierte Funktionalität schwer zu erkennen und die Fehlersuche im Design wird erschwert. Durch die
parallelen Anweisungen besteht die erhöhte Gefahr der ungewollten Generierung von
Latches oder Mehrfachtreibern.
Wie in Abbildung 7.1 enthält ein Modul nach der 2-Prozess Methode nur zwei Prozesse mit übersichtlicher Funktionalität. Der getaktete sequentielle Prozess ist für den
Reset und die Registeraktualisierung (r=rin) zuständig. Der kombinatorische Prozess
enthält die gesamte Kombinatorik der Entität und treibt die abgetakteten (registered)
und kombinatorischen (unregistered) Ausgänge. Alle benötigten Register werden zu einem record zusammengefasst und werden im Design mit den zwei lokalen Signalen r und
56
7 Realisierung in VHDL
rin dargestellt. Dies hat den Vorteil, dass später neue Register leicht hinzugefügt oder
Änderungen vorgenommen werden können. Das Signal r stellt den aktuellen Zustand
dar und rin den neuen Zustand. Die Berechnung von rin wird mit Hilfe einer Variable
v im kombinatorischen Prozess vorgenommen, wobei rin vom aktuellen Zustand und
den Eingängen abhängt: rin=f(r,in). Zu Beginn des Prozesses werden der Variablen die
aktuellen Registerwerte zugewiesen. In den darauf folgenden sequentiellen Anweisungen
dürfen die neu berechneten Registerwerte zunächst nur der Variablen v zugewiesen werden und zum Ende des Prozesses werden dem Signal rin die neuen Registerwerte von
v zugewiesen. Den abgetakteten Ausgängen werden die aktuellen Registerinhalte von r
zugewiesen, wodurch Latches und Mehrfachtreiber ausgeschlossen werden.
7.2 Typdefinition und Informationsübergänge
Ein weiterer Schritt zu einem gut lesbaren und verständlichen Quellcode ist die Definition von gemeinsamen Typen, gerade im Bereich der Schnittstellen zwischen den
einzelnen Modulen. Dies wird bei den ausgelesenen Paketinformationen angewendet, da
dort mehrere Bereiche der Pakete zusammen von der Datenpfadlogik an die Protokollüberwachungslogik übergeben werden müssen. Die gesamten Informationen werden zu
einem record, mit folgendem Inhalt, zusammengefasst:
type info_type is record
isTCP
: boolean;
isICMP
: boolean;
isGPS
: boolean;
src_ip
: std_logic_vector(31 downto 0);
dst_ip
: std_logic_vector(31 downto 0);
gps_info
: std_logic_vector(63 downto 0);
src_port
: std_logic_vector(15 downto 0);
dst_port
: std_logic_vector(15 downto 0);
seq_num
: std_logic_vector(31 downto 0);
ack_num
: std_logic_vector(31 downto 0);
tcp_flags : std_logic_vector(5 downto 0);
window
: std_logic_vector(15 downto 0);
length
: std_logic_vector(15 downto 0);
end record;
Das hat den Vorteil, dass wiederum die Anzahl der Signale im Design verringert wird und ein
einheitlicher Zugriff auf die Informationen vorgegeben ist. Eine Realisierung mit einem Logik-
57
7 Realisierung in VHDL
vektor der entsprechenden Länge und dem Zugriff auf dessen Bereiche wäre unübersichtlich und
sehr fehleranfällig, da bei jedem Zugriff die Bereichsgrenzen angegeben werden müssen. Durch
die Verwendung des Records kann auf die einzelnen Elemente direkt zugegriffen werden und bei
aussagekräftiger Namensgebung wird der Code lesbarer, sowie einfacher wartbar. Bei späterer
Erweiterung diesen Typs müssen wenige weiterführende Änderungen am gesamten Quellcode
vorgenommen werden. Deshalb gibt man umfangreiche Informationen innerhalb eines Designs
in abstrakter Form weiter, wie dies mit den Paketinformationen von der Datenpfadlogik zur
Protokollüberwachungslogik geschieht.
Für die Verbindungsinformationen wird auch ein Record Typ definiert, der aber nur innerhalb
der Protokollüberwachungslogik verwendet wird. Die Übergabe der Verbindungsinformationen
geschieht nicht in abstrakter Form, da das Speichermodul zum einen allgemeine Schnittstellen
in Form von Logikvektoren besitzt und zum anderen die Übergabe geteilt in Schlüssel und
Daten erfolgt. Von diesem Typ existiert nur eine Variable in der Protokollüberwachungslogik.
Den Feldern dieser Variablen werden durch eine Konvertierungsfunktion aus dem Schlüssel und
den Daten die entsprechenden Bereiche der Logikvektoren zugewiesen. Dadurch ist der Zugriff
auf die einzelnen Elemente der Verbindungsinformationen während der Paketüberprüfung sehr
übersichtlich. Bei Anfragen an das Speichermodul extrahieren weitere Funktionen die Schlüssel
und Datenbereiche aus dem record. Durch Verwendung von Funktionen für diese Aufgaben,
verringert man die Redundanz im Quellcode und Änderungen an dem Typ erfordern nur zentrale
Änderungen an diesen Funktionen und keine Änderungen im gesamten Quellcode.
type connection_info_type is record
w_ip
: std_logic_vector(31 downto 0);
--West-IP
w_port
: std_logic_vector(15 downto 0);
--West-Port
e_ip
: std_logic_vector(31 downto 0);
--Ost-IP
e_port
: std_logic_vector(15 downto 0);
--Ost-Port
wgps_info
: std_logic_vector(63 downto 0);
--West-GPS
egps_info
: std_logic_vector(63 downto 0);
--Ost-GPS
wseq_una
: std_logic_vector(31 downto 0);
--Sequenznummern
eseq_una
: std_logic_vector(31 downto 0);
--für die
wseq_next
: std_logic_vector(31 downto 0);
--Bereichs-
eseq_next
: std_logic_vector(31 downto 0);
--überprüfung
wwindow
: std_logic_vector(15 downto 0);
--rcv_window
ewindow
: std_logic_vector(15 downto 0);
--rcv_window
connection_state : connection_state_type;
--Verbindungsstatus
valid
: std_logic;
--nicht genutzt
timeout
: std_logic;
--Bit für Alterung
58
7 Realisierung in VHDL
end record;
Für die Zustandskodierung der verschiedenen Zustandsmaschinen in dem Design wird jeweils
ein Aufzählungstyp definiert. Im folgenden ist ein Beispiel für die Zustandsmaschine zum Speichern des Paketes im Zwischenspeicher (vgl. Kapitel 6.1.2, Abbildung 6.5 auf Seite 38) zu sehen.
Diese Codierung ist verständlicher, als wenn man im Quellcode einen Wert auf Eins oder Null
abfragt.
type push_frame_state_type is(idle,
push_frame);
Die Zustandskodierung für den Verbindungsstatus weicht von dieser Methode ab, da man
in dem gezeigten Beispiel keine Kenntnis über die entgültige Codierung der Zustände hat.
Beim Verbindungsstatus benötigt man jedoch die Darstellung des Zustandes als Logikvektor,
da die Schnittstellen zum Speichermodul nur diesen Typ unterstützt. Damit die Lesbarkeit des
Quellcodes dadurch nicht beeinflusst wird, wird ein subtyp und mehrere Konstanten definiert.
constant width : positive
subtype
:= 4;
connection_state_type is std_logic_vector(width-1 downto 0);
constant wsyn_rcv
: connection_state_type := "0000";
constant esyn_rcv
: connection_state_type := "0001";
.
.
.
Durch diese Methode der Zustandskodierung kann man als Designer eine bestimmte Darstellung der Zustände im Design erzwingen und Optimierungen vornehmen.
7.3 Realisierung einzelner Elemente der Module
Die Realisierung der einzelnen Module wird anhand der im Konzept erarbeiteten Zustandsmaschinen durchgeführt. Auf die Einzelnen Zustände soll hier nicht eingegangen werden, herausgestellt werden sollen in diesem Kapitel die Umsetzung der Zwischenspeicher, sowie ein Beispiel
für die Paketverifizierung.
7.3.1 Zwischenspeicher
Für die Zwischenspeicherung der Pakete und Paketinformationen werden FIFOs implementiert.
Als Speicher für die FIFOs wird ein Rammodul verwendet, dass die Einträge in einem Array aus
Logikvektoren speichert und den Zugriff über Adressleitungen ermöglicht. In der Datenpfadlogik
59
7 Realisierung in VHDL
0
rd
gefüllt
wr
leer
rd~
Abbildung 7.2: Realisierung eines Fifo
werden für jeden FIFO zwei Adressen verwaltet, eine Leseadresse und eine Schreibadresse. Diese
Adressen haben nach dem Reset den gleichen Wert. Bei einem Schreibvorgang werden Daten
an die Schreibadresse geschrieben und die Adresse danach erhöht. Die Leseadresse erhöht sich
analog bei einem Lesezugriff auf das Rammodul. Wie in Abbildung 7.2 dargestellt, werden die
Adressen stetig erhöht und durchlaufen dabei den gesamten Adressraum. In der Abbildung ist
zu sehen, dass der Adressraum der Zeiger doppelt so groß ausgelegt ist, wie der Speicher. Die
Adresszeiger sind also um ein Bit breiter als die am Rammodul angeschlossenen Adressleitungen.
Das ist für die Verwaltung des FIFO nötig, damit erkennbar ist wann der FIFO voll und wann
er leer ist. Der FIFO ist leer, wenn der Lesezeiger (rd ) der Schreibzeiger (wr ) eingeholt hat.
In dem Fall besitzen beide Zeiger den gleichen Wert. Erreicht der wr Zeiger die Position rd˜,
ist der FIFO voll. In dem Fall unterscheiden sich die Zeiger nur im höchstwertigsten Bit. Die
im Beispielcode gezeigten Abfragen werden benötigt, damit keine Daten überschrieben werden
und die Pakete im Modul keine Veränderung erfahren. Wenn der Zwischenspeicher gefüllt ist,
werden eintreffende Pakete erworfen.
if (r.wr(log2_ceil(frame_mem_size)-1 downto 0)
=r.rd(log2_ceil(frame_mem_size)-1 downto 0)) then
if (r.wr(r.frame_mem_wr_address’high)
/= r.rd(r.frame_mem_rd_address_comp’high)) then
frame_mem_full := true;
else
frame_mem_empty := true;
end if;
end if;
60
7 Realisierung in VHDL
7.3.2 Überprüfung eines Paketes
Die Überprüfung der Paketinformationen wird in mehreren Einzelschritten in der Protokollüberwachungslogik durchgeführt (vgl. Kapitel 6.3). Der gezeigte Codeauszug zeigt die Überprüfung
eines ACK Paketes im Status established. Zunächst vergleicht die Überwachungslogik die gespeicherten GPS Informationen mit den im Paket enthaltenen. Wenn das Paket diesen Test besteht,
wird es für den Versand frei gegeben, um eine Aktualisierung der Verbindungsinformationen
zuzulassen müssen die Sequenz- und Bestätigungsnummern in den entsprechenden Bereichen
liegen. Die Überprüfungen in den letzten beiden if-Anweisungen stimmt mit den Gleichungen
6.1 und 6.2 auf Seite 48 bis auf die Moduloberechnung überein. Die Moduloberechnungen sind in
dieser Implementierung nicht nötig, die Datentypen vorzeichenlos sind der Überlauf bei diesen
Typen genau der gewünschten Funktionalität entspricht.
if connection_info.egps_info = r.frame_info.gps_info then
v.usend := "11";
if unsigned(r.frame_info.seq_num) - unsigned(connection_info.eseq_next)
<=unsigned(connection_info.eseq_una) + unsigned(connection_info.wwindow)
- unsigned(connection_info.eseq_next) then
if unsigned(r.frame_info.ack_num) - unsigned(connection_info.wseq_una)
<= unsigned(connection_info.wseq_next)
- unsigned(connection_info.wseq_una) then
61
8 Verifikation mit SystemC
8.1 Struktur der Testbenches unter SystemC
Die Verifikation der einzelnen komponenten, sowie des gesamten Design, erfolgt mit einer Mixed
Language Simulation und dem Verifikationstool ModelSim [2]. Eine Mixed Language Simulation
ist der Aufbau einer Simulationsumgebung mit unterschiedluchen Programmiersprachen. Die
Simulationsumgebungen werden in der SystemC entwickelt und instantiieren jeweils das zu
testende VHDL Modell. SystemC ist eine Klassenbibliothek für C++ und erweitert die Sprache
um Elemente und Methoden aus Hardwarebeschreibgungssprachen [1]. Dazu gehören getaktete
Prozesse und Typen zur Bitdarstellung. Die Verwendung von SystemC in der Verifikation ist
der hohe Abstraktionsgrad, den die Sprache C++ bietet, sowie die Verbreitung dieser Sprache.
8.2 Verifikation der Komponenten
Zur Verifikatinion der Datenpfadlogik wird eine Struktur benutzt, die an das ISO-OSI 7 Schichtenmodell angelehnt ist. Diese Struktur simuliert die einzelnen Schichten und erweitert die Nachrichten um den jeweiligen Header. An die Schnittstellen im Datenpfad werden Bus-functional
Models (BFM) angeschlossen, die das Kommunikationsprotokoll auf Signalebene realisieren.
Von einem Generator wird ein Paket über die Transport- Vermittlungs und Sicherungsschicht
an das BFM übergeben, das es an das Device under Test (DuT) überträgt. Damit der Gene-
info
FIFO
Monitor
datalinklayer
crit
networklayer
transportlayer
Generator
BFM
Data_path_in
rcv
next
Frame info info_valid
Data_path_logic
Abbildung 8.1: Struktur Datenpfadlogik TB
62
To_out
Data_path_out
8 Verifikation mit SystemC
BFM
to_out valid
rdy
generator
up_down
Protocol_check_logic
DUT
next
FIFO
FIFO
Frame
next
info
Mem_if_in
memory
Mem_if_out
Frame
valid to_out
info
BFM
Abbildung 8.2: Struktur Protokollüberwachungslogik TB
rator die Kontrolle über die jeweiligen Headerinhalte in den Schichten hat, Beim Aufruf des
Sendeservice einer Schicht besteht die Möglichkeit, neben des zu versendenden Paketes weitere
Informationen zu übergeben. Diese Informationen enthalten die Headerinhalte der jeweiligen
Schichten, wodurch der Generator die Kontrolle über die generierten Pakete hat. Das Generatormodul ist mit den in der Abbildung gezeigten Schnittstellen verknüpft und über einen
FIFO mit dem Monitor verbunden. In den FIFO schreibt der Generator die Headerinformationen, mit denen der Monitor die von der Datenpfadlogik ausgelesenen Informationen vergleicht.
Zusätzlich müssen einige Grenzfälle verifiziert werden, in denen die korrekte Arbeitsweise bei
unterschiedlichen Zwischenspeicherfüllständen überprüft wird.
Auch die Protokollüberwachungslogik muss umfangreichen Tests unterzogen werden, da sie
die eigentliche Verifikation der Pakete vornimmt. Der Generator in dieser Testbench ist wie in
Abbildung ... mit dem DUT verknüpft. Er simuliert den Arbitrierer und signalisiert der Protokollüberwachungslogik, von welchem Stream sie die Paketinformationen anfordern soll. Diese
generiert die Testbench und der Generator übergibt sie an das DUT. Ein weiteres Element dieser Testbench ist das Memorymodul, das die Kommunikation der Protokollüberwachungslogik
mit dem Speicher simuliert. Dieses Modul erhält über einen FIFO die Informationen, die es
bei einem Lesezugriff an das DUT übergeben soll. Des Weiteren nimt das Memorymodul die
63
8 Verifikation mit SystemC
Daten bei einem Schreibzugriff entgegen und gibt diese auf der Konsole in ModelSim aus. Auf
diese Weise ist es möglich eine Verbindung in jeden Zustand zu versetzen, dann verschiedene
Paketeinformationen zu übergeben und Reaktionen des DUT zu überwachen.
In den vorangegangen Testbenches wird die visuelle Verifikation mit Hilfe des Waveformviewer unter ModelSim zur Unterstützung durchgeführt. Bei der Überprüfung der Funktionalität
von Speicher und Arbitrierer erfolgt die Überprüfung nur mit dieser Methode, da bei diesen
Modulen die internen Abläufe überprüft werden und diese unter ModelSim übersichtlich darstellbar sind.
64
Teil IV
Zusammenfassung und Ergebnis
65
9 Zusammenfassung
9.1 Ergebnis
Das Ziel dieser Arbeit, die Entwicklung einer Struktur zur Zustandsüberwachung verbindungsorientierter Kommunikationsprotokolle, wurde am Beispiel des TCP-Protokolls erreicht. Das
entwickelte Modul benutzt zusätzlich bereitgestellte GPS-Ortsinformationen der Verbindungsteilnehmer, um eine erweiterte Überprüfung der Pakete durchzuführen. Dadurch werden IPSpoofing Attacken auf bestehende Verbindungen erkannt und die entsprechenden Pakete werden verworfen. IP-Spoofingpakete, die aus dem gleichen Zugangsbereich kommen und die gleichen GPS-Informationen enthalten werden nicht erkannt. Einen präventiven Schutz gegen IPSpoofing bietet die Überprüfung des IP-Bereiches, da auf diese Weise nur Pakete mit korrekten IP-Adressen weitergeleitet werden. Stealthportscans werden durch das Modul verhindert,
indem nur SYN-Pakete weitergeleitet werden, wenn keine entsprechende Verbindung im Speicher existiert. Die Zustandsüberwachung des TCP-Protokolls führt nicht zu einer maßgeblichen
Verbesserung des Verbindungsschutzes. Das ist darauf zurückzuführen, dass viele Pakete meistens nur verworfen werden dürfen, wenn die GPS-Information nicht korrekt ist. Pakete, die
auf Grund falscher Sequenz- und Bestätigungsnummern nicht zur Verbindung gehören, dürfen
nicht verworfen werden. Die Ursache dafür können abgestürzte Verbindungsteilnehmer sein und
das TCP-Protokoll bietet dafür selbst Lösungen und versendet die entsprechenden Pakete. Aus
diesen Gründen ist der Einsatz einer Zustandsüberwachung für TCP nicht zu empfehlen, da
der erwartetet Gewinn an Sicherheit nicht zu erkennen ist.
9.1.1 Probleme
Ein Problem bei der vorhandenen Version des Moduls ist der Schutz gegen Synflooding, da
SYN-Pakete das Ablegen neuer Verbindungsinformationen im Speicher verursachen. Wenn der
Speicher voll läuft, wird der Aufbau weiterer Verbindungen verhindert und der reguläre Datenverkehr gestört.
Eine Lösung wäre, das Timeout für die Verbindungen im Speichermodul so gering zu wählen,
dass diese Einträge schneller wieder aus dem Speicher gelöscht werden. Dies hätte aber den
66
9 Zusammenfassung
Nachteil, dass auch reguläre Verbindungen betroffen sein könnten. Des weiteren benötigt der
Vorgang des Löschens aus dem Speicher viel Zeit, in der ein Zugriff auf den Speicher nicht
möglich ist.
Eine weitere Überlegung zum Schutz vor SYN-Flooding betrifft die Richtung, aus der Verbindungen aufgebaut werden können. Verbindungen werden nach der Überlegung nur im Speicher
abgelegt, wenn aus der vertrauenswürdigeren Richtung SYNs oder SYN/ACKs eintreffen. Die
SYN/ACKs werden dabei als reguläre Antworten auf SYNs interpretiert und im Zustandsdiagramm für den Verbindungsstatus wird gleich in den Zustand ack_rcv gewechselt. Eine hohe
Frequenz an SYN/ACKs von einer Quelle würde nach dieser Überlegung auf einen Angriff hinweisen. Die Anzahl an Verbindung von der Quelle könnte in dem Fall vorübergehend begrenzt
werden. Diese Methode würde den betroffenen Host zwar nicht schützen, aber den Speicher des
Moduls nicht voll laufen lassen.
Ein weiteres Problem besteht bei dem Vergleich der GPS-Informationen. Befindet sich die
Verbindung im Zustand syn_rcved, sind nur die GPS-Informationen des Initiators verfügbar.
Wenn ein Angriff mit einem IP-Spoofing Paket in dieser Phase des Verbindungsaufbaus durchgeführt wird, bieten die GPS-Informationen keinen Schutz. In dem Fall wird sogar der Aufbau
der Regulären Verbindung verhindert, da die Pakete von der regulären Quelle als Angriffe
angesehen werden.
9.1.2 Version mit vermindertem Funktionsumfang
Da Speicherbedarf und Speicherzugriffe kritische Faktoren bei dem entwickelten Modul darstellen, könnte man den Funktionsumfang senken. Ein Modul ohne angeschlossenen externen
Speicher würde wenig Funktionalität bieten. Solch ein Modul würde ein statisches Filter darstellen und gegen einige Portscans, Landattacken und IP-Bereichsverletzungen schützen. Veringert
man die Verbindungsinformationen, so dass nur die IPs Ports und GPS Informationen gespeichert werden, würde das schon den Schutz vor IP-Spoofing ermöglichen. Dieser Schutz würde
dann ohne die Zustandsüberwachung der Verbindung geboten und könnte leicht an unterschiedliche Protokolle angepasst werden.
9.1.3 Ausblick
Wenn auch die Zustandsüberwachung zunächst keinen Vorteil in der Sicherheit bringt, so werden Sicherheitslösungen auf Hardwarebasis sicher zunehmen. Bei der Benutzung von GPSInformationen als zusätzliches Sicherheitsmerkmal wird der Grad Granularisierung von Bedeutung sein. Wichtig dabei ist, dass Angreifer auf dieses Merkmal keinen Zugriff haben und diese
67
9 Zusammenfassung
Informationen nicht fälschen können. Dann eröffnet sich die Möglichkeit der Definition von vertrauenswürdigen oder zu blockierenden Bereichen. Beim Hinzufügen der GPS-Informationen
zu den IP-Optionen ist eine Anbindung eines GPS-Empfängers nicht nötig. Es ist eher denkbar
das Entsprechende Modul bei der Installation auf den jeweiligen Standort zu konfigurieren.
68
Literaturverzeichnis
[1] SystemC Version 2.0 User’s Guide Updated for SystemC 2.0.1 .
[2] ModelSim SE User’s Manual Version 6.1f , 2006.
[3] CiscoSytems: Strategies to Protect Against Distributed Denial of Service (DDoS) Attacks
; Document ID: 13634 , 2007.
[4] Hecht, R.: VHDL-Synthese für Fortgeschrittene, 2004.
[5] Hinden, S. D. . R.: RFC2460, Internet Protocol Version 6 , 1998.
[6] JTC1: ISO/IEC 7498-1:1994 .
[7] Orlamünder, H.: Paket-basierte Kommunikationsprotokolle. Hüthig Telekommunikation/Bonn, 2005.
[8] Paxson, M. A. . V.: RFC2581, TCP Congestion Control , 1999.
[9] Pohlmann, N.: Firewall-Systeme, 4. aktualisierte und erweiterte Ausgabe. MITP-Verlag
GmbH, 2001.
[10] Postel, J.: RFC791, Internet Protocol , 1981.
[11] Postel, J.: RFC792, Internet Control Message Protocol , 1981.
[12] Postel, J.: RFC793, Transmission Control Protocol , 1981.
[13] Ramakrishnan, K.: RFC3168, The Addition of Explicit Congestion Notification (ECN)
to IP , 2001.
[14] Sedgewick, R.: Algorithmen, 2.Auflage. Addison-Wesley, 2002.
[15] Tanenbaum, A. S.: Computernetzwerke. Prentice Hall Verlag GmbH, 1997.
[16] Ullmann, U.: Check Point FireWall-1/VPN-1 . MITP-Verlag GmbH, 2001.
69
Selbstständigkeitserklärung
Ich erkläre hiermit, diese Arbeit selbstständig angefertigt und die benutzten Quellen vollständig
angegeben zu haben.
Rostock, 31.05.2007
70
Herunterladen