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