Loading... # SkyLift WiFi 地理位置欺骗工具技术分析 # 一、项目概述 ## 1. 项目背景 ### A. 项目简介 SkyLift 是一个低成本 WiFi 地理位置欺骗设备,使用 ESP8266 芯片广播 WiFi 信标帧,利用智能手机 WiFi 地理定位服务中存在的长期漏洞(最早于 2008 年被发现)进行位置欺骗攻击。 ### B. 项目信息 - 开发者:Adam Harvey - 协作者:Surya Mattu、!Mediengruppe Bitnik - 当前版本:V0.3(2017 年 5 月发布) - 开源许可:开源项目 - 硬件成本:约 5 美元 ## 2. 技术背景 ### A. WiFi 地理定位原理 智能手机主要通过四种技术进行地理定位: 1. GPS(全球定位系统) 2. 蜂窝网络三角定位 3. 蓝牙定位 4. WiFi 定位 WiFi 地理定位服务假设所有 WiFi 路由器(包括家庭路由器)都是其商业地理定位产品的一部分。这种假设成为安全漏洞的根源。 ### B. 漏洞发现历史 - 2008 年:瑞士苏黎世联邦理工学院研究员 Srdjan Capkun 首次发现该漏洞 - 2012 年:Bengt Sjölen 和 Gordan Savicic 在 Packetbridge 项目中创造性利用该漏洞 - 2016-2017 年:SkyLift 项目将攻击成本从 50 美元降至 5 美元 # 二、系统架构 ## 1. 硬件架构 ```mermaid graph LR A[ESP8266 NodeMCU] -->|广播| B[Wifi Beacon Frames] B -->|接收| C[智能手机] C -->|WiFi定位请求| D[地理定位API] D -->|返回虚假位置| C E[可选OLED显示屏] -->|I2C| A F[USB电源] -->|供电| A ```   ## 2. 核心组件 ### A. 主控模块 - 芯片:ESP8266 NodeMCU 12 或 12E - 处理器:Tensilica L106 32 位 RISC - 工作频率:80 MHz(可超频至 160 MHz) - 内存:512 KB SRAM + 4 MB Flash ### B. 可选模块 - OLED 显示屏(128x64,SSD1306 驱动) - I2C 接口连接 - 显示当前状态和通道信息 ### C. 电源模块 - USB 5V 供电 - 可选 USB 电池(移动电源) # 三、工作原理 ## 1. 攻击原理 ```mermaid sequenceDiagram participant E as ESP8266 participant P as 智能手机 participant L as 地理定位服务 participant M as 地理定位数据库 E->>P: 广播伪造的 WiFi 信标帧 Note over E: 包含目标位置的 BSSID 和 SSID P->>L: 发送 WiFi 扫描结果 Note over P: 包含伪造的 BSSID 和信号强度 L->>M: 查询 BSSID 位置 Note over M: 数据库中有该 BSSID 的位置记录 M->>L: 返回伪造的地理位置 L->>P: 返回虚假位置坐标 Note over P: 手机位置被成功欺骗 ```   ## 2. 信标帧伪造 ### A. 信标帧结构 802.11 信标帧包含以下关键字段: - BSSID(基本服务集标识符):MAC 地址格式 - SSID(网络名称):可自定义 - 通道信息:1-14 通道(2.4GHz 频段) - 加密信息:开放网络或加密网络 - 时间戳间隔 - 能力信息 ### B. 攻击实现 ESP8266 通过以下方式发送伪造信标帧: 1. 配置目标位置的 BSSID 和 SSID 2. 设置通道跳转策略(1、6、11 通道) 3. 循环发送信标帧 4. 调整发送功率控制覆盖范围 ## 3. 通道跳转机制 ### A. 通道选择策略 - 独立模式:使用随机通道 - 显示屏模式:使用 1、6、11 通道 - 多设备协同:使用不同通道作为中继 ### B. 跳转时机 - 固定时间间隔跳转 - 每个通道停留时间可配置 - 支持动态调整优先级 # 四、实现细节 ## 1. 硬件组装 ### A. 基础配置(无显示屏) 所需材料: - ESP8266 NodeMCU 12 或 12E - USB 微型数据线 - 5V USB 电源或移动电源 ### B. 完整配置(带显示屏) 额外材料: - OLED 显示屏(128x64,SSD1306) - PCB 板(3x7cm) - 电烙铁和焊锡 - 剪线钳 接线方式: ``` ESP8266 引脚 D2 -> OLED 引脚 SDA ESP8266 引脚 D3 -> OLED 引脚 SCL ESP8266 3.3V -> OLED VCC ESP8266 GND -> OLED GND ``` ## 2. 软件配置 ### A. 开发环境 - Arduino IDE 1.6.12 或更高版本 - ESP8266 开发板支持包 - Adafruit_SSD1306 库(如果使用 OLED) ### B. 开发板安装 在 Arduino IDE 中添加 ESP8266 支持: 1. 打开文件 > 首选项 2. 在"附加开发板管理器网址"中添加: http://arduino.esp8266.com/stable/package_esp8266com_index.json 3. 在工具 > 开发板 > 开发板管理器中安装 ESP8266 4. 选择"NodeMCU 0.9 (ESP12 Module)"或 12E ### C. 代码上传 1. 克隆项目仓库: ```bash git clone https://github.com/adamhrv/skylift/ ``` 2. 打开 Arduino/skylift_v03_embassy/skylift_v03_embassy.ino 3. 上传到 ESP8266 ## 3. 自定义位置 ### A. 扫描 WiFi 网络 支持三种扫描方式: 1. OSX 扫描: ```bash python utils/osx_scan_to_json.py -o data/json/my_osx_scan.json ``` 2. iOS 扫描: - 使用 AirPort Utility 应用 - 启用"Wi-Fi Scanner" - 保存扫描结果 - 转换为 JSON: ```bash python utils/ios_to_json.py -i data/ios/your_scan.txt -o data/json/your_scan.json ``` 3. Wigle API: ```bash python utils/wigle_to_json.py --lat 37.484581 --lon -122.147921 --radius 3 -o data/json/wigle_test.json ``` ### B. 生成 Arduino 代码 ```bash python utils/json_to_arduino.py -i data/json/your_scan.json -o data/ino/your_scan.txt ``` 输出格式: ```cpp #define nn 2 char* ssids_str[nn] = { "74:46:A0:33:00:01", "74:46:A0:33:00:02" }; byte bssids[nn][6] = { {0x74, 0x46, 0xA0, 0x33, 0x00, 0x12}, {0x74, 0x46, 0xA0, 0x33, 0x00, 0x12} }; char* ssids[nn] = { "wifi_ssid", "another_wifi_ssid" }; #ifdef USE_SCREEN byte channels[nn] = {6, 6}; #else byte channels[nn] = {10, 11}; #endif ``` # 五、性能分析 ## 1. 有效距离 根据环境 WiFi 密度不同: - 低密度区域:最远 10 米 - 中密度区域:1-2 米 - 高密度区域:0.1-1 米 - 拥挤区域:建议靠近目标设备 ## 2. 影响因素 ### A. 环境因素 - 金属屋顶和结构会衰减附近 WiFi 信号 - 石膏板、木材和混凝土对 WiFi 透过性好 - 人体(约 65% 水分)是天然的 WiFi 吸收体 ### B. 干扰因素 - 附近 WiFi 路由器数量 - 信号强度(-60 到 -40dB 的多个网络会降低成功率) - GPS 信号强度 - 蜂窝网络信号强度 ## 3. 优化建议 ### A. 环境选择 - 减少附近 WiFi 信号(少于 5 个网络,强度低于 -80dB) - 远离窗户(GPS 信号较弱的位置) - 选择地下空间、地下室或酒吧等封闭环境 ### B. 设备配置 - 增强信号:切断 PCB 板载天线,焊接 SMA 连接器添加 +7dB 天线 - 多设备协同:使用多个 SkyLift 设备作为中继 - 调整通道:根据环境选择最优通道组合 # 六、应用场景 ## 1. 演示案例 ### A. 厄瓜多尔大使馆 项目最初演示将设备位置欺骗至伦敦厄瓜多尔大使馆(阿桑奇住所),成功欺骗 Apple 的"查找我的 iPhone"服务。 ### B. 艺术展览 - Dark Technology Dark Web(柏林,2017) - How Much of This is Fiction(利物浦 FACT,2017) - Lanceurs d'alerte(巴黎 La Gaîté Lyrique,2017) - Welcome to Ecuador(南特 Zoo Galerie,2016) ## 2. 研究价值 ### A. 安全研究 - 揭示 WiFi 地理定位服务的安全漏洞 - 验证 2008 年发现的漏洞仍存在 - 促进对地理定位技术的安全讨论 ### B. 隐私保护 - 演示消费者数据如何被商用 - 质疑路由器数据被默认纳入地理定位数据库的合法性和道德性 - 提高公众对地理定位隐私的认识 # 七、安全与法律考量 ## 1. 技术限制 ### A. 攻击成功率 - 不是 100% 保证成功的解决方案 - 地理定位 API 会返回置信度分数 - 低置信度时会回退到蜂窝三角定位或 GPS ### B. 检测风险 - 持续广播后,BSSID 可能被加入黑名单 - BSSID 可能与另一个位置关联 - 可能被其他用户发现真实位置 ## 2. 法律与道德 ### A. 使用声明 - 仅供研究和艺术目的使用 - 使用前请检查当地 WiFi 法规 - Pokémon Go 玩家等使用者自行承担风险 ### B. 隐私与伦理问题 - 路由器数据被默认纳入商业地理定位产品是否合法 - 家庭 WiFi 数据被收集是否需要知情同意 - 地理定位数据的安全性值得公开讨论 ## 3. 防御建议 ### A. 用户层面 - 理解 WiFi 定位的局限性 - 在需要高精度定位时结合多种定位方式 - 关注定位服务的隐私设置 ### B. 服务提供商层面 - 改进置信度评分算法 - 加强 BSSID 验证机制 - 定期清理无效或恶意 BSSID 数据 - 增加异常检测和告警 # 八、项目改进历程 ## 1. 版本对比 从 V0.1 到 V0.3 的改进: - 成本:从 50 美元降至 5 美元 - 设置时间:从数小时缩短至 15 分钟 - 用户操作:简化为仅需 USB 供电 - 性能:增加通道跳转功能 - 数据结构:添加时间戳间隔字节 - 功能:添加隐藏 SSID 选项(\x00) - 工具:添加自定义位置生成脚本 - 集成:将技术集成到单个设备 - 可选:添加 OLED 显示屏支持 ## 2. 未来规划(V0.4) 计划改进: - 升级到 Python 3 - 使用 Click 库简化 CLI - 改进使用流程 - 修复时间戳问题 # 九、技术总结 ## 1. 创新点 - 极低成本的实现方案(5 美元) - 简化的硬件配置(单设备) - 灵活的自定义位置生成工具 - 艺术与技术的结合 ## 2. 技术启示 ### A. WiFi 地理定位的脆弱性 - 缺乏 BSSID 验证机制 - 过度依赖众包数据 - 置信度评估不够严格 ### B. 物联网安全 - 低成本设备可能被用于恶意目的 - 需要加强边缘设备的安全管理 - 消费者设备数据保护的重要性 ## 3. 社会影响 - 提高公众对地理定位隐私的关注 - 推动对地理位置服务安全性的讨论 - 促进艺术与技术的跨界交流 # 十、相关资源 ## 1. 技术文档 - 信标帧概述 - 信标帧数据包深度解析 - Hackaday 上的 WiFi 地理位置欺骗文章 - 不要信任地理定位 - 使用针对性 WiFi 地理位置欺骗的设备到身份链接攻击 ## 2. 相关项目 - SkyLift V0.1(使用 MDK3 + Raspberry Pi) - GPS 欺骗项目 - 软件定义 GPS 信号模拟器 ## 3. 致谢 - 原始概念:与 !Mediengruppe Bitnik(德国)合作开发 - SkyLift V0.1:与 Surya Mattu(美国)合作开发 - 技术咨询:Julian Oliver(德国) - 研究助理和 Python 开发:Leon Eckert(美国/德国) - ESP8266 信标帧代码概念验证:https://github.com/kripthor/WiFiBeaconJam - Schloss Solitude 网络驻留项目支持 *** ## 参考资料 1. [SkyLift GitHub Repository](https://github.com/awesome-pentest-gadgets/skylift) 2. [SkyLift V0.1 项目页面](https://ahprojects.com/notebook/2016/skylift-geolocation/) 最后修改:2026 年 01 月 19 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