_____
 / ____|
| |  __
| | |_ |
| |__| |
 \_____|
  ___
 / _ \
| (_) |
 \___/
 _ __
| '__|
| |
|_|
 _
| |
| |
| |
| |
|_|
  __ _ 
 / _` |
| (_| |
 \__,_|
 _ __  
| '_ \ 
| | | |
|_| |_|
 _ 
(_)
 _ 
| |
| |
|_|
      ___    ___    _ __ ___  
     / __|  / _ \  | '_ ` _ \ 
 _  | (__  | (_) | | | | | | |
(_)  \___|  \___/  |_| |_| |_|

All'attacco del PMKID (aka un altro modo per crackare il WPA2)

2018-08-16


Proviamo a vedere, in italiano, come mettere a segno qualche esperimento con il nuovo attacco al WPA2 che si basa sul recupero di un hash chiamato PMKID. Questo attacco è molto comodo perchè può essere portato senza attendere che in aria passino delle sequenze complete di frame non del tutto comuni o che vanno forzate (il 4 way handshake).
L'attacco va completato in 3 parti:
1. Si sniffa la rete wireless alla ricerca delle frame che contengono un campo particolare.
2. Si converte il file di cattura esportando solo gli hash a cui siamo interessati
3. Si usa uno strumento per crackare gli hash ottenuti

Cercando di eliminare tutte le scorciatoie che uno potrebbe voler prendere, faccio subito presente che:
- Si, serve almeno una macchina Linux
- Non tutte le schede wireless funzionano (o funzionano bene)
- Alla fine c'è quasi sicuramente bisogno di una scheda video che supporti OpenCL

Quindi iniziamo dagli ingredienti.
Una macchina Linux con kernel recente (almeno 4.14). Non è detto che ultimo = bello, ad ogni release del kernel spaccano qualcosa in qualche driver così a volte è necessario un po' di bricolage, non è una cosa che si risolve in due righe.
Una scheda wireless che possa andare in monitor mode. La lista di quelle abbastanza supportate si trova qui https://github.com/ZerBea/hcxdumptool, ma per certo ne funzionano anche altre. I chip RTL come al solito sono nostri amici, ma è proprio qui che la versione del kernel utilizzato potrebbe giocare degli scherzi.
La macchina Linux può essere anche virtuale se la scheda wireless è USB, basta mapparla nella VM. Nel mio caso è una Ubuntu Server 16.04.3 x64 che funziona bene per lo scopo con la mia scheda Alfa.
Ora nella macchina Linux ci dobbiamo mettere hcxdump, lo potete prendere dal link sopra o semplicemente clonando il repo da qualche parte con
git clone https://github.com/ZerBea/hcxdumptool.git
Si compila ed installa entrando nella direcotory
cd hcxdumptool
e lanciando
make && make install
Se non avete il make probabilmente vi manca tutta la catena, quindi fate un bel apt-get install build-essential. Ora lanciando hcxdumptool dovreste vedere il mini-help, il programma è pronto per funzionare.
Abbiamo bisogno però di manomettere la scheda wireless, impostandola in modalità monitor così da poter risucchiare dall'etere le frame che vediamo passare. Supponiamo che la scheda si chiami wlx00c0ca53a3d8 (potrebbe chiamarsi in modo meno esotico, tipo wifi1, lo scoprite lanciando ifconfig).
Le operazioni in sequenza servono per tirarla giù, metterla in modalitù monitor e ritirarla su:
ip link set wlx00c0ca53a3d8 down
iw dev wlx00c0ca53a3d8 set type monitor
ip link set wlx00c0ca53a3d8 up
C'è tutto, siamo pronti a catturare le frame interessanti nel file cattura.pcapng:
hcxdumptool -i wlx00c0ca53261d -o cattura.pcapng --enable_status 1
Questa sintassi vale per le ultime build del tool, prima lo status funzionava in modo diverso.
Non resta che attendere e vedere che cosa succede. Per i più esperti c'è modo di impostare filtri e hopping tra i canali, ma in quel caso non starete leggendo questo primer.
Passeranno in console un po' di informazioni (se ne volete di più usate --enable_status 15) e attendete che compaia una riga con almeno un powned
INFO: cha=12, rx=0, rx(dropped)=0, tx=39, powned=3, err=0
Premete ctrl-c e fermate il programma. Vi ritrovate con un file che può essere aperto con Wireshark, ma è poco utile ai fini del cracking della chiave. Per questo serve hcxpcaptool, parte della suite che trovate qui https://github.com/ZerBea/hcxtools. Questa suite contiene diversi tool e la compilazione è leggermente più complessa di prima perchè servono delle librerie in più. Sempre per farla molto breve (funziona con Ubuntu 16.04 ma anche con Raspbian, provate entrambe), installate le dipendenze:
apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libpcap-dev
clonate il repo
git clone https://github.com/ZerBea/hcxtools.git
entrate nella directory e compilate il tutto
cd hcxtools
make && make install
Se il make si interrompe a metà cercate di indovinare quale libreria manca vedendo i nomi dei file indicati. Anche qui poco di utile si può aggiungere in 2 righe, ma Google è sempre a portata di mano.
Ok, quindi eravamo rimasti che avevamo il nostro file cattura.pcapng dal quale estrarre gli hash. Avendo fatto il make install tutti i tool sono nel path quindi è sufficiente digitare:
hcxpcaptool -z cattura.hash cattura.pcapng
L'outpu cnterrà una riga tipo
4 PMKID(s) written to cattura.hash
Ad indicare 4 PMKID buoni e vi troverete con un nuovo file cattura.hash che contiene una riga per ogni PMKID da crackare, ad esempio:
c46259a3900c3e98702aaee2c27cf783*aabb7245e763*f0a296876bc4*cdad4d2d3933364e3a363838
Questo file deve essere dato in pasto a hashcat. Se non lo conoscete lo scaricate da qui https://hashcat.net/hashcat/. Potete scaricare i sorgenti e compilarli oppure il pacchetto coi gli eseguibili, tra cui anche quello per Windows, nel caso abbiate una scheda video OpenCL solo in ambiente Windows.
Ora, hashcat fa un po' di tutto (leggete sul sito che è tutto spiegato), ma in sintesi potete fare un attacco di tipo brute-force (per tentativi su tutto lo spazio delle chiavi) o uno con dizionario. Il primo è potenzialmente molto lungo e richiede hardware piuttosto forzuto. E' possibile fare anche attacchi ibridi, ma se lo sai probabilmente non hai bisogno di leggere questo documento.
Per lanciare un attacco brute-force si usa:
hashcat -m 16800 cattura.hash -a 3 -w 3 '?l?l?l?l?l?l'
L'ultima serie di ?l (domanda/elle minuscola) indica che ognuno degli 8 caratteri deve essere una lettera minuscola. Il manuale di hashcat spiega per bene il tutto.
La modalità dizionario richiede che abbiate un dizionario di possibili password salvate in un file (dict.txt), quindi il comando si lancia come:
hashcat -m 16800 cattura.hash dict.txt
Il programma termina quando ha trovato tutti gli hash oppure quando capita qualche errore, ad esempio una scheda video che raggiunge la temperatura del sole. Se volete partire da dove eravate arrivati, ad esempio quando la scheda è tornata fresca, rilanciate il comando con --restore.

Come vedete il nuovo attacco non fa la magia di darvi la password in pochi minuti, vi permette di velocizzare la parte in cui arrivate ad attivare hashcat.
Se volete tentare la fortuna c'è anche questo sito https://wpa-sec.stanev.org/ che attraverso un meccanismo di calcolo distribuito potrebbe darvi una mano. Potrebbe (nel mio caso non ha funzionato su nessuno della ventina di hash caricati)