Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
macstealer — MacStealer: Wi-Fi Client Isolation Bypass | Kitploit
Strumenti/GitHubGitHub/vanhoefm/macstealer
Wi-Fi AuditingVulnerability AnalysisExploitationInformation GatheringNetwork SecurityWireless SecurityPenetration TestingRed Teaming
GitHubvanhoefm/macstealer

macstealer

MacStealer: Wi-Fi Client Isolation Bypass

Vedi Repository
552608 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

MacStealer: Bypass dell'isolamento client Wi-Fi

1. Introduzione

Questo repository contiene MacStealer. Può testare le reti Wi-Fi per bypass dell'isolamento client (CVE-2022-47522). Il nostro attacco può intercettare (rubare) il traffico verso altri client a livello MAC, anche se ai client è impedito di comunicare tra loro. Questa vulnerabilità riguarda le reti Wi-Fi con addetti interni malintenzionati, dove il nostro attacco può aggirare l'isolamento client, talvolta noto anche come isolamento AP. L'attacco può essere usato anche per aggirare Dynamic ARP inspection (DAI), e probabilmente può essere usato anche per aggirare altri metodi che impediscono ai client di attaccarsi a vicenda. L'attacco è anche noto come security context override attack, vedi la Sezione 5 del nostro articolo USENIX Security '23 (repository).

Esempi concreti di possibili reti interessate sono:

  • Reti aziendali in cui gli utenti possono diffidare gli uni degli altri e in cui tecniche come l'isolamento client o l'ARP inspection vengono usate per impedire agli utenti di attaccarsi a vicenda. Ad esempio, reti aziendali con account sia per ospiti che per personale, reti come eduroam e govroam, ecc.

  • Hotspot pubblici protetti da Passpoint (in precedenza Hotspot 2.0). Sono hotspot a cui puoi connetterti in modo automatico e sicuro. Ad esempio, può autenticarti senza problemi usando la scheda SIM del tuo telefono.

  • Reti domestiche WPA2 o WPA3 che hanno l'isolamento client abilitato. Questo include reti con un SSID separato per gli ospiti o per dispositivi non sicuri (IoT). Include anche reti in cui vengono usate più password per isolare ulteriormente i dispositivi, nota anche come Multi-PSK, Identity PSK, per-station PSK, o EasyPSK. Vedi la discussione del modello di minaccia per maggiori informazioni.

  • Hotspot pubblici basati su WPA3 SAE-PK. Sono hotspot protetti da una password pubblica condivisa, ma dove un avversario non può abusare di questa password pubblicamente nota.

Notiamo che il nostro attacco non può aggirare le VLAN. In altre parole, sulla base degli esperimenti attuali, il nostro attacco non può essere usato per compromettere un dispositivo in un'altra VLAN.

È disponibile anche il repository degli altri risultati del nostro USENIX Security '23.

2. Dettagli della vulnerabilità

L'idea alla base dell'attacco è che il modo in cui i client vengono autenticati non è correlato a come i pacchetti vengono instradati al client Wi-Fi corretto. In particolare, l'autenticazione avviene in base a password, nomi utente, identità 802.1X e/o certificati, ma una volta che il client si è connesso, l'instradamento dei pacchetti avviene in base agli indirizzi MAC. Un addetto interno malintenzionato può abusarne per intercettare i dati verso un client Wi-Fi disconnettendo una vittima e poi connettendosi con l'indirizzo MAC della vittima (usando le credenziali dell'avversario). Eventuali pacchetti ancora in viaggio verso la vittima, come i dati di un sito web che la vittima stava ancora caricando, verranno ora ricevuti dall'avversario.

