In diesem Blogbeitrag wird erklärt, wie man einen WLAN Trace unter Linux erstellen kann. Dazu muss der WLAN Adapter in den sogenannten Monitor Modus gesetzt werden, damit wir alle Pakete aufnehmen können. Ohne den Monitormodus würde der Treiber fremde Pakete herausfiltern. Beim Tracen möchte man aber alle Pakete erhalten. Am besten verwendet man einen externen USB-WLAN-Adapter.

Was es zu beachten gibt

Um einen guten Trace zu erstellen muss der WLAN Adapter die gleichen Eigenschaften vorweisen, wie die Kommunikation, die aufgenommen werden soll. D.h. soll ein Trace gemacht werden von einer AP zu Client Kommunikation mit 40 MHz Bandbreite und 3 Streams, muss der WLAN Adapter, womit der Trace gemacht werden soll, auf 40MHz eingestellt werden und mind. 3 Streams unterstützen.

Monitor Mode einrichten

Um den Montor Mode einzurichten zu können muss er vom Treiber unterstützt werden. Ob dieser unterstützt wird oder nicht verrät uns das „iw“ Kommando unter Linux.

iw list
...
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
		 * outside context of a BSS
...

Der Monitor Mode kann wird wie folgt eingerichtet:

iw <wlan ifc> del
iw phy <phyname> interface add <monitor interface> type monitor
ifconfig <monitor name> up

zum Beispiel

iw wlan0 del
iw phy phy0 interface add mon0 type monitor
ifconfig mon0 up

Sollte beim letzten Befehl eine Fehlermeldung erscheinen, liegt es wahrscheinlich daran, dass es durch Software geblockt wird. Gründe dafür können ein eingeschalteter Network-Manager sein. Um dies zu vermeiden sollte der Network-Manager immer vorher ausgeschaltet werden. Sollte jedoch doch einmal das Interface geblockt sein kann es wie folgt wieder freigegeben werden.

rfkill list
...
1: phy0: Wireless LAN
	Soft blocked: Yes
	Hard blocked: no
...
rfkill unblock 1

Nun sollte der Monitor auf „up“ gesetzt werden können. Danach kann der notwendige Kanal eingestellt werden.

Richtiger Kanal

Um den richtigen Kanal zu finden, muss man erst mal herausfinden auf welchen Kanal sich der Access Point überhaupt befindet. Hierzu kann man das Linux-Tools „airodump-ng“ von der „aircrack-ng“-Suite verwenden.

airodump-ng -b[g/a] <monitor interface>
# 2.4 GHz Channels
airodump-ng -bg mon0
# 5 GHz Channels
airodump-ng -ba mon0

  CH  4 ][ Elapsed: 0 s ][ 2019-11-20 11:24 

 BSSID              PWR  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID

 11:22:33:44:55:66  -78   16   0    0  1   54   WPA2 CCMP   PSK  Test1                    
 11:22:33:44:55:77  -71   45   0    0  6   54   OPN              Test7                                                                                  
 66:11:22:33:44:55  -70   63   0    0  7   54   WPA2 CCMP   PSK  Test3                  
 22:33:44:55:66:77  -76   92   0    0  9   54   WPA2 CCMP   PSK  Test5

In diesem Beispiel sehen wir die aktuelle Verschlüsselung des gefunden Access Points, die SSID, die BSSID und den verwendeten Kanal. Zum Beispiel hat der Access Point mit der BSSID „11:22:33:44:55:77“ keine Verschlüsselung und sendet auf Kanal 6 mit der SSID „Test7“. Der AP mit der BSSID „22:33:44:55:66:77“ sendet mit der SSID „Test 5“ befindet sich auf Kanal 9 und ist mit WPA2-Personal und dem CCMP Cipher verschlüsselt.

Hier erstellen wir einen Trace vom AP mit der BSSID „11:22:33:44:55:77“, der auf Kanal 6 sendet. Nachdem „airodump-ng“ beendet wurde kann man den Kanal im Monitor Interface mit folgendem Befehl fest einstellen.

iw <monitor ifc> set channel <Kanal> [NOHT|HT20|HT40+|HT40-|80MHz]
iw mon0 set channel 6

Trace aufnehmen

Nachdem man den richtigen Kanal ausgewählt hat, kann man „tcpdump“ oder „wireshark“ mit dem frisch generierten Monitor Interface starten.

wireshark -i <monitor interface> -k
wireshark -i mon0 -k

Trace Beispiel