
KTO v3.0.1
Herramienta automatizada de desautenticación Wi-Fi que escanea continuamente clientes en un SSID objetivo y expulsa dispositivos no incluidos en la lista blanca. Incluye soporte para listas blancas, manejo de malla/múltiples AP, detección de PMF y un bypass experimental de PMF WPA2 mediante extracción de EAPOL.
KTO - Kick Them Out
https://github.com/user-attachments/assets/0ebf61af-c306-4825-b836-95df59052c27
Apúntalo a un SSID y desconecta los dispositivos de esa red, incluidos los que se reconectan. Le das el nombre de la red; encuentra el punto de acceso, encuentra los clientes y elige un método de desconexión que se ajuste a la seguridad de la red.
Las versiones antiguas solo funcionaban realmente contra WPA/WPA2 con gestión abierta. Esta también tiene vectores para PMF (802.11w) y WPA3, sin necesidad de contraseña, aunque esos son solo de difusión y de mejor esfuerzo (ver más abajo).
Solo para uso autorizado. Ejecuta esto contra redes que poseas o para las que tengas permiso por escrito para probar. La desautenticación no autorizada es ilegal en la mayoría de los lugares.
Cómo elige un ataque, y la lista blanca
Por defecto KTO se mantiene seguro con la lista blanca: envía desautenticación y desasociación unicast, en ambas direcciones, a cada cliente no incluido en la lista blanca que haya visto transmitir. Las MAC en la lista blanca nunca son objetivo. Esto desconecta a cualquier cliente que no haya negociado PMF, lo que cubre todo WPA/WPA2 y cualquier cliente no PMF en una red mixta.
PMF (802.11w) es el problema. Protege los frames de deauth, disassoc y acción unicast, por lo que un cliente PMF o WPA3 ignora cada frame falsificado por cliente, incluido un Channel Switch Announcement unicast. No hay forma segura con la lista blanca de evitar eso; es exactamente lo que PMF está diseñado para prevenir. Los únicos frames que aún llegan a un cliente PMF son aquellos que no pueden dirigirse a un solo dispositivo:
- CSA beacon: un beacon de AP falsificado que lleva un Channel Switch Announcement que dirige a los clientes a un canal muerto. Los beacons nunca están protegidos, así que esto pasa, pero cada cliente que lo escucha cambia.
- Reasociación anónima: una solicitud de reasociación al AP con una fuente de difusión, lo que hace que muchos AP desautentiquen ellos mismos la dirección de difusión. El AP hace la expulsión, así que PMF nunca entra en juego, pero desconecta a todos los clientes.
Ambos afectan a todo el BSS y no pueden respetar una lista blanca, por lo que
son opcionales mediante --broadcast (que también añade un deauth de difusión).
Úsalo cuando necesites desconectar clientes PMF/WPA3 y puedas aceptar que los
dispositivos en la lista blanca también caigan. --all-vectors es un sinónimo
de activar los vectores de difusión.
En resumen: en WPA2 la lista blanca funciona y el deauth por cliente es
suficiente. En WPA3/PMF nada llega por defecto, los frames por cliente (deauth,
y también un CSA dirigido) están protegidos e ignorados, así que tienes que
pasar --broadcast para desconectar esos clientes, y eso derriba todo el BSS,
por lo que la lista blanca ya no aplica.
Una advertencia honesta: WPA3 con PMF está construido para resistir frames de gestión falsificados. Ningún atacante no autenticado puede garantizar una expulsión contra él. Estos vectores son de mejor esfuerzo y funcionan en muchos despliegues reales, pero "funciona en todas las redes" no es una promesa que nadie pueda hacer sobre WPA3.
Compilación
Necesita un toolchain de Rust e iw (de iproute2 / las herramientas
wireless) en la máquina objetivo.
cargo build --release
El binario queda en target/release/kto. Ejecútalo como root.
Uso
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor
Sin --auto-monitor la interfaz ya tiene que estar en modo monitor. Con él,
KTO cambia la interfaz a monitor al iniciar y de vuelta a managed al salir.
Si no pasas -c, recorre los canales comunes de 2.4 y 5 GHz para encontrar el
objetivo, luego se fija en su canal.
Muchos routers domésticos anuncian un SSID desde dos radios (2.4 GHz WPA2 y
5 GHz WPA3, diferentes BSSIDs) para band steering. KTO sondea cada BSSID que
lleva el SSID y, cuando aparece más de uno, los lista con banda y seguridad y
pregunta cuál atacar. Elige el que tu dispositivo objetivo esté usando
realmente, o nómbralo de antemano con -b/--bssid. Esto importa: un cliente
en el BSSID de 5 GHz WPA3 no caerá si atacas el clon de 2.4 GHz WPA2.
KTO solo desautentica clientes que ha visto transmitir, así que un dispositivo
inactivo puede que nunca aparezca por sí solo. Si un dispositivo específico no
cae mientras otros sí, nómbralo con --client <MAC>; KTO entonces lo atacará
cada ronda sin importar qué. Verifica tres cosas: que está en el BSSID/banda
que estás atacando, que su MAC es la que esperas, y, para la rara NIC que
ignora el deauth, prueba --all-vectors (que añade los vectores de
channel-switch y reasociación incluso en WPA2 simple).
Más ejemplos:
# ya en modo monitor, fijar a un canal conocido
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -c 6
# SSID con band steering: apuntar al AP exacto donde está el dispositivo
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24
# WPA3 / PMF: por cliente está bloqueado, así que difundir para expulsar (todo el BSS, sin lista blanca)
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 --broadcast
# perdonar tus propios dispositivos
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor -w AA:BB:CC:DD:EE:FF
# pasivo: listar clientes, no enviar nada
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --scan-only
# lanzar todos los vectores sin importar la seguridad
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --all-vectors
Opciones
| Flag | Predeterminado | Descripción |
|---|---|---|
-i, --interface | requerido | Interfaz wireless |
-t, --target | requerido | SSID objetivo |
-b, --bssid | auto | Apuntar a un AP por BSSID (SSIDs con band steering / multi-AP) |
-f, --first | off | Atacar el primer AP coincidente encontrado (omitir el selector) |
-c, --channel | auto | Fijar a un canal, omitir el barrido de descubrimiento |
--client | ninguno | Apuntar siempre a estas MACs, incluso si están inactivas/no vistas |
-w, --whitelist | ninguno | MACs separadas por comas a perdonar |
--whitelist-file | ninguno | Archivo de MACs a perdonar, una por línea (comentarios con #) |
-n, --count | 8 | Frames por ráfaga, por vector |
-s, --sleep | 0.05 | Segundos entre rondas de ataque (pequeño = continuo; subir para limitar) |
--reason | 7 | Código de razón de deauth (1 unspecified, 4 inactivity, 7 class-3) |
--broadcast | off | Usar también vectores de difusión / de todo el AP (ignora la lista blanca) |
--scan-only | off | Descubrir clientes, no enviar nada |
--auto-monitor | off | Activar modo monitor al iniciar, restaurar al salir |
--csa-channel | 14 | Canal al que los vectores CSA dirigen a los clientes |
--all-vectors | off | Sinónimo de --broadcast (activar los vectores de difusión) |
--no-deauth | off | Desactivar deauth/disassoc |
--no-csa | off | Desactivar los vectores de channel-switch |
--no-anon | off | Desactivar la reasociación anónima |
--no-tui | off | Salida de desplazamiento simple en lugar del panel en vivo |
--no-color | off | Salida simple |
La MAC de la interfaz se añade automáticamente a la lista blanca para que KTO nunca se ataque a sí mismo.
El panel
En un terminal real KTO ejecuta un panel a pantalla completa: detalles del
objetivo, una tabla de clientes en vivo, un registro de eventos y un sparkline
de tasa de TX, tras una breve animación de arranque. La columna STATE es la
parte útil: UP significa que el dispositivo sigue transmitiendo (ignorando el
ataque), quiet significa que se ha quedado en silencio, y DOWN significa que
ha estado en silencio el suficiente tiempo para contar como desconectado. Los
clientes permanecen listados una vez vistos, y KTO los capta de frames de
asociación y autenticación además de datos, así que la tabla sigue funcionando
durante un ataque de difusión, puedes ver cada dispositivo cambiar a DOWN
mientras cae. Cuando varios AP comparten el SSID obtienes una lista para elegir
con las teclas de flecha.
Pulsa q (o Esc, o Ctrl-C) para salir. Redirige la salida a algún sitio, o pasa
--no-tui, y vuelve a registros de desplazamiento simple, que es lo que quieres
para scripts o para registrar en un archivo.
Detención
Salir detiene limpiamente, imprime un resumen de ráfagas por cliente y restaura la interfaz a modo managed si KTO la puso en modo monitor.
Licencia
MIT, ver LICENSE.