2016年7月15日金曜日

スマホの位置情報偽装について調べたメモ


前提知識/位置情報の取得方法について:
 スマホでの測位方法はざっくり以下の3つに分かれる

 1.GPSを利用する
  複数の衛星の発信した電波を受信して位置を計算する
  GPSの受信装置が必要
  精度が良く処理は重い
  スマホ用GPSは処理の一部をサーバで行っているため別途通信が必要

 2.携帯電話の基地局を利用する
  衛星の代わりに携帯電話の基地局を用いる方法
  GPSよりも処理が軽い
  キャリアとの契約およびLTE(3G)の通信機能が必要

 3.wifiのアクセスポイント(以下AP)を利用する
  衛星の代わりにAPを用いる方法
  精度は周辺のwifi設置状況に依存(多ければ多いほど良い)
  APと位置情報との紐付けをしているサーバから情報を得る必要がある
  一番メジャーなのはGoogleの測位サービス

  GPS非搭載、SIMなしwifiのみのタブレットでも測位ができるのはこの方法を使っているため


位置情報を偽装する方法:

 1.開発者用の機能を利用する
  デバッグ用にテストデータを食べさせる機能がありこれを利用する
  機能を有効にして偽装したい位置データを与えるだけ
  一番簡単だがアプリ側には偽装はバレバレ

 2.位置情報取得APIをフック
  位置情報取得に使うAPIをフックしてデータを差し替える
  基本的にrootを取らないと無理
  root前提の偽装ツールはこの方法を用いている

 3.BluetoothタイプGPSのフリをする
  タブレットなど外付けGPSに対応した機種のみ
  GPSとの通信プロトコルは単純なSPPなので簡単に真似できる
  外部機器を用いてGPSのフリをして偽装したい位置データを出力する

 4.APのフリをする
  外部機器を用いてAP自体を偽装する
  特定の場所におけるAPの状況を再現できれば位置情報の偽装が可能
  複数のニセAPと位置情報―APの関連付け情報が必要になる
  また、移動を再現するにはAPの電波強度の増減制御が必要


偽装への対策:
  
 1.root環境でのアプリケーション実行を禁止する
  最もメジャーな偽装方法が使えなくなるため効果が高い
  ただしこれを迂回する方法を考えてくるのでいたちごっこになる

 2.複数方法での位置チェックを行う
  GPSやAPの組み合わせなど複数の方法で測位を行う
  データ間の矛盾が発生した場合は偽装と判定する

 3.テレポートや高速移動チェック
  有り得ない移動についてのチェックを行う


所感:
 そもそも不正が行われることが想定されていない性善説的設計という印象
 基本的にクライアント(スマホ)側の自己申告を信じるしかないため、偽装のハードルは低い

 位置情報を扱うアプリでは最悪、偽装されても問題が無いようなデザインにしないとマズい
 位置情報をゲームのスコアや抽選のシードとして直接使ってしまうと破綻しかねない
 

 

 

0 件のコメント:

コメントを投稿