| || | | || || || || | | |
| _____|| |_| || _ || _ || _ || |_| |
| |_____ | || | | || | | || |_| || |
|_____ || _ || |_| || |_| || ___||_ _|
_____| || | | || || || | | |
|_______||_| |__||_______||_______||___| |___|
V0.1
“艾米,技术本身没有善恶之分,关键在于如何使用它。就像死亡射线一样。”
——法恩斯沃思教授
欢迎使用 Snoopy;一个分布式跟踪与分析框架。Snoopy 仍在开发中,如有建议或更正,请随时提交。本文档概述了基本用法。如需进一步了解背景,请参阅以下内容:
客户端软件运行在我们称之为“无人机”(Drone)的设备上。无人机可以是任何具有 WiFi 接口(支持注入驱动)和出站互联网连接的 Linux 设备。Snoopy 已在诺基亚 N900 和运行 BackTrack 的笔记本电脑上测试过。无人机执行以下两项操作:
收集到的探测请求(例如,Bob 的 iPhone 搜索 BTHomeHub-4123)会定期上传到 Snoopy 服务器。所有连接到恶意 AP 的设备将通过 Snoopy 服务器访问互联网。
服务器将所有探测请求存入数据库,并使用 Wigle 确定 GPS 坐标,利用 Google Maps 确定街道地址(以及街景照片)。这意味着,如果你正在探测你的家庭网络,我可能会获得你房子的照片。
每个无人机通过 OpenVPN 连接到服务器,并拥有自己的子网。关联的客户端从无人机获取 IP 地址,并通过它路由流量。这意味着在服务器端,我们可以将客户端 IP 地址(以及 MAC 地址)与互联网活动进行匹配。
在服务器端,会发生以下操作:
网络拓扑图如下:
Client1 Drone1 Snoopy Server
+----------+ +-----------------------+ +-----------------------+
| wlan0-|<---WiFi--->|-at0 | | eth0|<-squid-sslstrip-mitmproxy->Internet
| | | | 10.2.0.1 | | 11.22.33.44| |
| dhclient | | | | | | Traffic inspection
| | | | tap0-|<-openvpn----->|-tap0 | Social media analysis
+----------+ | | 192.168.42.2 | +--/| 192.168.42.1 |
10.2.0.2 | +-----------------------+ | +-----------------------+
| |
| | route 10.2.0.0 via 192.168.42.2
| | route 10.3.0.0 via 192.168.42.3
Client2 | |
+----------+ | |
| wlan0-|<---+ |
| | |
| dhclient | |
| | |
+----------+ |
10.2.0.3 |
|
|
|
Client3 Drone2 |
+----------+ +-----------------------+ |
| wlan0-|<---WiFi--->|-at0 | |
| | | | 10.3.0.1 | |
| dhclient | | | | |
| | | | tap0-|<-openvpn--+
+----------+ | | 192.168.42.3 |
10.3.0.2 | +-----------------------+
|
|
|
Client4 |
+----------+ |
| wlan0-|<---+
| |
| dhclient |
| |
+----------+
10.3.0.3
Walter 为 Snoopy 编写了一个网页界面。可通过 http://your-snoopy-server.com:5000/ 访问。
提供了几个 Maltego 转换,用于以图形方式探索收集的数据(详情见下文)。
安装 ================ 服务器安装应该比较简单。仅在 Ubuntu 12.04 LTS 32 位的标准安装上测试过。由于会对多个服务器组件进行修改,强烈建议在全新安装的系统上运行安装脚本,并且不要在该机器上运行其他服务(如有必要)。如有疑问,请查看 install.sh 文件并手动进行修改。否则,直接运行(./install.sh)安装程序。
使用 ======== 安装完成后,你应该可以直接输入“snoopy”来加载服务器菜单。如果不行(或有疑问),请进入安装阶段创建的用户的家目录。在“snoopy/server/”目录中有一个“snoopy.sh”文件,你可以运行它。以下是菜单:
+---------------------------------------------------------------+
| Welcome to Snoopy V0.1 |
| SERVER SIDE |
| |
| SensePost Information Security |
| [email protected] / www.sensepost.com |
+---------------------------------------------------------------+
Date: Thu Nov 1 16:37:08 CET 2012
Snoopy Server Status: Stopped
Connected Drones: 0
Wigle User: setYourWigleAccount
Would you like to:
[1] (Re)Start Snoopy server components
[2] Stop Snoopy server components
[3] Manage drone configuration packs
[4] Configure server options
[5] Set web traffic injection string
[6] Observe logs
[X] Exit
[?] Help
创建无人机包 菜单中的选项 [3] 允许你为无人机设备创建客户端“包”。每个无人机都有自己的 OpenVPN 和 SSH 密钥、DHCP 范围以及路由表。你会获得每个无人机设备的下载 URL。确保服务器和无人机的时间设置正确,否则 VPN 连接将无法建立。
在无人机上安装和运行 Snoopy 你最多可以拥有 100 架无人机(如需更多,请查看源代码或给我发邮件,实际上没有限制)。安装包括下载上一步中的配置包,并运行相应的设置脚本。对于诺基亚 N900,桌面上会放置一个图标。例如:
haxor@drone001# wget http://snoopy-server.com/secretdir/drone001.tar.gz
haxor@drone001# tar xzvf drone001.tar.gz
haxor@drone001# cd snoopy && ./setup_n900.sh
查找 SSID 位置 在 www.wigle.net 上创建一个账户,并通过“配置服务器选项”设置你的凭据。
网页界面 你可以通过 http://your-snoopy-server:5000/ 访问网页界面。你可以编写自己的插件来遍历和显示数据。Walter 简化了此过程(请参见本文档附录)。
使用 Maltego 探索数据 在 Snoopy 服务器菜单中,进入“配置服务器选项” > “Maltego”。在这里你将看到用于下载 Snoopy 实体、机器以及转换 URL 的链接。要使用 Maltego 转换,你需要:
每个 Snoopy 实体可以应用不同的转换。将“Snoopy”实体拖到你的图上即可开始。如果你在实体属性中未指定开始或结束日期,默认会获取最近 5 分钟的结果(此值可在服务器配置菜单中更改)。
Snoopy 机器允许你自动排序转换,并根据需求过滤/删除节点。源代码/注释应充分说明其工作原理。
法律考虑 ======================= Snoopy 的全部或部分组件可能在你所在地区是非法的。请在使用软件前了解情况。在英国,由于广播性质,探测收集组件是合法的。然而,恶意接入点组件在大多数地区很可能是非法的。SensePost 不对你因使用此工具而惹上麻烦承担任何责任。
安全考虑 ========================== 每个“无人机包”都包含 OpenVPN 和 SSH 密钥。如果无人机被入侵(例如被盗或其他情况),可能对服务器构成安全风险。强烈建议 Snoopy 服务器专用。在服务器上创建的用户会自动在 *.ssh/authorized_hosts 文件中添加以下内容,以增加一点安全性:
"no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync ${SSH_ORIGINAL_COMMAND#* }""
未来工作 =============== 还有很多事情要做/添加。此版本更像是一个概念验证。