
Snoopy v2.0 - modulares digitales terrestrisches Tracking-Framework
SensePost präsentiert:
/$$$$$$
/$$__ $$
| $$ \__/ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$
| $$$$$$ | $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ | $$
\____ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ | $$
/$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$
| $$$$$$/| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$$
\______/ |__/ |__/ \______/ \______/ | $$____/ \____ $$
| $$ /$$ | $$
| $$ | $$$$$$/
|__/ \______/
Version: 2.0
Code: [email protected] // @glennzw
Visit: www.sensepost.com // @sensepost
Lizenz: Nicht-kommerzielle Nutzung
Willkommen bei Snoopy Version 2.0!
So installieren und einrichten Sie Snoopy:
bash install.sh
So speichern Sie Daten von den Plugins WLAN, Sysinfo und Heartbeat lokal:
snoopy -v -m wifi:mon=True -m sysinfo -m heartbeat -d myDrone -l London
So synchronisieren Sie Daten von einem Client zu einem 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>
EINFÜHRUNG UND ÜBERBLICK ============================= Snoopy ist ein verteiltes Framework für Sensoren, Datensammlung, Abfangen, Analyse und Visualisierung. Es ist modular aufgebaut und ermöglicht die Sammlung beliebiger Daten aus verschiedenen Quellen über Python-Plugins.
Architektur
Jede Snoopy-Instanz kann mehrere Plugins gleichzeitig ausführen. Ein Plugin sammelt Daten, die vom Haupt-Snoopy-Prozess abgefragt und in einer lokalen Datenbank gespeichert werden. Snoopy kann Daten zwischen Clients (Drohnen) und einem Server synchronisieren, und Clients (Drohnen) können auch Replikate der Daten von einem Server abrufen. Jede Snoopy-Instanz kann die für ihre Position im Gesamtbild geeigneten Plugins ausführen. Hier ist ein Diagramm, das einen möglichen Aufbau zeigt:
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 |
+---------------+ +--------------+
Im obigen Diagramm laufen drei Drohnen und synchronisieren ihre Daten mit zwei separaten Servern. Eine synchronisiert über 3G, die anderen beiden über Xbee. Der zweite Server synchronisiert seine Daten mit einem dritten Server. Schließlich ruft ein Client (Laptop) alle Daten vom ersten und dritten Server ab und führt Maltego aus, um die Daten zu untersuchen.
Die Ausführung von 'sh install.sh' im snoopy-ng.git-Verzeichnis installiert alle erforderlichen Pakete. Es bietet an, aircrack aus den Quellen zu installieren, was für Distributionen ohne dieses Paket erforderlich ist (die aircrack-Suite wird für die WLAN-Plugins verwendet). Wir können Maltego für die Datenexploration nur wärmstens empfehlen. Eine Community-Edition (mit einigen Einschränkungen) kann kostenlos von der Paterva-Website unter http://paterva.com heruntergeladen werden.
Um alle verfügbaren Flags und Optionen zu sehen, haben wir zwei Befehle für Sie erstellt:
root@kali:~# snoopy --help (Kurzform -h)
Dieser Befehl zeigt Ihnen alle Laufzeitoptionen, z. B. mit welchem Server synchronisiert werden soll, den Namen der Drohne und ihren Standort. Außerdem wird erklärt, wie die verschiedenen Plugins ausgeführt werden können.
root@kali:~# snoopy --list (Kurzform -i)
Dieser Befehl listet alle verfügbaren Plugins und die Parameter auf, die jedes Plugin für ein korrektes Funktionieren benötigt. Für detailliertere Informationen zu jedem Plugin verwenden Sie '-ii' oder '-iii'. Um Informationen zu einem bestimmten Plugin zu erhalten, verwenden Sie '-i -m '.
Plugins können mit der Option --plugin (oder der Kurzform -m) angegeben werden. Es können mehrere Plugins angegeben werden, die in der Reihenfolge ihrer Eingabe gestartet werden. Jedes Plugin hat 60 Sekunden Zeit, um seinen betriebsbereiten Zustand anzuzeigen, danach tritt ein Timeout ein und das nächste Plugin wird gestartet. Dies kann nützlich sein, wenn nachfolgende Plugins von Aktionen vorheriger abhängen.
Jedes Plugin kann zahlreiche Parameter (wie in der --list-Ausgabe angegeben) in Form von durch Kommata getrennten Schlüssel-Wert-Paaren entgegennehmen. Im Folgenden verwenden wir das 'example'-Plugin, das einfach Zufallszahlen generiert.
snoopy --plugin example:x=1,v=True
Wenn die Optionen für Drohne / Standort nicht angegeben werden, werden Standardwerte verwendet. Alternativ können sie wie unten angegeben werden.
snoopy --plugin example:x=1,v=True --drone myDrone --location Cansas
Daten können zu einem entfernten Rechner synchronisiert werden, indem die Option --server (-s) angegeben wird. Auf dem entfernten Rechner sollte das Server-Plugin (--plugin server) laufen. Vorher sollte ein Schlüssel für einen Drohnennamen generiert werden. Das Folgende veranschaulicht dies.
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.
Datenabruf von einem entfernten Server
Daten können mit dem Plugin local_sync von einem Server abgerufen werden. Angenommen, der Server läuft wie oben, und führen Sie diesen Vorgang auf dem Client aus:
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.
Das Standardverhalten besteht darin, alle Daten in einer SQLITE-Datei snoopy.db zu speichern. Dies kann mit dem Parameter --dbms überschrieben werden. Siehe die SQL Alchemy-Dokumentation, wie verschiedene Datenbank-Engines angegeben werden (http://docs.sqlalchemy.org/en/rel_0_9/dialects/index.html). Als Beispiel verwenden wir im Folgenden 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'
Es kann nützlich sein, auf kleineren Geräten SQLITE zu verwenden und das Server-Plugin Daten in MySQL (oder ähnliches) speichern zu lassen. Ein weiteres Beispiel könnte hilfreich sein, bei dem wir den Dateispeicherort für die Daten angeben, z. B. auf einem Wechselmedium:
root@client:~# snoopy -v --plugin example --dbms=sqlite:////media/USB01/snoopy.db
Es gibt eine Option --flush (-f), um Daten aus dem lokalen Speicher zu löschen, sobald sie mit einem vorgelagerten Server synchronisiert wurden.
Snoopy kann mit einem Upstart-Skript gestartet werden (siehe Ordner ./setup/upstarts). Weitere Beispiel-Upstart-Skripte befinden sich im selben Verzeichnis – z. B. eines zum Aufbau einer PPP-Verbindung über ein 3G-Modem und eines zum Erstellen eines SSH-Remote-Befehls-Kanals.
Debian-basierte Systeme (z. B. Kali) scheinen Upstart nicht zu unterstützen. In der Zwischenzeit kann die mitgelieferte rc.local-Datei verwendet werden, um Snoopy und zugehörige Dienste beim Systemstart zu starten.
Maltego ist das bevorzugte Werkzeug zur Visualisierung. Die Anleitung folgt:
Dadurch sollten sowohl Entitäten als auch Transforms importiert werden. Ziehen Sie zunächst die Entität 'Base of Operations' aus dem Snoopy-Tab im Palettenmenü auf einen leeren Graphen. Als Beispiel führen Sie die folgenden Operationen auf der Entität durch:
Es gibt Transforms zum Abrufen von Domains und Cookies (aus passiver Überwachung), zum Nachschlagen von SSID-Straßenadressen, und einige sind bidirektional (z. B. können Clients von einem Standort oder Standorte von einem Client abgerufen werden). Am besten einfach ausprobieren.
Wenn nicht das Standard-SQLite-Format verwendet wird, bearbeiten Sie die folgende Datei, um den Speicherort der Daten anzugeben:
snoopy_ng/transforms/db_path.conf
Der Snoopy-Graph kann von mehreren Analysten gleichzeitig genutzt werden, indem die Kollaborationsfunktion von Maltego verwendet wird. Wählen Sie Collaboration und 'Share Current Graph'.
KOMMERZIELLE NUTZUNG =================== Die Lizenz, unter der Snoopy veröffentlicht wird, verbietet die finanzielle (oder anderweitige) Nutzung (siehe LICENSE.txt). Wir haben eine separate Lizenz für die kommerzielle Nutzung, die zusätzliche Funktionen wie z. B.:
Nehmen Sie Kontakt auf ([email protected] / [email protected]), wenn Sie mit uns zusammenarbeiten möchten.
Siehe die Datei plugins/example.py, um zu verstehen, wie Plugins geschrieben werden sollten. Jede Datei, die im plugins-Ordner abgelegt wird, wird als Plugin behandelt und sollte die folgenden Eigenschaften haben:
Ansonsten kann das Plugin tun, was immer Sie möchten.
Snoopy läuft auf jedem Linux-Gerät mit ausreichender Unterstützung, um Dateien aus der Datei install.sh zu installieren. d. h. Python und zugehörige Pakete. Die Hardwareunterstützung variiert je nach den benötigten Plugins, aber für das häufigste Szenario (Sammeln von WLAN-Daten und Hochladen über 3G) wird Folgendes empfohlen:
Kali 1.05 und Ubuntu 12.04 wurden getestet. Ähnliche Systeme sollten funktionieren.
Ein Fehlerzustand tritt auf, wenn Daten lokal gesammelt, mit einem entfernten Server synchronisiert und dann eine Replik vom Server abgerufen werden. z. B.:
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/