
Snoopy v2.0 - framework modulare di tracciamento digitale terrestre
SensePost presenta:
/$$$$$$
/$$__ $$
| $$ \__/ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$
| $$$$$$ | $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ | $$
\____ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ | $$
/$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$
| $$$$$$/| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$$
\______/ |__/ |__/ \______/ \______/ | $$____/ \____ $$
| $$ /$$ | $$
| $$ | $$$$$$/
|__/ \______/
Version: 2.0
Code: [email protected] // @glennzw
Visit: www.sensepost.com // @sensepost
License: Non-commercial use
Benvenuto in Snoopy Versione 2.0!
Per installare e configurare Snoopy:
bash install.sh
Per salvare localmente i dati dei plugin wireless, sysinfo e heartbeat:
snoopy -v -m wifi:mon=True -m sysinfo -m heartbeat -d myDrone -l London
Per sincronizzare i dati da un client a un server:
Server:
snoopy_auth --create myDrone # Create account
snoopy -v -m server # Start server plugin
Client:
snoopy -v -m wifi:mon=True -s http://<server>:9001/ -d myDrone -l London -k <key>
INTRODUZIONE E PANORAMICA ============================= Snoopy è un framework distribuito per sensori, raccolta dati, intercettazione, analisi e visualizzazione. È scritto in formato modulare, consentendo la raccolta di dati arbitrari da varie fonti tramite plugin Python.
Architettura
Ogni istanza di Snoopy può eseguire più plugin simultaneamente. Un plugin raccoglie dati, che vengono interrogati dal processo principale di Snoopy e scritti in un database locale. Snoopy può sincronizzare i dati tra client (droni) e un server, e i client (droni) possono anche scaricare repliche dei dati da un server. Ogni istanza di Snoopy può eseguire i plugin appropriati alla sua posizione nel quadro generale. Ecco un diagramma che illustra una possibile configurazione:
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 |
+---------------+ +--------------+
Nell'illustrazione sopra, ci sono tre droni che eseguono e sincronizzano i loro dati verso due server separati. Uno sincronizza via 3G, gli altri due via Xbee. Il secondo server sincronizza i suoi dati con un terzo server. Infine, un client (laptop) scarica tutti i dati dal primo e dal terzo server ed esegue Maltego per esplorare i dati.
Eseguire 'sh install.sh' nella directory snoopy-ng.git installerà tutti i pacchetti richiesti. Offre la possibilità di installare aircrack dal sorgente, necessario per le distribuzioni che non includono questo pacchetto (la suite aircrack è usata per i plugin wireless). Non possiamo raccomandare abbastanza Maltego per l'esplorazione dei dati: una community edition (con alcune restrizioni) può essere scaricata gratuitamente dal sito Paterva all'indirizzo http://paterva.com.
Per vedere tutte le flag e le opzioni disponibili, abbiamo preparato due comandi per te:
root@kali:~# snoopy --help (shorthand -h)
Questo comando mostra tutte le opzioni disponibili, ad esempio a quale server sincronizzare, il nome del drone e la sua posizione. Inoltre, introduce anche come eseguire i vari plugin.
root@kali:~# snoopy --list (shorthand -i)
Questo comando elenca tutti i plugin disponibili e i parametri richiesti da ciascun plugin per funzionare correttamente. Per ottenere informazioni più dettagliate su ogni plugin, usa '-ii' o '-iii'. Per informazioni su un plugin specifico usa '-i -m '.
I plugin possono essere specificati con l'opzione --plugin (o l'abbreviazione -m). Si possono specificare più plugin, che verranno avviati nell'ordine in cui sono inseriti. Ogni plugin avrà 60 secondi per indicare il proprio stato di prontezza; dopo questo timeout verrà avviato il plugin successivo. Questo può essere utile se i plugin successivi dipendono dalle azioni di quelli precedenti.
Ogni plugin può accettare numerosi parametri (come indicato nell'output di --list) sotto forma di coppie chiave-valore separate da virgola. Di seguito usiamo il plugin 'example', che genera semplicemente numeri casuali.
snoopy --plugin example:x=1,v=True
Se le opzioni drone / posizione non vengono fornite, vengono usati valori predefiniti. In alternativa, possono essere specificate come di seguito.
snoopy --plugin example:x=1,v=True --drone myDrone --location Cansas
I dati possono essere sincronizzati su una macchina remota specificando l'opzione --server (-s). La macchina remota deve eseguire il plugin server (--plugin server). Prima di tutto va generata una chiave per un nome di drone. Di seguito è illustrato il procedimento.
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.
Client
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.
Recupero Remoto dei Dati
I dati possono essere recuperati da un server usando il plugin local_sync. Ad esempio, supponendo che il server di cui sopra sia in esecuzione, esegui questa operazione dal client:
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.
Il comportamento predefinito è archiviare tutti i dati in un file SQLITE snoopy.db. Questo può essere sovrascritto con il parametro --dbms. Consulta la documentazione di SQL Alchemy su come specificare diversi motori di database (http://docs.sqlalchemy.org/en/rel_0_9/dialects/index.html). Come esempio, di seguito usiamo 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'
Potrebbe essere utile usare l'archiviazione SQLITE su dispositivi più piccoli e far salvare i dati al plugin server su MySQL (o simile). Un ulteriore esempio può essere utile per specificare la posizione del file in cui archiviare i dati, ad esempio su un supporto rimovibile:
root@client:~# snoopy -v --plugin example --dbms=sqlite:////media/USB01/snoopy.db
È disponibile un'opzione --flush (-f) per eseguire il 'flush' dei dati dall'archiviazione locale una volta che sono stati sincronizzati con un server a monte.
Snoopy può essere avviato con uno script upstart (vedi la cartella ./setup/upstarts). Altri script upstart di esempio sono forniti nella stessa directory - ad esempio uno per attivare una connessione PPP da un modem 3G, e uno per creare un canale di comando remoto SSH.
Le distribuzioni basate su Debian (es. Kali) non sembrano supportare upstart. Nel frattempo, il file rc.local fornito può essere usato per avviare Snoopy e i servizi correlati all'avvio.
Maltego è lo strumento preferito per eseguire la visualizzazione. Le istruzioni sono di seguito:
Questo dovrebbe importare sia le entità che le trasformate. Per iniziare, trascina l'entità 'Base of Operations' dalla scheda Snoopy nel menu Palette su un grafico vuoto. Come esempio, esegui le seguenti operazioni sull'entità:
Le trasformate servono per recuperare domini e cookie (dal monitoraggio passivo), cercare gli indirizzi stradali degli SSID, e molte sono bidirezionali (ad es. si possono cercare i client da una Location, o le Location da un client). È meglio sperimentare.
Se non si usa il formato sqlite predefinito, modifica il seguente file per specificare la posizione dei dati:
snoopy_ng/transforms/db_path.conf
Il grafico di Snoopy può essere condiviso da più analisti contemporaneamente usando la funzione di collaborazione di Maltego. Seleziona Collaboration e 'Share Current Graph'.
USO COMMERCIALE =================== La licenza con cui Snoopy è distribuito vieta di trarre guadagno finanziario (o di altro tipo) dal suo utilizzo (vedi LICENSE.txt). Abbiamo una licenza separata disponibile per l'uso commerciale, che include funzionalità aggiuntive come:
Mettiti in contatto ([email protected] / [email protected]) se desideri collaborare con noi.
Guarda il file plugins/example.py per capire come devono essere scritti i plugin. Qualsiasi file nella cartella plugins sarà trattato come un plugin e deve avere le seguenti proprietà:
Per il resto, il plugin può fare tutto ciò che vuoi.
Snoopy funziona su qualsiasi dispositivo Linux con supporto sufficiente per installare i file dal file install.sh. Cioè Python e i pacchetti correlati. Il supporto hardware varia a seconda dei plugin richiesti, ma per lo scenario più comune di raccolta dati WiFi e caricamento via 3G, si consiglia quanto segue:
Sono stati testati Kali 1.05 e Ubuntu 12.04. Sistemi simili dovrebbero funzionare.
Si verifica una condizione di errore quando si raccolgono dati localmente, si sincronizza con un server remoto e poi si scarica una replica dal server. Ad es.:
Server
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.
Client
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/