NIKKEI NETの「経営改革講座」で、「個人情報流出事件から教訓は得られるか」という題を頂いて、コラムを書かせていただいた。
私のような経営というものをまったく知らない者に「経営改革講座」などというものを書けるはずがないのであるが、経営者の方々がご存知でないことを伝えるのにはよい機会だと思い、どうにかそれっぽく話をつなげて脆弱性の話を書いた。
本当は最終回に、「技術者は怒っています」「かなり技術に詳しい者でないとできないレベル?」「ハッカーの仕業みたいなもの?」「悪用するような輩さえいなければいい?」「どこまでセキュリティをかければいいのか」などの話を書きたかったが、ビシッと確実な文章が書けず、嫌味を言うに留まる文章しか書けず、完成しなかった。締め切りに原稿を落として申し訳ないです。
Mozilla Japanは「Firefoxセキュリティを第一に考えて設計された」としている。(略)SSLで通信が暗号化されたWebサイトを閲覧した際に,URLをハイライト表示し,Webサイトの名称を明示することで,サイト偽装を防ぐ。
とあるように、Mozilla Firefoxはフィッシング詐欺の防止に配慮しているようだ。
まず、Mozilla Firefox 1.0では、デフォルト設定で、ステータスバーの表示が強制されている。つまり、ステータスバーを隠すJavaScriptの機能を無効にする設定がデフォルトになっている*1。(加えて、ステータスバーの内容を自由に変更できるという、ばかげた機能もデフォルトで無効化されている。)
そして、ステータスバーには、HTTPSのページにアクセスしているときには、錠前アイコンだけでなく、隣にドメイン名(正確には、サーバ証明書のCommon Name)も表示するようになっている。たとえば、イーバンク銀行のログイン画面は以下の図のようになる。
これはいい。これまでだと、錠前アイコンをクリックして所定の場所を見ないと、証明書の内容を確認できなかったため、素人にはわかりにくいものだった。これなら、意識の低い一般ユーザでも自然とドメイン名を確認するようになると思われる。
ユーザのとるべき行動は次のように単純化できる。
ちなみに、Firefoxでは、上の図のように、HTTPSのページを表示したときは、アドレスバーの背景が黄色になり、錠前アイコンも現れる。より見分けやすくなった。
そういえば昔、Netscape Communications社が最初にMosaic NetscapeにSSL機能を導入したときには、SSLの使用の有無は、青または赤の目立つ線で表示されていたのだった。それが、後にバージョン更新を重ねるごとに、目立たない表現に移り変わっていったのだった。ここ数年でフィッシング詐欺が深刻になったことで、再び目立つ表示が工夫されているわけだが、元々ブラウザ設計者はその区別を重要と考えていたわけで、原点に立ち戻っているにすぎない。
次に、SSLが使われていないサイトでは、個人情報を入力しないのだとしても、偽の情報を読まされて騙されるのを避けるために、アドレスバーを確認する必要がある。ステータスバーには何も表示されないからだ。
残念ながらFirefox 1.0 PRでは、「ツール」メニュの「オプション」の設定ではできないが、以下の方法で、アドレスバーの表示も強制する(アドレスバーを隠すJavaScript機能を無効にする)ことができる。
上の図のように、「about:config」のURLにアクセスすると、Mozillaの設定項目一覧が現れる。そこに「dom.disable_window_open_feature.location」という項目がある(「フィルタ」欄で「disable」などで検索して対象を絞ると見つけやすい)ので、そこの値を「false」から「true」へ変更する(ダブルクリックする)。
たとえば、意味もなくアドレスバーを隠している警察庁の「@police」で試してみると、以下の図のようになる。
アドレスバーの背景が灰色になっているのは、ここが入力欄ではないことを意味している。サイト側が隠そうとしているのを強制的に表示させた場合は、このようになるらしい。4月26日の日記「太古の昔、アドレスバーが入力欄でなかったのを知ってるかい?」で書いた昔のMosaicはまさにこんな感じだった。
アドレスバーを隠すサイト運営者の言い分として、「戻るボタンを押されると正しく動かなくなる」というのを耳にする。戻るボタンはツールバーを隠せばよいのだから、アドレスバーだけ表示すればよいのだが、「URLを直接いじられたら正しく動かなくなる」という言い分*2があるらしい。そういう場合に、上のように入力できないアドレスバーというのは都合がよい。これならば、隠すことに何ら正当性がない。
灰色のアドレスバーは、ユーザが dom.disable_window_open_feature.location をtrueに設定しているときに現れるものだが、いっそ、アドレスバーを入力不可にしてウィンドウを開く機能をJavaScriptに新設してはどうだろうか*3。
ところで、Mozillaは、7月に、XULを使って本物そっくりのユーザインターフェイスを偽装できることが脆弱性であるとして指摘された。この話は以下などにまとめられている。
slashdot.orgでも議論されていたが、この問題を回避するには、ステータスバーの表示が強制されていることを前提にすれば、ステータスバーが二重に表示されなければ、それは本物だと信じることができ、サーバ証明書は正しく確認できるという話のようだ。
ということは、SSLが使われていない場合にUI偽装に騙されないためには、アドレスバーの表示も強制しておくのが必須となる。
ちなみに、類似の偽装は、3月にInternet Explorerで実際にフィッシング詐欺に使われて実害が発生し、問題となっていた。
このときは、アドレスバーを隠したウィンドウに、画像やフォームを使った偽のアドレスバーをページ内に設置するという偽装方法だった。
この問題を解決するためだろうか、Windows XP SP2に含まれる IE 6 SP2では、ステータスバーの表示が強制されるようになったようだ*4。これはよいことだ。ソニー銀行でさえ、ログイン画面でステータスバーが表示されるようになる。
ただ、Mozilla Firefoxのように、錠前アイコンの隣にドメイン名を表示する機能がない点は劣る。
また、アドレスバーの表示を強制する機能はないようだ。IE 6 SP2では、アドレスバーを隠したウィンドウでは、タイトルバーの冒頭にURLの一部(ドメイン名まで)が強制的に表示されるようになった。たとえば、警察庁の@policeで重要なお知らせを表示させると以下のようになる。
この機能はイマイチだ。なぜなら、常にタイトルバーを見ていればよいかというとそうではなく、アドレスバーが表示されているときにはタイトルバーにURLは表示されない。<title>タグを使って偽のURLをタイトルバーに表示される可能性があるので、そこだけ見ていては騙される。アドレスバーが現れているときにはそっちを見ないといけない。
センスの悪い設計だ。
9月17日の日記に書いた三井住友銀行の件が改善されていた。改善点は以下のようだ。
「(2)サーバの証明書で確認する」を削除しないのは往生際が悪い。「ログイン画面の「トラストマーク 」をクリックしてください」は、(1)の確認も必須だとしているからには、全く意味がない。そればかりか素人ユーザを混乱させるだけ有害だ。しかも、前回書いたようにこれは「サーバの証明書」ではないのだから、誤った解説だ。