■Mozilla/Mozilla Firefoxユーザインタフェース偽装とその対策

Mozilla/Mozilla Firefoxにおけるユーザインタフェース偽装

MozillaおよびFirefoxXULユーザインタフェースを表示しています。悪意ある攻撃者は巧妙に作成されたjavascriptを通じてXULを偽造してニセモノのブラザ表示画面を作成することが出来ます。最初に空のウインドウを作成しXULでニセのアドレスバーやステータスバー等を作成する他、ステータスバーから呼び出すはずのSSL認証確認ダイアログまでも偽造することが出来ます。致命的です。

詳しくはSecuniaによるAdvisory、Mozilla / Mozilla Firefox User Interface Spoofing Vulnerabilityをご覧下さい。Firefox専用ですが、https(SSL)のPayPal のウェブサイトのフリをするデモページもあります。英語版のFirefoxを私は使っていますがこのデモページには驚きました。完璧な偽装です。危険なことこの上ありません。

ユーザインタフェース偽装対策

ごく簡単な自衛策があります。Firefoxでのみ確認しましたが、Mozillaでも恐らく有効でしょう。

自衛策の眼目としては、以下となります。偽装側のポイントは開かれたウィンドウにおいてアドレスバーとステータスバーを不可視にしXULで代替の悪意あるアドレスバーとステータスバーを作成表示するところにあります。これに対抗する為、javascriptから開かれるウィンドウでは、アドレスバーとステータスバーの不可視化を禁止することになります。この対策は今回のようなデモでなくとも原理的に全てのウィンドウに対して有効です。悪意があろうがなかろうが開かれたウィンドウにおいてアドレスバーとステータスバーはブラウザが正当に用意したものを強制表示することになります。私見ですがこの設定は本来の姿でして、Mozilla/Mozilla Firefoxならずとも、OperaIEでも既定値として設定できればフィッシング詐欺はずいぶんとやりづらくなることでしょう。

では、やりかたを。Firefoxでの例です。

  1. Firefoxを起動します。
  2. アドレスバーに、 about:config と入力してenterします。
  3. 各設定項目が一覧表示されますので、スクロールして次の項目を探します。
  4. すなわち、dom.disable_window_open_feature.location 、dom.disable_window_open_feature.status
  5. おのおのダブルクリックして設定値をfalseからtrueに変更します。

以上でアドレスバーとステータスバーの不可視化をjavascriptからは出来なくなりました。https(SSL)のPayPal のウェブサイトのフリをするデモページで効果を確認してください。アドレスバーもステータスバーも本物とニセモノとが共に表示されるようになります。これではフィッシングは難しいことでしょう。

追補

この対策は以下の意味において有効です。javascriptでwindow.open()関数を用いる時に、3番目のパラメータがwindow_open_featureなのです。上の対策のうちdom.disable_window_open_feature.locationをtrueにするとは、window.open()関数において以下を無効化することとなります。

newwin = window.open("URL","","location=0");

statusについても同様です。

8/4追記

厳密に言えば、上にあげたabout:configによる設定は、prefs.jsの設定をダイレクトに行うものです。主設定プロファイルとしてuser.jsを自作している方々はそちらで調整願います。user.jsがprefs.jsを上書きしてしまうからです。もっとも、user.jsを自作しているほどの人ならばすぐにわかると思いますけれども。釈迦に説法でしたか。申し訳ありません。

また、defaultなゾーンについての設定を上では考えております。user.jsによって複数のゾーンを作成し、それぞれのゾーンについてセキュリティー上のポリシーを作成している方々にお尋ねしたいのですが、dom.disable_window_open_feature.locationないしstatusはゾーンごとに作成するべきなのでしょうか?

以上、id:mitamu様からのご指摘により追記させて頂きます。mitamu様、ありがとうございました。なおmitamu様のご調査により以下のこともわかりました。dom.disableほにゃららは、各ゾーン共通で良いようです。

■対応完了!Opera7.53アドレスバー偽装

Opera7.53(Build3864)リリース

アドレスバー偽装が可能であったOpera7.53(Build3850)でしたが、(Build3864)が日本版で登場、同偽装による脆弱性はFIXされている模様です。Opera.comを見に行きましたがまだ英語版では(Build3850)のままでした。日本語版世界にさきがけて先行ロードショーみたいな。