Più precisamente, l'attacco consiste in tre passaggi:

  1. Far sì che la vittima richieda dati: L'avversario prima aspetta che la vittima (client) stabilisca una connessione Wi-Fi con il punto di accesso (AP) vulnerabile. Supponiamo che la vittima invii quindi una richiesta a un server su Internet. Ad esempio, la vittima può inviare una richiesta HTTP al sito web (in chiaro) example.com. L'obiettivo dell'avversario è intercettare la risposta che verrà inviata dal sito web.

  2. Connettersi con l'indirizzo MAC della vittima: Dopo che la vittima ha richiesto dati, ad esempio inviando un pacchetto di richiesta HTTP, l'avversario disconnette forzatamente la vittima dalla rete prima che la risposta arrivi all' AP vulnerabile. Nel nostro esempio, ciò significa che la vittima viene disconnessa prima che la risposta da example.com arrivi all'AP. Una volta che la vittima è disconnessa, l'avversario spoofa l'indirizzo MAC della vittima e si connette alla rete usando le proprie credenziali. Ciò significa che l'avversario è un addetto interno malintenzionato che può connettersi alla rete usando le proprie credenziali, ad esempio usando il proprio nome utente e password in una rete Wi-Fi Enterprise.

  3. Intercettare la risposta: Una volta che l'avversario si è connesso con l'indirizzo MAC della vittima, l'AP assocerà le chiavi di cifratura appena generate dall'avversario all'indirizzo MAC della vittima. Di conseguenza, quando la risposta dal server arriva alla rete Wi-Fi, o qualsiasi traffico in entrata verso la vittima in generale, il router inoltrerà questi pacchetti in entrata all'indirizzo MAC della vittima. Nel nostro esempio, ciò significa che la risposta da example.com viene inoltrata dal router all'indirizzo MAC della vittima. Tuttavia, l'avversario sta ora usando questo indirizzo MAC. Questo significa che l'AP cifrerà la risposta usando le chiavi dell'avversario. In altre parole, l'avversario riceverà ora qualsiasi traffico pendente che è ancora in viaggio verso la vittima.

Notiamo che il traffico intercettato può essere protetto da crittografia di livello superiore, come TLS e HTTPS. Tuttavia, anche se viene usata una crittografia di livello superiore, il nostro attacco rivela comunque l'indirizzo IP con cui una vittima sta comunicando. Questo a sua volta rivela i siti web che una vittima sta visitando, che possono essere informazioni sensibili di per sé.

Per impostazione predefinita, l'attacco non intercetta il traffico inviato dalla vittima, ma può solo intercettare il traffico inviato verso la vittima. Tuttavia, un avversario può tentare attacchi successivi per intercettare anche il traffico inviato dalla vittima. In particolare, intercettando una risposta DNS destinata alla vittima, l'avversario può spoofare una risposta DNS e intercettare tutto il traffico IP sia inviato verso la vittima sia inviato dalla vittima.

Eseguire l'attacco sopra descritto ha senso solo quando l'isolamento client è abilitato nella rete di destinazione. Altrimenti, se l'isolamento client è disabilitato, un addetto interno malintenzionato può semplicemente attaccare direttamente altri client usando tecniche come ARP spoofing (vedi i test di isolamento client).

L'attacco è identico contro le reti Enterprise WPA1, WPA2 e WPA3. Questo perché l'attacco non sfrutta alcuna proprietà crittografica del Wi-Fi, ma abusa invece di come una rete determina a quale client i pacchetti devono essere inviati, cioè instradati.

Per ulteriori dettagli sull'attacco, vedi il security context override attack (Sezione 5) nel nostro articolo Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queues.

3. Possibili mitigazioni

3.1. Prevenire il furto dell'indirizzo MAC

Per mitigare il nostro attacco, un AP può impedire temporaneamente ai client di connettersi se stanno usando un indirizzo MAC che è stato connesso di recente all'AP. Questo impedisce a un avversario di spoofare un indirizzo MAC e intercettare frame pendenti o in coda verso una vittima. Quando si può garantire che l'utente dietro un indirizzo MAC non è cambiato, al client può essere consentito di riconnettersi immediatamente. Nota che questo controllo deve essere eseguito su tutti gli AP che fanno parte dello stesso sistema di distribuzione e, più specificamente, su tutti gli AP tra cui i client possono fare roaming mantenendo il loro attuale indirizzo IP.

3.1.1. Quando si usano passphrase condivise

Per riconoscere in modo sicuro gli utenti connessi di recente, un AP può memorizzare una mappatura tra l'indirizzo MAC di un client e le sue associazioni di sicurezza memorizzate nella cache (ad esempio, la PMK memorizzata nella cache). A un client può essere consentito di riconnettersi immediatamente usando un indirizzo MAC usato di recente dimostrando di possedere l'associazione di sicurezza memorizzata nella cache collegata a questo indirizzo MAC, ad esempio connettendosi usando la PMK corretta memorizzata nella cache.

Quando si usa multi-PSK, nota anche come per-station PSK o Identity PSK, l'AP può mantenere una mappatura degli indirizzi MAC connessi di recente e della password (unica) che hanno usato. Quando un client si connette, l'AP verifica se il suo indirizzo MAC è stato usato di recente. Se non lo è, o se lo è e il client sta usando la stessa password di prima, il client può connettersi normalmente. Tuttavia, se lo stesso indirizzo MAC viene usato con una password diversa, il client è costretto ad aspettare una quantità di tempo predefinita prima di poter completare la connessione.

