水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > WASForum Conference 2010: ケータイ2.0が開けてしまったパンドラの箱

WASForum Conference 2010: ケータイ2.0が開けてしまったパンドラの箱

2010年5月22日(土曜日)

WASForum Conference 2010: ケータイ2.0が開けてしまったパンドラの箱

公開: 2010年5月30日16時40分頃

WASForum Conference 2010。OpenIDのお話の後は、昼休みを挟んで午後のセッションです。午後の一発目は、HASHコンサルティングの徳丸浩さんによる「ケータイ2.0が開けてしまったパンドラの箱」。実はこのセッション、事前に「未公表のネタ2件を発表する (twitter.com)」と宣言されていました。未公表の脆弱性が複数公開されるのではないか……と、期待と不安が高まります。

かんたんログインのお話
各サービスのかんたんログイン機能
  • はてな …… 「かんたんログイン」あり
  • ライブドア …… 「クイックログイン」あり
  • mixi …… 「かんたんログイン」あり
  • ブラウザ三国志 …… なんと、「かんたんログイン」のみ。むしろ潔い?
  • Twitter …… かんたんログインあり。このサービスは、端末が3台あれば3台ともかんたんログインできるように頑張っている。
  • Remember The Milk …… iモードのみ、「かんたんログイン」が利用可能
かんたんログインが成り立つための条件
  • 端末固有ID …… 秘密情報ではない。「書き換えができない」という前提
  • ふつうにHTTPヘッダに入っている
  • 携帯電話を使っている限りは書き換えできない?
  • ケータイ網が閉じたネットワークであること
  • ケータイ端末の機能が低く、HTTPヘッダを書き換える必要がないこと
iモードブラウザ2.0
  • 2009年5月19日、iモードブラウザ2.0の発表
  • JavaScript対応、Ajax対応、Cookie対応、Referer対応
ケータイJSで端末固有IDを書き換える
  • XMLHttpRequestが使用できる
  • setRequestHeaderが使用できる
  • setRequestHeaderでリクエストヘッダを書き換ることができる

……10月の時点で、setRequestHeaderが機能しなくなった (setRequestHeaderメソッドはあるが、呼んでも何もしない)。これにより、能動的攻撃はできなくなった。

mpw.jpによる情報
徳丸浩の熱い日
  • 事業者側での対応は困難。一方、サイト側での対策は可能。
  • そのため、公表することにした。
DNS Pinning
  • IEは強固だが、他のブラウザは割とゆるい。キャリアのせいというわけでもなさそう
  • ゲートウェイで名前解決するので、ブラウザ側では対策できない
  • ゲートウェイ側で一定時間Pinningする場合、ゲートウェイが共有であることが問題になる。攻撃者がPinning開始時間を設定できる (例: Pinningが1時間なら、攻撃者は攻撃開始の58分前に1度アクセスしておけば良い)
ゲートウェイIPの変遷
  • リモートホストのIPアドレスは頻繁に変わる
  • docomoは1分間はDNSキャッシュを保持
  • ゲートウェイの群単位でキャッシュを共有しているらしい?
ソフトバンク端末のJavaScript対応
  • 2004.12 ノキア JS対応
  • 2006.3 804SS JS対応 (ただしiframeには対応せず)
  • 2008.3 922SH Ajax対応

実は、2006年からパンドラの箱は開いていた!

setRequestHeaderはどのヘッダを改変して良いか?
  • Host, Referer は書き換えできては駄目なはず……。
  • ソフトバンク端末では、なんと Host: が書き換えできてしまう!
徳丸浩の熱い日2
  • 932SHを購入 (7万円) して確認。
  • 問題を報告。ソフトバンクモバイルの側の担当者がアサイン
  • 12月某日、ソフトバンクにて打ち合わせ

Host: の改変防止が根本対策だが……。

3月末某日
  • DNSの挙動に変化が……
  • DNSキャッシュを5分間保持するようになった
  • ただしゲートウェイ群が切り替わると駄目
しびれを切らして……
  • デフォルトAjax許可の端末はないのか?
  • マニュアルを片っ端からダウンロードして通読
  • 検証センターで検証!!
検証結果

検証センターで3時間かけて64機種を調査したところ、以下の4機種でAjaxがデフォルトONであり、しかもHost:書き換え可能であることが判明。

  • 940SC
  • 820N
  • 821N
  • 830CA

SH (シャープ端末) はデフォルトでAjaxが無効となっている。ユーザーが設定を変えた場合には影響を受ける。

NEC、CASIOの端末では Refererの改変も可能。

  • NECとCASIOは、いったんAjax有効の端末を出したものの、後継機種では何故かまた無効になった。
  • SHARPは一貫してAjaxがデフォルト無効であり、慎重な姿勢が見られる
  • メーカーごとに対応がバラバラであり、連携がない。他メーカーの教訓が生かされていない
  • NET FRONTのACCESS社は何をしていたのか!?
  • IEも昔は脆弱だったが、対応してきた歴史がある。
  • 携帯端末でのブラウザシェア8割に見合う責任を果たしていただきたい

幸い、Ajaxデフォルト有効機種はシェアが低いため、影響は大きくないと判断し、このたび公開を判断した。

対策は?
  • アプリ側の対策はない
  • ユーザ側にセキュリティ設定を促す
  • 運営者にやる気があれば……危険な機種のみかんたんログインを無効にする
  • ソフトバンク端末ではかんたんログインを無効に
能動的攻撃の可能性
  • SSLでエンドトゥエンド通信にすると、キャリアのゲートウェイでヘッダフィールドを書き換えられなくなる
  • "User-Agent" ではなく "User_Agent" というヘッダフィールドをつけることで、User-Agentを誤認識させることができる (CGIプログラムで環境変数 HTTP_USER_AGENT を参照している場合)
  • SSLではかんたんログインを受け付けないことが対策になる
まとめ
  • 機種に依存する要素が多い
  • そのため、全ての端末について検証しないと何とも言えない。が、一人でやるのは大変
  • オープンに議論できる場が必要なのではないか

というわけで、ソフトバンク端末の XMLHttpRequestで Host: が改竄されるという脆弱性が公表されました。

私もソフトバンク端末が JavsScript や XMLHttpRequest にひっそりと対応していることには気付いていて、ひっそりと問題視していたのですが、XMLHttpRequestはデフォルト無効になっているものと思っていました。デフォルト有効の機種があったとは……。そして、その調査のためにわざわざ検証センターに出向き、64もの機種を調査されたというのが凄いです。会場も沸いていました。

しかし、そんな検証を個人でやるのは大変だという事実。キャリアから公式サイトに向けた資料はNDAベースですし、端末のメーカーごとに対応がまちまちだったりするところを見ると、端末側の技術資料もあまり共有されていないように見受けられます。そういったところがオープンになり、情報が共有されるようになって行けば、安全性の向上にもつながりそうですね。

続きます……「どうするケータイ認証」。

関連する話題: セキュリティ / WASForum Conference / WASForum Conference 2010 / モバイル

最近の日記

関わった本など