ARP-Grundlagen und Spoofing

27.01.2005 von THOMAS LEICHTENSTERN 
Kaum ein Administrator nimmt das Netzwerkprotokoll ARP wahr, da es im Normalfall problemlos im Hintergrund seine Dienste verrichtet. Jedoch sind mit diesem Protokoll erhebliche Gefahren verbunden, derer viele sich oft nicht bewusst sind.

Von vielen Administratoren wird das Adress-Resolution-Protokoll (ARP) oft eher stiefmütterlich behandelt, obwohl es einen Grundbaustein eines jeden IP-Ethernets darstellt. Einer der Gründe dafür ist sicherlich, dass es im Hintergrund meist problemlos läuft und kaum der Pflege bedarf.

Dies ist jedoch nur auf den ersten Blick der Fall, denn ARP birgt ein hohes Gefahrenpotenzial, dessen sich die meisten Verantwortlichen oft nicht bewusst sind. Seit vielen Jahren gehören Man-in-the-Middle-Attacken, die auf den Missbrauch von ARP zurückzuführen sind, zum festen Repertoire vieler Hacker. Ein Grundwissen über dieses Protokoll hilft, solche Gefahren zu erkennen und gegebenenfalls zu vermeiden, bevor es zu daraus resultierenden Schäden kommt.

In diesem Artikel erfahren Sie, wie das Protokoll funktioniert, wofür es benötigt wird und wie Sie sich gegen die missbräuchliche Benutzung von ARP in Ihrem Netzwerk schützen.

Grundlagen und Funktionsweise

Für die IP-Kommunikation über das Ethernet ist ARP ein unverzichtbarer Bestandteil, da die eigentliche Adressierung im Ethernet anhand der MAC-Adressen stattfindet. Eine MAC-Adresse (Medium Access Control) ist eine auf der Netzwerkkarte festgelegte Kennung, die im Normalfall einzigartig und unveränderbar ist. Die MAC-Adresse hat eine Länge von 48 Bit und wird in der Regel hexadezimal geschrieben.

Die ersten 24 Bit dieser Adresse beinhalten die Herstellerkennung der Netzwerkkarte, die von der IEEE (Institute of Electronic Engineers) vergeben wird. Zum Beispiel die MAC-Adresse 00-0D-56-XX-XX-XX können Sie somit als die zugehörige Netzwerkkarte von Dell identifizieren. Eine Liste aller herstellerbezogenen MAC-Adressen finden Sie unter standards.ieee.org.

ARP stellt das Bindeglied zwischen IP- und MAC-Adresse dar. Bevor ein IP-Paket verschickt werden kann, ist die MAC-Adresse des Zielrechners zu ermitteln. Dazu versendet ARP einen Broadcast (Rundruf) mit der Frage "who has <IP-Adresse>". Ist der Ziel-Host online, antwortet dieser mit einem an den Absender gerichteten ARP-Reply "<IP-Adresse> is at <MAC-Adresse>". Diese Antwort speichert der Rechner temporär im ARP-Cache, um weitere Anfragen zu vermeiden.

Funktionsbeispiele

Rechner A hat die IP-Adresse 192.168.20.10/24, Rechner B die IP-Adresse 192.168.20.20/24. Beide Rechner befinden sich entsprechend im gleichen Netzwerksegment. Will Rechner A Daten an Rechner B senden, sucht er zuerst im eigenen ARP-Cache, ob ein Eintrag von Rechner B bereits vorhanden ist. Ist das der Fall, versendet er das Paket direkt an die hinterlegte MAC-Adresse.

Andernfalls startet Rechner A einen Rundruf (Broadcast) an alle Hosts im gleichen Netzwerksegment "Who has 192.168.20.20". Ist der Zielrechner im Netzwerk online, sendet dieser ein an den Fragesteller gerichtetes ARP-Reply, in dem er ihm die MAC-Adresse mitteilt. Erst danach beginnt der eigentliche Datentransfer.