Quando si usa SAE-PK per proteggere gli hotspot, l'unico metodo di cui siamo a conoscenza per riconoscere in modo sicuro che un indirizzo MAC viene riutilizzato dallo stesso utente di prima è fare affidamento sulle associazioni di sicurezza memorizzate nella cache (ad esempio, la PMK memorizzata nella cache collegata all'indirizzo MAC).

Le difese sopra descritte presuppongono che, dopo un certo ritardo, non arriveranno più pacchetti pendenti per la vittima. Per prevenire perdite oltre questo ritardo, i client possono usare crittografia end-to-end (come TLS) con i servizi con cui comunicano.

3.1.1. Quando si usa l'autenticazione 802.1X e le estensioni RADIUS

Quando si usa l'autenticazione 802.1X basata su EAP, un metodo alternativo migliore per riconoscere in modo sicuro gli utenti connessi di recente si basa sull'identità EAP che hanno usato durante l'autenticazione 802.1X. Un AP può apprendere in modo sicuro l'identità EAP dal server RADIUS che ha autenticato il client e può mantenere una mappatura degli indirizzi MAC connessi di recente e della loro corrispondente identità EAP. Quando un client si connette, l'AP verifica se il suo indirizzo MAC è stato usato di recente. Se non lo è, o se lo è e il client sta usando la stessa identità EAP di prima, il client può connettersi normalmente. Tuttavia, se lo stesso indirizzo MAC viene usato con un'identità EAP diversa, il client è costretto ad aspettare una quantità di tempo predefinita prima di poter completare la connessione con successo.

Una sfida è che l'AP potrebbe non conoscere sempre l'identità 802.1X di un client per problemi di privacy. Ad esempio, queste informazioni potrebbero essere disponibili solo presso il server AAA domestico, e l'AP riceverà solo una Chargeable User Identity dal server RADIUS. Questa identità non consente all'AP di riconoscere due associazioni dello stesso dispositivo/credenziali perché il suo valore può cambiare costantemente. L'AP riceve comunque l'identità anonima nella EAP-Response/Identity, come anonymous@realm, e può fare affidamento su di essa per riconoscere almeno gli utenti di realm diversi.

Per impedire agli utenti dello stesso realm di attaccarsi a vicenda, senza rivelare l'identità di un client all'AP, sono necessarie cooperazione e modifiche al server RADIUS. In particolare, il server RADIUS può essere aggiornato per aiutare a rilevare se l'indirizzo MAC è stato usato di recente da un altro utente dello stesso realm (nella data rete locale). Il server RADIUS dovrebbe quindi essere informato quando un client si disconnette, così sa quando un indirizzo MAC è stato usato l'ultima volta da uno dei suoi utenti, e deve essere informato dell'indirizzo MAC di qualsiasi client che sta tentando di connettersi.

Un'ultima nota è che, mentre questo approccio basato sull'identità EAP impedirebbe a utenti diversi di attaccarsi a vicenda, non impedirebbe a un dispositivo compromesso di attaccare un altro dispositivo dello stesso utente. Cioè, gli attacchi sarebbero prevenuti solo tra utenti diversi, ma non tra dispositivi diversi dello stesso utente.

3.2. Proteggere l'indirizzo MAC del gateway

È importante notare che il nostro attacco non si limita a intercettare pacchetti diretti ai client Wi-Fi. Un avversario potrebbe anche tentare di associarsi con l'indirizzo MAC di un gateway predefinito o di un altro server nella rete locale. Per prevenire tali attacchi, l'AP o il controller può vietare ai client di usare un indirizzo MAC uguale a quello del gateway predefinito. Più in generale, il rilevamento di indirizzi MAC duplicati può essere usato quando un client Wi-Fi si connette alla rete, per impedire ai client Wi-Fi di usare un indirizzo MAC che è in uso anche da altri dispositivi nella rete.

3.3. Protezione dei frame di gestione (802.11w)

Usare la protezione dei frame di gestione (MFP) renderebbe l'attacco più difficile ma non impossibile. In lavori precedenti, abbiamo trovato alcuni modi in cui i client possono essere disconnessi/deautenticati anche quando viene usata la MFP. Sulla base di quella esperienza, sembra esserci sempre qualche metodo per disconnettere forzatamente un client dalla rete, anche quando viene usata la MFP. In altre parole, è difficile prevenire completamente gli attacchi di disconnessione e deautenticazione. Detto questo, la MFP sarebbe un ostacolo in più da superare quando si esegue l'attacco nella pratica, quindi può essere una mitigazione utile per rendere l'attacco più difficile (ma non impossibile) nella pratica.

