
Ferramenta automatizada de desautenticação Wi-Fi que escaneia continuamente clientes em um SSID alvo e remove dispositivos não autorizados na lista de permissões. Possui suporte a lista de permissões, manipulação de malha/múltiplos APs, detecção de PMF e bypass experimental de WPA2 PMF via extração de EAPOL.
# KTO - Kick Them Out https://github.com/user-attachments/assets/0ebf61af-c306-4825-b836-95df59052c27 Aponte-o para um SSID e ele desconecta os dispositivos naquela rede, incluindo os que se reconectam. Você informa o nome da rede; ele encontra o ponto de acesso, encontra os clientes e escolhe um método de desconexão que se adequa à segurança da rede. As versões antigas só funcionavam realmente contra WPA/WPA2 com gerenciamento aberto. Esta também tem vetores para PMF (802.11w) e WPA3, sem necessidade de senha, embora esses sejam apenas de broadcast e best-effort (veja abaixo). > Apenas para uso autorizado. Execute isto contra redes que você possui ou tem > permissão por escrito para testar. A desautenticação não autorizada é ilegal > na maioria dos lugares. ## Como ele escolhe um ataque, e a whitelist Por padrão o KTO permanece seguro em relação à whitelist: ele envia desautenticação e desassociação **unicast**, em ambas as direções, para cada cliente não incluído na whitelist que ele viu transmitir. MACs na whitelist nunca são alvos. Isso derruba qualquer cliente que não tenha negociado PMF, o que cobre todo o WPA/WPA2 e qualquer cliente sem PMF em uma rede mista. O PMF (802.11w) é o problema. Ele protege deauth, disassoc e frames de ação unicast, então um cliente PMF ou WPA3 ignora todo frame forjado por cliente, incluindo um Channel Switch Announcement unicast. Não há maneira segura em relação à whitelist de contornar isso; é exatamente o que o PMF foi projetado para prevenir. Os únicos frames que ainda alcançam um cliente PMF são aqueles que não podem ser direcionados a um único dispositivo: - **Beacon CSA**: um beacon de AP falsificado carregando um Channel Switch Announcement que direciona os clientes para um canal morto. Beacons nunca são protegidos, então isso passa, mas todo cliente que o ouve troca de canal. - **Reassociação anônima**: uma requisição de reassociação ao AP com origem de broadcast, o que faz muitos APs desautenticarem o endereço de broadcast por conta própria. O AP faz o kick, então o PMF nem entra na equação, mas isso derruba todos os clientes. Ambos atingem todo o BSS e não podem respeitar uma whitelist, então são opt-in via `--broadcast` (que também adiciona um deauth de broadcast). Use quando precisar desconectar clientes PMF/WPA3 e puder aceitar que dispositivos na whitelist também caiam. `--all-vectors` é um sinônimo para ativar os vetores de broadcast. Resumindo: no WPA2 a whitelist funciona e o deauth por cliente é suficiente. No WPA3/PMF nada funciona por padrão, os frames por cliente (deauth, e também um CSA direcionado) são protegidos e ignorados, então você precisa passar `--broadcast` para desconectar esses clientes, e isso derruba todo o BSS, então a whitelist deixa de se aplicar. Uma ressalva honesta: WPA3 com PMF é construído para resistir a frames de gerenciamento forjados. Nenhum atacante não autenticado pode garantir um kick contra ele. Esses vetores são best-effort e funcionam em muitas implantações reais, mas "funciona em toda rede" não é uma promessa que alguém possa fazer sobre WPA3. ## Build Precisa de um toolchain Rust e `iw` (do iproute2 / as ferramentas wireless) na máquina alvo. ``` cargo build --release ``` O binário fica em `target/release/kto`. Execute-o como root. ## Uso ``` sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor ``` Sem `--auto-monitor` a interface já precisa estar em modo monitor. Com ele, o KTO coloca a interface em monitor ao iniciar e volta para managed ao sair. Se você não passar `-c`, ele varre os canais comuns de 2.4 e 5 GHz para encontrar o alvo, depois trava no canal dele. Muitos roteadores domésticos anunciam um SSID a partir de dois rádios (2.4 GHz WPA2 e 5 GHz WPA3, BSSIDs diferentes) para band steering. O KTO examina cada BSSID que carrega o SSID e, quando mais de um aparece, lista-os com banda e segurança e pergunta qual atacar. Escolha aquele em que seu dispositivo alvo realmente está, ou nomeie-o de antemão com `-b`/`--bssid`. Isso importa: um cliente no BSSID WPA3 de 5 GHz não cai se você atacar o clone WPA2 de 2.4 GHz. O KTO só faz deauth de clientes que ele viu transmitir, então um dispositivo ocioso pode nunca aparecer por conta própria. Se um dispositivo específico não cai enquanto outros caem, nomeie-o com `--client <MAC>`; o KTO então o atingirá a cada rodada independentemente. Verifique três coisas: ele está no BSSID/banda que você está atacando, seu MAC é o que você espera e, para a rara NIC que ignora deauth, tente `--all-vectors` (que adiciona os vetores de channel-switch e reassociação mesmo em WPA2 simples). Mais exemplos: ``` # já em modo monitor, travar em um canal conhecido sudo ./target/release/kto -i wlan0mon -t "CorpNet" -c 6 # SSID com band steering: mirar no AP exato em que o dispositivo está sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 # WPA3 / PMF: por cliente é bloqueado, então use broadcast para dar o kick (todo o BSS, sem whitelist) sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 --broadcast # poupar seus próprios dispositivos sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor -w AA:BB:CC:DD:EE:FF # passivo: listar clientes, não enviar nada sudo ./target/release/kto -i wlan0mon -t "CorpNet" --scan-only # lançar todos os vetores independentemente da segurança sudo ./target/release/kto -i wlan0mon -t "CorpNet" --all-vectors ``` ## Opções | Flag | Padrão | Descrição | |------|---------|-------------| | `-i`, `--interface` | obrigatório | Interface wireless | | `-t`, `--target` | obrigatório | SSID alvo | | `-b`, `--bssid` | auto | Mirar em um AP por BSSID (SSIDs com band steering / multi-AP) | | `-f`, `--first` | desligado | Atacar o primeiro AP correspondente encontrado (pular o seletor) | | `-c`, `--channel` | auto | Travar em um canal, pular a varredura de descoberta | | `--client` | nenhum | Sempre mirar nesses MACs, mesmo se ociosos/não vistos | | `-w`, `--whitelist` | nenhum | MACs separados por vírgula a poupar | | `--whitelist-file` | nenhum | Arquivo de MACs a poupar, um por linha (comentários com `#`) | | `-n`, `--count` | 8 | Frames por rajada, por vetor | | `-s`, `--sleep` | 0.05 | Segundos entre rodadas de ataque (pequeno = contínuo; aumente para limitar) | | `--reason` | 7 | Código de motivo do deauth (1 não especificado, 4 inatividade, 7 classe-3) | | `--broadcast` | desligado | Também usar vetores de broadcast / de todo o AP (ignora a whitelist) | | `--scan-only` | desligado | Descobrir clientes, não enviar nada | | `--auto-monitor` | desligado | Ativar modo monitor ao iniciar, restaurar ao sair | | `--csa-channel` | 14 | Canal para o qual os vetores CSA conduzem os clientes | | `--all-vectors` | desligado | Sinônimo de `--broadcast` (ativar os vetores de broadcast) | | `--no-deauth` | desligado | Desativar deauth/disassoc | | `--no-csa` | desligado | Desativar os vetores de channel-switch | | `--no-anon` | desligado | Desativar reassociação anônima | | `--no-tui` | desligado | Saída simples com rolagem em vez do dashboard ao vivo | | `--no-color` | desligado | Saída simples | O MAC da interface é colocado na whitelist automaticamente para que o KTO nunca se torne alvo de si mesmo. ## O dashboard Em um terminal real o KTO executa um dashboard em tela cheia: detalhes do alvo, uma tabela de clientes ao vivo, um log de eventos e um sparkline de taxa de TX, após uma breve animação de boot. A coluna STATE é a parte útil: `UP` significa que o dispositivo ainda está transmitindo (ignorando o ataque), `quiet` significa que ele ficou silencioso, e `DOWN` significa que ficou silencioso por tempo suficiente para contar como desconectado. Os clientes permanecem listados depois de vistos, e o KTO os captura a partir de frames de associação e auth, bem como de dados, então a tabela continua funcionando durante um ataque de broadcast, você pode ver cada dispositivo mudar para DOWN conforme cai. Quando vários APs compartilham o SSID, você recebe uma lista para escolher com as teclas de seta. Pressione `q` (ou Esc, ou Ctrl-C) para sair. Redirecione a saída para algum lugar, ou passe `--no-tui`, e ele volta para logs simples com rolagem, que é o que você quer para scripts ou para registrar em arquivo. ## Parando Sair para de forma limpa, imprime um resumo de rajadas por cliente e restaura a interface para o modo managed se o KTO a colocou em modo monitor. ## Licença MIT, veja `LICENSE`.