| ARP (Address Resolution Protocol)
LAN-Karten bedienen sich einer hardwaremässig
definierten MAC-Adresse, die für die Aussendung und den Empfang von
Datagrammen über das Netzwerk unerlässlich ist. Sie können
nur auf Datagramme antworten, die im Empfänger-Feld eine Rundsende-Adresse,
eine bekannte Verteilsende-Adresse oder eine auf die betreffende LAN-Karte
hinweisende Individual-Adresse aufweisen. Das Internet Protocol verwendet
IP-Adressen, die während der Installation des Netzwerks bzw. dem Aufsetzen
des an das LAN anzubindende Systems vom Administrator definiert wird. Eine
IP-Adresse ist dem Protokollstapel der Vermittlungsschicht zugeordnet und
von der individuellen MAC-Adresse unabhängig. Jede Kommunikation mittels
TCP/IP wird durch die IP-Adresse eingeleitet, wodurch für den Aufbau
des Dialogs die MAC-Adresse als sekundär zurückgestuft wird.
End-zu-End-Kommunikationen bedienen sich also der IP-Adresse, wohingegen
bei den dazwischen liegenden Knotenpunkten (Hops) die MAC-Adresse genutzt
wird.
In den ersten TCP/IP-fähigen Rechnern
wurde eine manuell erstellte Tabelle verwendet, die die Zuordnung zwischen
MAC- und IP-Adresse indirekt automatisieren sollte. In den meisten rundsendefähigen
Netzen werden davon losgelöst zusätzlich oder ersetzend Routing-Informationen
komplett automatisch mittels dem Adress Resolution Protocol ausgetauscht,
welches in RFC 826 (An Ethernet Address Resolution Protocol) definiert
wird. Jeder Knoten verwaltet dabei dynamisch den sogenannten ARP-Cache
mit den relationalen IP-/MAC-Einträgen. Wenn das Internet Protokoll
die Anforderung erhält ein Datagramm an eine andere IP-Adresse zu
senden, sucht es zuerst im ARP-Cache nach der korrespondierenden MAC-Adresse,
die von der Datensicherungsschicht bei der Übertragung des Pakets
Verwendung finden soll. Falls kein Eintrag vorhanden ist, wird vom Initiator
mit der Hilfe von ARP die MAC-Adresse der fraglichen IP-Adresse zu ermitteln
versucht. In der Hoffnung diese Frage wenigstens temporär aus der
Welt zu schaffen, sendet ARP ein Datagramm inklusive der zu erfragenden
IP-Adresse eine sogenannte ARP-Anforderung an alle LAN-Karten mittels der
bekannten MAC-Broadcast-Adresse (0xFFFF_FFFF_FFFF). ARP setzt in dieser
verhältnismässig globalen Anforderung seinen eigenen Ethernet-Typ
0x08086 ein, damit der Schrei von allen vermeindlich betroffenen Knotenpunkten
wahrgenommen wird. Dieses Rundschreiben wird von allen aktiven Maschinen
im Netzwerk erkannt und insofern verarbeitet, dass wenn die eigene IP-Adresse
in der ARP-Anforderung erkannt wird, das betroffene System die mindestens
lokal statisch vermerkte MAC-Adresse retourniert. Diese eingehende Antwort
wird im lokalen ARP-Cache vermerkt und steht, solange der Cache nicht aufgrund
potentieller Überfüllung überschrieben wird, für eine
weitere und vor allem schnellere bzw. effizientere Nutzung bereit. Falls
innerhalb eines definierten Timeouts im Sekundenbereich keine Antwort auf
die Broadcast-Anfrage eingeht, wird die Anforderung erneut gestellt. Damit
jedoch nicht stets das gesamte Netz belästig werden muss, wird aus
Gründen der Effizienz eine Kopie der ARP-Anfrage beim Knoten, der
auf die ARP-Nachricht antwortet, die Zuordnung von IP- und MAC-Adresse,
der geantwortet wurde, zwischengespeichert. Bei der nachfolgenden Anforderung
ist es daher auch nicht mehr nötig den ARP-Dialog in umgekehrter Richtung
walten zu lassen, da die relevanten Daten beim Zielsystem bereits bekannt
sind.
ARP-Datagramme werden von Routern nicht
weitergeleitet, da sie in der IP-Schicht operieren und auf MAC-Broadcasts
grundsätzlich nicht reagieren können und dürfen. Router
stellen daher verwertbare Puffer zwischen einzelnen Rundsende-Subnetzen
dar. Mit ihrer Hilfe kann überflüssiger Traffic im gesamten Netzwerk
eingedämmt und auf effektiv betroffene Subnetze minimiert werden.
Der ARP-Cache
Der Cache für die ARP-Informationen
wird meist solange gehalten, bis die Geräteeinheit zurückgesetzt
oder ausgeschalten wird. In einigen TCP/IP-Implementierungen wird für
die Einträge ein zeitliches Limit gesetzt: Falls ein Eintrag innerhalt
dieses Zeitraums, meist 15 Minuten, nicht verwendet wird, ist das Löschen
jener die unweigerliche Folge. Andere Systeme wiederum arbeiten mit zeitgesteuerten
Aktualisierungsfunktionen: Alle 15 Minuten wird eine ARP-Anforderung abgesetzt,
um sicherzustellen, dass die vorhandenen Einträge noch immer den Eigenschaften
der aktuellen Umgebung entsprechen. Das sich MAC-Adressen nur zu ändern
pflegen, wenn ein Element ausgetauscht oder verlagert wird, ist diese Information
von relativ begrenztem Wert. Manche Produkte erlauben eine manipulative
Modifikation der mit dem ARP-Cache in Zusammenhang stehenden Informationen
wie Einträge oder Time-Limits. Dieses Feature kann bei der Fehlersuche
und Blitzaktionen Gold wert sein.
Der Befehl arp gibt für berichtigte
Benutzer; standartmässig nur root bei UNIX- und seinen Derivaten,
den Inhalt der ARP-Tabelle aus. Um sich der Einsicht der gesamten ARP-Tabelle
zu bemächtigen, bedient man sich erfolgsversprechend der Option -a.
Einzelne Einträge werden in Kombination mit dem jeweiligen Hostnamen
angezeigt. Wollen Sie sich zum Beispiel den Eintrag für den Rechner
zion in der ARP-Tabelle von prometheus ansehen, müssen Sie folgendes
eingeben:
root@prometheus:~ > arp zion
zion (192.168.0.10) at 8:0:20:5:21:43
Die Ausgabe aller Einträge der ARP-Tabelle
mit der Option -a zeigt unter Linux folgendes Bild:
root@prometheus:~ > arp -a
Net to Media Table
Device IP Adress
Mask Flags Phys Addr
------ ----------------- --------------- ----- ---------------
eth0 gateway.ruef.net 255.255.255.255 SP
08:00:13:00:0e:c9
eth0 rieekan.ruef.net 255.255.255.255
08:01:12:ee:32:00
eth0 zion.ruef.net 255.255.255.255
08:00:20:05:21:43
Anhand dieser Tabelle bringen wir uns in
eine priveligierte Situation, da wir wissen, dass von prometheus an zion
adressierte Datagramme in Ethernet-Frames verpackt und an die Ethernet-Adresse
08:00:20:05:21:43 weitergereicht werden. Ausserdem erkennen wir anhand
des gesetzten S-Flags, dass der erste Eintrag von gateway.ruef.net statisch
ist: Er wird durch die lokale Konfiguration bezogen. Das zusätzliche
P-Flag des gleichen Eintrags steht für "Published". Dies bedeutet,
dass der Eintrag veröffentlich wird. Empfängt ARP also eine Anfrage
für die IP-Adresse von gateway, dann antwortet prometheus in seiner
Funktion als Proxy ARP-Server mit der jeweils zugeordneten MAC-Adresse;
in diesem Fall 08:00:13:00:0e:c9). Ein gesetztes M-Flag deutet auf Mapping
hin und wird nur für Multicast-Einträge verwendet. Bei einem
Broadcast-Medium (z.B. Ethernet) wird die Broadcastadresse für die
Auslieferung an eine Multicast-Gruppe genutzt.
Die Einsicht der ARP-Tabelle unter Windows
ist da ein bisschen weniger informationsreich, erfüllt jedoch trotzdem
meist seinen Zweck und ist für den Laien leichter verständlich:
C:\WINDOWS>arp -a
Schnittstelle: 62.2.64.137 on Interface 0x1000002
Internet-Adresse Physische
Adresse Typ
62.2.65.231
00-00-00-00-00-00 ungültig
62.2.65.254
00-b0-8e-c8-cc-70 dynamisch
Automatisch generierte dynamische ARP-Tabellen
bedürfen in der Regel keiner Pflege, weil sie ohne Probleme durch
das ARP-Protokoll erzeugt werden. ARP arbeitet sehr stabil und verrichtet
brav seinen Dienst. Trotzdem kann nachträglich manuell in die ARP-Tabelle
eingegriffen werden, wie die jeweiligen Optionen beweisen:
-d hostname entfernt einen Eintrag
aus der ARP-Tabelle.
-s hostname ether-adresse fügt einen
Eintrag in die Tabelle ein.
In diesem Zusammenhäng ist auch das Windows-Utility
ArpWorks v1.0 von Mao <mao@oxid.it> für Netzwerkadministratoren
von Bedeutung: Dadurch können ARP-Nachrichten nach belieben Generiert
werden, um entfernte ARP-Caches zu modifizieren. Doch nicht nur bei Leuten
im administrativen Bereich kann das Interesse für dieses Programm
geweckt werden: Angreifer können die erweiterte Skalierbarkeit für
Attacken einsetzen. Mehr dazu in den Kapiteln Denial of Service durch ARP-Stürme,
Denial of Service durch ARP-Fehlimplementierungen und ARP-Spoofing.
Das ARP-Format
,---------------------------------.
| Rahmenkopf | ARP/RARP-Nachricht |
`------------+--------------------|
__________/
|
/
|
/---------------------------------|
| Hardware | Protokoll
|
|---------------+-----------------|
| HLEN | PLEN | Operation
|
|---------------------------------|
| Sender HA (0-3 Oktette)
|
|---------------------------------|
| Sender HA | Sender
IA |
| (Oktette 4-5) | (Oktette 0-1) |
|---------------+-----------------|
| Sender IA | Empfänger HA
|
| (Oktette 2-3) | (Oktette 0-1) |
|---------------------------------|
| Empfänger HA (Oktette 2-5)
|
|---------------------------------|
| Empfänger IA (Oktette 0-3)
|
`---------------------------------'
Das Struktur eines ARP-Datagramms wurde
als einfaches Standartformat für den Einsatz beliebiger Netzwerktypen
entworfen. Als einzige Beschränkung ist das netzwerkseitige Unterstützen
von Broadcast-Nachrichten, wie dies zum Beispiel bei Ethernet der Fall
ist, vorauszusetzen.
ARP operiert direkt in der Datensicherungsschicht
und wird daher in dessen Rahmen codiert. Damit die Datensicherungsschicht
die ARP-Rahmen von Rahmen anderer Herkunft unterscheiden kann, wurde für
das Adress Resolution Protocol ein eigener Wert für das Ethernet-Fypenfeld
(0x8086) bestimmt. ARP-Datagramme erhalten folgende Felder:
-
Hardware: Dieses Feld definiert den Typus
Netzwerkhardware, die dem Initator zuteil wird. Zulässige Typen sind:
-
Ethernet (10 Mbps)
-
Experimentelles Ethernet (3 Mbps)
-
Amateurfunk AX.25
-
Proteon ProNET Token-Ring
-
Chaos
-
IEEE.802
-
ARCNET
-
Hyperchannel
-
Lanstar
-
Autonet short adress
-
LocalTalk
-
LocalNet (IBM PCNet oder Sytec Inc. LocalNet)
-
Protokoll: In diesem Feld wird angegeben,
von welchem Protokoll die Operation angefordert wurde. Hier werden dieselben
Werte wie im Ethernet-Typenfeld eines Ethernet-Rahmens verwendet. Dem Internet
Protocol wird zum Beispiel der Wert 0x0800 zugeschrieben.
-
vHLEN: Mit diesem Feld wird die Länge
der Hardware-Adresse in Oktetten angegeben. Normalerweise hat eine IEEE-LAN-MAC-Adresse
den HLEN-Wert 6.
-
PLEN: Dieses Feld dokumentiert in Oktetten
die Länge der Vermittlungsschicht-Adresse. IPv4 hat im Normalfall
den PLEN-Wert 4.
-
Operation: Diesem Feld stehen ARP zwei Optionen
zur Auswahl; zudem fallen zwei zusätzliche für RARP an:
-
Fällt die Wahl auf 1, wird eine ARP-Anforderung
getätigt.
-
Beim Nutzen des Werts 2 handelt es sich um
eine ARP-Antwort.
-
RARP-Anforderungen werden mit dem Wert 3 gekennzeichnet.
-
Antworten mittels RARP bedienen sich des Werts
4.
-
Adressen: In diesem Feld wird die Hardware-
und IP-Adresse des Absenders, und das gleichnamige Paar des Empfängers
vermerkt.
Die Arbeitsweise von ARP
Bedienen wir uns nun zum Verständnis
der Arbeitsweise von ARP unserer Phantasie, durch welche wir folgendes
Szenario vor dem geistigen Auge projezieren lassen: Der Knoten mit der
IP-Adresse 192.168.0.4 und der MAC-Adresse 0x0050baaf3da1 hat von seiner
IP-Schicht die Aufforderung zum Herausfinden der MAC-Adresse des Knotens
mit der IP-Adresse 192.168.0.12 bekommen.
192.168.0.4 sendet nun in der ersten aktiven
Phase eine ARP-Anforderung an alle Knoten im Netz (Broadcast durch 192.168.0.255).
192.168.0.12 erkennt seine IP-Adresse in der Anforderung und sendet eine
ARP-Antwort, die er an die MAC-Adresse der eingegangenen Anforderung adressiert.
Die ARP-Reply wird weitergeleitet und unverzüglich von nicht betroffenen
Systemen verworfen, da es sich um einen Unicast-Rahmen handelt, der eindeutig
an eine spezifische Adresse gerichtet ist (in diesem Falle 192.168.0.4).
Die ARP-Anforderungen aussendenden Knoten
gehen bei solchen Aktionen davon aus, dass die eingehende Antwort korrekt
ist. Normalerweise sind keine Kontrollmechanismen vorhanden, die eine MAC-Adresse
im Namen mehrerer IP-Adressen kompetent verifizieren kann. Angreifer können
sich diese Eigenheit von ARP zunutze machen: Nähere Informationen
dazu finden sich im Kapitel zu ARP-Spoofing.
ARP und Fehlermanagement
ARP neigt dazu eine heimtückische
Fehlerquelle darzustellen. In einem gut verwalteten Netzwerk dürften
keine Duplikate von IP-Adressen bestehen; sie müssen eindeutig sein.
Was passiert nun, wenn doch zweimal die gleiche IP-Adresse im selben Netz
genutzt wird? Es ist aus technischer Sicht sehr hilfreich und dementsprechend
interessant anzusehen, wie ARP in einer solchen Extremsituation reagiert.
In unserem imaginären Beispiel bedienen wir uns dem Szenario, dass
in einem brückenverbundenen LAN dieselbe IP-Adresse (192.168.0.19)
von zwei Knoten verwendet wird. Wir bezeichnen diese beiden Streithähne
nun nachfolgend als Knoten A und Knoten B.
Als erstes stellt der Knoten A eine Verbindung
mit dem Host her um im gleichen Durchgang eine ARP-Anforderung zum Austausch
der MAC-Adressen anzubringen. Beide Rechner initialisieren ihren ARP-Cache
und die Session läuft regulär ohne Komplikationen nach Plan ab...
Bis der Knoten B eine Verbindung zum selben Host herstellt. Was dann genau
passiert, ist von der jeweiligen Implementierung abhängig. Da Knoten
B die gleiche IP-Adresse wie Knoten A hat und jene IP-Adresse schon im
ARP-Cache des involvierten dritten Rechners vermerkt ist, ersetzt der Host
die MAC-Adresse von Knoten A durch die MAC-Adresse des Knotens B.
Die ursprünglich für den Knoten
A bestimmten Daten treffen nun beim Knoten B ein und werden dort aufgrund
fehlender Verwertbarkeit optional mit Fehlermeldung verworfen. Der Benutzer
am Knoten A wird sich über den unerwünschten Verbindungssabbau
ärgern, den sein System aufgrund Erreichens des Timeouts wegen fehlender
ankommender Daten auslöst. Die sinnlose Kommunikation zum Knoten B
funktioniert so lange gut, bis der Benutzer am Knoten A wiederum den ARP-Cache
mittels erneutem Verbindungsaufbau überschreibt.
Ein anderes Horror-Szenario gefällig?
Wird einem Client-Rechner aus Versehen die gleiche IP-Adresse wie dem zur
Verbindung aufgeforderten Host-System zugeteilt, können diverse Benutzer
für kurze Zeit nicht auf die Dienste des Hosts zugreifen. Die verschiedenen
Komponente und Eigenheiten des spezifischen Netzwerks lassen dieses Problem
polymorph erscheinen, denn die Architektur des Netzes, der Einsatz von
Routern, Hubs oder Bridges und die verwendete Hard- und Software haben
einen entscheidenden Einfluss auf die Reaktionszeiten von ARP und dadurch
auf das ganze Szenario.
Wir wenden uns jetzt nochmals einer Situation
zu, die wiederum die drei Beteiligten aus Szenario 1 (Knoten A, Knoten
B und der Host-Rechner) voraussetzt: In dieser imaginären Situation
haben der Knoten B und der Host-Rechner die gleiche IP-Adresse. Versucht
nun Knoten A eine Verbindung zum Host herzustellen, welche eine ARP-Anforderung
zur Folge hat, erhält er durch das Adress Resolution Protokoll die
IP-Adresse von Knoten B, da sowohl der Host als auch Knoten B antworten.
Knoten A kann die Verbindung kaum erfolgreich herstellen, da Knoten B kaum
in der Lage ist, mit der korrekten Dienst-Software aufzutrumpfen. Beim
zweiten Versuch erhält Knoten A vielleicht die korrekte Antwort des
Hosts, kann jedoch noch immer keine Verbindung herstellen. Handelt es sich
beim Knoten B um einen PC, wird dieser sehr wahrscheinlich bei längerem
Nichtgebrauch ausgeschaltet. In diesem Fall taucht das Problem nur gelegentlich,
zum Beispiel während den Arbeitszeiten des Benutzers am Knoten B,
auf. Dies kann für genervte Benutzer zwischenzeitlich zum Vorteil
werden, behindert jedoch die Fehlersuche des Netzwerkadministrators erheblich.
Das vierte und letzte Szenario beschreibt
sich einfacherweise wie folgt: Zwei Host-Rechner bedienen sich der identischen
IP-Adresse. In diesem Fall werden die Client-Maschinen gelegentlich eine
Verbindung zum falschen Host herstellen, was ein korrekter Ablauf der Kommunikation
unterbindet. Dieser Machtkampf ist selten anzutreffen, da es zu den
Hauptaufgaben eines kompetenten Administrators zählt, bei jeder Phase
des Netzwerkdesign auf individuelle IP-Adressen zu achten.
Auf einigen Systemen können Benutzer
die IP-Adresse des Interfaces selber bestimmen und dadurch die besagten
Probleme heraufbeschwören. Böswillige Benutzer können so
Denial of Service-Attacken gegen Rechner fahren. In der Theorie wäre
so auch das Übernehmen von Verbindungen (z.B.: TCP-Hijacking bzw.
IP-Spoofing inkl. DoS-Attacke) möglich. Dies ist aber aufgrund der
schwer zu erratenden Sequenznummern trivial.
ARP nach einer Leistungsstörung
ARP kann Probleme verursachen, wenn zuverlässige
Dienste einer Leistungsstörung unterworfen werden. Die meisten TCP/IP-Implementierungen
versuchen mit einem Wiederholen des Versands den Fehler zu korrigieren
bzw. umgehen. Wenn jedoch alle Übertragungsversuche zum Scheitern
verurteilt wurden, beginnt der TCP/IP-Stack mit einem erneuten Broadcast
der ARP-Anforderung an alle Knoten im Netz, um zu kommunizieren, ob der
Ausfall auf unterster Schicht behoben werden kann. Dieses Broadcasting
wird erst beim Ausfall von mehreren mehr oder minder wichtigen Knoten für
die Performance des Netzes zum Verhängnis. Werden zwei (Teil-)Netze
über eine Brücke miteinander verbunden, kann ein Ausfall jener
eine potentielle Gefahr darstellen, da relativ viele Verbindungen dadurch
gestört werden können. Eine solch grosse Menge von Rundsende-Nachrichten,
wir sprechen von zwischen 40 und 80 Broadcasts pro Sekunde, wirkt sich
stark negativ auf die Performance der involvierten Netzwerke aus. Das Problem
lässt sich leicht vorbeugend umgehen, indem ersetzenderweise Router
anstatt Bridges zum Einsatz kommen.
ARP-Ablaufprotokolle
Ich möchte hier nun gerne zum weiteren
Verständnis der Funktionsweise des Adress Resolution Protocols einige
ARP-Ablaufprotokolle publizieren, die dem normalen alltäglichen Netzwerk-Verkehr
entnommen wurden. In den Beispielen sid die Ethernet-Rahmen in hexadezimaler
Schreibweise ohne Präambel und CRC-Prüfsumme dokumentiert. Unter
dem Rahmen werden die hexadezimalen Werte der Rahmenfelder in einer Tabelle
dargestellt.
Im ersten Beispiel versucht der Knoten
mit der IP-Adresse 30.0.0.1 zum ersten Mal eine Verbindung zur IP-Adresse
30.0.0.99 herzustellen. Rahmen 1 enthält die ARP-Broadcast-Message
vom Initator, in der für die Empfänger-MAC-Adresse Nullen eingesetzt
wurden. Im Rahmen 2 wird die ARP-Antwort gezeigt, in der alle Felder mit
Daten belegt sind.
Rahmen 1
| FFFF |
FFFF |
FFFF |
0260 |
8C0A |
C49D |
0806 |
0001 |
.......`..D..... |
| 0800 |
0604 |
0001 |
0260 |
08CA |
C49D |
1E00 |
0001 |
.......`..D..... |
| 0000 |
0000 |
0000 |
1E00 |
0063 |
0000 |
0000 |
0000 |
.........c...... |
| 0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
|
|
............ |
|
|
|
|
|
|
|
|
|
| Datensicherung: |
Empfänger-MAC: |
FFFFFFFFFFFF |
Absender-MAC: |
02608C 0AC49D |
Typ (Länge): |
0806 |
|
| ARP: |
Hardware: |
0001 |
Protokoll: |
0800 |
HLEN: |
06 |
|
PLEN: |
04 |
Operation: |
01 |
(ARP-Antwort) |
|
|
Absender-IP: |
30.0.0.1 |
Absender-MAC: |
02608C 0AC49D |
|
|
|
Empfänger-IP: |
30.0.0.99 |
Empfänger-MAC: |
000000000000 |
|
|
|
Rahmen 2
| 0260 |
8C0A |
C49D |
AA00 |
0400 |
0104 |
0806 |
0001 |
.`..D.*......... |
| 0800 |
0604 |
0002 |
AA00 |
0400 |
0104 |
1E00 |
0063 |
......*........c |
| 0260 |
8C0A |
C49D |
1E00 |
0001 |
0000 |
0000 |
0000 |
.`..D........... |
| 0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
|
|
............ |
|
|
|
|
|
|
|
|
|
| Datensicherung: |
Empfänger-MAC: |
FFFFFFFFFFFF |
Absender-MAC: |
02608C 0AC49D |
Typ (Länge): |
0806 |
|
| ARP: |
Hardware: |
0001 |
Protokoll: |
0800 |
HLEN: |
06 |
|
PLEN: |
04 |
Operation: |
01 |
(ARP-Antwort) |
|
|
Absender-IP: |
30.0.0.1 |
Absender-MAC: |
02608C 0AC49D |
|
|
|
Empfänger-IP: |
30.0.0.99 |
Empfänger-MAC: |
000000000000 |
|
|
|
RARP (Reverse Address Resolution
Protocol)
Das in den RFCs 951 (Bootstrap Porotocol
(BOOTP)) und 1532 (Clarifications and Extensions for the Bootstrap Protocol)
erwähnte Reverse Addresse Resolution Protocol wurde für Geräteeinheiten
konzipiert, die ihre IP-Adresse nicht selbst speichern können. RARP
findet vorzugsweise Verwendung in Netzwerkumgebungen mit plattenlosen Clients.
Es stellt im Grunde nur die Umkehrung von ARP dar, wie das aufgelöste
Akronym schon vermuten lässt: Während ARP anhand der IP-Adresse
eine MAC-Adresse ermittelt, ermittelt RARP anhand der MAC-Adresse die IP-Adresse.
Knoten, die eine RARP-Anforderung stellen, geben die MAC-Adresse in der
Anforderung weiter. Wie ARP operiert RARP in der Datensicherungsschicht.
RARP wurde eine eigene Ethernet-Typennummer zugeordnet (0x8035), damit
es von anderen Protokollen mit Sicherheit unterschieden werden kann.
Als RARP-Server fungierende Knoten suchen
in ihrer RARP-Tabelle nach der der MAC-Adresse entsprechenden, zur Weitergabe
vorgesehenen IP-Adresse. Dieses System setzt mindestens einen als RARP-Server
fungierenden Host voraus, der über eine komplette Tabelle aller MAC-/IP-Adressen
verfügt. Das Format der Datagramme von RARP ist identisch mit denen
von ARP, nur werden im Operations-Feld die Werte 3 für Anforderung
und 4 für Antwort verwendet. Wenn ein Rechner eine RARP-Anforderung
aussendet, kennt er nur die MAC-Adresse des Ziels und kann daher nur jene
im Datagramm vermerken. Im Antwort-Datagramm sind normalerweise alle Felder
mit den entsprechenden Werten belegt. Zudem wird in ihnen meist auch die
IP- und MAC-Adresse des RARP-Servers angegeben.
Obwohl RARP seinen Kompetenzbereich hervorragend
abzudecken vermag, findet es in der Realität wenig Beachtung. BOOTP
(Bootstrap Protocol) hat konnte RARP auf die hinteren Plätze verweisen,
da es mit Brücken und Routern kompatibel ist und mehr Informationen
übermitteln kann. BOOTP wiederum fand in DHCP (Dynamic Host Configuration
Protocol) einen hochkompetenten Gegner...
ARP und Brücken
Eine Brücke, im Fachjargon häufig
auch als Bridge bezeichnet, verbindet vollkommen transparent Kabel des
selben Typs und erntet dafür wenig technische Beachtung. Probleme
tauchen in diesem Zusammenhang erst auf, wenn unterschiedliche Kabelsysteme,
wie zum Beispiel IEEE 802.3 und IEEE 802.5 mittels Brücken zu gemeinschaftlichen
Interagierung verdammt werden. Der Grund für die Komplikationen liegt
in der differenten Darstellungsweise von MAC-Adressen.
Dieses Problem schlägt daher zu Buche,
dass in IEEE 802.3- (CSMA/CD) und IEEE 802.5- (Token-Ring) oder IS9314-
(FDDI) Kabelsystemen die höherwertigen Bits der MAC-Adressen nicht
derselben Schreibweise in den einzelnen Oktetten unterliegen. Die Spezifikationen
von IEEE 802.1 definiert eine identische Adress-Struktur der Systeme, was
eine ebenfalls gleiche Auslegung in den Rahmen ermöglicht. Anders
ist jedoch die Aktion der Weitergabe der MAC-Adressen von der Netz-Hardware
an die oberen Schichten. Schwierigkeiten treten also nur auf, wenn MAC-Adressen
zwischen Systemen ausgetauscht werden, die über die Datensicherungsschicht
agieren, wie dies auch bei ARP der Fall ist.
Das Problem der inkompatiblen Auslegung
von MAC-Adressen ist mit dem Ersetzen von dummen Bridges durch intelligente
- ARP-Rahmen erkennende und die Adressen in den Hardware-Adressfeldern
der Antworten und Anforderung der Darstellungsweise des Empfängernetzes
entsprechend modifizierenden -, Brücken.
Proxy ARP
Mit Proxy ARP wird eine von IP-Routern
genutzte Technik betitelt, die während den Anfangszeiten der Entwicklung
von TCP/IP spezifiziert wurde. Der Sinn in ihr liegt im Schaffen von Abhilfe
des begrenzten IP-Adressraums von IP Version 4. Heute in der Zeit von Subnetz-Masken
und Brücken verliert Proxy ARP an beachtlichem Wert. Trotzdem wird
Proxy ARP von Router-Elementen weiterhin unterstützt.
Aufgrund des Wachtums eines Netzwerkes
kann relativ schnell und verhältnismässig unerwartet der Punkt
der physikalischen Beschränkung einer Einführung zusätzlicher
Knoten in das System erreicht werden. In diesem Falle kann das Netz nur
durch ein zweites unabhängiges physikalisches Kabelsystem erweitert
werden. In den Kinderjahren von TCP/IP, vor dem Erfinden von Netzmasken
und Brücken, konnten zwei Kabelsysteme nur mit einem für zwei
verschiedene IP-Ranges konfigurierten Router verbunden werden. Repeater
waren aufgrund des Fehlens der Notwendigkeit von Filterungsfunktionen für
diese Arbeit nicht geeignet. IP-Adressen wurden damals rigoros und verschwenderisch
vergeben - Man konnte es sich ja damals auch noch leisten.
Wenden wir uns einem illustren Beispiel
zu: Ein Unternehmen ergatterte sich die registrierte IP-Adresse der Klasse
B 130.1.2.3 . Die Firma benutzt die Ethernet-Technologie und möchte
2'048 Host-Rechner mit der Hilfe von TCP/IP untereinander agieren lassen.
Mit der Adresse der Klasse B stehen dem Unternehmen 65'534 mögliche
Knotenadressen zur freien Verfügung. Da man jedoch Ethernet einsetzt,
können maximal 1'024 Knoten in einem Segment eingebunden werden. Die
Implementierung weiterer Systeme erfordert das Nutzen eines Routers oder
einer Bridge. Um nun trotzdem die erste angestrebte Anzahl Knoten zu erreichen,
muss ein zweites autonomes Kabelsystem angelegt werden, welches aufgrund
des regen Datenverkehrs mittels Router an das erste angeschlossen wird.
Konventionelle Router erfordern, dass den jeweiligen Schnittstellen differente
IP-Adressen zugeteilt werden. Obwohl von den 65'534 Adressen der Klasse
B nur 1'024 gebraucht wurden, können die restlichen 64'510 Adressen
nicht verwendet werden; also offenbahrt sich eine Vergeudung in höchstem
Masse. Damit der Router einwandfrei arbeiten kann, muss ihm eine zweite
IP-Adresse der Klasse B zugeteilt werden, und damit sind erneut ganze 65'510
IP-Adressen verschwendet. Dieses Vorgehen ist aus technischer Sicht in
keinster Weise akzeptabel; abgesehen von privaten autonomen Netzwerksystemen
ohne registrierte IP-Adressen.
Das Internet Protokoll bedient sich ARP,
um die MAC-Adresse einer Einheit zu ermitteln, sofern die Netznummer in
der eigenen IP-Adresse der des Empfängerknotens entspricht. Andernfalls
kommt ein routendes Element (Router oder Gateway) zum Einsatz. Damit möglichst
wenige IP-Adressen verschleudert werden, ist es aus technischer Sicht wünschenswert
den beiden Interfaces des routenden Systems die gleiche Netznummer zuzuteilen.
Wird jedoch dieselbe Netznummer verwendet, muss man ein Verfahren finden,
mit dem man die Richtung der Weiterleitung von Datagrammen eindeutig erkennen
kann. Proxy ARP ist in diesem Fall einer der Schlüssel.
Proxy ARP kann auf verschiedenste Weisen
implementiert werden. Als die effizienteste Methode ist die Zuordnung von
Bits in der IP-Adresse, anhand derer unterschiedliche Subnetze identifiziert
werden können, anzusehen. Das Relais kann als eine Art Puffer die
unnötigen ARP-Rundsendenachrichten abblocken, da nur die an andere
Subnetze adressierten Broadcasts weitergeroutet werden müssen. Damit
kann der überschüssige Netzwerkverkehr eingedämmt und die
Performance gewahrt werden. Die einzigen Hops, die die elementaren Bits
zur Kennzeichnung der verschiedenen Subnetze erkennen können müssen,
sind die Proxy ARP-Geräte. Natürlich erfordert das erreichen
dieses Ziels eine durchdachte Zuweisung des richtigen Adressbereichs von
seiten des Netzwerkadministrators. Beispielsweise könnten die ersten
vier Bits des Host-Anteils der IP-Adresse zur Identifizierung der verschiedenen
Subnetze eingesetzt werden. Dabei wird jedoch nicht, wie von vielleicht
vielleicht vermutet, mit Subnetz-Masken gearbeitet oder ist die Adressenstruktur
des Endknotens bekannt. Es können nun also 14 Subnetze dadurch definiert
werden (Die Subnetze 0 und 15 finden in diesem Beispiel aus Gründen
der Einfachheit keine Verwendung!). Empfängt nun die Schnittstelle
1 eine ARP-Anforderung, überprüft die Proxy ARP-Vermittlungseinheit
die Bits in der Knotenadresse darauf, ob die Nachricht ein anderes Subnetz
kennzeichnet. Wird der Gutfall erkannt, findet eine Weiterleitung an die
Schnittstelle 2 statt. Dort wird dann die Absenderadresse durch jene der
Proxy ARP-Schnittstelle 2 ersetzt und als üblicher ARP-Broadcast ins
Neuland geblasen. Die jüngst von der ganzen Aktion betroffene Proxy
ARP-Einheit speichert die in der ARP-Antwort vermerkte MAC-Adresse des
Absenders-, sowie des Empfängerknotens und vermerkt an welcher
Schnittstelle sich diese befinden. Wird vom Absender nun nocheinmal ein
Datagramm an die Schnittstelle 1 des Routers gesandt, enthält dieser
bereits die Empfängeradresse der Proxy ARP-Einheit. Das Datagramm
wird daher direkt von der Proxy ARP-Einheit angenommen. Die Proxy ARP-Einheit
ersetzt nun wiederum die tatsächliche MAC-Adresse des Empfängerknotens
und sendet das modifizierte Datagramm an die Schnittstelle 2. Diese Methode
funktioniert nur, wenn die beiden Endknoten die Gültigkeit der MAC-Adressen
in den jeweiligen ARP-Antworten nicht überprüfen. Es ist durch
dieses ganze Prozedere möglich, mit einer beliebigen MAC-Adresse zu
antworten, die als Ersatz eines anderen Knotens fungiert. Der ARP-Cache
eines Endknotens, der sich in einem Proxy ARP-System befindet, enthält
die MAC-Adresse der Proxy ARP-Einheit, die vielen IP-Adressen zugeordnet
ist. Diverse Firewall-Systeme erlauben das verwerfen von durch Proxy ARP
modifizierte Datagramme, um so entfernte Manipulationen am ARP-Cache zu
unterbinden.
Proxy ARP stellt also eine Alternative
zum Einsatz von Brücken dar, da es zwei unterschiedliche Kabelsysteme
mit derselben IP-Netznummer verbinden kann. Proxy ARP ist für das
Übertragen von Rahmen zwischen den verschiedenen Netzen und das Filtern
überflüssiges Datenaufkommens zuständig. Proxy ARP ist vor
allem in archaischen Netzwerken gern genutzt, die den Internet-Standart
der Subnetz-Adressierung nicht unterstützen. Als einziger Nachteil
beim Einsatz von Proxy ARP in solch veralteten Netzwerksystemen ist der
relativ hohe Verwaltungsaufwand anzusehen, der duch die Abbildung der Subnetz-Adressstruktur
auf die jeweils anderen Kabelsysteme entsteht.
Proxy ARP und Router
Viele Router verwenden per Default-Einstellung
Proxy ARP, auch wenn keine Subnetz-Adressierungsschema zum Einsatz kommen.
Das Router-Element greift insofern beim Empfang einer ARP-Anforderung für
ein anderes Netz oder Subnetz manipulativ in das Geschehen ein, indem es
seine eigene MAC-Adresse in der ARP-Antwort zurückschickt. Zur Übermittlung
des Datagramms an den Empfänger werden die herkömmlichen Routenwahl-Mechanismen
eingsetzt. Dieser Fall kann jedoch nur eintreten, wenn ein verwirrter oder
falsch konfigurierter Rechner das Gefühl des Befindens in einem anderen
Netz hat,und der Router sich an ein anderes Bild der Adressenstruktur klammert.
Es läge also ein klassischer Adressierungs-Fehler vor, da zwei Geräteeinheiten
die IP-Adresserungsschematas komplett anders interpretieren. Grund dafür
kann die Wahl unterschiedlicher Subnetz-Masken sein. Die beiden Geräte
würden so mit einer Netzstruktur arbeiten, die für die Opposition
nicht erkennbar und verständlich ist.
Denial of Service durch ARP-Stürme
Der Denial of Service-Angriff mittels ARP-Sturm
hat die Überlastung einer Netzwerkkomponente oder eines Netz(abschnitt)es
zur Folge, was unter Umständen einen weiteren weniger destruktiven
Angriff erst ermöglicht (z.B. IP-Spoofing). Die Extremsituation tritt
ein, wenn ARP-Broadcasts eine non-existente IP-Adresse in Erfahrung bringen
versuchen. Alle an das Netzwerk angeschlossenen Gateways beginnen alsdann
mit dem Weiterleiten der Anfrage an die Nachbarnetze. Ganz extrem wird
dieser Angriff, wenn nach dem ersten Briadcast-Sturm synthetische ARP-Rückantworten
der nicht existierenden Adresse versendet werden, die wiederum von den
Gateways per Broadcast zur finalen Verstopfung des Netzes weiterverbreitet
werden. Solche Broadcast-Stürme belegen rasch einen Grossteil der
Netzwerkkapazität und lassen die Performance in den Keller sinken.
Wichtig ist in sensiblen Umgebungen im Vorfeld das sogenannte Media-Speed-Verhalten
durch experimentell simulierte Extremsituationen in Erfahrung zu bringen.
HAVOC für UNIX/Linux ist ein beliebtes Tool zum Erzwingen von ARP-Stürmen.
Denial of Service durch ARP-Fehlimplenetierungen
Auch auf Fehlimplementierungen der ARP-Funktionalität
können Denial of Service-Attacken abzielen, wie im NetBSD Security
Advisory 1999-010 (ARP table vulnerability) berichtet wird: obsd_fun.c
schickt übergrosse ARP-Pakete an eine OpenBSD 2.6-Maschine, und zwing
sie so zur Kernel-Panik. Aber nicht nur UNIX-Derivate sind von solchen
Schlampereien betroffen. Auch Microsot Windows kann mit den C-Scripts winarp.c
und poink.c auf die Pelle gerückt werden. Diese Angriffs-Form wird
im Thread von Joel Jacobson in Bugtraq erstmals vorgestellt. Ähnliche
Diskussionen finden sich in den beiden Threads von Andrew Lancashire und
Lisa Napier über DoS-Attacken auf Cisco-Systeme, und von Scott Blake
über Cabletron-Router, durch das Überfluten der ARP-Tabelle.
Angriffe durch ARP-Spoofing
Ein Angreifer versucht beim ARP-Spoofing
seine Hardware-Adresse zu behalten, aber die IP-Adresse eines vertrauenswürdigen
Hosts anzunehmen. Dazu manipuliert der Bösewicht remote durch falsche
Mapping-Informationen den Cache seines Opfers. Verlauft seine Attacke erfolgreich,
werden von da an alle Pakete vom Ziel an die Hardware-Adresse des Angreifers
geleitet. Das Opfer glaubt nun faktisch daran, dass der Rechner des Angreifers
der vertrauenswürdige Host ist. Auf Rootshell publizierte Yuri
Volobuev einen interessanten Artikel, der auf solche Redirect-Attacken
mittels ARP und ICMP eingeht.
ARP-Spoofing unterliegt jedoch einigen
Einschränkungen, die es für viele Angreifer nicht gerade attraktiv
macht: Zum einen kann intelligente Hardware solche Attacken im Sande verlaufen
lassen, zum anderen verlieren unter Umständen Cache-Einträge
von ARP schnell ihre Gültigkeit. Der Angreifer muss daher stets den
ARP-Cache des Opfers neu überreden, was an der Effizienz des Angriffs
zu kratzen vermag. Ausserden ist ein in den Promiscous-Mode geschaltetes
Interface in einem Ethernet-System genauso effizient für das unerlaubte
Auslesen von Informationen.
Es existieren diverse Programme - wie zum
Beispiel die Linux-Utilities ARP-Fun und ARPMITM -, die solche Angriffe
auf einfachste Weise ermöglichen. Für ARPTool, ein weiteres Tool
dieser Sparte, existiert sogar ein grafisches Frontend mit zusätzlichen
Features (z.B. Automatisiertes MAC-Sniffing) namens Switch Fucker. Ein
witziges Feature bietet das Paket mit den BSD-Utilities conflict-DoS.c
und conflictd.c von Noupe: Durch gespoofte ARP-Pakete können WinPopUp-Nachrichten
auf Windows-Clients erzeugt werden. Einen Schritt weiter geht da das simple
Smit von Paul Starzetz, welches in ungeswitchten und geswitchten Netzwerken
ARP-Hijacking ermöglicht.
Sich ARP-Spoofing bedienenden Angreifern
den Gar aus zu machen, bedarf das statische Festlegen der ARP-Tabelle.
Dies kann jedoch unter umständen sehr zeitaufwendig und nervenaufreibend
sein, wodurch dieser Methode höchstens den Titel Notlösung zugesprochen
werden kann. Eine zusätzliche Massnahme oder mindestens gleichwertige
Alternative stellt das Utility ARPWwatch von Craig Leres dar, welches nach
Veränderungen der IP-/Ethernet-Mappings Ausschau hält. Werden
Änderungen bemerkt, findet eine Alarmierung per E-Mail statt. Zudem
werden die Manipulationen für eine spätere Analyse protokolliert. |