
KTO v3.0.1
自動化されたWi-Fi deauthenticationツールで、対象SSID上のクライアントを継続的にスキャンし、ホワイトリストに登録されていないデバイスを強制的に切断します。ホワイトリスト対応、メッシュ/マルチAP処理、PMF検出、およびEAPOL抽出による実験的なWPA2 PMFバイパスを備えています。
KTO - Kick Them Out
https://github.com/user-attachments/assets/0ebf61af-c306-4825-b836-95df59052c27
SSIDを指定すると、そのネットワーク上のデバイスを切断します。再接続するデバイスも含まれます。ネットワーク名を渡すと、アクセスポイントを見つけ、クライアントを見つけ、そのネットワークのセキュリティに合った切断方法を選択します。
古いバージョンは、実質的にオープン管理のWPA/WPA2に対してのみ機能していました。このバージョンにはPMF(802.11w)とWPA3向けのベクターもあり、パスワードは不要ですが、これらはブロードキャスト専用でベストエフォートです(以下を参照)。
許可された使用のみ。所有しているネットワーク、または書面によるテスト許可を得たネットワークに対してのみ実行してください。不正なdeauthenticationはほとんどの地域で違法です。
攻撃の選択方法とホワイトリスト
デフォルトではKTOはホワイトリストセーフを維持します。送信を確認した各非ホワイトリストクライアントに対して、双方向にユニキャストのdeauthenticationとdisassociationを送信します。ホワイトリストのMACは決してターゲットにされません。これによりPMFをネゴシエートしていないクライアントを切断します。これはWPA/WPA2のすべてと、混在ネットワーク上の非PMFクライアントをカバーします。
PMF(802.11w)が問題です。これはdeauth、disassoc、ユニキャストアクションフレームを保護するため、PMFまたはWPA3クライアントは、ユニキャストのChannel Switch Announcementを含む、偽造されたクライアント単位のフレームをすべて無視します。これを回避するホワイトリストセーフな方法はありません。まさにPMFが防ぐように設計されているものです。PMFクライアントに届く唯一のフレームは、単一のデバイスを狙えないものです:
- CSAビーコン: Channel Switch Announcementを含む偽造APビーコンで、クライアントをデッドチャネルへ誘導します。ビーコンは決して保護されないため、これは通過しますが、それを聞いたすべてのクライアントが切り替わります。
- 匿名reassociation: ブロードキャストソースを持つAPへのreassociationリクエストで、多くのAPがブロードキャストアドレス自身をdeauthenticateさせます。APがキックを行うため、PMFは関与しませんが、すべてのクライアントを切断します。
どちらもBSS全体に影響し、ホワイトリストを尊重できません。そのため--broadcastでオプトインします(ブロードキャストdeauthも追加されます)。PMF/WPA3クライアントを切断する必要があり、ホワイトリストのデバイスも落ちることを受け入れられる場合に使用してください。--all-vectorsはブロードキャストベクターを有効にする同義語です。
結論:WPA2ではホワイトリストが機能し、クライアント単位のdeauthで十分です。WPA3/PMFではデフォルトでは何も届かず、クライアント単位のフレーム(deauth、およびターゲット指定のCSAも)は保護され無視されるため、それらのクライアントを切断するには--broadcastを渡す必要があり、それはBSS全体を落とすため、ホワイトリストはもはや適用されません。
正直な注意点:PMF付きのWPA3は偽造管理フレームに抵抗するように作られています。認証されていない攻撃者がそれに対してキックを保証することはできません。これらのベクターはベストエフォートであり、多くの実環境で効果がありますが、「すべてのネットワークで機能する」とはWPA3について誰も約束できるものではありません。
ビルド
Rustツールチェーンと、ターゲットマシン上のiw(iproute2 / ワイヤレスツールから)が必要です。
cargo build --release
バイナリはtarget/release/ktoに生成されます。rootとして実行してください。
使用方法
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor
--auto-monitorなしでは、インターフェースはすでにモニターモードである必要があります。これを使用すると、KTOは開始時にインターフェースをモニターに切り替え、終了時にマネージドに戻します。-cを渡さない場合、ターゲットを見つけるために一般的な2.4および5 GHzチャネルをスイープし、その後そのチャネルにロックします。
多くの家庭用ルーターは、バンドステアリングのために1つのSSIDを2つの無線(2.4 GHz WPA2と5 GHz WPA3、異なるBSSID)からアドバタイズします。KTOはSSIDを持つすべてのBSSIDを調査し、複数が見つかった場合はバンドとセキュリティとともにリストし、どれを攻撃するか尋ねます。ターゲットデバイスが実際に接続しているものを選ぶか、-b/--bssidで事前に指定してください。これは重要です:5 GHz WPA3 BSSID上のクライアントは、2.4 GHz WPA2クローンを攻撃しても落ちません。
KTOは送信を確認したクライアントのみをdeauthするため、アイドル状態のデバイスは自力では現れないかもしれません。特定のデバイスが他は落ちるのに落ちない場合は、--client <MAC>で指定してください。KTOはその後、毎ラウンド必ずそれを攻撃します。3つのことを確認してください:攻撃しているBSSID/バンド上にあるか、そのMACが期待するものであるか、そしてdeauthを無視する稀なNICについては、--all-vectorsを試してください(プレーンなWPA2でもチャネルスイッチとreassociationベクターを追加します)。
その他の例:
# already in monitor mode, lock to a known channel
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -c 6
# band-steered SSID: target the exact AP the device is on
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24
# WPA3 / PMF: per-client is blocked, so broadcast to kick (whole BSS, no whitelist)
sudo ./target/release/kto -i wlan0mon -t "CorpNet" -b 62:a6:dd:6d:0a:24 --broadcast
# spare your own devices
sudo ./target/release/kto -i wlan0 -t "CorpNet" --auto-monitor -w AA:BB:CC:DD:EE:FF
# passive: list clients, send nothing
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --scan-only
# throw every vector at it regardless of security
sudo ./target/release/kto -i wlan0mon -t "CorpNet" --all-vectors
オプション
| Flag | Default | Description |
|---|---|---|
-i, --interface | required | ワイヤレスインターフェース |
-t, --target | required | ターゲットSSID |
-b, --bssid | auto | BSSIDで1つのAPをターゲットにする(バンドステアリング / マルチAP SSID) |
-f, --first | off | 最初に見つかった一致するAPを攻撃する(ピッカーをスキップ) |
-c, --channel | auto | チャネルにロックし、ディスカバリスイープをスキップ |
--client | none | アイドル/未検出でも、常にこれらのMACをターゲットにする |
-w, --whitelist | none | 除外するMACのカンマ区切りリスト |
--whitelist-file | none | 除外するMACのファイル、1行に1つ(#コメント) |
-n, --count | 8 | ベクターごとのバーストあたりのフレーム数 |
-s, --sleep | 0.05 | 攻撃ラウンド間の秒数(小さい = 連続、スロットルするには増やす) |
--reason | 7 | Deauth理由コード(1 unspecified、4 inactivity、7 class-3) |
--broadcast | off | ブロードキャスト / AP全体のベクターも使用する(ホワイトリストを無視) |
--scan-only | off | クライアントを検出し、何も送信しない |
--auto-monitor | off | 開始時にモニターモードを有効化し、終了時に復元 |
--csa-channel | 14 | CSAベクターがクライアントを誘導するチャネル |
--all-vectors | off | --broadcastの同義語(ブロードキャストベクターを有効化) |
--no-deauth | off | deauth/disassocを無効化 |
--no-csa | off | チャネルスイッチベクターを無効化 |
--no-anon | off | 匿名reassociationを無効化 |
--no-tui | off | ライブダッシュボードの代わりにプレーンなスクロール出力 |
--no-color | off | プレーン出力 |
インターフェースMACは自動的にホワイトリストに登録されるため、KTOが自身をターゲットにすることはありません。
ダッシュボード
実際のターミナルでは、KTOは短い起動アニメーションの後、全画面ダッシュボードを実行します:ターゲットの詳細、ライブクライアントテーブル、イベントログ、TXレートのスパークライン。STATE列が役立つ部分です:UPはデバイスがまだ送信中(攻撃をかわしている)、quietは沈黙した、DOWNは切断とみなされるのに十分な時間沈黙したことを意味します。クライアントは一度見つかるとリストに残り、KTOはデータだけでなくassociationおよびauthフレームからもそれらを拾うため、ブロードキャスト攻撃中もテーブルは機能し続け、各デバイスが落ちるにつれてDOWNに変わるのを監視できます。複数のAPがSSIDを共有している場合、矢印キーで選択できるリストが表示されます。
q(またはEsc、Ctrl-C)を押して終了します。出力をパイプするか、--no-tuiを渡すと、プレーンなスクロールログにフォールバックします。これはスクリプトやファイルへのログ記録に適しています。
停止
終了するとクリーンに停止し、クライアントごとのバーストサマリーを出力し、KTOがモニターモードにした場合はインターフェースをマネージドモードに復元します。
ライセンス
MIT、LICENSEを参照。