GPSスプーフィングの仕組みとアプリが検知する理由
位置情報、ソフトウェアによる偽装GPS、モック位置情報フラグの実際の動作と、本物のRF信号がモックマーカーを残さない本物の測位を生成する理由。
「GPSスプーフィング」という言葉は、まったく異なる二つの行為に使われている。その違いこそが、ある方法ではバレて、別の方法ではバレない理由のすべてだ。一方はソフトウェアで偽の座標を注入するもの。もう一方は本物の信号を放送するもの。それぞれの仕組みと、アプリが実際にチェックしている内容を解説しよう。
スマートフォンが位置を知る仕組み
GNSS受信機(GPSと、その兄弟であるGalileo、GLONASS、BeiDou)は、上空の衛星から届く微弱な電波を待ち受ける。各衛星はメッセージを送信した時刻を放送しており、受信機はそれぞれの信号が届くまでにかかった時間を測定し、それを距離に変換し、すべての距離と矛盾しない地球上の一点を解く。その解かれた点がフィックスだ。スマートフォン上の位置情報を利用するすべての機能(地図、ジオフェンス、「近くの〇〇」、ゲーム)は、このフィックスを基盤としている。
ソフトウェアによる偽GPS:座標の注入
偽GPSアプリは電波には一切触れない。OSの開発者用フックを利用して、システムに座標を渡し、「代わりにこれを報告しろ」と指示する。手軽で無料だが、痕跡を残す。Androidでは、この方法で生成された位置情報には必ず**isFromMockProvider**フラグが付き、有効化には開発者向けオプションと「疑似的な位置情報」設定が必要だ。iOSでは、Appleがこうしたアプリを完全に禁止しているため、ソフトウェアによる方法には、コンピュータ、脱獄(Jailbreak)、または有効期限の短い証明書で署名されたサイドロードアプリが必要になる。
アプリが検知する理由
検知のコストが低いのは、ソフトウェアによる方法が痕跡を残しやすいからだ。
- Mockフラグ。
isFromMockProviderを読み取るのは一行のコードで済み、フラグ付きのフィックスは破棄される。これだけで、カジュアルなスプーファーの大多数は捕捉される。 - 完全性認証。 Play Integrity(Android)や脱獄/開発者モードチェック(iOS)は、ソフトウェアによる方法に必要な改変された環境を検知する。
- クロスチェック。 堅牢なアプリは、GPSフィックスをネットワークIP、スマートフォンが観測しているWi-Fiや携帯電話基地局、モーションセンサーと比較し、それらすべてと矛盾するGPS位置や、人間が移動できる速度を超えてジャンプする位置を検知できる。
RFシミュレーション:本物の信号、本物のフィックス
AnyLocateは、より一層低いレイヤーで動作する。座標を注入する代わりに、本物の衛星信号を放送し、デバイス自身の受信機に直接届ける。受信機はその信号にロックオンし、通常の方法でフィックスを計算する。疑似位置情報レイヤーにおいて、この結果は実際の位置と区別がつかない。注入された座標は存在しないため、isFromMockProviderフラグも、疑似位置情報設定も、root化も脱獄も、一般的な検知ツールが探すように作られているものは一切存在しない。位置情報は実際の道路上に着地し、受信機自身が生成したものであるため、スムーズに更新される。
VPN ≠ GPS
よくある行き止まり:VPNが変更するのはIPアドレスであり、GPSフィックスではない。Snap Map、Pokémon GO、そしてほとんどの地図機能はIPを無視し、衛星による位置を読み取る。そのため、VPNは地図上で何も動かさない。地図上の位置を動かすには、フィックスを動かす必要があり、それはGPSレイヤーの問題であって、ネットワークの問題ではない。
限界点
境界について正直であることが重要だ。衛星信号を制御することで、GPSフィックスから派生するすべてが設定される。しかし、ネットワークIP、アカウントや課金リージョン、スマートフォンが感知するWi-Fiやセル環境、モーションセンサーは変更されない。したがって、それらに基づいて制限されているもの(ログインに紐付いたリージョンロック、IPチェック、融合Wi-Fi位置情報、歩数計クロスチェック)は別の問題となる。AnyLocateが制御するのは衛星レイヤーであり、それをクリーンかつ完全に制御する。他のレイヤーについては主張しない。