mh37/Argos
GitHub: mh37/Argos
Argos 是一款基于探测请求帧的被动 Wi-Fi 追踪与画像分析工具,用于演示无线设备如何泄露位置和身份信息。
Stars: 15 | Forks: 1
# Argos
此工具旨在展示启用了 Wi-Fi 的设备可能会暴露用户的哪些数据。它通过捕获探测请求帧,提取 SSID 值,将其发送至 Wigle 以获取 SSID 所在位置的地理信息,然后借助 Google Maps API 在地图上显示出来。
简而言之,此工具利用基于探测请求帧的被动 Wi-Fi 追踪和画像分析。你可以选择保存捕获的数据,但这可能会违反数据隐私法,具体取决于你当地的法律法规。
## 参数 / 选项
该工具目前支持以下参数:
网络接口:```-i```
将数据写入特定位置:```-w```
限制信号强度范围:```-lss```
例如,以下命令将在 NIC wlan1 上运行该工具,并且仅捕获信号强度为 -50 或更高的探测请求。
```sudo python3 ./argos.py -i wlan1 -lss '-50'```
如果你想限制扫描范围,使用 lss 参数非常重要。根据你的环境和法律限制,这可能是至关重要的。
## 伦理规范
此工具仅在严格遵循伦理准则的受控环境中使用,并且是在设备所有者以及物理设施和基础设施所有者的明确许可下进行的。此处发布的所有报告数据和测试结果均已进行匿名化处理。虽然该工具本身基于被动数据运行,但捕获非预期内容很容易侵犯隐私和数据保护法。此工具的任何使用都应仅限于受控环境,并获得所有相关方的广泛许可。
## 截图
你可以在下面看到该工具运行时的示例。我们在这里通过信号强度进行过滤,以便从拥有众多设备的区域中精确挑选出目标。
在这个示例中,我们成功隔离了三台具有相同信号强度的设备(MAC 地址),并通过 Wigle 将捕获到的 SSID 映射到一个住宅地址、一家咖啡馆和一所当地大学。其余信息无法分配坐标,但仍然是极具价值的信息。例如,那台 ping 上述位置的设备同时还发送了一个名为 IPhone(该人的名字)的 SSID 的探测请求。现在我们知道此人使用的是 IPhone,知道了他们的名字和地址、可能在哪里买咖啡,以及在哪里上学。

## 使用的硬件
- 一台装有 Kali Linux 的旧笔记本电脑
- 或者使用 Raspberry Pi 进行更长期或隐蔽的记录。
- Alfa AC1900 Wi-Fi 适配器(强烈推荐以获得最佳性能)
- 在一些现代笔记本电脑上常见的部分 Intel AC Wi-Fi 网卡上也可以使用,但实际效果因设备而异。我在 Intel AC 9560 上测试时是可以运行的。
- 我听说通过修改驱动程序,你也可以在部分 Raspberry Pi 型号的无线 NIC 上运行监控模式。但我没有测试过这一点。

## 环境要求
- Python3
- Python 模块
- Scapy-python3
- Tornado
- Airmon-ng
- 支持监控模式的 Wi-Fi 网卡
- Realtek RTL8814AU 驱动程序
## 核心功能
- Web 界面(这样即使我们不在监控设备附近,也能访问该工具)
- 扫描探测请求
- 忽略重复请求
- 基于设备的 MAC 地址映射厂商名称
- 利用黑名单和白名单管理 SSID
- 基于 SSID 名称获取坐标
- 在 Google Maps 上以标记显示 SSID 位置
- 动态过滤输出数据(信号强度、SSID、MAC、厂商)
- 手动限制信号强度以减小扫描范围
- 保存记录的数据(警告:这在你的国家/地区可能是非法的)
## 局限性
- 厂商列表匮乏
- 一些设备在发送探测请求时谨慎得多
- MAC 随机化使得对设备进行指纹识别变得困难得多,尤其是在进行长期追踪时。尽管如此,这并非不可能。有关更多信息,请查看 [为什么 MAC 地址随机化还不够:Wi-Fi 网络发现机制分析](https://papers.mathyvanhoef.com/asiaccs2016.pdf)
## API 集成
目前,该脚本依赖于两项 API 集成。一项是 Wigle,这是一个战争驾驶数据库,用于获取 SSID 的坐标。另一项是 Google Maps,用于将 Wigle 获取的坐标作为地图标记进行可视化展示。
这里的一个主要缺点是,Wigle API 访问的免费层级每天的调用次数非常有限,如果你需要发送大量请求,这可能是一个问题。对于更高强度的使用需求,你可能需要使用其他 API,但作为概念验证,Wigle 已经足够了。
## 探测请求
我们捕获的探测请求包含信号强度 (RSSI)、客户端的 MAC 地址以及客户端正在探测的 SSID 名称。我们可以利用 MAC 地址的第一部分将其与厂商进行匹配。
根据 IEEE 802.11-2012 标准,探测请求帧主体可以包含下面列出的数据。该标准已经有些过时,但我无法获取最新规范 IEEE 802.11-2020。如果你能获取的话,应该可以在第 843 页找到相关信息,如果你能发送给我,我很乐意在此进行更新。
### 强制项
- SSID
- 支持速率
### 可选项
- 扩展支持速率
- 请求信息
- DSS 参数集
- 支持的操作类
- HT 能力
- 20/40 BSS 共存
- 扩展能力
- SSID 列表
- 信道使用
- 互联
- Mesh ID
这些值大多是可选的,并且要求客户端上的特定标志为真,才能包含在探测请求中。例如,SSID 列表属性要求 dot11MgmtOptionSSIDListActivated 设置为真。因此在大多数情况下,你不会遇到此类信息。
## 待实现的功能与改进
- 借助机器学习进行设备指纹识别
- 支持用于 SSID 坐标的多种 API
- 支持多种 Map API
## 常见问题与故障排除
### 驱动程序问题
确保你的驱动程序安装正确。不正确的安装或驱动程序版本可能会在功能方面引起多种问题。请确保该驱动程序支持监控模式以及你所需的其他高级功能。
就我而言,我使用的是[这个驱动](https://gitlab.com/kalilinux/packages/realtek-rtl8814au-dkms),万一该链接失效,你也可以在本仓库中找到它的副本。根据你使用的发行版,如果遇到问题,你也可以尝试 [aircrack-ng](https://github.com/aircrack-ng/rtl8812au) 提供的驱动。
### Web 界面或地图功能无法使用
检查配置文件是否包含正确的参数以及 Wigle 和 Google Maps 的 API 密钥。
## 鸣谢
包含 MAC 地址和厂商身份的列表是此[厂商列表](https://gist.github.com/aallan/b4bb86db86079509e6159810ae9bd3e4)的直接副本。
该项目的最初基础是从 [WifiProbeMapper](https://github.com/smythtech/WifiProbeMapperhttps:/) fork 而来的。
警告:在大多数国家/地区,存储 MAC 地址是非法的,并可能违反你当地的数据隐私法。请先查阅当地法律。
标签:Python, WiFi追踪, 客户端加密, 无后门, 无线网络, 被动监听, 防御绕过, 隐私分析