
무선 네트워크를 난독화하기 위한 Python 스크립트
무선 네트워크를 난독화하는 python 스크립트
''' 경고: 저는 직업상 프로그래머도 아니고, 스스로 프로그래머라고 생각하지도 않습니다.
공통 SSID 목록은 https://wigle.net/gps/gps/Stat 에서 가져왔습니다. OUI 공급업체 목록은 잘 알려진 업체(netgear, cisco, linksys, d-link, atheros, ralink, apple)에 대해 http://standards.ieee.org/develop/regauth/oui/oui.txt 에서 파싱했습니다.
이 아이디어는 Black Alchemy의 FakeAP http://www.blackalchemy.to/project/fakeap/ 와 Pettinger의 airraid http://www.pettingers.org/code/airraid.html 를 기반으로 만들어졌습니다. 패킷에서 필요한 정보를 파싱하는 일부 로직은 Core Security Technology의 Power-Saving DoS 스크립트의 Leandro Meiners ([email protected])에게서 가져왔습니다.
이 구현들 사이의 주요 차이점은 하드웨어 요구 사항과 가짜 액세스 포인트가 생성되는 방식입니다.
FakeAP는 PRISM 기반 무선 카드와 함께 iw와 ifconfig를 사용하여 액세스 포인트를 생성함으로써 가짜 액세스 포인트를 생성합니다. 문제는 PRISM 드라이버가 대부분의 최신 배포판에서 대부분 더 이상 사용되지 않는다는 것입니다. 작동하는 드라이버와 PRISM 카드가 있어도 FakeAP를 기본 설정 그대로 작동시킬 수 없었습니다.
AirRaid는 FakeAP 작동 방식과 거의 동일합니다. 그러나 Atheros 기반 카드에 맞춰져 있으며 가짜 액세스 포인트를 생성하기 위해 madwifi 드라이버와 유틸리티를 활용합니다. Madwifi 프로젝트는 ath5/9k 드라이버에 밀려 대부분 사라지고 있는 것으로 보입니다. 기본 상태에서 AirRaid는 제 atheros 카드에서 더 이상 작동하지 않았습니다.
이 구현들의 또 다른 문제는 속도였습니다. 각 가짜 액세스 포인트가 생성될 때마다 무선 장치를 내렸다 올리고 다시 구성해야 했습니다.
이 구현은 여러 면에서 다릅니다. FakeAP나 AirRaid처럼 전적으로 특정 하드웨어에 국한되지 않습니다. 무선 어댑터 설정을 변경하고 장치를 재설정 및 재구성하여 가짜 액세스 포인트를 만드는 대신, 패킷 주입을 지원하는 무선 카드를 활용합니다.
이는 여러 면에서 도움이 됩니다. 패킷 주입과 모니터 모드를 지원하는 많은 최신 드라이버뿐만 아니라 훨씬 더 많은 어댑터를 지원합니다 (rtl8187, ath5k, ath9k, 대부분의 ralink 등...). 요컨대, airmon-ng를 통해 어댑터를 모니터 모드로 실행할 수 있는 드라이버가 있는 모든 장치에서 이 스크립트를 사용할 수 있습니다. 실제 액세스 포인트를 생성하는 대신 패킷 주입을 활용하기 때문에 실제 액세스 포인트에서 온 것처럼 보이는 패킷을 주입합니다.
이것은 제 첫 python 프로젝트이므로 결함, 비효율성, 어떤 AP가 가짜인지 탐지할 수 있는 가능한 방법들이 있을 것입니다. 문제가 발견되고 개선이 요청됨에 따라 시간이 지나면서 개선할 계획입니다.
이것을 작동시키는 데 이 요구 사항보다 적은 것만으로도 충분할 수 있지만, 다음에서 작동하는 것을 확인했습니다:
ath5k 및 ath9k를 사용하는 Atheros 기반 카드 Realtek 8187 칩셋(예: Alfa AWUS 036H) 대부분의 Ralink 칩셋
이것은 python 2.7과 Scapy 2.2.0으로 작성되었습니다. Scapy 문서가 좀 빈약해서 Scapy에 대해 확실히 이해하지 못하고 있습니다. 잘못된 부분이 있으면 알려주세요. airmon-ng를 사용하여 패킷 주입을 허용하는 모니터 인터페이스를 만들었습니다.
이 글도 실제 코드보다 길다는 점을 알고 있습니다.
실행 방법:
python 2.7, Scapy 2.2.0, 패킷 주입을 지원하는 드라이버가 있는 무선 카드가 필요합니다.
#####초기 버전 경고#####
현재로서는 scapy를 잘 알지 못하기 때문에 이 스크립트에는 사실상 로깅이 없습니다. 비콘 프레임과 프로브 응답을 보낼 때 터미널에 "Sent 1 packets"을 출력합니다. 초당 여러 패킷을 보내면 화면이 "Sent 1 packets"으로 도배됩니다. 현재 이 문제를 해결하고 더 유용한 로깅을 제공하는 방법을 찾는 중입니다.
패킷 주입이 가능한 모니터 모드의 무선 NIC가 있는지 확인하세요. 저는 aircrack-ng 스위트의 airmon-ng를 사용합니다:
airmon-ng start <interface>
그러면 새로 생성된 가상 모니터링 인터페이스(예: mon 0)가 표시됩니다.
FuzzAP.py는 네 개의 필수 인자를 받습니다. 첫 번째 인자는 사용할 인터페이스, 두 번째는 생성할 가짜 액세스 포인트 수, 세 번째는 OUI 파일, 네 번째는 SSID로 가득 찬 파일입니다.
sudo python fuzzap.py <interface> <number of APs> <OUI file> <ssid file>
저장소 밖에서 이 스크립트를 실행하려면:
sudo python fuzzap.py <interface> <number of APs> common.txt ssid.txt
클라이언트 관점에서 보이는 모습: http://imgur.com/QsoFP1a
이 소프트웨어는 저작권 보유자 및 기여자에 의해 "있는 그대로" 제공되며, 상품성 및 특정 목적에의 적합성에 대한 묵시적 보증을 포함하되 이에 국한되지 않는 모든 명시적 또는 묵시적 보증은 부인됩니다. 어떠한 경우에도 직접, 간접, 우발, 특별, 징벌적 또는 결과적 손해(대체 상품 또는 서비스의 조달, 사용, 데이터 또는 이익의 손실, 업무 중단을 포함하되 이에 국한되지 않음)에 대해 계약, 엄격 책임 또는 불법 행위(과실 포함) 등 어떠한 책임 이론에 의해서도, 이 소프트웨어 사용으로 인해 발생하는 손해에 대해 책임을 지지 않습니다. 그러한 손해의 가능성에 대해 사전에 통보받은 경우에도 마찬가지입니다. '''
TODO:
'AP'와 '클라이언트' 사이의 가짜 트래픽 채널 호핑