
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' 엔티티를 빈 그래프로 끌어다 놓습니다. 예를 들어 엔티티에 대해 다음 작업을 수행합니다: