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