Categories:

Eigenes WLAN knacken: Data Frames mit Wireshark problemlos entschlüsseln

Veröffentlicht von empy
Lesezeit: 8 Minuten

Immer wieder kommt es vor, dass man das eigene WLAN untersuchen muss. Sei es aufgrund komischen Verhaltens einzelner Endgeräte oder konkreten Problem am WLAN selbst. Im Moment analysiere ich zum Beispiel einen Fehler an meinem OnePlus 6 und möchte sichergehen, dass mein eigenes WLAN nicht schuld am fehlerhaften WLAN-Roaming ist, wenn das Gerät gesperrt ist. Ein Packet Capture mit Wireshark wird mir helfen. [link roaming etc]. Da mein WLAN verschlüsselt ist, kann mein Paketmitschnitt zwar alle Vorgänge im WLAN aufzeichnen, Einblicke in die eigentlichen Datenpakete selbst gewährt mir ein solcher Mitschnitt allerdings nicht. Probleme, die nicht am WLAN liegen, bleiben mir verborgen, wenn ich es nicht schaffe, die Pakete zu entschlüsseln. Wie das geht, zeige ich euch nachfolgend.

WLAN wird in den meisten Fällen verschlüsselt übertragen, zum Beispiel mit WPA2 oder ganz neu WPA3. Das eigene WLAN kann ich aber sehr einfach entschlüsseln, denn alle notwendigen Informationen sind im eigenen WLAN kein Geheimnis: Ich brauche die SSID, das Passwort und natürlich Wireshark. Desweitern benötige ich ein Endgerät, dessen Verbindung ich entschlüsseln möchte: Es muss sich während des Packet Capturing ins WLAN einbuchen und den 4-Way-Handshake (EAPOL) durchführen. So erhalte ich die Session Keys, die zur Entschlüsselung notwendig sind. Den Rest macht Wireshark.

Packet Capturing vorbereiten

Wir starten wie so oft mit der passenden Hardware. Ich habe heute den ASUS1900 WLAN-Adapter am Start, welcher den Monitoring Mode unter Linux beherrscht. Nutzt einfach meine Anleitung zum Aktivieren des Monitoring Modes. Die Installation des Treibers vom AWUS1900 funktioniert wie beim ASUW036ACH.

Will man das eigene WLAN entschlüsseln und Einblicke in die tatsächlichen Daten erhalten, muss man sehr exakt bei der Konfiguration des WLAN-Adapters vorgehen. Ansonsten kann es passieren, dass die wertvollen Data Frames nicht korrekt mitgeschnitten werden.

Wir erinnern uns: WLAN nutzt verschiedene Modulationsarten und Frequenzen, um die Verbindung zwischen Access Point und Endgerät herzustellen. Bei der Datenübertragung werden unterschiedliche Frequenzen und Kanalbandbreiten genutzt, ebenso sind unterschiedliche Konfigurationen der Spatial Streams möglich.

Wichtig ist nun, dass der verwendete WLAN-Adapter zum WLAN passt, welches untersucht werden möchte. Dass ein WLAN-Adapter, der nur 2,4-GHz beherrscht, keine Pakete im 5-GHz-Wlan mithören kann, erklärt sich beinahe von selbst. Aber es gibt noch mehr zu beachten. Beispiel WLAN 6, also 802.11ax, welches im 2,4-GHz-Band funkt. Wenn der WLAN-Adapter aber kein WLAN dieser neuesten sechsten Generation beherrscht, lassen sich die entsprechenden Pakete nicht erfassen.

iw list

Mit dem obigen Befehl findet ihr die Spezifikationen eures WLAN-Adapters heraus. „iw list“ zeigt detailliert an, was der Adapter kann.

„iw list“ zeigt die Spezifikationen vom WLAN-Adapter an.

Den Adapter im Monitor Mode konfigurieren (Kanalbreite)

Da WLAN abwärtskompatibel ist, werden verschiedene Modi unterstützt, damit sich verschiedene Geräte ohne Probleme mit dem WLAN verbinden können. Damit das gelingt, werden grundlegende Informationen wie zum Beispiel Beacon Frames ausgetauscht. Die Übertragung dieser Basisinformationen geschieht so, dass sie jedes interessierte Endgerät lesen kann. Erst danach wird zwischen Endgerät und Access Point ausgehandelt, wie die eigentlichen Daten übertragen werden sollen. Erst durch den Abgleich der technischen Eigenschaften zwischen Endgerät und Access Point steht fest, wie Daten zwischen den beiden Teilnehmern übertragen werden könne. Dabei werden die momentanen Eigenschaften des Funkspektrums stets berücksichtigt.  

So ist es möglich, dass zwischen einem Access Point und dem Endgerät eine Verbindung mit WLAN 5, 20 MHz Kanalbreite, 1 Spatial Stream und kurzem Guard Interval von 0.4µs ausgehandelt wurde. Der gleiche Access Point könnte mit einem anderen Endgerät eine Verbindung mit folgenden Parametern betreiben: WLAN 5, 40 MHz Kanalbreite, 2 Spatial Streams und Guard Interval von 0.8µs. Die Verbindungseigenschaften werden immer vom schwächsten Glied der Kette bestimmt: Oft ist dies das Endgerät.