Etwas komplizierter gestaltet sich die Kommunikation von Hosts, die sich nicht im gleichen IP-Netzwerksegment befinden. In diesem Fall durchsucht der IP-Stack zuerst die Routing-Tabelle nach dem Gateway, an den das Paket gesendet wird. Im nächsten Schritt löst ARP die IP-Adresse des zuständigen Routers abermals mit einem "who has" auf, nicht jedoch die Adresse des eigentlichen Empfängers. Das übernimmt im Anschluss der Router, der für das Netzwerksegment zuständig ist, in dem sich der eigentliche Empfänger befindet.

Wie im Diagramm dargestellt, baut Host A (192.168.20.10/24) eine Verbindung zu Host C (192.168.10.10/24) auf. In diesem Fall wird Host A keinen ARP-Request ("who has 192.168.10.10") stellen, sondern die Verbindungsanfrage an den Router weiterleiten, der laut seiner Routingtabelle dafür zuständig ist. Diesen löst der Versender-Host jedoch mit einem ARP-Request ("who has 192.168.20.254") auf.

Für die weitere Adressierung ist im Anschluss der Router zuständig, indem er im für ihn zuständigen IP-Netzwerksegment den Rundruf "Who has 192.168.10.10" startet. Läuft die Kommunikation über mehrere Router im Ethernet, verfährt jeder weitere wie Rechner A; er leitet die Anfrage an das zuständige Gateway weiter, das für das entsprechende Netzwerksegment zuständig ist.

Das unterschätzte Risiko

ARP ist ein eher einfaches Protokoll, das keinerlei Sicherungsmechanismen gegen missbräuchliche Benutzung vorsieht. Im Normalfall antwortet auf den ARP-Request der potenzielle Empfänger mit einem an den Versender gerichteten ARP-Reply, das seine MAC- und IP-Adresse enthält. Das Protokoll stellt keine Möglichkeit bereit, zu verifizieren, ob diese Information stimmt. Aus diesem Grund kann jeder beliebige Host im Netz auf diese Anfrage antworten und seine eigenen Werte als richtig deklarieren.

Auch wenn der "echte" Host zuerst auf den Rundruf antwortet, überschreiben später eintreffende Informationen die alten Einträge im ARP-Cache des Versenders. Das Gleiche geschieht beim Empfang von ARP-Replies, denen kein ARP-Request vorausgeht. Ein Angreifer muss mit einem Programm wie Ettercap lediglich entsprechende ARP-Replies an seine Opfer versenden, um die Zuordnungen zu seinen Gunsten zu verändern und den Datenstrom auf einen Rechner seiner Wahl umzuleiten.

Das vorgestellte Verfahren wird für eine Reihe verschiedener Angriffsmethoden verwendet, die alle zum Ziel haben, den Datenstrom zwischen kommunizierenden Hosts mitzulesen.

Klassisches ARP-Spoofing

Beim ARP-Spoofing wird dem Absender eine falsche Adresszuordnung übermittelt. Ein Anwendungsbeispiel aus der Praxis ist das Fälschen des DNS. Der Angreifer bekommt dadurch die Möglichkeit zu kontrollieren, welche Adressen wie aufgelöst werden, da er anstelle des eigentlichen Name-Servers diese Auflösung übernimmt. Dadurch ist er in der Lage, Adressen vertrauenswürdiger Seiten auf eigene Server umzuleiten, um beispielsweise eingegebene Passwörter oder PINs in Erfahrung zu bringen.

Ein anderes Beispiel ist das Spoofen des DHCP-Servers. Da zusätzlich zur IP-Adresse noch diverse andere Daten wie das Gateway oder die Adresse des Nameservices übertragen werden, ist der Angreifer dadurch in der Lage, die Kommunikationswege des Rechners zu manipulieren, um damit eine Man-in-the-Middle-Attacke einzuleiten.

Man in the Middle

Generell ist darunter zu verstehen, dass die Kommunikation zwischen zwei Verbindungspartnern transparent über einen dritten Host läuft. Transparent heißt in diesem Zusammenhang, dass weder der Absender noch der Empfänger bemerken, dass sie eigentlich nicht direkt miteinander verbunden sind, sondern über einen dritten Host, der ähnlich wie ein Gateway die Informationen weiterleitet. Realisiert wird das auf verschiedene Weisen, abhängig davon, welche Verbindung betroffen ist. Befinden sich beide Hosts im gleichen Subnetz, versendet der Angreifer seine eigene MAC-Adresse an beide Hosts mit der IP-Adresse des jeweils anderen. Sowohl Rechner A als auch Rechner B verbinden sich mit Rechner C in dem Glauben, miteinander verbunden zu sein.

