そろそろモパイルサイトのかんたんログインについて一言いっておくか
タイトルは半分釣りです(ぉ 特に物申してるわけではなく、現状を軽くまとめただけですね。 なんか、勘違いとか補足があれば是非ぜひツッコミを!
そもそも「かんたんログイン」って?
いわゆるオートログインという奴のモバイル版の言い方? の様です。 基本的には各キャリアのゲートウェイプロクシで付与される個体識別番号 (X-DCMUID,X-Up-Subno, X-JPhone-UIDなど)を使って認証を行う パスワード入力を行わずに認証ができるのでユーザの利便性は高い。 HTTPヘッダは任意に書き換える事が可能なので、各携帯キャリアのゲートウェイにIPやUAを使って対象を絞るのが前提。なにが問題?
- パスワードと違い秘密情報ではなく、どのサイトにも同様のものを送るので、突破されたときのリスクが非常に高い
- 携帯を他人に利用されても簡単に認証が通ってしまう
- iモードID(guid=on) + DNS Rebindingによる既知の脆弱性
- 実装によっては他キャリアと誤認識してしまい、ゲートウェイで指定されていない個体識別情報を送れる
iモードID + DNS Rebindingの問題
- DNS Rebindngは短い時間でIPアドレスを変更する事によりJSのクロスドメイン制約を越える攻撃
- guidはcookieと違いドメイン名を判別し無いため、罠サイトからJS経由で情報を盗むことができる
- アプリ側で送信元のドメインを確認することで根本的対策が可能
実装による他キャリアとの誤認識
- キャリアのゲートウェイは自社の個体識別情報は上書きするが、他社の情報がヘッダに含まれていても感知しない
- たとえば以下のように実装しているとsoftbankの場合、docomoとauに関しては任意のパラメータが送れる
$guidHeader = $_SERVER["HTTP_X_DCMGUID"] if(empty($guidHeader)) { $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"] } if(empty($guidHeader)) { $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"] }
- 対策としてはアプリ側でもIPとUAの双方をチェックした上で個体識別番号を確認する
- ただし、一部ユーザのケータイを未対応として弾いてしまう可能性はある
まとめ
- かんたんログインは便利だが、やはりセキュリティ的には微妙
- PCの半ログインと同じく、他人に見られても困らない程度の情報を公開するのが吉