Snoopy v2.0 - 模块化数字地面跟踪框架
SensePost 呈现:
/$$$$$$
/$$__ $$
| $$ \__/ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$
| $$$$$$ | $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ | $$
\____ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$| $$ | $$
/$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$
| $$$$$$/| $$ | $$| $$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$$
\______/ |__/ |__/ \______/ \______/ | $$____/ \____ $$
| $$ /$$ | $$
| $$ | $$$$$$/
|__/ \______/
版本:2.0
代码:[email protected] // @glennzw
网站:www.sensepost.com // @sensepost
许可证:非商业用途
欢迎使用 Snoopy 2.0 版本!
安装并设置 Snoopy:
bash install.sh
将无线、系统信息和心跳插件的数据保存在本地:
snoopy -v -m wifi:mon=True -m sysinfo -m heartbeat -d myDrone -l London
将数据从客户端同步到服务器:
服务器:
snoopy_auth --create myDrone # 创建账户
snoopy -v -m server # 启动服务器插件
客户端:
snoopy -v -m wifi:mon=True -s http://<服务器>:9001/ -d myDrone -l London -k <密钥>
介绍与概述 ============================= Snoopy 是一个分布式传感器数据收集、拦截、分析和可视化框架。它采用模块化格式编写,允许通过 Python 插件从各种来源收集任意数据。
架构
每个 Snoopy 实例可以同时运行多个插件。插件收集数据,主 Snoopy 进程查询这些数据并写入本地数据库。Snoopy 可以在客户端(无人机)和服务器之间同步数据,客户端(无人机)也可以从服务器拉取数据副本。每个 Snoopy 实例可以根据其在整体架构中的位置运行合适的插件。下图展示了一种可能的设置:
无人机01 服务器01
+---------------+ +--------------+
| 插件: | | 插件: |
| * WiFi | | *服务器 |
| * 蓝牙 |====3G====>| |<=========================\
| * GSM | | | ||
| * FitBit | | | ||
+---------------+ +--------------+ ||
||
无人机02 服务器02 服务器03 ||
+---------------+ +--------------+ +-------------+ ||
| 插件: | | 插件: | | 插件: | ||
| * WiFi | | *服务器 | | *服务器 | ||
| * Cookie |=====Xbee==>| *心跳 |==3G==>| *Wigle |<==\
| 窃取 | || | | | *数据可视化| ||
| * GPS | || | | | | ||
+---------------+ || +--------------+ +-------------+ ||
|| 互联网
无人机03 || 笔记本01 ||
+---------------+ || +--------------+ ||
| 插件: | || | 插件: | ||
| * 热敏 | || | *远程拉取 | ||
| * 摄像头 |===/ | |====/
| * 热量 | | 运行: |
| | | *Maltego |
+---------------+ +--------------+
要查看所有可用标志和选项,我们为您提供了两个命令:
root@kali:~# snoopy --help (简写 -h)
此命令提供所有运行选项,例如同步到哪个服务器、无人机名称和位置。此外,它还介绍了如何运行各个插件。
root@kali:~# snoopy --list (简写 -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
[+] 创建新的 Snoopy 服务器同步账户
[+] 'myDrone01' 的密钥为 'GWWVF'
[+] 在客户端模式下使用此值将数据同步到远程服务器。
root@kali:~# snoopy --plugin server
[+] Web服务器运行在 '0.0.0.0:9001'
[+] 服务器插件捕获了 2 个表的数据。
客户端
root@client:~# snoopy --plugin example:x=1 --drone myDrone --key GWWVF --server http://<服务器_ip>:9001/ --verbose
[+] 使用插件启动 Snoopy: example
[+] 插件 example 创建了新的随机数: 21
[+] Snoopy 成功同步了 2 个表中的 2 个元素。
远程数据拉取
可以使用 local_sync 插件从服务器拉取数据。例如,假设上述服务器正在运行,从客户端执行此操作:
root@client:~# snoopy --plugin local_sync:server_url=http://<服务器_ip>:9001/ --drone myDrone --key GWWVF
[+] 插件 local_sync 从远程服务器拉取了 888 条记录。
默认行为是将所有数据存储在 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
[+] 仅本地捕获。保存到 'mysql://glenn:secret@localhost/snoopy_db'
在较小设备上使用 SQLITE 存储,而让服务器插件保存到 MySQL(或类似数据库)可能很有用。另一个有用的示例是指定文件位置来存储数据,例如在可移动介质上:
root@client:~# snoopy -v --plugin example --dbms=sqlite:////media/USB01/snoopy.db
有一个 --flush (-f) 选项,用于在数据与上游服务器同步后从本地存储中“刷新”数据。
可以使用 upstart 脚本启动 Snoopy(参见 ./setup/upstarts 文件夹)。同一目录中提供了其他示例 upstart 脚本——例如,一个用于从 3G 调制解调器启动 PPP 连接,另一个用于创建 SSH 远程命令通道。
基于 Debian 的系统(例如 Kali)似乎不支持 upstart。在此期间,可以使用提供的 rc.local 文件在启动时启动 Snoopy 和相关服务。
Maltego 是执行可视化的首选工具。说明如下:
这将导入实体和变换。要开始使用,请从调色板菜单的 Snoopy 选项卡中拖动“行动基地”实体到空白图形上。例如,对该实体执行以下操作:
存在用于获取域名和 Cookie(来自被动监控)、查找 SSID 街道地址的变换,并且几个变换是双向的(例如,可以从位置查找客户端,或从客户端查找位置)。最好实际操作体验。
如果不使用默认的 sqlite 格式,请编辑以下文件以指定数据位置:
snoopy_ng/transforms/db_path.conf
多个分析师可以同时共享 Snoopy 图形,方法是使用 Maltego 的协作功能。选择“协作”,然后选择“共享当前图形”。
商业用途 =================== Snoopy 的许可证禁止从其使用中获取经济利益(或其他利益)(请参阅 LICENSE.txt)。我们为商业用途提供了单独的许可证,其中包括额外功能,例如:
如果您想与我们合作,请联系我们([email protected] / [email protected])。
请参阅 plugins/example.py 文件以了解如何编写插件。放置在 plugins 文件夹中的任何文件都将被视为插件,并应具有以下属性:
除此之外,插件可以执行任何您希望的操作。
Snoopy 可以在任何 Linux 设备上运行,只要该设备能够从 install.sh 文件中安装文件。即 Python 和相关软件包。硬件支持会根据所需插件而有所不同,但对于最常见的收集 WiFi 数据并通过 3G 上传的场景,建议使用以下设备:
已测试 Kali 1.05 和 Ubuntu 12.04。类似系统应该可以工作。
在本地收集数据、同步到远程服务器然后从服务器拉取副本时会发生错误。例如:
服务器
root@kali:~# snoopy -m server -m wigle:username=u,password=p,[email protected]
[+] Web服务器运行在 '0.0.0.0:9001'
[+] 服务器插件捕获了 2 个表的数据。
客户端
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/
在上图中,三架无人机正在运行并将数据同步到两台独立的服务器。一个通过 3G 同步,另外两个通过 Xbee 同步。第二台服务器将其数据同步到第三台服务器。最后,一个客户端(笔记本)从第一台和第三台服务器拉取所有数据,并运行 Maltego 探索数据。
设置与安装
在 snoopy-ng.git 目录下运行 'sh install.sh' 将安装所有必需的软件包。它会提供从源代码安装 aircrack 的选项,这对于没有该软件包的发行版是必需的(aircrack 套件用于无线插件)。我们强烈推荐使用 Maltego 进行数据探索,可以从 Paterva 网站 http://paterva.com 免费下载社区版(有一些限制)。