図 クロスサイト・リクエスト・フォージェリの手口
図 クロスサイト・リクエスト・フォージェリの手口
[画像のクリックで拡大表示]

 Webサイトへの攻撃手法は,日々巧妙になっている。クラッカが会員制サイトのユーザーを装ってWebサイト上の情報を変更したり消去したりするには,ユーザーIDとパスワードの組や,Cookieで管理しているセッションIDを盗む必要があると思うかもしれない。しかし,それは間違い。クロスサイト・リスエスト・フォージェリという手口を使えば,こうした情報なしに,Webサイトのユーザーになりすまして不正アクセスできる。

 クロスサイト・リクエスト・フォージェリとは,Webサイトにログイン中のユーザーのパソコンをスクリプトで操ることで,Webサイトに被害を与える攻撃手法である。「フォージェリ」(forgery)とは「偽装」の意味。つまりサイトをまたがってリクエストを偽装する攻撃といえる。2005年4月,ソーシャル・ネットワーク・サービスの「mixi」がこの攻撃を受けた。mixiは,会員の日記に勝手な書き込みがされるという被害を受けたことで,対策を余儀なくされた。この例を基に,クロスサイト・リクエスト・フォージェリの手口を見ていく。

 クラッカがクロスサイト・リクエスト・フォージェリを成功させるには,悪意のあるスクリプト付きのWebページをユーザーにダウンロードさせる必要がある。mixiのケースでは,クラッカはまず,有名な掲示板サイトに気を引く言葉とともに罠を仕掛けたリンクを書き込んだ(図の1)。このリンクのURLは,検索サイトを示すドメイン名で始まっている。URLをちょっと見ただけでは,検索結果が表示されると勘違いしてしまう。しかしこのリンクは,検索サイトのリダイレクト機能を使っていた。

 被害に遭ったユーザーは,たまたまこの掲示板の書き込みを見て(同2),「検索サイトのURLだから悪意のあるものではないだろう」とリンクをクリックしてしまった(同3)。すると,いったん検索サイトにアクセスするが,URLの後半にあるパラメータにより,すぐにクラッカのWebサイトへリダイレクトされてしまう(同4)。結果としてユーザーのパソコンには,クラッカが用意したスクリプト入りのWebページがダウンロードされる(同5)。

 ユーザーのパソコンに送り込まれたスクリプトは,正規の手順を踏むことなく,そのユーザーのmixiの日記に直接,特定の文字列を勝手に書き込むようにできていた(同6)。ユーザーがmixiにログインを済ませた状態でWebブラウザを使っていれば,mixiは新たにログインを要求しない状態だった。ログイン中の正規ユーザーからの処理だと判断して,スクリプトが送りつけてきた書き込みを受け付けてしまったのである(同7)。

 クロスサイト・リクエスト・フォージェリは,Webサイト側でセッションをきめ細かく管理することで防げる。処理中のWebページの要所要所でセッションIDを切り換えたり,重要度の高い画面に移るときは改めてパスワードを要求するなどの処理をWebアプリケーションに盛り込めば,手順を飛ばして実行する不正なスクリプトからの処理を排除できる。