Es ist viel zu einfach, MAC-Adressen im WLAN zu erkennen. Was wie eine Schwachstelle aussieht, liegt aber vielmehr an der Art wie Netzwerke funktionieren, egal ob kabelgebunden oder drahtlos. Beim Datenaustausch zwischen verschiedenen Netzwerk- oder WLAN-fähigen Geräten muss klar festgelegt sein, wer Sender und Empfänger eines Datenpaketes ist. Um jeden Teilnehmer eindeutig im Netzwerk zu erkennen, besitzt er eine einzigartige Kennung, die sogenannte MAC-Adresse. Diese Adresse ist so elementar, dass sie bereits in Schicht 2 des OSI-Modells auftritt.
Mit der MAC-Adresse wird ein Netzwerkteilnehmer identifiziert. Neben anderen IEEE-802-Frames gilt das auch für WLAN-Frames und geschieht im MAC-Header. So lässt sich ein Paket genau adressieren. Und diese Adressierung muss öffentlich sein, ansonsten klappt es nicht. Vergleichbar mit einer Briefsendung bei der Post: Auf einem Brief steht für theoretisch jeden lesbar, wer Absender und Empfänger des Briefes ist. Der Inhalt selbst wird jedoch durch den Briefumschlag geschützt. Würde man den Empfänger verschlüsseln, wird es schwer, den Brief überhaupt zuzustellen.
Genau dieses Prinzip findet beim Austausch von Frames nach IEEE 802 statt. Was sich bei 802.3 Ethernet allerdings nur im Kabel abspielt, wird bei 802.11 WLAN durch die Luft übertragen. Während beim klassischen Ethernet der physische Zugriff auf das Kabel die Grundvoraussetzung ist, um die Frames auszulesen (und damit auch die MAC-Adressen einzelner Netzwerkteilnehmer) genügt beim WLAN das einfache Mithören auf der Luftschnittstelle, also das Belauschen von Funksignalen. Nennt sich übrigens eavesdropping und ist ähnlich dem Belauschen von Telefonaten verboten, wenn ohne Erlaubnis ausgeführt.
Und deshalb ist es ein Leichtes, MAC-Adressen in der WLAN-Kommunikation auszulesen. Denn elektromagnetische Wellen machen leider nicht an der Gebäude- oder Grundstücksgrenze halt. Es spielt auch keine Rolle, ob es sich um ein offenes oder verschlüsseltes WLAN handelt. Wie bei der Post sind die Briefumschläge sehr gut lesbar, erst der Inhalt der Umschläge wird durch die beiden Prinzipien Authentifizierung und Verschlüsselung geschützt. So kann man ohne weiteres auslesen, wer Sender und Empfänger eines Datenpaketes ist. Immerhin ist der Inhalt der meisten Pakete durch die Mechanismen im WLAN geschützt (Data Frames). Die Verschlüsselung setzt aber eigentlich viel zu spät ein. Technisch ist das allerdings gar nicht anders möglich. Wird Verschlüsselung aber eingesetzt, ist der Verkehr aus Schicht 3-7 geschützt.
Drei Methoden zum Auslesen der MAC-Adresse im WLAN
Um über den Sachverhalt zu sensibilisieren und auf mögliche Folgen in Verbindung mit anderen Vektoren hinzuweisen, möchte ich darstellen, wie einfach es ist, die MAC-Adressen von Teilnehmern einer bestimmen SSID zu sammeln. So ist die MAC-Adresse beispielsweise Voraussetzung für MAC-spoofing bzw. piggy-backing. Zu einer der aktuellsten Entwicklungen gehört sicherlich, dass MAC-Adressen unter iPhone und Android aus Datenschutzgründen mittlerweile dynamisch randomisiert werden.
Wichtig: Ich teste das Vorgehen an meinem eigenen WLAN, so brauche ich keine (rechtlichen) Folgen fürchten. Schließlich ist es kein Problem, mein eigenes WLAN zu debuggen und zu troubleshooten, dafür habe ich quasi das Einverständnis des Betreibers, also von mir selbst.
Per Smartphone-App (wenn man sich im gleichen WLAN-befindet)
Die App WiFiman (Android und iOS) habe ich in meinem Artikel bereits vorgestellt. Sie zeigt ganz bequem und ohne technische Vorkenntnisse alle Teilnehmer des gleichen WLANs an. Je nach Konfiguration des Netzwerkes werden sogar kabelgebundene Endgeräte gefunden, denn die App scannt nach anderen Geräten auf Layer-3-Ebene. Passt eigentlich nicht zum heutigen Artikel, funktioniert aber so bequem, dass ich das erwähnen wollte. Und man sollte ja ohnehin nur das eigene WLAN troubleshooten.
Der Scan klappt allerdings nur, wenn er vom WLAN-Access-Point nicht verhindert wird. Während eine tolerante Einstellung im Heimnetzwerk oft sogar gewünscht ist (damit sich smarte WLAN-Lautsprecher, intelligente Lampen oder sonstige IoT-Devices im WLAN gegenseitig finden können), sollte die Einstellung in Gäste-WLANs unbedingt geändert werden. Im Gäste-WLAN sollten sich die Endgeräte der Teilnehmer auf keinen Fall gegenseitig sehen. Bei Aruba zum Beispiel versteckt sich die Funktion hinter dem Namen „Deny inter user bridging“ während Ubiquiti beispielsweise ähnliche Funktionen unter „Client isolation“ verbirgt. Ist der Schutz aktiviert, leitet der Access Point keine Layer-3-Anfragen zu anderen Endgeräten weiter und das Ergebnis in WiFiman sieht aus wie in Bild 3.
Per Wireshark
Ein beliebtes Werkzeug zum Auslesen von Layer-2-Informationen wie die MAC-Adresse ist Wireshark. Wireshark gehört zum Werkzeugkasten eines jeden WLAN-Betreibers und ist ein sogenannter Protocol Analyzer. Wireshark dient der Diagnose von Vorgängen im WLAN-Verkehr. Wie die Paketmitschnitte erstellt werden, habe ich bereits erklärt, zum Beispiel mit Aruba Access Points.
Um nun an die MAC-Adressen zu kommen, muss der erstellte Paketmitschnitt zunächst in Wireshark geöffnet werden. Im Bereich Paketdetails werden die IEEE 802.11 Informationen für jedes Paket gelistet. Die MAC-Adresse des Empfängers findet man unter „Receiver address“ sowohl für Management Frames, Control Frames und auch Data Frames (Bild 4).
Der Übersichtlichkeit wegen empfehle ich unbedingt, den Wert als Spalte in der Paketübersicht anzuzeigen. Dazu auf „Receiver address“ rechtsklicken wie in Bild 5 gezeigt. Bild 6 zeigt dann das Resultat an: Pro Zeile wird in einer eigenen Spalte die Empfängeradresse des entsprechenden Paketes angezeigt. Einfacher ist eine Analyse kaum möglich.
Per airodump-ng (und Wireshark) unter Linux
Wer seinen Paketmitschnitt unter Linux erstellt, kann Wireshark direkt mit der WLAN-Schnittstelle verbinden, noch während diese im monitor mode arbeitet. Schritt für Schritt habe ich das im Artikel zum AWUS036ACH erläutert. Der Link führt direkt zum passenden Abschnitt.
Sobald die ersten Pakete in Wireshark auftauchen, empfiehlt sich wieder das Anlegen einer neuen Spalte mit den Empfängeradressen, wie durch Bild 5 und 6 oben erklärt.
Eingrenzung auf Teilnehmer einer SSID mit JavaScript-Tool
Alternativ können die von airodump-ng erfassten Pakete auch in eine Datei geschrieben werden. Der sogenannte Dump beinhaltet vier Dateien: Die *.cap-Datei für Wireshark und eine *.csv-Datei mit einer Zusammenfassung aller Netzwerkteilnehmer. Die beiden Kismet-Dateien sind im Moment überflüssig. Der Dump wird mit folgendem Befehl erstellt:
airodump-ng -w /root/Documents/Daten/Dump/yyyyddmm wlan0 -c 1,6,11
Der Parameter „-w /root/Documents/Daten/Dump/yyyyddmm“ schreibt den Dump in das angegebene Verzeichnis. Das Verzeichnis kann natürlich angepasst werden. Mit „wlan0“ wird die Netzwerkschnittstelle angegeben, welche sich bereits im monitor mode befinden muss. „-c 1,6,11“ legt die Kanäle fest, welche analysiert werden sollen. Wie immer ist man bei der Verwendung von Parametern den eigenen Bedürfnissen entsprechend frei.
Aber weshalb überhaupt dieser Umweg über airodump-ng? Nun, Wireshark macht die Auswertung von MAC-Adressen für eine explizite SSID recht schwer. Benutzt man den Wireshark-Filter „wlan.ssid“ werden nur Management Frames angezeigt. Mit etwas Glück betritt oder verlässt zwar ein Teilnehmer das WLAN während der Analyse, aktive Teilnehmer, die sich bereits im WLAN befinden können so aber nicht analysiert werden. Denn für eine vollständige Analyse aller Teilnehmer benötigt man auch die Control- und Data Frames.
Um mit diesem Umstand besser umgehen zu können und die MAC-Adressen lediglich auf eine ausgewählte SSID (nämlich die Eigene) einzugrenzen, habe ich ein JavaScript-basiertes Tool entwickelt, mit dem die *.csv-Datei aus dem airodump-ng-Dump ganz bequem eingelesen werden kann. Im Tool wählt man einfach die gewünschte SSID aus, im Anschluss werden dann im unteren Bereich nur noch die zugehörigen Clients angezeigt. Das Tool läuft lokal in jedem Browser und speichert keine Daten online. Ich werde das Tool in Kürze inklusive einer kurzen Beschreibung der Funktionen und Bedienungsanleitung im Blog zur Verfügung stellen.
Wer die BSSID seines Access Points bereits kennt, kann natürlich direkt in airodump-ng den passenden Filter bemühen und spart sich so den Umweg über mein Tool bzw. viel Handarbeit.
airodump-ng wlan0 --bssid 00:01:02:03:04:05 -c 1