
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`.