3.4. Uso delle VLAN

Sulla base di esperimenti preliminari, l'attacco non funziona attraverso VLAN diverse. In altre parole, l'addetto interno malintenzionato che esegue l'attacco deve essere nella stessa VLAN della vittima. Una mitigazione è quindi quella di mettere diversi gruppi di utenti in VLAN diverse. Tuttavia, un addetto interno malintenzionato sarebbe comunque in grado di eseguire l'attacco (cioè aggirare l'isolamento client) contro altri utenti nella stessa VLAN.

Nota che quando si usa multi-PSK (noto anche come per-station PSK o identity PSK), puoi mettere i client in VLAN diverse a seconda della password che usano. In altre parole, puoi usare una VLAN per ogni password. Questo impedisce a client con password diverse di attaccarsi a vicenda.

4. Prerequisiti dello strumento

Lo strumento MacStealer funziona con qualsiasi scheda di rete supportata da Linux. Abbiamo testato MacStealer su Ubuntu 22.04. Per installare le dipendenze richieste su Ubuntu 22.04 esegui:

root@kitploit:~
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
	libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
	aircrack-ng rfkill

Ora clona questo repository, compila gli strumenti e configura un ambiente virtuale python3:

root@kitploit:~
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh

Le istruzioni sopra devono essere eseguite solo una volta.

Dopo aver scaricato nuovo codice usando git, devi eseguire di nuovo ./build.sh e ./pysetup.sh. Vedi il registro delle modifiche per una panoramica dettagliata degli aggiornamenti a MacStealer dall'inizio della divulgazione coordinata.

5. Prima di ogni utilizzo

5.1 Ambiente di esecuzione

Ogni volta che vuoi usare MacStealer, devi prima caricare l'ambiente virtuale python3 come root. Puoi farlo usando:

root@kitploit:~
cd research
sudo su
source venv/bin/activate

Ora dovresti disabilitare il Wi-Fi nel tuo gestore di rete così non interferirà con MacStealer. Facoltativamente, controlla usando sudo airmon-ng check per vedere quali altri processi potrebbero usare la scheda di rete wireless e interferire con MacStealer.

5.2. Configurazione di rete

Il passo successivo è modificare client.conf con le informazioni della rete che vuoi testare. Questa è una configurazione per wpa_supplicant che deve contenere due blocchi di rete: uno che rappresenta la vittima e uno che rappresenta l'attaccante. Un esempio di file di configurazione per testare la rete fittizia kuleuven è:

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"
}

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test: you can copy this from the previous block
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Attacker login: fill in login credentials representing the attacker
	identity="[email protected]"
	password="SomePassword"
}

Nella parte "network to test" devi fornire il nome della rete in esame e la sua configurazione di sicurezza. Vedi wpa_supplicant.conf per documentazione su come scrivere/modificare i file di configurazione e per esempi di blocchi di rete per vari tipi di reti Wi-Fi. Nel primo blocco di rete, sotto "victim login", devi specificare credenziali di accesso valide che rappresentano la vittima simulata. Nel secondo blocco di rete, puoi fornire esattamente le stesse informazioni sotto "network to test", ma devi fornire credenziali di accesso che rappresentano l'attaccante simulato.

Nell'esempio sopra, MacStealer testerà un attacco in cui l'avversario è [email protected] e questo avversario cercherà di intercettare il traffico inviato verso la vittima [email protected].

Per impostazione predefinita lo script usa il file di configurazione client.conf. Puoi usare un file di configurazione diverso fornendo il parametro --config network.conf, dove puoi sostituire network.conf con il file di configurazione che vuoi usare.

Questo repository contiene anche i seguenti file di configurazione di esempio:

  • multipsk.conf: Un file di configurazione per testare una rete che usa multi-PSK in cui una password è usata dai dispositivi fidati e una seconda password è data agli ospiti.

  • saepk.conf: Un file di configurazione per testare un hotspot pubblico che usa SAE-PK.

Nota che è anche possibile modificare il o i blocchi di rete per testare un AP/BSS specifico.

5.3. Configurazione del server

Per impostazione predefinita, MacStealer invierà un pacchetto TCP SYN a 8.8.8.8 sulla porta 443 in tutti i test, che è un server DNS di Google. Se vuoi usare un server o una porta diversa, puoi fornirne uno usando il parametro --server. Ad esempio:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222

