
Snoopy v2.0 - framework modular de rastreamento terrestre digital
A SensePost apresenta:
/$$$$$$
/$$__ $$
| $$ \__/ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$
| $$$$$$ | $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ | $$
\____ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ | $$
/$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$
| $$$$$$/| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$$
\______/ |__/ |__/ \______/ \______/ | $$____/ \____ $$
| $$ /$$ | $$
| $$ | $$$$$$/
|__/ \______/
Versão: 2.0
Código: [email protected] // @glennzw
Visite: www.sensepost.com // @sensepost
Licença: Utilização não comercial
Bem-vindo ao Snoopy Versão 2.0!
Para instalar e configurar o Snoopy:
bash install.sh
Para guardar localmente os dados dos plugins wireless, sysinfo e heartbeat:
snoopy -v -m wifi:mon=True -m sysinfo -m heartbeat -d myDrone -l London
Para sincronizar dados de um cliente para um servidor:
Servidor:
snoopy_auth --create myDrone # Create account
snoopy -v -m server # Start server plugin
Cliente:
snoopy -v -m wifi:mon=True -s http://<server>:9001/ -d myDrone -l London -k <key>
INTRODUÇÃO E VISÃO GERAL ============================= O Snoopy é um framework distribuído de sensores, recolha de dados, interceção, análise e visualização. Está escrito num formato modular, permitindo a recolha de dados arbitrários de várias fontes através de plugins Python.
Arquitetura
Cada instância do Snoopy pode executar vários plugins em simultâneo. Um plugin recolhe dados, que são consultados pelo processo principal do Snoopy e gravados numa base de dados local. O Snoopy consegue sincronizar dados entre clientes (drones) e um servidor, e os clientes (drones) também podem obter réplicas de dados de um servidor. Cada instância do Snoopy pode executar plugins adequados à sua posição no panorama geral. Eis um diagrama que representa uma possível configuração:
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 |
+---------------+ +--------------+
Na ilustração acima, existem três drones em execução a sincronizar os seus dados para dois servidores distintos. Um sincroniza via 3G, os outros dois via Xbee. O segundo servidor sincroniza os seus dados para um terceiro servidor. Por fim, um cliente (portátil) obtém todos os dados do primeiro e do terceiro servidores e executa o Maltego para explorar os dados.
Executar 'sh install.sh' dentro do diretório snoopy-ng.git instalará todos os pacotes necessários. Oferece a opção de instalar o aircrack a partir do código-fonte, o que é necessário para distribuições sem este pacote (a suíte aircrack é usada pelos plugins wireless). Não podemos recomendar o Maltego o suficiente para exploração de dados; uma edição comunitária (com algumas restrições) pode ser descarregada gratuitamente do site da Paterva em http://paterva.com.
Para ver todas as flags e opções disponíveis, criámos dois comandos para si:
root@kali:~# snoopy --help (shorthand -h)
Este comando mostra-lhe todas as opções de execução, como o servidor para o qual sincronizar, o nome do drone e a sua localização. Além disso, também explica como executar os vários plugins.
root@kali:~# snoopy --list (shorthand -i)
Este comando lista todos os plugins disponíveis e os parâmetros necessários para cada plugin funcionar corretamente. Para obter informações mais detalhadas sobre cada plugin, use '-ii' ou '-iii'. Para obter informações sobre um plugin específico, use '-i -m '.
Os plugins podem ser especificados com a opção --plugin (ou a forma abreviada -m). Podem ser especificados vários plugins, que serão iniciados pela ordem introduzida. Cada plugin terá 60 segundos para indicar o seu estado de prontidão, após os quais ocorre timeout e o plugin seguinte é iniciado. Isto pode ser útil se os plugins subsequentes dependerem de ações dos anteriores.
Cada plugin pode aceitar vários parâmetros (conforme indicado na saída do --list) na forma de pares chave/valor separados por vírgulas. Abaixo usamos o plugin 'example', que simplesmente gera números aleatórios.
snoopy --plugin example:x=1,v=True
Se as opções de drone/localização não forem fornecidas, são usados valores predefinidos. Em alternativa, podem ser especificadas como abaixo.
snoopy --plugin example:x=1,v=True --drone myDrone --location Cansas
Os dados podem ser sincronizados para uma máquina remota fornecendo a opção --server (-s). A máquina remota deve estar a executar o plugin de servidor (--plugin server). Deve ser gerada uma chave para um nome de drone antecipadamente. O exemplo abaixo ilustra isto.
Servidor
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.
Cliente
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.
Obtenção Remota de Dados