将于 6 月 15 日发布
SkyLift 是一款低成本的地理位置欺骗设备。它目前使用 ESP8266 广播 WiFi 信标帧,以利用 WiFi 地理位置服务中一个存在已久(2008 年)的漏洞。
这是 SkyLift 的第三个原型版本,在与 Akademie Schloss Solitude 和 ZKM 合作的网络驻留项目期间进一步开发。阅读关于该项目的访谈。或者按照下面的说明,用不到 5 美元自己制作一个。

SkyLift 最初与 Surya Mattu 合作开发,用于 !Mediengruppe Bitnik 在 2016 年南特 Zoo Galerie 举办的 Assange 房间 "Welcome to Ecuador!" 展览。更新版本 V0.3 的开发始于 2016 年 11 月,最终于 2017 年 5 月在 Schloss Solitude 网络驻留项目的支持下发布。与初始系统(SkyLift V0.1)相比,该版本进行了多项改进,包括:
关于原始 SkyLift(V0.1)的信息,请参阅 https://ahprojects.com/notebook/2016/skylift-geolocation/
SkyLift 是由 Adam Harvey 维护的开源项目,旨在研究面向消费者的智能手机地理位置服务中的安全漏洞和创意机会。
如果你有兴趣获得一个完整且可直接使用的设备,请在我的邮件列表中添加自己:https://undisclosed.cc/。
git clone https://github.com/adamhrv/skylift/arduino/skylift_v03_embassy" 上传草图 "skylift_v03_embassy.ino"你需要准备:
带 OLED 显示屏(可选):
OLED 显示屏和 ESP8266 NodeMCU 都可以在 eBay 上以大约半价购买,前提是你愿意等待 1-2 周的发货时间。ESP8266 的价格最低可至 3 美元。
Arduino/test_single_beacon_frame 草图进行测试Arduino/test_oled_screenArduino/skylift_v03_embassy 草图提高性能的技巧:
如果你身处没有其他 WiFi 路由器的室内位置而 SkyLift 无法工作,请提交问题报告,并尽可能包含更多详细信息:
你可以使用 iOS、OSX 或 Wigle.net API 创建自己的 SkyLift 位置数据。(Android 和 Linux 的流程尚未文档化)。
1A)在 OSX 上扫描 WiFi 网络
python utils/osx_scan_to_json.py -o data/json/my_osx_scan.json
1B)在 iOS 上扫描 WiFi 网络
使用免费的 AirPort Utility 应用,并在"设置 > AirPort Utility"中启用"Wi-Fi 扫描器"。进行一次 WiFi 扫描,将结果保存到已同步的备忘录中,或通过电子邮件发送给自己。确保 CSV 数据前有 2 行。示例:
# Make your notes or add title her (saved as your_scan.txt))
SSID, BSS, RSSI, Channel, Time
"", "11:11:11:11:11:11", "-61", "44", "13:17:34"
"", "11:11:11:11:11:11", "-61", "44", "13:17:44"
"freewificonnect", "22:22:22:22:22:22", "-80", "11", "13:17:32"
"freewificonnect", "22:22:22:22:22:22", "-80", "11", "13:17:41"
将文件保存到 "data/ios/your_scan.txt",然后运行:
python utils/ios_to_json.py -i data/ios/your_scan.txt -o data/json/your_scan.json
1C)使用 Wigle API
在 https://wigle.net 注册以获取 API Key 和 API Token(目前免费)。使用 Wigle 的结果可能有所不同,也可能无法工作。他们的数据是众包数据,未经核实,也可能已过时。为了获得最佳结果,请在现场自行创建 WiFi 扫描。
python utils/wigle_to_json.py --lat 37.484581 --lon -122.147921 --radius 3 -o data/json/wigle_test.json
2)将 iOS(csv)转换为 JSON
python utils/ios_to_json.py -i data/ios/your_scan.txt -o data/json/your_scan.json
3)将(任意)JSON 转换为 Arduino 草图格式
python utils/json_to_arduino.py -i data/ios/your_scan.json -o data/ino/your_scan.txt
输出文本大致如下:
#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
然后,复制一份 "skylift_v03_embassy",并用你的自定义数据替换现有的 WiFi 数据。
实验性:请注意信道的两个选项。如果你在独立模式(不带屏幕)下使用该草图,可能需要更改信道。在大型房间中使用 SkyLift 时,在随机信道上使用多个中继器单元、并在信道 1、6 和 11 上使用带屏幕的版本效果似乎更好。如果你只使用一台设备,同时使用信道 1、6 和 11 迄今已获得最佳效果。
地理位置服务(Geolocation Services)是用于确定智能手机地理位置的各类技术的统称。地理位置服务使用的四种主要技术是:(1) GPS、(2) 蜂窝三角定位、(3) 蓝牙和 (4) WiFi 定位。根据这 4 种信号中哪些可用,智能手机将尝试以最高精度和最短等待时间来确定其地理位置。
SkyLift 利用了 WiFi 地理位置服务的一个漏洞,该漏洞最早由苏黎世联邦理工学院(ETH Zurich)的瑞士研究员 Srdjan Capkun 于 2008 年发现。尽管在 2008 年就已提出预警,所有主要的智能手机公司仍然继续将 WiFi 作为核心地理位置技术进行集成。该漏洞在 2012 年依然存在,当时 Bengt Sjölen 和 Gordan Savicic 在其 2012 年项目 Packetbridge(<- 很好的文档)中创造性地利用了它。
该漏洞难以解决,因为 WiFi 地理位置公司假设每个人的 WiFi 路由器(包括你家中的那台)都是其商业地理位置产品的一部分。这是否合法或合乎道德,应当进行更公开的辩论。
可以肯定的是(这一点在 2008 年就已得到证明),智能手机的地理位置数据很容易被伪造,不应被信任。然而,我们在越来越多的关键应用中依赖这项技术。例如,下图展示了我多么轻松地欺骗了苹果的"查找我的 iPhone"服务,使其认为我的设备位于伦敦的厄瓜多尔大使馆。(该图像实际是在柏林使用设备制作的,适用于桌面端或移动设备)。

I