Aruba Instant: show ap association

Wenn der verwendete WLAN-Adapter nur WLAN 4 mit 20 MHz kann (oder etwa entsprechend konfiguriert wurde), könnte er alle Beacon Frames sehen. Er kann auch die Data Frames der ersten Verbindung aus obigem Beispiel sehen. Problematisch wird es bei der zweiten Verbindung aus dem Beispiel: Während die Beacon Frames noch mitgeschnitten werden könnten, kann der Adapter die eigentlichen Daten der Verbindung nicht mitlesen. Es sähe dann so aus, als würden keine Daten übertragen, da der Adapter nur 20 MHz kann, anstelle der benötigten 40 MHz.

Also müssen wir den WLAN-Adapter, den wir in den Monitor Mode versetzen, genau einstellen, damit er auch alle Paketinformationen vollständig erfassen kann. Dabei bilden wir die Eigenschaften des Endgerätes nach, dessen Verbindung wir untersuchen wollen. Wichtig sind hierbei der Kanal und die Kanalbreite. Glücklicherweise sind beim eigenen WLAN beide Spezifikationen bekannt und wir ersparen und das Herausfinden dieser Info. Aber denkt daran: Was die Hardware nicht kann, kann auch nicht konfiguriert werden.

Zum Konfigurieren starten mit zwei airmon-ng Befehlen. Diese helfen uns wie immer, die Adapternamen zu erfahren. Der zweite Befehl beendet alle Prozesse, die unser Monitoring durcheinanderbringen könnten.

sudo airmon-ng
sudo airmon-ng check kill

Im Anschluss versetzen wir den Adapter in den Monitor Mode. Diesmal aber mit dem Tool airodump-ng. Damit lassen sich weitere Spezifikationen zum Monitoring bequem anpassen, so zum Beispiel die Kanalbreite. Airmon-ng selbst kann das nicht.

Solltet ihr 80-MHz-Kanäle einstellen wollen, müsst ihr „iw dev wlan0 set channel 149 80MHz“ verwenden. Airodump-ng kann leider nur 20 MHz und 40 MHz.

sudo airodump-ng wlan0 -c 6 --ht40+ 

Zurück zu Airodump-ng: Mit „airodump-ng wlan0“ wird also der Adapter festgelegt, der in den Monitor Mode geschaltet wird. „-c 6“ legt den Kanal auf Kanal 6 fest. Denkt an „iw list“ aus dem vorigen Kapitel, so könnt ihr alle Kanalnummern samt Frequenzen anzeigen lassen und wisst was ihr hier eingeben müsst. Vor allem bei den 5-GHz-Kanälen habe ich die Nummerierungen nie im Kopf. „–t40+“ spezifiziert die Kanalbreite auf 40 MHz, wobei der sekundäre Kanal nach oben hin verwendet wird. Möglich sind noch „–ht40-“ und „–ht20“.

Tastet euch ruhig erstmal nur über den Kanal an die Einstellungen heran und schaut, was im Packet Capturing unter Wireshark tatsächlich ankommt. Erst bei Fehlern nutzt die Einstellungen zur Kanalbandbreite als Ergänzung.

Im eigenen WLAN die Data Frames mit Wireshark entschlüsseln (WPA2)

Nachdem die müßige Vorarbeit geleistet ist, wird nun endlich Wireshark geöffnet. Wählt den WLAN-Adapter aus, welchen ihr bereits bei airodump-ng verwendet habt, in meinem Fall „wlan0“. Wireshark sollte dann bereits alle Pakete anzeigen. Achtet dabei auf die Data Frames, insbesondere die Frames vom Typ „Data“ und „QoS Data“. Dazu kann folgender Display-Filter genutzt werden:

wlan.fc.type == 2

Werden keine Data Frames angezeigt, habt ihr den Adapter wohl falsch konfiguriert und ihr müsst nochmal erneut ran, siehe oben. Data Frames können nicht entschlüsselt werden, wenn keine Daten vorliegen. Lacht nicht, denn oft habe ich diesen Fehler beobachtet. Zugegeben, auch an mir selbst. Vielleicht seid ihr auf dem falschen Kanal unterwegs oder die Bandbreite passt nicht. Und natürlich müsst ihr Funkreichweite sein. Wenn aber die Data Frames korrekt angezeigt werden, geht es hier weiter.

Im Gegenzug zu den Management Frames und den Control Frames sind die Data Frames verschlüsselt. Bevor wir sie analysieren können, müssen wir sie entschlüsseln. Im folgenden Bild seht ihr das exakt gleiche Data Frame mit der Nummer 1512. Links noch verschlüsselt, rechts dann entschlüsselt. So könnt ihr vergleichen und einen Blick auf die Echtdaten erhaschen.