Puoi anche aggiungere la porta che deve essere usata nei pacchetti TCP SYN:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222:80

Sostituisci wlan0 con il nome della tua interfaccia Wi-Fi e l'indirizzo IP con il server che vuoi usare. Questo server deve ritrasmettere le risposte TCP SYN/ACK e, idealmente, dovrebbe inviare ancora una SYN/ACK ritrasmessa più di 10 secondi dopo che MacStealer ha trasmesso il SYN TCP iniziale. Puoi testare questo comportamento di ritrasmissione usando il parametro --ping come segue:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222 --ping

MacStealer produrrà il seguente output nel caso in cui il server abbia il comportamento di ritrasmissione richiesto:

root@kitploit:~
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.

Nel caso in cui il server fornito non invii risposte TCP SYN/ACK, o non le ritrasmetta abbastanza tardi, MacStealer produrrà il seguente output:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.

Il motivo per cui il server deve comunque ritrasmettere un SYN/ACK dopo più di 10 secondi è che a volte possono essere necessari diversi secondi per riconnettersi come attaccante simulato. Questo processo di riconnessione deve completarsi prima che il server invii l'ultimo pacchetto TCP SYN/ACK ritrasmesso.

6. Verifica delle vulnerabilità

La tabella seguente contiene i comandi più comuni che eseguirai quando testi una rete insieme a una breve descrizione di ciò che fa ciascun comando. Sotto la tabella vengono spiegati i dettagli di ciascun comando.

Se la rete in fase di test utilizza la Management Frame Protection (802.11w), lo strumento presume che l'avversario possa comunque scollegare con la forza la vittima dalla rete. Questa ipotesi si basa su ricerche recenti che hanno dimostrato che gli attacchi di disconnessione sono in genere ancora possibili, sebbene meno diretti e meno generali, quando si usa MFP.

6.1. Controlli preliminari

Prima di testare le vulnerabilità, puoi usare i seguenti due comandi per confermare che MacStealer sia in grado di connettersi alla rete sia come vittima sia come attaccante:

  • ./macstealer.py wlan0 --ping: si connette alla rete usando le credenziali della vittima. Una volta connesso, viene inviato un SYN TCP al server (che per impostazione predefinita è 8.8.8.8 e può essere modificato). MacStealer verifica se e quante volte il SYN/ACK viene (ri)trasmesso. Puoi usare questo test per confermare che le credenziali della vittima siano corrette e per verificare che il server configurato ritrasmetta correttamente le risposte SYN/ACK.

  • ./macstealer.py wlan0 --ping --flip: come il test precedente, ma ora lo script si connette usando le credenziali dell'avversario. Puoi usarlo per confermare che le credenziali dell'avversario siano corrette.

6.2. Test di vulnerabilità (CVE-2022-47522)

  • ./macstealer.py wlan0: testa la variante predefinita dell'attacco di furto dell'indirizzo MAC. L'attaccante si riconnette allo stesso AP/BSS della vittima.

  • ./macstealer.py wlan0 --other-bss: l'attaccante si connette a un AP/BSS diverso della stessa rete. Una rete che è (anche) vulnerabile a questo test è più facile da sfruttare nella pratica. Se solo un singolo AP/BSS è nel raggio radio, lo script andrà in timeout durante la connessione come attaccante.

6.3. Test di isolamento client (livello Ethernet)

Sfruttare la vulnerabilità del furto dell'indirizzo MAC ha senso solo se l'isolamento client è abilitato o quando vengono usate tecniche come l'ARP inspection per impedire ai client di attaccarsi a vicenda. Altrimenti, un avversario può usare attacchi più semplici come l'ARP poisoning per intercettare il traffico. Per verificare se l'isolamento client è abilitato o se la rete usa l'ARP inspection, puoi usare i seguenti comandi:

  • ./macstealer.py wlan0 --c2c wlan1: con questi argomenti, MacStealer verifica se la rete consente il traffico client-to-client di ARP poisoning dall'attaccante (wlan1) verso la vittima (wlan0). Qui wlan1 è una seconda interfaccia di rete wireless. Lo script verifica quindi se è possibile inviare pacchetti ARP dannosi dall'attaccante alla vittima.

  • ./macstealer.py wlan0 --c2c-eth wlan1: simile al test precedente, ma invece di inviare pacchetti ARP dannosi, l'attaccante invia pacchetti DNS alla vittima.