Verbindungen zu Hosts außerhalb des eigenen Netzwerksegments werden über das Spoofen des entsprechenden Gateways realisiert. Auf diesem Weg können sämtliche Verbindungen in andere Netzwerke manipuliert und mitgelesen werden. Dies betrifft auch verschlüsselte https-Verbindungen. Der Angreifer übermittelt dem Client zu diesem Zweck ein eigenes, gefälschtes Zertifikat und leitet die Verbindung ähnlich eines Proxies weiter an den eigentlichen Server. Da es sich im Regelfall um ein so genanntes "untrustet Certificate" handelt, geben gängige Browser wie Internet Explorer und Firefox jedoch eine entsprechende Warnmeldung aus. Die Daten werden in diesem Fall vom Man in the Middle transparent für die eigentlichen Verbindungspartner entschlüsselt, mitgelesen und verschlüsselt an den eigentlichen Adressaten weitergeleitet.

Connection Hijacking

Connection Hijacking ist vergleichbar mit einem Man-in-the-Middle-Angriff. Der Unterschied ist, dass bestehende Verbindungen übernommen werden. Anwendung findet dies in erster Linie bei unverschlüsselten Protokollen wie Telnet, die eine kontinuierliche Verbindung aufbauen. In die Kommunikation von verschlüsselten Verbindungen kann der Angreifer auf diese Weise nicht mehr eingreifen, da er nicht im Besitz der dafür notwendigen Schlüssel ist.

Schutzmaßnahmen

Weist der ARP-Cache mehrere Einträge mit identischen MAC-Adressen auf, ist das ein Indiz, dass diese gespooft wurden. Dies muss jedoch nicht zwingend der Fall sein, da ein Host über mehrere IP-Adressen auf dem gleichen Netzwerk-Device verfügen kann; in der Regel findet das jedoch nur bei Servern Anwendung.

Eine effektive Maßnahme, um den Missbrauch von ARP vorzubeugen, ist die Verwendung von Layer-3-Switches. Das Konzept dieser Switches sieht vor, die Verbindung nicht nur anhand der MAC-Adresse zu identifizieren, sondern auch anhand der IP-Adresse. Häufige Änderungen der MAC/IP-Zuordnung (flip-flop) werden vom Switch bemerkt und gegebenenfalls verhindert. Einziger Haken ist der im Verhältnis zu herkömmlichen Layer-2-Switches hohe Preis ab etwa 700 Euro.

Speziell für größere Netzwerke wird eine Umrüstung der Switches deshalb schnell zu einem beachtlichen Kostenfaktor. Managed Layer-2-Switches sind zwar in der Lage, die Veränderung der MAC-Adresse an einem überwachten Port wahrzunehmen, nicht jedoch die veränderte Zuordnung zu IP-Adressen.

Abhilfe schafft auch die richtige Konfiguration der Hosts im Netz, um zumindest die wichtigsten Angriffsziele wie den Gateway, DNS oder Mailserver gegen einen Man-in-the-Middle-Angriff zu sichern.

Konfiguration unter Windows

Alle modernen Windows-Versionen bringen von Hause aus das Kommandozeilen-Programm "arp" mit, über welches der Anwender den ARP-Cache auslesen und beeinflussen kann.

arp -a (zeigt den ARP-Cache an)
arp -s <IP-Adresse> <MAC-Adresse> (fügt einen statischen Eintrag hinzu)
arp -d <IP-Adresse> (löscht einen Eintrag)

Der Aufruf des folgenden Kommandos löscht den kompletten ARP-Cache.

netsh interface ip delete arpcache

