Neulich hatte ich, dank Robert, mal die Gelegenheit ein relativ Leistungsstarkes System (QuadCore, GeForce 8800GTX) für WPA2-hacking zu missbrauchen. Wir haben das ganze schon einmal mit der guten alten aircrack-ng Suite ausprobiert, sind dort aber trotz der Leistung nur auf 2k Keys/s gekommen.

Für die, denen der Process nicht so geläufig ist: Im Gegensatz zu WEP ist bei WPA/WPA2 keine so grundlegende Implementierungslücke bekannt, was den cracking-Aufwand ungleich größer macht. Mit genügend Packets (IVs) lässt sich ein WEP AccessPoint verdammt einfach “öffnen”, bei WPA2 existiert etwas in der Art aber nicht, deshalb gibt es hier eine andere Vorgehensweise:

Man snifft einen sog. Handshake eines WPA-Clients zum AccessPoint mit, und generiert anschließend Hashes  aus Passwort und ESSID. Diese Hashes hängen nur von Passwort und ESSID ab, einmal generierte Hashes können also für alle APs mit gleicher ESSID genutzt werden. Das Generieren der Hashes ist der mit Abstand “teuerste” Teil des Prozesses. Mit den generierten Hashes kann man nun einen Abgleich über einen vorliegenden Handshake laufen lassen.

Die Aircrack-ng Suite vereinfacht diesen Prozess, das Programm generiert und checkt alles automatisch, benötigt wird eine Wordlist und ein cap-File mit Handshake. Leider gibt es im Internet Programme, welche die Hashes wesentlich schneller generieren, als Aircrack: pyrit

Das Programm nutzt die (relativ neue) CUDA(Nvidia)/Stream(ATi)/OpenCL(offener Standard) Technik der neueren Grafikkarten um eine massive Beschleunigung zu erreichen. Auf unserem Testsystem lief die CPU mit rund 4×500 Keys/s, die Grafikkarte aber mit etwa 7k Keys/s! Somit lag unsere Gesamtleistung bei etwa 9k Keys/s, Peaks lagen teilweise bei 9.7.

Durch pyrit wird der Vorgang also stark beschleunigt, da WPA Keys aber mindestens 8-stellig sein müssen ist hier an Bruteforcing noch nicht zu denken, somit bleibt einem nur eine Dictionary/Wordlist-attack. Hiermit sind wir auch schon an der Schwachstelle des Systems angelangt: ohne gute Wordlist sind die Chancen tatsächlich einen Hit zu bekommen gleich Null. Nachdem unser erster Test vollkommen ins Wasser ging (englische Wordlist, etwa 1.5GB), hab ich mich mal nach sinnvollen Wordlists umgeschaut und kaum was gutes gefunden. Also sind wir zu dem Schluss gelangt, dass man sich selbst eine zusammenstellen sollte, hier gibt es ganz gute Anfänge. Mit Hilfe von “sort” und “uniq” kann man damit ganz gute Listen erstellen. Die Schwachstelle einer solchen Liste ist allerdings, dass fast niemand ein Wort wie “Baggerfahrer” als Key benutzt ( ich bin mir nicht sicher warum, aber selbst WEP Netzwerke haben dann meistens eine Mutation des Wortes als Passwort, wie zB “Baggerfahrer123”), also sollte die so generierte Wordlist noch mutiert werden. (Lässt sich mithilfe einfachster Python-scripte sehr leicht machen, da pyrit auch stdin als Eingabe akzeptiert)

Um hier nochmal ein etwas “handfesteres” Tutorial abzuliefern, schildere ich mal die grundsätzliche Vorgehensweise (hier am Beispiel von CUDA):

Hier genutzt: pyrit SVN rev 199

Man braucht:

  • einen WPA-Handshake im cap-Format (sehr einfach zu erstellen mit Aircrack-ng, Tutorials gibts bei der Suchmaschine deiner Wahl)
  • pyrit, am besten die neuste dev-Version
  • cowpatty
  • eine GPU mit CUDA/Stream/OpenCL-Support (nicht zwingend, aber strengstens empfohlen)
  • Im Falle von CUDA am besten die 3.0 Beta verwenden, war bei uns kompatibler und ebenso stabil (dürfte mittlerweile neuere Versionen geben, einfach bisschen rumprobieren :))

Nachdem der CUDA-Driver und das Toolkit richtig installiert sind, baut man pyrit nach den Instructions, bei cowpatty genügt ein make.

Falls man keine MySQL oder sonstige Datenbank als Backend nutzen möchte, braucht pyrit keine weitere Konfiguration.

Mit “pyrit -i wordlist.txt import_passwords” lässt sich die Wordlist einlesen, wer die Wordlist gerne durch einen Manipulator jagen will, kann das in etwa so machen:

./mymanipulator.py wordlist.txt | pyrit -i - import_passwords

Anschließend erstellt man eine ESSID mit “pyrit -e MyESSID create_essid”, welche man dann mit “pyrit -e MyESSID batch” angreifen kann. Nach dem generieren der Hashes checkt man diese mit Cowpatty:

pyrit -e MyESSID -o - export_cowpatty | /path/to/cowpatty -d - -s MyESSID -r mycap.cap

Das ganze lässt sich auch perfekt mit einem Rutsch erledigen, dazu bedienen wir uns mal wieder einer einfachen Pipe:

pyrit -e MyESSID -o - batch | /path/to/cowpatty -d - -s MyESSID -r mycap.cap

Am besten man hofft nun auf einen Treffer, genügend Zeit hat man ja :)

Disclaimer: Dieser Artikel dient zur reinen Information und Fortbildung. Das Umgehen von Sicherheitsbeschränkungen Dritter ist nicht vorgesehen.

💬 Are you interested in our work or have some questions? Join us in our public Signal chat pi crew 👋
🪙 If you like our work or want to supprot us, you can donate MobileCoins to our address.