Part4では,ユーザーのWebブラウザにスクリプトを送り込み,それを実行させるクロスサイト・スクリプティングの手口と対策,および強制ブラウジングの手口と対策を詳しく見ていこう。

 クロスサイト・スクリプティングは,ユーザーのWebブラウザにスクリプトを送り込み,それを実行させる攻撃手法である(図1)。セッションIDを盗むのに使われることが多い。セッションIDを盗むほかの手口はWebサイトとブラウザの間の通信をSSLで暗号化していれば防げるが,クロスサイト・スクリプティングはSSLを使っていても防げない。

図1●クロスサイト・スクリプティングでセッションIDを盗まれる<br>Webページに含まれるスクリプトは,そのWebページに関係する情報しか操作できない。そこでスクリプトを攻撃対象のWebサイトとの間で往復させ,セッションIDを盗んだりする。
図1●クロスサイト・スクリプティングでセッションIDを盗まれる
Webページに含まれるスクリプトは,そのWebページに関係する情報しか操作できない。そこでスクリプトを攻撃対象のWebサイトとの間で往復させ,セッションIDを盗んだりする。
[画像のクリックで拡大表示]

 ほとんどのWebアプリはCookie(クッキー)というテキスト形式のデータでセッションIDを管理している。クロスサイト・スクリプティングが標的にするのはこのCookieだ。盗んだCookieをクラッカが使えば,どのパソコンからでも正規ユーザーになりすまして狙ったWebサイトに不正アクセスできてしまう。手口を細かく見ていこう。

スクリプトでCookieを抜き取る

 クロスサイト・スクリプティングでは,クラッカは直接スクリプトを送り込まずに,わざわざ攻撃目標のWebサイトを経由させてスクリプトを送り込む。このようにややこしい手口を使うのには理由がある。クラッカの意図が,自分が狙ったWebサイトがエンドユーザーに送り出す情報を盗んだり,Webページを書き換えることにあるからだ。そこでクラッカは,狙いをつけたWebサイトをいったん経由させる形でスクリプトを送り込むのだ。こうすれば,スクリプトはそのWebサイトのCookieにアクセスできる。

 クラッカはまず,クラッカのWebサイトからリンクにスクリプトを紛れ込ませたWebページをダウンロードさせる(図1の1)。リンクには標的のサイトの書き込み用Webページを指定して,URLに続く書き込み用の値としてスクリプト・コードを潜ませる。

 だまされたエンドユーザーがこのリンクをクリックすると,クラッカが狙ったWebサイトへの書き込みとしてスクリプトが送り込まれる(同2)。Webサイトが受け取ったパラメータをそのまま書き込みとして受け付けると,ユーザーにスクリプト付きのWebページが返ってくる(同3)。このスクリプトが起動して悪さをするわけだ。

 このようにしてクラッカが実行させたスクリプトは,経由したWebサイトに関するセッションIDを含むCookieに自由にアクセスできる。そこで,アクセスしたCookieをクラッカの用意したWebサイトに書き込ませるなどの方法で盗み出す(同4)。

サイト側の文字列チェックで防ぐ

 クロスサイト・スクリプティングは,クロスサイト・リクエスト・フォージェリと同じで,クラッカが用意したWebページを正規ユーザーに表示させることから始まる。一見Webブラウザ側に問題があるように見えるが,本当の問題は狙われたWebサイト側にある。Webサイト側でクロスサイト・スクリプティング対策をしていれば,セッション情報が盗まれることはない。

 対策は,Webアプリがスクリプトとなる文字列を検出すること。SQLインジェクションと同様に,入力文字列をチェックし,問題となる文字をサニタイジングする。不要な文字ならブロックし,表示に必要なら表示用の別の文字列に変換するわけだ。  クロスサイト・スクリプティングによる攻撃は,最近では目立たない。しかし今でも,対策に不備があるWebサイトは少なくない。