Als vorbeugende Schutzmaßnahme ist empfehlenswert, wichtige Einträge wie verwendete Gateways oder Name-Services, die sich im gleichen Netzwerksegment befinden, statisch in den ARP-Cache einzutragen. Mit einer Batch-Datei, die beim Systemstart geladen wird, ist das problemlos zu bewerkstelligen.

Erzeugen eines statischen ARP-Caches

Gehen Sie zum Absichern bestimmter Hosts wie folgt vor:

1. Pingen Sie die Hosts an, die Sie statisch eintragen möchten. Dadurch wird ein Eintrag im ARP-Cache generiert, den Sie wie oben beschrieben auslesen können.

2. Erstellen Sie eine Datei "arpstart.bat" und öffnen Sie diese mit dem Texteditor.

3. Fügen Sie die Adressen wie folgt in diese Datei ein:

arp -s <IP-Adresse> <MAC-Adresse>

als Beispiel:

arp -s 192.168.20.11 00-30-c1-5e-68-74
arp -s 192.168.20.12 00-05-01-0e-63-21
arp -s 192.168.20.13 00-03-12-53-68-11

4. Legen Sie in der Registry im Verzeichnis HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\Run einen neuen Eintrag als Zeichenfolge (REG-SZ) an und verweisen Sie damit auf die erstellte Batch-Datei; zum Beispiel c:\\arpstat.bat. Damit wird bei jedem Systemstart das Skript geladen und die Einträge fest in den Cache geschrieben.

Ein Fehler in der ARP-Implementierung von Windows 2000 und Windows XP erlaubt jedoch, auch einen statischen ARP-Cache zu überschreiben, weswegen vor der Installation des statischen ARP-Caches die entsprechenden Hotfixes zu installieren sind. Diese finden Sie unter http://support.microsoft.com/kb/842168 für Windows 2000 und unter http://support.microsoft.com/kb/842169 für Windows XP.

ARP-Tuning über die Windows Registry

Praktisch alle modernen Microsoft-Betriebssysteme versenden beim Systemstart einen so genannten Gratuitous ARP-Request mit ihrer eigenen IP-Adresse. Bekommt das System einen ARP-Reply, der das Vorhandensein der eigenen IP-Adresse im Netz anzeigt, verweigert Windows mit der Fehlermeldung "Microsoft Windows konnte sich nicht an das Netzwerk anmelden, da die IP-Adresse bereits vergeben ist" die Anmeldung im Netzwerk.

Dies funktioniert jedoch nur im homogenen Windows-Netzwerk, da diese Funktion beispielsweise in Linux-Maschinen nicht implementiert ist. Entsprechend überprüft Linux weder beim Systemstart das Vorhandensein anderer Rechner mit derselben IP-Adresse, noch reagiert es auf Anfragen anderer Rechner diesbezüglich.

Die genauen Spezifikationen von Mobile IP, das auch Gratuitous ARP beschreibt, können Sie im RFC 3344 nachlesen.

Schwerwiegende Funktions- oder Performance-Einbußen sind bei der Vergabe von identischen IP-Adressen im gleichen Netzwerksegment vorprogrammiert. Unter bestimmten Umständen ist es jedoch hilfreich, diesen initialen Broadcast zu unterdrücken. Windows ab Version NT 4 sieht dafür einen Registry-Schlüssel vor, der diesen Rundruf beim Systemstart deaktiviert.

1. Öffnen Sie mit dem Registry-Editor das Register.

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\ Tcpip\\Parameters.

2. Setzen Sie den Wert des Eintrags ArpRetryCount auf "0".

Sollte dieser Eintrag (wie etwa bei Windows XP) noch nicht vorhanden sein, erstellen Sie diesen als DWORD-Wert und verfahren Sie wie oben.

Ebenfalls über die Registry lässt sich die Zeitspanne beeinflussen, in der ARP-Einträge im Cache gehalten werden. Im Normalfall sind dies beim Erstkontakt zwei Minuten; folgt ein weiterer Datenaustausch, wird die Zeit auf zehn Minuten hochgesetzt. Um das Netz vor überflüssigen ARP-Requests zu entlasten und den Verbindungsaufbau zu beschleunigen, ist dieser Wert auf eine vom Anwender festgelegte Zeit korrigierbar.

