
ESP8266によるWiFi位置情報スプーフィング
6月15日に公開予定
SkyLiftは低コストの地理位置情報スプーフィングデバイスです。現在はESP8266を使用してWiFiビーコンフレームをブロードキャストし、WiFi地理位置情報サービスにおける長年にわたる(2008年の)脆弱性を悪用します。
この3番目のプロトタイプ版であるSkyLiftは、Akademie Schloss SolitudeとZKMでのウェブレジデンシー中にさらに開発されました。このプロジェクトについてのインタビューもお読みください。または、以下の手順で5ドル未満で自作することもできます。

SkyLiftは元々、Surya Mattuとの共同開発により、!Mediengruppe Bitnikの2016年にナントのZoo Galerieで開催された「Welcome to Ecuador!」アサンジルーム展のために開発されました。この更新版V0.3の開発は2016年11月に始まり、シュロス・ゾリチュードでのウェブレジデンシーの支援を受けて2017年5月に正式にリリースされました。このバージョンは初期システム(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はどちらも、配達に1〜2週間待てるのであれば、eBayで約半額で購入できます。ESP8266は3ドルまで安くなることもあります。
Arduino/test_single_beacon_frame スケッチでテストArduino/test_oled_screen スケッチをアップロードArduino/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キーとAPIトークンを取得します(現在は無料です)。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) Arduinoスケッチ用に(任意の)JSONを変換
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データをカスタムデータに置き換えます。
実験的: チャンネルの2つのオプションに注目してください。スタンドアロンモード(スクリーンなし)でスケッチを使用する場合、チャンネルを変更したいと思うかもしれません。大きな部屋でSkyLiftを使用する場合、複数のリピーターユニットをランダムなチャンネルで使用し、スクリーン版をチャンネル1、6、11で使用する方がうまくいくようです。デバイスを1台だけ使用する場合は、チャンネル1、6、11をすべてまとめて使用することが、これまでのところ最良の結果をもたらしています。
地理位置情報サービス は、スマートフォンの地理的な位置を特定するために使用される技術群を指す広い用語です。地理位置情報サービスに使用される4つの主要技術は、(1)GPS、(2)セルラー三角測量、(3)Bluetooth、(4)WiFi測位です。利用可能な4つの信号のうちどれかに応じて、スマートフォンは最も高い精度と最短の待ち時間で地理的な位置を特定しようとします。