「Agent」タグアーカイブ

2007-02
26
11:03:00
携帯で端末ID詐称は可能かもしれない話


高木さんの「素朴な」疑問に対して、果たして携帯Webアプリでセッションは安全かの議論が続いている。
携帯電話向けWebアプリの脆弱性事情はどうなっているのか
珍しく間違った批判をしている高木先生
携帯電話からセッションIDの漏洩を防ぐ
Cookieが使えない機種も多いのでGETパラメータにセッションIDを埋め込む手法への疑問と、端末IDの信頼性の二つが論点かと思うのだけど、ここでは後者をちょっと考えたい。
いわゆる端末IDについてはこちらが詳しいのだけど、議論を整理すると、端末ID(もしくはユーザID)を安全足らしめるには次の要素が必要と考えられている。
1. SRC IPを制限して、各キャリアの携帯網からのアクセスのみ許可する。
2. 携帯端末の端末IDやUser-Agent環境変数はPCと違って変更不能
ところがこの1, 2は突破可能だ。
うちのようなサイトを巡回している人なら自明の理だと思うんだけど、Windows Mobileなどを搭載したスマートフォンなら、少なくともUser-AgentはNetFrontなどのブラウザ機能で簡単に変更できてしまう。
そしてまた、設定をごにょごにょいじることで、携帯網にもアクセス可能だ。例えば僕のHTC Universalという海外で発売されたSIMフリーのスマートフォンでSoftbankのSIMを挿してYahoo!ケータイが使えます。この場合、サーバからは一般の携帯からのアクセスとの違いはかなり気を付けていないと分からないはずだ。
例を示そう。
まず以下は普通にSoftbank携帯からWebサーバにアクセスして、CGIで環境変数を見たところ。
マスクしてますが、User-Agentとx-jphone-uidが取得されたのが分かる。User-AgentのSN…ってのが端末シリアル番号ですね。
CIMG0396.JPG
CIMG0398.JPG
次にスマートフォンからUser-Agentを偽装してリクエストしてみる。
20070225171647.jpg
20070225171719.jpg
User-Agentの端末シリアル番号の下四桁が0000に偽装されているのが分かると思う。
なおx-jphone-uidはNetFrontでは任意のヘッダーは追加できないので、そのままです。つまりx-jphone-uidは基地局やゲートウェイが追加する変数ということになる。
ここで、更に端末IDを安全足らしめる条件を追加してみよう。
3. 基地局またはゲートウェイが端末を認識してコントロールするIDを挿入すること
今回環境が揃わなかったのでテストできませんでしたが、Docomoで言えばuid, Softbankならx-jphone-uid、auならX-Up-Subnoということになると思うのだけど、仮にこれらが任意に端末から追加されていたら何も基地局やゲートウェイが書き換えたり削除しない仕様だとすると、端末IDは偽装放題ということになります。
つまりいわゆるユーザIDが最後の砦となっていると思うのだけど、果たして、このへんの実態はどうなんだろうか。
多分、簡単なWMアプリを作って確認すればすぐ分かると思うけど。
(あ、auだけは安全かも。独自仕様過ぎて携帯網につながるスマートフォンがまだないので。でも、近々出すって言ってたっけな)
また、Webアプリの仕様の問題もある。
実際User-Agentしか見ていなくて、スマートフォンから簡単にログイン可能になっているサービスを確認しています。
これを脆弱性と呼ぶかどうか。
IPAとかに連絡してもいいかも知れないけど、僕自身は以前に通報したらそんなの脆弱性とは呼ばないとか叩かれたりもしたし、実は普段の携帯とスマートフォンで便利に使い分けられてたりするので、今回はパスしますが。
# 過去にはこの仕様でもOKだったんだけど、時代が変わって事情が変わってきたと言うところだろうか。