Das Entschlüsseln an sich ist recht einfach, da wir an unserem eigenen WLAN arbeiten. Wireshark selbst bietet die passende Funktion an, versteckt sie aber tief im Programm. Da muss man schon wissen, wonach man sucht. Ich zeige es euch.

Zunächst öffnet ihr die Einstellungen. Entweder per Menü oder Tastenkombination „STRG+SHIFT+P“. Wählt dann im Dialogfenster im linken Bereich unter „Protokolle“ folgendes Protokoll aus: IEEE 802.11. Im Fenster angekommen, klickt ihr auf den Button „Editieren“, um die Entschlüsselungsinformation eingeben zu können. Wählt dazu als Key Type „wpa-pwd“ aus und gebt in der Spalte „Key“ zuerst eure WLAN-Passphrase ein, dann direkt einen Doppelpunkt und dann den Namen eurer SSID. Das sieht dann im Beispiel so aus, ihr müsst aber eure eigenen Informationen verwenden:

wpa-pwdwlanblog123:decryption_wlan
Eingaben in zur Entschlüsselung (Wireshark)

WEP, WPA und WPA2 können so entschlüsselt werden. Mit WPA3 klappt es noch nicht auf diese bequeme Weise, ich habe es eben ausprobiert. Ich denke, das ist ein anderes Thema. Dragonblood lässt grüßen.

Bestätigt alles und schaut euch die Data Frames genau an. Wenn ihr Glück habt, sind die Daten nun entschlüsselt. Und wenn ihr kein Glück habt? Dann sind die Pakete noch genauso verschlüsselt wie am Anfang und ihr seid genauso weit wie vorher. Aber das ist schnell gelöst.

Der 4-Way-Handshake muss aufgefangen werden

Wenn die Entschlüsselung noch nicht funktioniert hat, dann liegt das daran, dass nicht nur SSID und WLAN-Passwort zur Entschlüsselung benötigt werden. Vielmehr werden auch die sogenannten Session Keys benötigt. Damit erhält jede WLAN-Verbindung eine eigene Verschlüsselung. WLAN soll schließlich für alle ganz schön sicher sein.

Wie dem auch sie, die Session Keys sind Teil des sogenannten 4-Way-Handshakes. Diesem Prozess muss sich jedes Endgerät unterziehen, welches sich im WLAN einbucht. Also schnappt euch euer Endgerät, trennt die WLAN-Verbindung und verbindet euch dann neu mit eurem WLAN. Während ihr euch neu ins WLAN einbucht, muss das Packet Capturing in Wireshark noch laufen.

Hattet ihr vorher Glück, dann ist der 4-Way-Handshake zufällig von Wireshark abgehört worden. Dies war dann der Fall, wenn sich das Endgerät während der Aufnahme selbst neu mit dem WLAN verbunden hat.

Sobald Wireshark den 4-Way-Handshake erfasst hat, werden die Data Frames dann auch entschlüsselt. Prüft also, ob Wireshark den Handshake mitgeschnitten hat, dann könnt ihr euch sicher sein. Dazu nutzt ihr den Display-Filter wie folgt:

eapol

Es werden euch nun vier Frames angezeigt, daher auch der Begriff 4-Way-Handshake. Habt ihr alle vier Frames aufgefangen, beginnt Wireshark mit der Entschlüsselung des Datenverkehrs ab diesem Zeitpunkt. Liegen nicht alle vier Frames vollständig vor, müsst ihr das Endgerät erneut mit dem WLAN verbinden und den Vorgang so lange wiederholen, bis der Handshake vollständig erfasst wurde.

Der 4-Way-Handshake bei der Verbindung eines Endgerätes, welches sich ins WLAN einbucht.

Wichtig in diesem Zusammenhang: Die Frames werden nicht rückwirkend entschlüsselt, sondern wirklich erst ab dem Zeitpunkt, ab dem ihr den 4-Way-Handshake vollständig abgefangen habt. Wireshark wird dann den Datenverkehr für genau dieses Endgerät, zu dem der Handshake gehört, entschlüsseln können. Voila, that’s it. Oder nicht? Bei Problemen schaut euch einfach meinen Troubleshooting-Guide zum Thema Entschlüsseln des eigenen WLAN an.

Wollt ihr weitere Verbindungen zu anderen Endgeräten entschlüsselt, müsst ihr dort ebenfalls den entsprechenden Handshake abhören. Erst danach werden auch diese Verbindungen entschlüsselt.

Ich gebe es zu, jede Verbindung einzeln entschlüsseln zu müssen, erscheint bisweilen etwas umständlich. Mag sein, dafür ist das sehr kostengünstig umsetzbar und ihr brauch im Prinzip nur Linux und den passenden WLAN-Adapter. Alternativ macht ihr das Packet Capturing einfach mit eurem Access Point, sofern das dort unterstützt wird.

Viel Erfolg beim Studieren eures WLANs! Und nicht vergessen: Lasst die Finger von fremden WLANs, ist verboten!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.