La vulnerabilità del furto dell'indirizzo MAC dovrebbe essere considerata un rischio nella pratica se il traffico client-to-client viene bloccato in uno dei due test precedenti (ovvero quando l'isolamento client è abilitato o quando vengono usate altre tecniche come l'ARP inspection per impedire agli utenti di attaccarsi a vicenda).

Per impostazione predefinita, MacStealer tenta di connettersi allo stesso AP/BSS usando entrambe le interfacce, quindi è importante che entrambe le schede di rete possano vedere le stesse reti (cioè assicurati che entrambe le interfacce di rete supportino le stesse bande di frequenza e gli stessi canali). Se vuoi che entrambi i client si connettano a un AP/BSS diverso, puoi usare il parametro --other-bss.

Puoi usare il parametro --flip-id per verificare se il traffico dalla vittima (wlan0) è consentito verso l'attaccante (wlan1).

6.4. Checklist di risoluzione dei problemi

Se MacStealer sembra non funzionare, controlla quanto segue:

  1. Verifica che nessun altro processo stia usando la scheda di rete (ad es. termina il tuo network manager). Potresti vedere l'output kernel reports: match already configured se un altro processo sta usando la scheda di rete.

  2. Se tutto funzionava in precedenza, prova a scollegare la chiavetta Wi-Fi, riavvia il computer o la macchina virtuale e poi riprova.

  3. Conferma di connetterti alla rete corretta. Ricontrolla client.conf.

  4. Se hai aggiornato il codice con git, esegui di nuovo ./build.sh e ./pysetup.sh (vedi Prerequisiti).

  5. Se stai usando una macchina virtuale, prova invece a eseguire MacStealer da un'installazione Linux nativa.

  6. Esegui MacStealer con il parametro aggiuntivo -dd per ottenere un output di debug aggiuntivo da wpa_supplicant e da MacStealer stesso.

7. Utilizzo avanzato

7.1. Test dell'isolamento client a livello IP

I test di isolamento client predefiniti verificano se il traffico a livello Ethernet è consentito tra i client. È anche possibile verificare se il traffico a livello IP è consentito tra i client usando il seguente comando:

root@kitploit:~
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]

Quando il traffico a livello IP tra client è consentito, è ancora possibile che i client si attacchino a vicenda. Ad esempio, gli attacchi di reindirizzamento ICMP potrebbero essere ancora possibili. Tali attacchi sono più complessi dell'ARP spoofing, ma idealmente dovrebbero essere comunque prevenuti bloccando anche il traffico a livello IP tra i client.

7.2. Test delle proprietà generali della rete

I seguenti test possono essere eseguiti per verificare le proprietà generali di una rete. Questi test non sono direttamente collegati alle vulnerabilità ma possono essere usati per comprendere meglio il comportamento di una rete.

  • ./macstealer.py wlan0 --same-id [--other-bss] [--flip]: verifica se le connessioni TCP restano attive dopo la disconnessione e la riconnessione a un Access Point. Se le connessioni non restano attive dopo la riconnessione, probabilmente la rete non è vulnerabile agli attacchi di furto dell'indirizzo MAC. Tuttavia, un grosso svantaggio di questo comportamento è che i client legittimi devono aprire nuove connessioni TCP ogni volta che si riconnettono a questa rete, rendendo la rete apparentemente lenta e inaffidabile (quindi dovrebbe essere usata una difesa migliore invece).

    Puoi usare il parametro --other-bss per riconnetterti a un AP/BSS diverso della stessa rete. Puoi usare l'argomento --flip per eseguire questo test con l'identità dell'attaccante invece di quella della vittima.

  • ./macstealer.py wlan0 --flip: testa il normale attacco di furto dell'indirizzo MAC, ma inverte i ruoli di attaccante e vittima. In altre parole, l'attaccante userà le "credenziali della vittima" fornite nel file di configurazione, e la vittima userà le "credenziali dell'avversario".

  • ./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]: verifica se il traffico client-to-client è consentito tra due dispositivi dello stesso utente. Vedi test di isolamento client per la documentazione sul parametro wlan1.

    Puoi usare l'argomento --flip per eseguire questo test con l'identità dell'attaccante invece di quella della vittima.

7.3. Altri parametri

  • --delay seconds: puoi usare il parametro --delay per specificare un ritardo, in secondi, prima di riconnettersi come attaccante.

  • -d o -dd: l'aggiunta di uno di questi parametri aumenta la verbosità di debug dello script e dell'istanza sottostante di wpa_supplicant.

