前回では、URLにセッションIDを埋め込むことの問題点を指摘した上で、今後はできるだけケータイでもCookieを使うことを提案しました。それを受けて今回は、前半で、ケータイWebでCookieを使う際の注意点について説明します。
そして後半では、連載の終わりに当たり、スマートフォンが普及しつつある状況下でのケータイWebの今後について説明します。
これまで説明したように、KDDIとソフトバンクのケータイでは従来からCookieが利用でき、NTTドコモの端末でも2009年夏モデル以降でCookieが利用できます。セッション管理にCookieを利用することで、セッション管理の安全性を高めることが可能です。
ただしKDDIの端末では、Cookieの扱いに注意が必要です。KDDIの仕様書には、以下の記載があります。
EZweb対応端末においてCookieは、EZサーバに保管されます。
※ただし、WAP2.0ブラウザ搭載端末ではEnd to EndのSSL通信時は端末に保管されます。なお、EZサーバに保管されたCookieはKDDI設備のメンテナンスなどによりリセットされる場合があります。
すなわち、HTTPSでSet-CookieされたCookieは端末に保存されますが、HTTPでSet-CookieされたCookieは事業者のゲートウェイ(EZサーバ)に保存されます。
HTTPSの場合、ゲートウェイでCookie処理はできなくなるため、HTTPSのページではHTTPでセットされたCookieが参照できないことになります。
またCookieの仕様として、secure属性のついたCookieはHTTPのページでは参照できません。これらをまとめると、下表のようになります。
| 設定時の条件 | HTTPでの参照 | HTTPSでの参照 |
|---|---|---|
| HTTPで設定 | ○ | × |
| HTTPSで設定(セキュア属性なし) | ○ | ○ |
| HTTPSで設定(セキュア属性付き) | × | ○ |
このため、EZwebで、HTTPとHTTPS両方から参照できるCookieを設定するためには、HTTPS側でCookieを設定する必要があるということです。一般的にはそのような制約はなく、EZweb独自の制約です。
しかし、この制限は近く変更されるようです。au/KDDIの「KDDI au: そのほかの技術情報 > Cookie」によると、2011年秋冬モデル以降の端末では、下図のようにCookieの保管場所による区別がなくなっています。
同様に、Cookieのデフォルト有効期限についても、2011年秋冬モデル以降で変更されるようです。
Cookieの有効期限
デフォルトの有効期限
「max-age」の有効期限の指定がない場合、2011年夏モデル以前のEZブラウザと2011年秋冬モデル以降のEZブラウザとで仕様が異なります。
2011年夏モデル以前 :デフォルトで「1日 (24時間)」。
2011年秋冬モデル以降 :ブラウザ起動中のみ有効、ブラウザ終了時に削除。
これらの発表から、筆者は、2011年秋冬モデル以降では、Cookieは常に端末に保存される仕様に変更されるのではないかと予想しています。そうなると、HTTPでセットされたCookieもHTTPSのページから読み出せることになるはずですが、そこまで明確には発表されていません。これは筆者の推測です。
筆者の推測が当たっていても外れたとしても、現在のEZwebの仕様に合わせてアプリケーションを開発しておけば間違いありません。すなわち、HTTPとHTTPSの両方から参照する必要のあるCookieはHTTPSでセット・変更するということです。
これはかなり厳しい制約になりますが、携帯電話ブラウザ向けにHTTPとHTTPS混在のサイトを開発する上では避けては通れない制約です。
実は少し前まで、ソフトバンクでも、HTTPとHTTPS混在のサイトでCookieの扱いが難しい状態でしたが、今年の6月30日午前3時にこの問題は解消されました。以下、この問題について説明します。
図1は、一般的なSSLを示しています。ケータイブラウザとWebサーバの間には事業者のゲートウェイがありますが、ゲートウェイは単に通信を中継するだけで、通信内容を見たり改変したりすることはできません。
これに対してソフトバンクの旧来のSSLは、ケータイブラウザとWebサーバの間にsecure.softbank.ne.jpというゲートウェイが割り込む形になっていました(図2)。SSLの暗号化通信は、secure.softbank.ne.jpで受信する際に復号され、再度暗号化されて送信されます。この方式では、ゲートウェイ(secure.softbank.ne.jp)が通信内容を見たり、改変したりすることができてしまいます。
この形態は、通常、中間者攻撃(Man-in-the-Middle Attack)と呼ばれる攻撃手法と同じです。
そこでSSLには、このような盗聴・改ざんができないような仕組みが用意されています。具体的には、画面2のようにブラウザが証明書のエラーを表示して、利用者が中間者攻撃に気付くことができる仕掛けです。ここでは、secure.softbank.ne.jpにはexample.jpの証明書がないため、以下のようなエラーになります。
このようなエラーを防ぐ方法はいくつかあります。このうちソフトバンクの採用していた方法は、SSLのサイトにアクセするURLを書き換えるというものです。すなわち、https://example.jp/というURLは、https://secure.softbank.ne.jp/example.jp/という形になります。
この場合、ブラウザ側が認識するドメインはsecure.softbank.ne.jpなので、証明書のエラーにはなりません。利用者はソフトバンクの運営するsecure.softbank.ne.jpを信頼してSSLのサイトを利用することになります。
しかし、この方法にはいくつか問題があります。
サイト開発者たちがまず問題にしたのは、HTTPとHTTPSが混在するサイトで、ブラウザから見たドメインが異なることです。以下は、example.jpというサイトにHTTPとHTTPSでアクセスした場合のURLです。
HTTP http://example.jp/
HTTPS https://secure.softbank.ne.jp/example.jp/
HTTPの際にはexample.jpドメイン、HTTPSの際にはsecure.softbank.ne.jpドメインとなるので、Cookieを共有することができません。この問題には有効な解決策がなく、secure.softbank.ne.jpの廃止によってようやく解決されました。
secure.softbank.ne.jpの廃止に際して、公式には「サイト開発の利便性向上などを目的とした」仕様変更とありますが、実はsecure.softbank.ne.jpには、もっと切実な問題がありました。secure.softbank.ne.jpを利用したWebサイトは、アプリケーションに脆弱性がなくてもなりすましを許してしまうという問題があったのです。
詳しい内容は、「高木浩光@自宅の日記 - SoftBankガラケーの致命的な脆弱性がようやく解消」、「徳丸浩の日記: ソフトバンクのゲートウェイ型SSLの脆弱性を振り返る」をお読みいただくとして、ここでは概要を紹介します。
ソフトバンクのケータイ端末は、かなり昔からJavaScriptが非公式に使えるようになっていました。画面3はソフトバンク910T(2006年10月発売)の設定画面ですが、「スクリプト設定」という項目があり、JavaScriptをサポートしていることが分かります。
ケータイブラウザがJavaScriptに対応していれば、secure.softbank.ne.jp上に表示されたコンテンツを読み出すことができます。そこで筆者は図3のような検証用画面を作成しました。これを用い、iframe上に表示させたGmail(ケータイ版)の表示内容を、iframeの外側に配置したJavaScriptを用いて読み出せてしまうことを確認しました。
この検証ページは、攻撃者の罠を想定して作られています。
実際の攻撃シナリオを説明しましょう。罠サイトではGmailの表示は隠され、別の内容(例えば芸能人のゴシップ、マル秘のお得情報、その他の話題)が表示されます。うっかり罠のサイトを閲覧してしまうと、Gmail、あるいはその他のサイトがiframe上に呼び出され、罠サイトのJavaScriptにより、秘密情報が攻撃者の管理するサーバに送信されます。
この攻撃により、メールアカウントやパスワードといった秘密情報の漏えいのほか、利用者のアカウントによるWebサイトの操作(買い物、オークション出品・応札、送金、投稿など)も可能になります。非常に影響の大きな脆弱性といえるでしょう。画面4と画面5に、検証結果と読み出したHTMLの拡大図を示します。
この問題はケータイWeb史上最大の脆弱性と思われますが、本年6月30日のsecure.softbank.ne.jpの停止により解決されたことになります。
ここで視点を変えて、スマートフォン対応のアプリケーションの脆弱性について少し説明しましょう。
まず、スマートフォン向けのアプリケーションには2種類あります。
このうち、スマートフォン向けのWebアプリケーションは、一般の(PCなどの)Webアプリケーションと技術的には同等です。従って、スマートフォン「固有」の注意点はあまりありません。スマートフォンのブラウザではJavaScript、Cookieなどが使えますし、事業者のゲートウェイの存在を意識する必要もありません。ケータイIDも送信されません。
これに対して、スマートフォンのクライアントアプリケーション(以下、スマートフォンアプリ)の方は注意が必要です。筆者は、ケータイWebアプリケーションとスマートフォンアプリには共通するセキュリティ上の注意点があると考えています。それを考える上では、以下の着眼点が重要と考えます。
このうち、ケータイIDの問題と「PCから見えないはず」という思い込みについて説明します。
iPhoneやAndroid端末では、端末固有のID(ケータイID)を取得できます。Webアプリケーションからは利用できませんが、スマートフォンアプリからは、権限があれば取得できます。
例えばAndroid端末の場合、getSimSerialNumber()やgetSubscriberId()、getDeviceId()というメソッドにより、端末あるいは契約者にひも付けられたIDが取得可能です。
iPhoneやiPadにも、端末およびSIMにひも付けられたIDを取得する機能があります。以下は、iPhoneの固有IDを閲覧する画面です(注1)。これらの値をアプリケーションから取得することもできます。
そして、これらのIDを不用意に用いたために脆弱性が生じ、個人情報が流出した事件が発生しています。
2010年6月に、米国AT&Tが運営するWebサイトから、11万4000人分のメールアドレスが漏えいするという事件が起きました。このWebサイトは、ケータイIDの一種ICC-ID(SIMのシリアル番号)のみでユーザー認証を行っており、パスワードなど他の秘密情報を認証時に要求していませんでした。このため、攻撃者はICC-IDを総当たり的に試行して、認証に成功した利用者のメールアドレスを取得できたということです。
【関連記事】
iPad購入者のアドレス流出、原因はWebアプリケーションの脆弱性か(ITmedia News)
http://www.itmedia.co.jp/news/articles/1006/11/news034.html
これは、連載第2回で説明した、グダグダSNSの「かんたんログイン」においてIPアドレスの制限がかかっていなかった状態に相当するものです。スマートフォンの場合は、Wi-Fiからのアクセスもあるので、原理的にIPアドレス制限はできません。
しかし、次のような疑問を持つ方がいるかもしれません。Webアプリケーションの実装方法に問題があったとしても、攻撃者はどうやってその問題点に気付くのでしょうか。
ケータイの場合でも「PCから見えないはず」は間違いで、実際にはHTMLなどを見る方法がありました(連載第1回参照)。しかしスマートフォンの場合は、「PCから見る」方法がずっと多彩になります。
一例として、スマートフォンアプリの通信の様子をネットワークキャプチャする例を紹介しましょう。
画面7は、あるTwitterアプリケーション(Android用)の通信の様子をWiresharkというソフトによりキャプチャしている様子です。筆者のアカウント(@ockeghem)で認証後、コンテンツをAPI経由で取得している様子を図示しています。
ご覧のように、HTTPヘッダも含めたリクエスト全体が取得できています。
また、SSLにより暗号化されたリクエストも違う手法で取得できます。SSLによる暗号化は、第三者による盗聴を防ぐためのものです。従って、利用者本人がネットワークの内容を取得する場合、SSLによる暗号化では防ぐことはできません。
このように、ケータイWebの場合以上に、スマートフォンアプリの場合も「PCから見えないはず」という思い込みは大変危険です。ケータイIDによる認証も使うべきではありません。
それでは、どうすればよいか。
答えは簡単で、一般の(PC向けの)Webアプリケーションと同じ方法を使えばよいのです。例えば、認証後のセッション維持には疑似乱数によるセッションIDを使えばよいし、それはPHPなどの開発ツールがサポートするもので十分です。難しい仕組みを再発明する必要はまったくないのです。
さて、連載の締めくくりとして、ケータイWebアプリケーションを取り巻く環境が今後どのように変化するかを考えてみましょう。
第1回の終わりで説明したように、ケータイWebも2008年からWi-Fiに対応しています。ただしこれは、携帯電話と事業者ゲートウェイをVPN接続するという方法により、閉じたケータイネットワークを維持したままで行われました。
今後、ケータイネットワークに影響を与えるかもしれないイベントが2つ計画されています。1つは、EZwebのゲートウェイの集約、もう1つは、NTTドコモのスマートフォンによるiモード認証・課金の提供です。
EZwebの技術サポートサイトEZfactoryには、以下のように「EZwebとPCサイトビューアのゲートウェイIPが統合される」と告知されています。
EZブラウザは、2011年秋冬モデルにて、EZサーバを含め、「機能」および「ネットワーク環境」の見直しを行ないます。
これによる主な変更点は以下のとおりです。
<主な変更点>
・EZサーバの言語変換機能が削除され、HDMLが非サポートとなる。
・EZブラウザ、PCサイトビューアのIPアドレス帯域が統一される。
従来、EZwebのブラウザはJavaScriptに対応しておらず、主要キャリア中でセキュリティ上の危険性が最も低い状態でした。しかしPCサイトビューアとIPアドレスが統合されることは、EZwebコンテンツを閲覧するブラウザの中に、JavaScriptに対応したものが含まれることを意味しています。
歴史的に、ケータイWebとJavaScriptの相性はよくありません。これは、閉じた世界を前提として開発されたWebアプリケーションに対して、JavaScriptが攻撃手段を提供するからと考えられます。例えば、第2回に紹介したDNSリバインディング攻撃や、今回紹介したsecure.softbank.ne.jpに対する攻撃は、いずれも、従来JavaScriptが使えないことを想定していた環境で突然JavaScriptが使えるようになったために起こった問題と考えられます。
NTTドコモは、5月16日の夏モデル発表の際に、「今冬にはiモード課金コンテンツをスマートフォンでも利用できるようにする」旨を発表しました。この発表も、ケータイWebが動作する環境の広がりを意味します。
【関連記事】
「スマートフォンでiモード」を普及の「武器」に──ドコモ夏モデル発表(ITmedia News)
http://www.itmedia.co.jp/news/articles/1105/16/news107.html
筆者は、スマートフォン上で動くiモードコンテンツは、次のように実現されると予想しています。まずiモードコンテンツは、スマートフォン上の標準ブラウザではなく、iモード専用のブラウザ上で表示されます。そして、iモード専用ブラウザはNTTドコモのゲートウェイとの間をVPN接続されます。これは、前述のケータイWi-Fiと同じ方式です。
この方式によるリスクは何でしょうか。スマートフォン上のアプリケーションは、携帯電話に比べ、逆コンパイルなどによるリバースエンジニアリング(内部の解析)が容易になります。従って、スマートフォン用iモードブラウザを改造して、攻撃機能を追加することなどが現実味を帯びてきます。
ケータイIDについてはどうでしょうか。現在ゲートウェイで付与しているiモードIDやキャリア公式サイトで使用されているUIDについては、技術的には、改ざんされずに付与することが可能です。一方、端末側で付与しているFOMA端末製造番号とFOMAカード製造番号は改ざんされる可能性があります。
このようにブラウザが攻撃ツールに改造されるかもしれない、ケータイIDが改ざんされるかもしれないなどと聞かされると、びっくりするケータイ開発者がいるかもしれませんね。
しかし、PCから閲覧されるWebアプリケーションでは、これらは当然の前提です。PC向けのサイトは常に攻撃ツールから狙われており、それで異常なことが起これば、アプリケーションの脆弱性として扱われます。
すなわち、これまで何度も書いてきたように、ケータイWebであっても、PC向けサイトと同じ技術を使っていれば、ブラウザなどの進化を恐れる必要はありません。Webの一般的なルールに従ってアプリケーションを記述してそれで問題が起こるのであれば、ブラウザやインフラの脆弱性なのです。その例は、secure.softbank.ne.jpの事例で紹介したとおりです。
今後、ケータイWebは緩やかに衰退すると予想されますが、それと入れ替わるようにして、スマートフォンアプリにおいて、ケータイIDの問題や「PCから見えないはず」という思い込みに起因した問題が必ず起こります。むしろ、AT&Tの事例で説明したように、すでに起き始めているといっていいでしょう。
従って、安全なWebアプリケーションや安全なスマートフォンアプリを開発する上でも、安全なWebアプリケーションを書くための基本がとても重要になります。それを確認する上では、拙著「体系的に学ぶ 安全なWebアプリケーションの作り方」を参考にしていただければと思います。
これまで4回にわたり、ケータイWebのセキュリティ問題について説明してきました。途中何度も間が空いてしまい申し訳ありません。今度は、別の分野でまたお目にかかれれば幸いです。
京セラコミュニケーションシステム株式会社
プラットフォーム事業本部 技術顧問
HASHコンサルティング株式会社
代表取締役
徳丸 浩(とくまる ひろし)
1985年京セラ株式会社入社、1995年京セラコミュニケーションシステム株式会社(KCCS)転籍、2008年HASHコンサルティング株式会社設立。現在、京セラコミュニケーションシステム株式会社 プラットフォーム事業本部 技術顧問を兼務。システム開発の経験を経て、2004年からWebセキュリティのサービスを開始。特にケータイWebサイトのセキュリティについては早くから着眼し、多くの講演、寄稿を手がける。
HASHコンサルティングを立ち上げてからは、企業のWebサイト開発のコンサルティングなどにも幅広く携わる。
最近、特に注目されているWAFについては、多くの実証実験を手がけ、自身のブログでもWAFについての見解を述べている。
▼徳丸浩の日記
http://www.tokumaru.org/d/
▼KCCSセキュリティサイト
http://www.kccs.co.jp/security/index.html