
KTO v3.0.1
Outil automatisé de désauthentification Wi-Fi qui analyse en continu les clients sur un SSID cible et expulse les appareils non présents sur la liste blanche. Fonctionnalités : prise en charge de liste blanche, gestion mesh/multi-AP, détection PMF et contournement expérimental du PMF WPA2 par extraction EAPOL.
KTO - Kick Them Out
https://github.com/user-attachments/assets/0ebf61af-c306-4825-b836-95df59052c27
Pointez-le vers un SSID et il déconnecte les appareils sur ce réseau, y compris ceux qui se reconnectent. Vous lui donnez le nom du réseau ; il trouve le point d'accès, trouve les clients, et choisit une méthode de déconnexion adaptée à la sécurité du réseau.
Les anciennes versions ne fonctionnaient vraiment que contre le WPA/WPA2 à gestion ouverte. Celle-ci possède aussi des vecteurs pour PMF (802.11w) et WPA3, sans mot de passe nécessaire, bien que ceux-ci soient en diffusion uniquement et au mieux (voir ci-dessous).
Usage autorisé uniquement. Exécutez ceci contre des réseaux que vous possédez ou pour lesquels vous avez une autorisation écrite de tester. La désauthentification non autorisée est illégale dans la plupart des endroits.
Comment il choisit une attaque, et la liste blanche
Par défaut, KTO reste sûr vis-à-vis de la liste blanche : il envoie des trames de désauthentification et de désassociation unicast, dans les deux sens, à chaque client non présent dans la liste blanche qu'il a vu transmettre. Les MAC en liste blanche ne sont jamais ciblées. Cela déconnecte tout client qui n'a pas négocié PMF, ce qui couvre tout le WPA/WPA2 et tout client non-PMF sur un réseau mixte.
PMF (802.11w) est le piège. Il protège les trames deauth, disassoc et action unicast, donc un client PMF ou WPA3 ignore chaque trame forgée par client, y compris une Channel Switch Announcement unicast. Il n'existe pas de moyen sûr vis-à-vis de la liste blanche de contourner cela ; c'est exactement ce que PMF est conçu pour empêcher. Les seules trames qui atteignent encore un client PMF sont celles qui ne peuvent pas être dirigées vers un seul appareil :
- Balise CSA : une balise AP usurpée portant une Channel Switch Announcement qui pousse les clients vers un canal mort. Les balises ne sont jamais protégées, donc cela passe, mais chaque client qui l'entend bascule.
- Réassociation anonyme : une requête de réassociation vers l'AP avec une source de diffusion, ce qui fait que de nombreux AP désauthentifient eux-mêmes l'adresse de diffusion. L'AP fait le kick, donc PMF n'entre pas en jeu, mais cela déconnecte tous les clients.
Les deux touchent tout le BSS et ne peuvent pas honorer une liste blanche, donc ils sont opt-in via
--broadcast (qui ajoute aussi un deauth de diffusion). Utilisez-le quand vous devez
déconnecter des clients PMF/WPA3 et que vous pouvez accepter que les appareils en liste blanche tombent aussi.
--all-vectors est un synonyme pour activer les vecteurs de diffusion.
En résumé : sur WPA2 la liste blanche fonctionne et le deauth par client suffit. Sur
WPA3/PMF rien n'aboutit par défaut, les trames par client (deauth, et un CSA ciblé aussi) sont protégées et ignorées, donc vous devez passer --broadcast pour
déconnecter ces clients, et cela fait tomber tout le BSS, donc la liste blanche ne
s'applique plus.
Une mise en garde honnête : WPA3 avec PMF est conçu pour résister aux trames de gestion forgées. Aucun attaquant non authentifié ne peut garantir un kick contre lui. Ces vecteurs sont au mieux et aboutissent sur de nombreux déploiements réels, mais « fonctionne sur tous les réseaux » n'est pas une promesse que quiconque peut faire à propos de WPA3.
Compilation
Nécessite une toolchain Rust et iw (de iproute2 / les outils sans fil) sur la
machine cible.
cargo build --release
Le binaire se trouve à target/release/kto. Exécutez-le en root.
Utilisation
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor
Sans --auto-monitor, l'interface doit déjà être en mode moniteur. Avec
celui-ci, KTO bascule l'interface en moniteur au démarrage et la remet en managed à la sortie.
Si vous ne passez pas -c, il balaie les canaux courants 2,4 et 5 GHz pour trouver la
cible, puis se verrouille sur son canal.
De nombreux routeurs domestiques annoncent un seul SSID depuis deux radios (2,4 GHz WPA2 et 5 GHz
WPA3, BSSID différents) pour le band steering. KTO recense chaque BSSID qui porte
le SSID et, quand plus d'un apparaît, les liste avec la bande et la sécurité et
demande lequel attaquer. Choisissez celui sur lequel votre appareil cible est réellement, ou nommez-le
d'emblée avec -b/--bssid. Cela compte : un client sur le BSSID WPA3 5 GHz
ne tombera pas si vous attaquez le clone WPA2 2,4 GHz.
KTO ne désauthentifie que les clients qu'il a vus transmettre, donc un appareil inactif peut ne jamais apparaître
de lui-même. Si un appareil spécifique ne tombe pas alors que d'autres oui, nommez-le avec
--client <MAC> ; KTO le frappera alors à chaque round quoi qu'il arrive. Vérifiez trois
choses : il est sur le BSSID/bande que vous attaquez, sa MAC est celle que vous attendez,
et, pour la rare carte réseau qui ignore le deauth, essayez --all-vectors (qui ajoute les
vecteurs de changement de canal et de réassociation même sur du WPA2 simple).
Plus d'exemples :
# déjà en mode moniteur, verrouillage sur un canal connu
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -c 6
# SSID avec band steering : cibler l'AP exact sur lequel l'appareil se trouve
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24
# WPA3 / PMF : le par-client est bloqué, donc diffusion pour kick (tout le BSS, pas de liste blanche)
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 --broadcast
# épargner vos propres appareils
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor -w AA:BB:CC:DD:EE:FF
# passif : lister les clients, ne rien envoyer
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --scan-only
# envoyer tous les vecteurs quoi qu'il arrive, indépendamment de la sécurité
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --all-vectors
Options
| Flag | Default | Description |
|---|---|---|
-i, --interface | required | Wireless interface |
-t, --target | required | Target SSID |
-b, --bssid | auto | Target one AP by BSSID (band-steered / multi-AP SSIDs) |
-f, --first | off | Attack the first matching AP found (skip the picker) |
-c, --channel | auto | Lock to a channel, skip the discovery sweep |
--client | none | Always target these MACs, even if idle/unseen |
-w, --whitelist | none | Comma-separated MACs to spare |
--whitelist-file | none | File of MACs to spare, one per line (# comments) |
-n, --count | 8 | Frames per burst, per vector |
-s, --sleep | 0.05 | Seconds between attack rounds (small = continuous; raise to throttle) |
--reason | 7 | Deauth reason code (1 unspecified, 4 inactivity, 7 class-3) |
--broadcast | off | Also use broadcast / AP-wide vectors (ignores the whitelist) |
--scan-only | off | Discover clients, send nothing |
--auto-monitor | off | Enable monitor mode on start, restore on exit |
--csa-channel | 14 | Channel the CSA vectors herd clients onto |
--all-vectors | off | Synonym for --broadcast (turn the broadcast vectors on) |
--no-deauth | off | Disable deauth/disassoc |
--no-csa | off | Disable the channel-switch vectors |
--no-anon | off | Disable anonymous reassociation |
--no-tui | off | Plain scrolling output instead of the live dashboard |
--no-color | off | Plain output |
La MAC de l'interface est automatiquement mise en liste blanche pour que KTO ne se cible jamais lui-même.
Le tableau de bord
Sur un vrai terminal, KTO affiche un tableau de bord plein écran : détails de la cible, un tableau
des clients en direct, un journal d'événements, et un sparkline du taux de TX, après une courte animation
de démarrage. La colonne STATE est la partie utile : UP signifie que l'appareil transmet toujours
(il encaisse l'attaque), quiet signifie qu'il est devenu silencieux, et
DOWN signifie qu'il est resté silencieux assez longtemps pour compter comme déconnecté. Les clients
restent listés une fois vus, et KTO les récupère à partir des trames d'association et d'authentification ainsi que
des données, donc le tableau continue de fonctionner pendant une attaque de diffusion, vous pouvez
regarder chaque appareil basculer vers DOWN au fur et à mesure qu'il tombe. Quand plusieurs AP partagent le SSID, vous
obtenez une liste parmi laquelle choisir avec les touches fléchées.
Appuyez sur q (ou Échap, ou Ctrl-C) pour quitter. Redirigez la sortie quelque part, ou passez
--no-tui, et il revient à des journaux défilants simples, ce que vous voulez
pour des scripts ou pour journaliser dans un fichier.
Arrêt
Quitter arrête proprement, affiche un résumé des bursts par client, et restaure l'interface en mode managed si KTO l'a mise en mode moniteur.
Licence
MIT, voir LICENSE.