7.4. Test di un Access Point / BSS specifico

Per impostazione predefinita, MacStealer seleziona automaticamente un AP/BSS della rete a cui connettersi e da testare. Se hai una rete con più AP/BSS, puoi testarne uno specifico indicando questo AP/BSS nel blocco di rete della vittima usando la parola chiave bssid. Ad esempio, puoi usare:

root@kitploit:~
...

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"

	# This a specific AP/BSS
	bssid=00:11:22:33:44:55
}

...

Con la configurazione precedente, MacStealer testerà 00:11:22:33:44:55. Ciò significa che si connetterà a questo AP sia come vittima sia come attaccante.

Puoi anche combinare questa impostazione con il parametro --other-bss. In tal caso, la vittima si connetterà a 00:11:22:33:44:55, e l'attaccante si connetterà a un AP/BSS diverso della stessa rete.

Un'altra opzione è specificare un BSS/AP esplicito nel blocco di rete della vittima e dell'attaccante.

Nota che MacStealer cercherà l'AP/BSS indicato per al massimo 30 secondi. Se non riesce a trovare l'AP/BSS specificato, lo strumento terminerà.

7.5. Test di una rete SAE-PK

Puoi testare una rete SAE-PK usando il seguente file di configurazione. Nota che per le reti SAE-PK non c'è differenza nel modo in cui vittima e attaccante si autenticano, cioè entrambi usano la stessa password.

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test - attacker login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test - victim login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

8. Discussione del modello di minaccia

8.1. Autenticazione WPA-PSK

In pratica, l'isolamento client viene usato anche in reti protette da una password pre-condivisa. Ad esempio, diversi router offrono l'opzione di creare una rete per ospiti o dispositivi insicuri (IoT), in cui i client sono isolati così da non potersi attaccare a vicenda. Tuttavia, il vantaggio di sicurezza dell'uso dell'isolamento client in questo scenario può essere messo in discussione. L'isolamento client dovrebbe impedire a un insider malintenzionato di attaccare gli altri. Ma se l'insider malintenzionato conosce la password pre-condivisa, può semplicemente creare un clone rogue (evil twin), convincere le vittime a connettersi a questa copia maliziosa della rete e poi attaccare altri client! In altre parole, usare l'isolamento client in una rete protetta da password non fornisce una sicurezza forte: un client malintenzionato può creare un AP rogue per attaccare comunque altri client.

Detto questo, si può sostenere che la creazione di un AP rogue possa essere rilevata dall'amministratore di rete, il che significa che l'isolamento client rende gli attacchi più difficili. Inoltre, quando un dispositivo leggero viene compromesso (da remoto), potrebbe non avere le risorse per agire (facilmente) come AP rogue. Questo rende più difficile, ma non impossibile, eseguire attacchi quando è attivo l'isolamento client. Nel complesso, sebbene l'isolamento client non fornisca forti garanzie di sicurezza in una rete protetta da password, si può sostenere che aumenti la difficoltà pratica di eseguire attacchi.

Il nostro attacco MacStealing è più semplice da eseguire rispetto alla creazione di un AP rogue. Tutto ciò che l'insider malintenzionato, ad esempio un dispositivo IoT leggero compromesso, deve fare è spoofare un indirizzo MAC e (ri)connettersi alla rete. Un attacco di questo tipo è anche più difficile da rilevare. Sulla base di questa osservazione, il nostro nuovo attacco peggiora la situazione e quindi si può sostenere che il nostro attacco debba essere considerato rilevante anche nelle reti protette da una password pre-condivisa.

Conclusione: quando si usa l'isolamento client in una rete protetta da password, si assume che un insider malintenzionato non creerà un AP rogue. In caso contrario, l'uso dell'isolamento client è privo di significato dal punto di vista della sicurezza. L'attacco MacStealing può essere eseguito senza creare un AP rogue e quindi rende gli attacchi più semplici.