1. Öffnen Sie mit dem Registry-Editor das Register

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\ Tcpip\\Parameters

2. Erstellen Sie als REG-DWORD den Eintrag ArpCacheLife und geben Sie im Anschluss die Zeit in Sekunden an, die zukünftig Einträge im Cache gehalten werden sollen.

Tools für Windows

Als präventive Schutzmaßnahme empfiehlt es sich, in jedem Netzwerksegment das Tool XArp im Hintergrund mitlaufen zu lassen. Das Programm protokolliert sämtliche Veränderungen in der Zuordnung zwischen IP-und MAC-Adresse und stellt diese übersichtlich dar.

Auf ähnliche Weise funktioniert das Programm WinARP-Watch, das von arpwatch für Linux abgeleitet ist. Sowohl WinARP-Watch als auch XArp beobachten jedoch ausschließlich den ARP-Cache des Rechners, auf dem sie installiert sind, nicht jedoch der ARP-Requests und Replies im Netzwerk - wie arpwatch für Linux dies macht.

Konfiguration unter Linux

Ähnlich wie Windows, verfügen auch Linux-Systeme über ein Userspace-Programm, um den ARP-Cache auszulesen und zu bearbeiten. Die Syntax ist weit gehend identisch mit dem Unterschied, dass die Ausgabe arp -n die Host-Namen der angezeigten Einträge nicht auflöst, wie das bei arp -a der Fall ist.

Auch unter Linux lässt sich ein statischer ARP-Cache einrichten. Legen Sie dazu eine Liste der Hosts, deren Zuordnung statisch in den Cache geschrieben wird, in einer Datei an und rufen Sie

arp -f <Dateiname>

auf. Dieses Kommando liest die Datei aus und schreibt deren Inhalt in den ARP-Cache. Um diesen Vorgang beim Start zu automatisieren, legen sie im Runlevel 4 oder 5 ( /etc/rc4.d oder /etc/rc5.d) ein entsprechendes Startscript an.

Tools für Linux

Ein sehr wichtiges Programm, um Unregelmäßigkeiten in der Zuordnung MAC/IP-Adresse aufzuspüren, ist das Tool arpwatch.

Im Gegensatz zu den Utilities für Windows ist arpwatch in der Lage, nicht nur Veränderungen im eigenen ARP-Cache zu protokollieren, sondern auch geänderte Zuordnungen, die via Broadcast ins Netz gesendet werden. Dazu schaltet arpwatch die gewählte Netzwerkkarte in den so genannten Promiscuous Mode. Veränderungen werden dem Systemadministrator via Mail mitgeteilt.

Speziell in größeren Netzen meldet arpwatch beim ersten Start natürlich erst einmal eine Menge neu erkannter Hosts, bis alle im Netzwerk befindlichen Geräte erfasst sind. Etwas problematisch gestaltet sich die Verwendung von arpwatch in DHCP-Netzwerken, da bei Verwendung kurzer Lease Times jede Änderung der Zuordnung protokolliert wird.

Fazit

Das Risiko, das von ARP ausgeht, ist nicht zu unterschätzen. Jedoch reichen oft schon einige kleine Änderungen, um sowohl das Netz sicherer zu machen, als auch solche Attacken aufzuspüren.

Der sicherste, aber auch teuerste Weg ist sicherlich das Verwenden geeigneter Layer-3-Switches. Das Einrichten eines statischen ARP-Caches, der die wichtigsten Host-Zuordnungen festlegt, reicht jedoch oft schon aus, um zumindest einen Grundschutz vor ARP-Spoofing zu gewährleisten.

Jedoch hat diese Methode auch ihre Grenzen. Hosts, deren IP-Adresse sich regelmäßig ändert, sind ebenso wenig zur Erfassung geeignet wie Load-balanced- und Fail-over-Systeme, die mit mehr als einer Maschine nach außen hin auftreten. Auch als Schutz gegen gespoofte DHCP-Server ist diese Art der Vorbeugung wirkungslos, da der Kontakt zu diesem bereits hergestellt ist, bevor der statische ARP-Cache geladen wird. (tle)