
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 для исследования данных.
Выполнение 'sh install.sh' в каталоге snoopy-ng.git установит все необходимые пакеты. Он предлагает установить aircrack из исходных кодов, что требуется для дистрибутивов без этого пакета (набор aircrack используется для беспроводных плагинов). Мы настоятельно рекомендуем Maltego для исследования данных; бесплатную версию Community Edition (с некоторыми ограничениями) можно скачать на сайте Paterva по адресу 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.