
802.11 클라이언트를 대량으로 자동 deauth하는 스크립트 및 하드웨어 키트. 나중의 악의적인 용도를 위해 패킷을 캡처합니다.
802.11 클라이언트를 대량으로 자동으로 deauth하는 스크립트입니다. 나중에 악의적인 용도로 사용할 패킷을 캡처합니다. 동네 카페에서 훌륭한 대화 시작거리가 됩니다.
이 스크립트는 Raspberry Pi 3 이상에서 실행되도록 설계되었습니다. 물론 동일하거나 더 뛰어난 성능을 가진 유사한 하드웨어에서도 실행됩니다.
스크립트를 효과적으로 운영하려면 상당한 추가 키트가 필요합니다. 다음도 필요합니다:
최대 효과를 위해 다음도 장비하는 것이 좋습니다:
저는 개인적으로 ConnectBot과 Hacker's Keyboard를 사용하여 이런 키트를 SSH로 제어합니다. 이 조합은 가장 눈에 덜 띄고 주머니에 쏙 들어갑니다.
장치가 자동으로 사용자가 호스팅하는 VPN에 연결되도록 구성하는 것이 좋습니다. 이렇게 하면 라우팅/NAT 문제를 피할 수 있습니다. OpenVPN을 클라우드 호스트에 설정하는 것이 가장 쉬운 방법입니다. OpenVPN의 client-to-client 서버 구성 지시문을 사용하거나 포워딩을 다른 방식으로 설정했는지 확인하십시오.
인터넷에 연결하려면 Wi-Fi 외에 다른 방법이 필요합니다. 셀룰러 접속이 가장 간단한 방법입니다. 원격으로 패킷 캡처를 가져올 필요가 없다면, 매우 적은 대역폭(<100Kib/s)만 있으면 됩니다. 일정량의 데이터 사용 후 속도를 제한하는 저렴한 "무제한" 요금제도 충분히 사용할 수 있습니다.
셀룰러 네트워크 위에서 OpenVPN을 실행할 때 MTU 문제를 겪었습니다. 가장 쉬운 해결책은 ip link set dev tunX mtu 1200 명령으로 MTU를 1200으로 설정하는 것입니다. 여기서 tunX는 tun 장치입니다. 네트워크에 따라 다른 MTU를 사용해야 할 수도 있습니다.
특정 구성에 따라 연결된 USB 장치가 Raspberry Pi가 일반적인 방법으로 공급할 수 있는 것보다 더 많은 전력을 소모할 수 있습니다. 위에서 언급한 것과 같은 USB 전원 허브를 사용하면 배터리의 다른 USB 포트를 통해 라디오에 전력을 공급할 수 있습니다. 일부 저렴한 USB 허브는 Raspberry Pi의 허브로 "역전원"을 공급할 수 있습니다. 이는 좋은 품질의 배터리를 사용한다면 적합하며, 오히려 유용하기도 합니다.
또 다른 해결책은 이런 분배기를 사용하여 USB 허브에 추가 전원을 공급하는 것입니다. 작동은 하지만 권장하지는 않습니다. 실수로 연결이 끊어질 수 있는 요소가 하나 더 추가되고, 정리하기도 번거롭습니다.
테더링된 휴대폰을 통해 원격 제어를 제공하는 경우, 가능하면 키트를 시작할 때 배터리가 완전히 충전되었는지 확인하십시오. 일부 저렴한 장치는 지속적인 데이터 연결로 소비되는 전력을 따라잡을 만큼 충분한 전류를 끌어오지 못할 수 있습니다.
여러 라디오, Raspberry Pi, 셀룰러 모뎀의 조합은 매우 뜨거워집니다. 특히 Panda PAU06은 매우 뜨겁게 작동합니다. 열을 신경 쓰지 않으면 라디오가 녹거나 더 심각한 문제가 발생할 수 있습니다. 선택한 가방/케이스로 실온에서 사전 테스트를 실행하여 적절한 방열이 가능한지 확인하십시오. 따뜻한 날 차량 내부와 같은 뜨거운 환경에서 키트를 사용해야 하는 경우 과열을 방지하기 위해 추가 조치를 취하십시오. 차량의 경우 에어컨을 켜고 간헐적으로 원격 시동을 걸면 충분합니다.
일부 저렴한 휴대폰은 추가 장비와 정기적인 데이터 전송의 필요성 때문에 과열되기 쉽습니다. 이런 조건에서 휴대폰이 꺼져서 원격 제어가 불가능해질 수 있습니다. 휴대폰을 키트의 다른 구성 요소와 별도의 구획에 두면 도움이 되지만, 다른 장치를 사용하는 것이 더 좋습니다.
키트를 은밀하게 운영하려는 경우, 열이 예상치 못한 방식으로 주의를 끌 수 있다는 점을 명심하십시오. 눈 오는 날 차량 대시보드에 두면 눈과 얼음이 녹습니다. 다른 곳은 모두 눈으로 덮인 상태에서 키트를 중심으로 깨끗한 원형 공간이 생겨 키트가 시야에 드러납니다!
Wisp 설치 지침은 rpi-install.md에 자세히 설명되어 있습니다. 단계는 라즈비안이 아닌 시스템에서도 비슷해야 합니다. Wisp는 deauth 프레임을 전송하기 위해 aircrack-ng의 aireplay-ng에 의존합니다. 특히, 장치용 Python-3.7.1을 빌드해야 하며, 이 과정도 rpi-install.md 파일에 설명되어 있습니다.
Wisp는 dream이라는 또 다른 작은 C 프로그램에 의존합니다. 소스는 dream.c에 포함되어 있습니다. Dream은 libpcap에 의존합니다.
장치용 dream을 컴파일하려면 gcc -O3 dream.c -lpcap 명령을 사용하십시오.
Dream은 라인 grep 가능한 출력으로 802.11 트래픽을 모니터링하는 도구입니다. 또한 캡처한 트래픽을 표준 pcap 형식의 파일로 저장합니다. Wisp는 각 모니터링 라디오에 대해 dream을 호출하고 클라이언트 트래픽에 대한 출력을 구문 분석합니다. 다음은 인수입니다:
--a: 연결된 클라이언트의 트래픽만 보고합니다. (--d가 활성화된 경우 모든 패킷은 여전히 디스크에 기록됩니다.)--d (file): 패킷을 지정된 파일에 덤프합니다.-[b][c][d][f][s][t]: 한 줄당 출력할 필드를 지정합니다. 구체적으로:
b: BSSc: 채널 번호.d: 패킷을 수신한 장치의 이름.f: 주파수.s: 스테이션 (STA).t: Pcap 타임스탬프.이 필드는 지정된 순서와 관계없이 항상 같은 순서로 출력됩니다. (즉, -bcst는 -sctb와 동일합니다.)
Wisp는 wisp.json이라는 JSON 형식의 파일을 구성에 사용합니다. 키에 대한 설명은 다음과 같습니다:
monitors: 모니터로 구성될 장치 목록을 포함합니다. 각 장치는 해당 장치의 특정 구성을 설명하는 하위 키를 포함합니다:
channel: 장치가 모니터링할 채널.injector: deauth 프레임을 주입하도록 구성될 장치.timing: 몇 가지 타이밍 매개변수를 나열합니다. 모든 값은 밀리초 단위로 제공됩니다:
delay: 클라이언트당 전송되는 deauth 패킷 사이의 지연 시간.jitter: 주어진 범위 내에서 임의의 양만큼 지연 시간을 변조합니다.stale: 클라이언트가 지연 목록에서 제거되기 전까지 보이지 않는 시간. 지연 시간 범위에 가깝지 않으면 실질적인 효과가 거의 없습니다.모든 매개변수는 wisp.json에서 로드되므로, wisp는 간단히 python3 ./wisp.py로 실행됩니다.
Wisp는 wisp.json에 설명된 대로 라디오를 자동으로 구성합니다. 또한 rfkill을 비활성화하고 airmon-ng의 동작과 유사하게 방해가 되는 프로세스를 종료합니다.
Wisp는 지정된 장치의 이름을 wispX 형식으로 변경합니다. 여기서 X는 phy에 연결된 번호입니다. 종료 시 장치 이름을 원래 이름으로 다시 변경합니다.
Wisp는 전송된 각 deauth에 대해 .을 출력합니다. 이는 예상대로 작동하는지 확인하는 간단하고 효과적인 방법입니다.
Wisp는 (dream을 통해) 패킷을 캡처한 라디오(phy)의 이름과 임의의 16진수 문자열을 접두사로 사용하고 .cap으로 끝나는 pcap 파일을 출력합니다. 예를 들어, phy0-8cf9ec5ca146943f.cap과 같은 형식입니다. 그런 다음 일반적인 pcap 파일 도구로 검사, 구문 분석 및 조작할 수 있습니다.