8.2. Fraintendimenti comuni

  • L'obiettivo del nostro attacco non è bypassare le liste di blocco/consentite degli indirizzi MAC sugli Access Point. Lo spoofing degli indirizzi MAC per bypassare il filtraggio degli indirizzi MAC è un attacco diverso e noto.

  • L'obiettivo del nostro attacco non è dirottare la connessione a pagamento di qualcuno negli hotspot Wi-Fi. Ad esempio, alcuni hotspot aperti (o protetti) richiedono all'utente di pagare prima di poter accedere a Internet. Spesso un abbonato pagante viene riconosciuto in base al suo indirizzo MAC, e un avversario può spoofare l'indirizzo MAC di una vittima per ottenere accesso a Internet. Questo non è lo scopo del nostro attacco; l'obiettivo di MacStealer è bypassare l'isolamento client.

  • Il nostro attacco colpisce anche le reti che si difendono dalla vulnerabilità Hole 196. Ad esempio, le reti Passpoint (precedentemente Hotspot 2.0) sono tenute a prevenire la vulnerabilità Hole 196, ma sono comunque vulnerabili al nostro attacco.

  • Il nostro attacco funziona in reti che si difendono dall'ARP spoofing. Nelle reti Wi-Fi scarsamente protette, un avversario può eseguire banalmente l'ARP spoofing per intercettare il traffico di una vittima, e il nostro attacco non è davvero pratico. Tuttavia, le reti moderne, che possono contenere insider malintenzionati, si affidano all'isolamento client o ad altri metodi per prevenire gli attacchi machine-in-the-middle. Il nostro attacco bypassa tutte queste difese moderne e consente comunque a un avversario di intercettare il traffico verso una vittima.

Per riassumere, il nostro attacco colpisce le reti Wi-Fi in cui ai client è impedito di attaccarsi a vicenda, consentendo a un avversario di intercettare il traffico verso un altro client.

8.3. CVE assegnato

La maggior parte dei vendor usa CVE-2022-47522 per riferirsi alla vulnerabilità di bypass dell'isolamento client Wi-Fi discussa in questo repository git. Questa vulnerabilità corrisponde all'attacco nella Sezione 5 del nostro articolo.

Purtroppo, altri vendor usano anche questo CVE per riferirsi alla vulnerabilità (strettamente parlando non correlata) discussa nella Sezione 3 del nostro articolo. In effetti, la descrizione effettiva del CVE che si trova su MITRE, a nostro parere, descrive solo l'attacco nella Sezione 3 del nostro articolo. Nella pratica, sembra che CVE-2022-47522 venga usato per riferirsi a tutti gli attacchi del nostro articolo, anche se tecnicamente sono diversi.

9. Registro delle modifiche

Versione 1.2 (in corso)

  • README migliorato: chiarito l'uso dell'identificativo CVE.

  • README migliorato: introduzione focalizzata sul bypass dell'isolamento client, aggiornate le difese con note su 802.1X e per prevenire il furto dell'indirizzo MAC del gateway predefinito.

  • Aggiunto il parametro --delay per specificare un ritardo in secondi prima di riconnettersi come attaccante.

Versione 1.1 (18 gennaio 2023)

  • Per impostazione predefinita usa 8.8.8.8 come server invece di 216.58.208.100 (entrambi sono server Google).

  • Aggiornati i test di isolamento client: per impostazione predefinita testa usando ARP poisoning a livello Ethernet. Fornisce anche l'opzione per inviare dati UDP con forwarding a livello Ethernet e un test con forwarding a livello IP.

  • README migliorato: aggiornati i tipi di rete che potrebbero essere interessati. Inclusa una discussione su se le reti WPA2 o WPA3 protette da password siano interessate. Spiegazione dei diversi comandi per testare il traffico client-to-client a livello Ethernet o IP.

  • README migliorato: discussione su MFP, discussione sulle VLAN come mitigazione, chiarimento su quali AP deve essere eseguita la verifica dell'identità, specifica della porta del server,

  • Migliorato l'output di MacStealer.

Versione 1.0 (3 gennaio 2023):

  • Preparata la versione iniziale per l'uso durante l'embargo. Il codice è basato sul commit hostap 0f3f9cdcab6a.
Scarica lo strumento
CommandShort description
Controlli preliminari
./macstealer.py wlan0 --pingSi connette come vittima e verifica il comportamento di ritrasmissione del server.
./macstealer.py wlan0 --ping --flipSi connette come attaccante e verifica il comportamento di ritrasmissione del server.
Test di vulnerabilità
./macstealer.py wlan0Testa la variante predefinita dell'attacco di furto dell'indirizzo MAC.
./macstealer.py wlan0 --other-bssConsente all'attaccante di connettersi a un AP diverso rispetto alla vittima.
Isolamento client: livello Ethernet
./macstealer.py wlan0 --c2c wlan1Testa il traffico client-to-client a livello Ethernet (ARP poisoning).
./macstealer.py wlan0 --c2c-eth wlan1Testa il traffico client-to-client a livello Ethernet (DNS).