Mozilla Security Blog

Locking up the valuables: Opt-in security with ForceTLS」より
July 27,2009 posted by Sid Stamm,Securinator

 パソコンのモバイル化に応えようとして,無線LAN(Wi-Fi)サービスを客に提供する公共の場所(カフェや空港,図書館など)が増えてきた。こうしたWi-Fiネットワーク環境でWebブラウザがリソースを要求するということは,利用するホットスポットの運用者に通信を操作されない,と暗黙のうちに信頼しているということでもある。ところが,悪意を持ってこのネットワークに接続したパソコンで通信を改変することは可能であり,不愉快な結果がもたらされかねない。

HTTP版Man-In-The-Middle(中間者)攻撃

 例として,典型的なオンライン・バンキングの手順を考えてみよう。Webブラウザのアドレス・バーに「www.mybank.com」と入力し,エンター・キーを押し,Webサイトがロードされるのを待つ。サイトが表示されたらパスワードを入力し,取引を終えた後にログアウトする。多くの場合,この手順は何らかの方法で自動化されており,細かい処理は隠れていて見えない。そこで,銀行のWebサイトにログインする際の処理を順番に説明する。

(1)ユーザーがアドレス・バーに「www.mybank.com」と入力し,エンター・キーを押す
(2)Webブラウザは「www.mybank.com」にデフォルト通信プロトコルのHTTPでリクエストすると想定し,最初のリクエストは暗号化せずに送信する
(3)「http://www.mybank.com」のサーバーは,「https://www.mybank.com」へのHTTPリダイレクトを返す
(4)セキュアな接続が確立され,ログイン用ページはHTTPSプロトコルで提供される
(5)ユーザーはパスワードを入力し,取引する

 ユーザーとWebサイト間でのセキュアな接続を確立するのは,あっという間に終わる(たいていは気付かない)最初の数段階を終えた後だ。悪質なホットスポットだと「www.mybank.com」というURLに対するリクエストを(本来のサーバーでなく)攻撃者のサーバーに送る可能性があり,そうなると決してHTTPS接続は行われない。こうした事態に気付くユーザーは少なく,最終的に攻撃者のWebサイトにログインしてしまう。

 HTTPSには,送受信チャンネルの暗号化による盗聴の防止と,サーバーの認証という二つの役割がある。ホットスポットでオンライン・バンキングを狙った中間者攻撃が行われても,ユーザーは「接続しているWebサイトが攻撃用サイトである」といった警告や表示を目にせず,「エラーが一つも出ないから安全に接続できた」と思うかもしれない。しかし実際には,サーバー認証は行われていないのだ。生真面目なユーザーなら,Webサイトへの接続時に毎回Firefoxのアドレス・バー左端にあるサイトアイコンをクリックして,認証済みサイトであるかどうかと,盗聴防止用に暗号化が施されているかどうかを確認すれば良いと思うかもしれないが,毎回忘れずに確認するのは難しい(時間もかかる)。普段は信用できる決まったWebサイトだけに自動ログインしているユーザーなら,なおさらだ。そのうえ,ある銀行の偽サイトはログイン用ボックスの隣に小さな鍵アイコンすら表示する。このアイコンは,ユーザーに「安全なWebサイトにログインしようとしている」と伝えるもので,不幸にも本物の銀行のWebサイトでも同じアイコンを表示しているところが多い。

通信プロトコルをHTTPSに限定するWebブラウザ向け機能の提案

 この種の中間者攻撃を阻止するため,HTTPサイトがHTTPSサイトを偽装する場合に備えて,Collin Jackson氏とAdam Barth氏が2008年に「ForceHTTPS」と呼ぶ機能を提案した。Webサイトは,この機能を搭載したWebブラウザに対して必ずHTTPSでリクエストするよう指示し,暗号化していないHTTPの使用を許可しなくなる。この処理の目的は,HTTPサイトからHTTPSサイトへのリダイレクト処理を不要にし,上述したような危ない攻撃につけ込まれる隙を最小限にとどめることだ。

 ForceHTTPSのアイデアが気に入った我々は,「ForceTLS」としてFirefoxへの実装に取り組んでいる。これで中間者攻撃の発生件数を減らし,ユーザーのセキュリティを全体的に向上できればと思う。第1段階の試作品として,Jackson氏とBarth氏の考えたオリジナル設計と同様の機能をアドオンで実現した。このアドオンは,安全な通信が必要な場面ではクッキーを使わず,常にHTTPヘッダー「X-Force-TLS」を送るようWebサイトに要求する。将来このヘッダーの名前は変えるが,現時点では実験的なヘッダーとして「X-Force-TLS」としておく。現在は以下のようなことを検討している。

(1)Webブラウザは,ドメインへのアクセス時にHTTPSだけを使うようにする
(2)通信プロトコルをHTTPSに限定する期間はどの程度にすればよいだろうか。例えば,Webサーバーは3日後にHTTPS以外の通信を許可するよう指定できる,という仕様が考えられる。この期限は,新たなHTTPヘッダーが送られてきて,クライアントにデータが届くたびにリセット/変更できるようにする
(3)アクセス対象サイトのサブドメイン(例えば「images.mybank.com」「login.mybank.com」)も強制HTTPS使用の対象にするのか

 ForceTLSは悪質なホットスポットからの防御だけでなく,Webアプリケーションを予想外の非暗号化リクエストに対抗できるよう強化することにも使える。人気Webアプリケーションの多くは,安全なHTTPSと心細いHTTPのどちらででも通信できる。ユーザーがHTTPでなくHTTPSを使うよう指定できるようになっていても,大きなWebアプリケーションのコードには(もちろん誤って)HTTP URIを参照する処理の紛れ込む恐れがある。ユーザがForce-TLSアドオンを導入していれば,自動的にHTTPSプロトコルが使用され,暗号化されていないデータがネットワークにさらされずに済む。

 この試作アドオンを使い,我々に感想を教えてほしい。アドオン配布サイト「AMO」でアドオンとソースコードを公開している。


Copyrights (C) 2008 Mozilla Foundation. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,Mozilla Japanの許可を得て,米国のセキュリティ・ブログMozilla Security Blogの記事を抜粋して日本語化したものです。オリジナルの記事は,「Locking up the valuables: Opt-in security with ForceTLS」でお読みいただけます。