
KTO v3.0.1
Strumento automatizzato di deautenticazione Wi-Fi che scansiona continuamente i client su un SSID target ed espelle i dispositivi non in whitelist. Include supporto per la whitelist, gestione mesh/multi-AP, rilevamento PMF e bypass PMF WPA2 sperimentale tramite estrazione EAPOL.
KTO - Kick Them Out
https://github.com/user-attachments/assets/0ebf61af-c306-4825-b836-95df59052c27
Puntalo verso un SSID e disconnette i dispositivi su quella rete, inclusi quelli che si riconnettono. Gli dai il nome della rete; trova l'access point, trova i client e sceglie un metodo di disconnessione adatto alla sicurezza della rete.
Le vecchie versioni funzionavano davvero solo contro WPA/WPA2 con gestione aperta. Questa ha anche vettori per PMF (802.11w) e WPA3, senza bisogno di password, anche se quelli sono solo broadcast e best-effort (vedi sotto).
Solo uso autorizzato. Esegui questo contro reti che possiedi o per cui hai permesso scritto di testare. La deautenticazione non autorizzata è illegale nella maggior parte dei luoghi.
Come sceglie un attacco, e la whitelist
Per impostazione predefinita KTO rimane whitelist-safe: invia deautenticazione e disassociazione unicast, in entrambe le direzioni, a ogni client non in whitelist che ha visto trasmettere. I MAC in whitelist non vengono mai presi di mira. Questo elimina qualsiasi client che non ha negoziato PMF, il che copre tutto WPA/WPA2 e qualsiasi client non-PMF su una rete mista.
PMF (802.11w) è il problema. Protegge deauth, disassoc e frame action unicast, quindi un client PMF o WPA3 ignora ogni frame per-client contraffatto, incluso un Channel Switch Announcement unicast. Non c'è modo whitelist-safe di aggirarlo; è esattamente ciò che PMF è progettato per prevenire. Gli unici frame che raggiungono ancora un client PMF sono quelli che non possono essere indirizzati a un singolo dispositivo:
- Beacon CSA: un beacon AP falsificato che trasporta un Channel Switch Announcement che indirizza i client su un canale morto. I beacon non sono mai protetti, quindi questo passa, ma ogni client che lo sente cambia canale.
- Riassociazione anonima: una richiesta di riassociazione all'AP con un source broadcast, che fa sì che molti AP deautentichino l'indirizzo broadcast da soli. È l'AP a fare il kick, quindi PMF non entra in gioco, ma elimina ogni client.
Entrambi colpiscono l'intero BSS e non possono rispettare una whitelist, quindi
sono opt-in tramite --broadcast (che aggiunge anche un deauth broadcast).
Usalo quando devi disconnettere client PMF/WPA3 e puoi accettare che anche i
dispositivi in whitelist cadano. --all-vectors è un sinonimo per attivare i
vettori broadcast.
In sostanza: su WPA2 la whitelist funziona e il deauth per-client è sufficiente.
Su WPA3/PMF nulla arriva per impostazione predefinita, i frame per-client
(deauth, e anche un CSA mirato) sono protetti e ignorati, quindi devi passare
--broadcast per disconnettere quei client, e questo abbatte l'intero BSS,
quindi la whitelist non si applica più.
Un'onesta avvertenza: WPA3 con PMF è costruito per resistere ai frame di gestione contraffatti. Nessun attaccante non autenticato può garantire un kick contro di esso. Questi vettori sono best-effort e funzionano su molti deployment reali, ma "funziona su ogni rete" non è una promessa che qualcuno possa fare riguardo a WPA3.
Build
Richiede un toolchain Rust e iw (da iproute2 / i wireless tools) sulla
macchina target.
cargo build --release
Il binario si trova in target/release/kto. Eseguilo come root.
Utilizzo
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor
Senza --auto-monitor l'interfaccia deve essere già in modalità monitor. Con
esso, KTO commuta l'interfaccia in monitor all'avvio e la riporta in managed
all'uscita. Se non passi -c, esegue una scansione dei comuni canali 2.4 e
5 GHz per trovare il target, poi si blocca sul suo canale.
Molti router domestici pubblicizzano un SSID da due radio (2.4 GHz WPA2 e 5 GHz
WPA3, BSSID diversi) per il band steering. KTO rileva ogni BSSID che trasporta
l'SSID e, quando ne compare più di uno, li elenca con banda e sicurezza e
chiede quale attaccare. Scegli quello su cui si trova effettivamente il tuo
dispositivo target, o nominalo in anticipo con -b/--bssid. Questo è
importante: un client sul BSSID WPA3 a 5 GHz non cadrà se attacchi il clone
WPA2 a 2.4 GHz.
KTO deautentica solo i client che ha visto trasmettere, quindi un dispositivo
inattivo potrebbe non comparire mai da solo. Se un dispositivo specifico non
cade mentre altri sì, nominalo con --client <MAC>; KTO lo colpirà allora a
ogni round indipendentemente. Controlla tre cose: è sul BSSID/banda che stai
attaccando, il suo MAC è quello che ti aspetti e, per la rara NIC che ignora il
deauth, prova --all-vectors (che aggiunge i vettori channel-switch e
riassociazione anche su semplice WPA2).
Altri esempi:
# già in modalità monitor, bloccato su un canale noto
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -c 6
# SSID con band-steering: punta all'AP esatto su cui si trova il dispositivo
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24
# WPA3 / PMF: il per-client è bloccato, quindi broadcast per il kick (intero BSS, nessuna whitelist)
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 --broadcast
# risparmia i tuoi dispositivi
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor -w AA:BB:CC:DD:EE:FF
# passivo: elenca i client, non inviare nulla
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --scan-only
# lancia ogni vettore indipendentemente dalla sicurezza
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --all-vectors
Opzioni
| Flag | Default | Descrizione |
|---|---|---|
-i, --interface | richiesto | Interfaccia wireless |
-t, --target | richiesto | SSID target |
-b, --bssid | auto | Punta a un AP tramite BSSID (SSID con band-steering / multi-AP) |
-f, --first | off | Attacca il primo AP corrispondente trovato (salta il selettore) |
-c, --channel | auto | Blocca su un canale, salta la scansione di discovery |
--client | nessuno | Prendi sempre di mira questi MAC, anche se inattivi/non visti |
-w, --whitelist | nessuno | MAC separati da virgola da risparmiare |
--whitelist-file | nessuno | File di MAC da risparmiare, uno per riga (commenti #) |
-n, --count | 8 | Frame per burst, per vettore |
-s, --sleep | 0.05 | Secondi tra i round di attacco (piccolo = continuo; aumenta per limitare) |
--reason | 7 | Codice motivo deauth (1 unspecified, 4 inactivity, 7 class-3) |
--broadcast | off | Usa anche vettori broadcast / a livello AP (ignora la whitelist) |
--scan-only | off | Rileva i client, non inviare nulla |
--auto-monitor | off | Abilita la modalità monitor all'avvio, ripristina all'uscita |
--csa-channel | 14 | Canale su cui i vettori CSA indirizzano i client |
--all-vectors | off | Sinonimo di --broadcast (attiva i vettori broadcast) |
--no-deauth | off | Disabilita deauth/disassoc |
--no-csa | off | Disabilita i vettori channel-switch |
--no-anon | off | Disabilita la riassociazione anonima |
--no-tui | off | Output a scorrimento semplice invece della dashboard live |
--no-color | off | Output semplice |
Il MAC dell'interfaccia è automaticamente in whitelist così KTO non prende mai di mira se stesso.
La dashboard
Su un terminale reale KTO esegue una dashboard a schermo intero: dettagli del
target, una tabella client live, un log eventi e uno sparkline del TX-rate,
dopo una breve animazione di avvio. La colonna STATE è la parte utile: UP
significa che il dispositivo sta ancora trasmettendo (ignorando l'attacco),
quiet significa che è diventato silenzioso, e DOWN significa che è stato
silenzioso abbastanza a lungo da contare come disconnesso. I client rimangono
elencati una volta visti, e KTO li rileva da frame di associazione e auth oltre
che dai dati, quindi la tabella continua a funzionare durante un attacco
broadcast, puoi osservare ogni dispositivo passare a DOWN mentre cade. Quando
più AP condividono l'SSID ottieni una lista tra cui scegliere con i tasti
freccia.
Premi q (o Esc, o Ctrl-C) per uscire. Reindirizza l'output da qualche parte,
o passa --no-tui, e torna a log a scorrimento semplice, che è ciò che vuoi
per script o logging su file.
Arresto
Uscire ferma tutto in modo pulito, stampa un riepilogo dei burst per-client e ripristina l'interfaccia in modalità managed se KTO l'aveva messa in modalità monitor.
Licenza
MIT, vedi LICENSE.