
Snoopy v2.0 - 모듈식 디지털 지상파 추적 프레임워크
SensePost 제공:
/$$$$$$
/$$__ $$
| $$ \__/ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$
| $$$$$$ | $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ | $$
\____ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ | $$
/$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$
| $$$$$$/| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$$
\______/ |__/ |__/ \______/ \______/ | $$____/ \____ $$
| $$ /$$ | $$
| $$ | $$$$$$/
|__/ \______/
Version: 2.0
Code: [email protected] // @glennzw
Visit: www.sensepost.com // @sensepost
License: Non-commercial use
Snoopy 버전 2.0에 오신 것을 환영합니다!
Snoopy 설치 및 설정:
bash install.sh
wireless, sysinfo, heartbeat 플러그인의 데이터를 로컬에 저장하려면:
snoopy -v -m wifi:mon=True -m sysinfo -m heartbeat -d myDrone -l London
클라이언트에서 서버로 데이터를 동기화하려면:
서버:
snoopy_auth --create myDrone # Create account
snoopy -v -m server # Start server plugin
클라이언트:
snoopy -v -m wifi:mon=True -s http://<server>:9001/ -d myDrone -l London -k <key>
소개 및 개요 ============================= Snoopy는 분산형 센서, 데이터 수집, 가로채기, 분석 및 시각화 프레임워크입니다. Python 플러그인을 통해 다양한 소스에서 임의의 데이터를 수집할 수 있도록 모듈식 형식으로 작성되었습니다.
아키텍처
각 Snoopy 인스턴스는 여러 플러그인을 동시에 실행할 수 있습니다. 플러그인은 데이터를 수집하고, 메인 Snoopy 프로세스가 이를 조회하여 로컬 데이터베이스에 기록합니다. Snoopy는 클라이언트(드론)와 서버 간에 데이터를 동기화할 수 있으며, 클라이언트(드론)는 서버에서 데이터의 복제본을 가져올 수도 있습니다. 각 Snoopy 인스턴스는 전체 구조에서 자신의 위치에 적합한 플러그인을 실행할 수 있습니다. 다음 다이어그램은 가능한 설정 중 하나를 보여줍니다:
Drone01 Server01
+---------------+ +--------------+
| Plugins: | | Plugins: |
| * WiFi | | *Server |
| * Bluetooth |====3G====>| |<=========================\
| * GSM | | | ||
| * FitBit | | | ||
+---------------+ +--------------+ ||
||
Drone02 Server02 Server03 ||
+---------------+ +--------------+ +-------------+ ||
| Plugins: | | Plugins: | | Plugins: | ||
| * WiFi | | * Server | | * Server | ||
| * Cookie |=====Xbee==>| * Heartbeat |==3G==>| * Wigle |<==\
| thief | || | | | * DataViz | ||
| * GPS | || | | | | ||
+---------------+ || +--------------+ +-------------+ ||
|| Internet
Drone03 || Laptop01 ||
+---------------+ || +--------------+ ||
| Plugins: | || | Plugins: | ||
| * Thermal | || | *RemotePull | ||
| * Camera |===/ | |====/
| * Heat | | Run: |
| | | *Maltego |
+---------------+ +--------------+
위 그림에는 세 대의 드론이 실행 중이며 두 개의 개별 서버로 데이터를 동기화하고 있습니다. 하나는 3G로, 나머지 두 개는 Xbee로 동기화합니다. 두 번째 서버는 자신의 데이터를 세 번째 서버로 동기화합니다. 마지막으로 클라이언트(노트북)는 첫 번째와 세 번째 서버에서 모든 데이터를 가져와 Maltego를 실행하여 데이터를 탐색합니다.
'snoopy-ng.git' 디렉터리에서 'sh install.sh'를 실행하면 필요한 모든 패키지가 설치됩니다. 이 패키지가 없는 배포판을 위해 소스에서 aircrack을 설치하는 옵션을 제공합니다(aircrack 스위트는 무선 플러그인에 사용됩니다). 데이터 탐색에는 Maltego를 적극 권장합니다. 커뮤니티 에디션(일부 제한 있음)은 http://paterva.com에서 무료로 다운로드할 수 있습니다.
사용 가능한 모든 플래그와 옵션을 확인하려면 다음 두 가지 명령을 제공합니다:
root@kali:~# snoopy --help (shorthand -h)
이 명령은 동기화할 서버, 드론 이름 및 위치 등 모든 실행 옵션을 보여줍니다. 또한 다양한 플러그인을 실행하는 방법도 소개합니다.
root@kali:~# snoopy --list (shorthand -i)
이 명령은 사용 가능한 모든 플러그인과 각 플러그인이 올바르게 작동하는 데 필요한 매개변수를 나열합니다. 각 플러그인에 대한 더 자세한 정보를 보려면 '-ii' 또는 '-iii'를 사용하세요. 특정 플러그인에 대한 정보는 '-i -m '을 사용하세요.
플러그인은 --plugin(또는 줄여서 -m) 옵션으로 지정할 수 있습니다. 여러 플러그인을 지정할 수 있으며 입력한 순서대로 시작됩니다. 각 플러그인은 준비 상태를 알리는 데 60초가 주어지며, 이후 타임아웃되고 다음 플러그인이 시작됩니다. 이는 후속 플러그인이 이전 플러그인의 작업에 의존하는 경우 유용할 수 있습니다.
각 플러그인은 --list 출력에 표시된 대로 쉼표로 구분된 키-값 쌍 형태의 많은 매개변수를 받을 수 있습니다. 아래에서는 단순히 난수를 생성하는 'example' 플러그인을 사용합니다.
snoopy --plugin example:x=1,v=True
드론/위치 옵션을 지정하지 않으면 기본값이 사용됩니다. 또는 아래와 같이 지정할 수 있습니다.
snoopy --plugin example:x=1,v=True --drone myDrone --location Cansas
--server(-s) 옵션을 지정하면 데이터를 원격 머신과 동기화할 수 있습니다. 원격 머신에서는 서버 플러그인(--plugin server)이 실행 중이어야 합니다. 사전에 드론 이름에 대한 키를 생성해야 합니다. 아래는 이를 보여줍니다.
서버
root@server:~# snoopy_auth --create myDrone01 --verbose
[+] Creating new Snoopy server sync account
[+] Key for 'myDrone01' is 'GWWVF'
[+] Use this value in client mode to sync data to a remote server.
root@kali:~# snoopy --plugin server
[+] Running webserver on '0.0.0.0:9001'
[+] Plugin server caught data for 2 tables.
클라이언트
root@client:~# snoopy --plugin example:x=1 --drone myDrone --key GWWVF --server http://<server_ip>:9001/ --verbose
[+] Starting Snoopy with plugins: example
[+] Plugin example created new random number: 21
[+] Snoopy successfully sunc 2 elements over 2 tables.
원격 데이터 가져오기
local_sync 플러그인을 사용하여 서버에서 데이터를 가져올 수 있습니다. 예를 들어 위와 같이 서버가 실행 중이라고 가정하고 클라이언트에서 다음 작업을 수행합니다:
root@client:~# snoopy --plugin local_sync:server_url=http://<server_ip>:9001/ --drone myDrone --key GWWVF
[+] Plugin local_sync pulled 888 records from remote server.
기본 동작은 모든 데이터를 SQLITE 파일 snoopy.db에 저장하는 것입니다. 이는 --dbms 매개변수로 재정의할 수 있습니다. 다양한 데이터베이스 엔진을 지정하는 방법은 SQL Alchemy 문서(http://docs.sqlalchemy.org/en/rel_0_9/dialects/index.html)를 참조하세요. 예를 들어 아래에서는 MySQL을 사용합니다:
root@client:~# snoopy -v --plugin example --dbms=mysql://glenn:secret@localhost/snoopy_db
[+] Capturing local only. Saving to 'mysql://glenn:secret@localhost/snoopy_db'
소형 기기에서는 SQLITE 저장소를 사용하고 서버 플러그인은 MySQL(또는 유사한 DB)에 저장하도록 하는 것이 유용할 수 있습니다. 이동식 미디어 등 데이터를 저장할 파일 위치를 지정하는 다음 예시도 유용할 것입니다:
root@client:~# snoopy -v --plugin example --dbms=sqlite:////media/USB01/snoopy.db
--flush(-f) 옵션은 데이터가 업스트림 서버와 동기화된 후 로컬 저장소에서 데이터를 '비우는(flush)' 옵션입니다.
Snoopy는 upstart 스크립트로 시작할 수 있습니다(./setup/upstarts 폴더 참조). 같은 디렉터리에 다른 샘플 upstart 스크립트도 제공됩니다. 예를 들어 3G 모뎀에서 PPP 연결을 설정하는 스크립트와 SSH 원격 명령 채널을 만드는 스크립트가 있습니다.
Debian 기반 시스템(예: Kali)은 upstart를 지원하지 않는 것 같습니다. 그 사이에는 제공된 rc.local 파일을 사용하여 부팅 시 Snoopy 및 관련 서비스를 시작할 수 있습니다.
Maltego는 시각화를 수행하는 데 선호되는 도구입니다. 지침은 다음과 같습니다:
이렇게 하면 엔티티와 변환(transforms)이 모두 가져와집니다. 시작하려면 팔레트 메뉴의 Snoopy 탭에서 'Base of Operations' 엔티티를 빈 그래프로 끌어다 놓습니다. 예를 들어 엔티티에 대해 다음 작업을 수행합니다:
변환은 (수동 모니터링에서) 도메인과 쿠키를 가져오고, SSID 거리 주소를 조회하는 데 사용되며, 여러 변환은 양방향입니다(예: Location에서 클라이언트를 조회하거나 클라이언트에서 Location을 조회). 직접 사용해 보는 것이 가장 좋습니다.
기본 sqlite 형식을 사용하지 않는 경우 다음 파일을 편집하여 데이터 위치를 지정하십시오:
snoopy_ng/transforms/db_path.conf
Snoopy 그래프는 Maltego의 협업 기능을 사용하여 여러 분석가가 동시에 공유할 수 있습니다. Collaboration을 선택한 다음 'Share Current Graph'를 선택하세요.
상업적 사용 =================== Snoopy가 배포되는 라이선스는 사용으로 인한 금전적(또는 기타) 이득을 금지합니다(LICENSE.txt 참조). 상업적 사용을 위한 별도의 라이선스가 있으며, 여기에는 다음과 같은 추가 기능이 포함됩니다:
함께 작업하고 싶다면 연락주세요 ([email protected] / [email protected]).
플러그인 작성 방법을 이해하려면 plugins/example.py 파일을 참조하십시오. plugins 폴더에 있는 모든 파일은 플러그인으로 취급되며 다음 속성을 가져야 합니다:
그 외에는 플러그인이 원하는 대로 동작할 수 있습니다.
Snoopy는 install.sh 파일의 파일을 설치할 수 있는 충분한 지원이 있는 모든 Linux 장치에서 실행됩니다. 즉, Python 및 관련 패키지가 필요합니다. 하드웨어 지원은 필요한 플러그인에 따라 다르지만, WiFi 데이터를 수집하고 3G로 업로드하는 가장 일반적인 시나리오에서는 다음을 권장합니다:
Kali 1.05 및 Ubuntu 12.04에서 테스트되었습니다. 유사한 시스템에서도 작동할 것입니다.
로컬에서 데이터를 수집하고, 원격 서버에 동기화한 다음, 서버에서 복제본을 가져올 때 오류 조건이 발생합니다. 예:
서버
root@kali:~# snoopy -m server -m wigle:username=u,password=p,[email protected]
[+] Running webserver on '0.0.0.0:9001'
[+] Plugin server caught data for 2 tables.
클라이언트
root@client:~# snoopy -m wifi -m local_sync:server_url=http://1.1.1.1:9001/ -d myDrone -l London -k secretkey -s http://1.1.1.1:9001/