ポイント

●Webアプリケーションが持つクロスサイト・スクリプティングの脆弱性が利用されると,ユーザーのCookieが詐取されたりする攻撃が成り立つ。
●Cookie情報の詐取と,ソーシャル・エンジニアリングやフィッシング(詐欺の手口)が組み合わさって,被害に及ぶケースもある
●このような被害を出さないようにするには,開発者は脆弱性の無いWebアプリケーションを開発する必要がある。ユーザーは,フィッシング詐欺などへの対策と同様に,「信頼のおけないリンクはむやみにクリックしない」「不審なURLにはアクセスしない」などの習慣を身につけておく必要がある

 今回は,クロスサイト・スクリプティングの後編です。最初に「クロスサイト・スクリプティング前編」で確認した事項を簡単に復習しておきましょう。

◆Cookieは,Webサイトが発行したテキスト・データです。セッション情報や認証情報などが記述されており,ユーザーPCのブラウザに保存されます。基本的に,この情報を利用できるのは発行したWebサイトだけです。
◆実験用に作った買い物サイト(192.168.1.12)のWebアプリケーションに脆弱性が無い場合(ユーザーから送信されるデータに半角<>などの制御文字列が含まれていたとき適切に処理できる場合)は,ユーザーのブラウザに文字列がそのまま表示されます。
◆買い物サイト(192.168.1.12)のWebアプリケーションに,脆弱性がある場合は,ユーザーのブラウザは<>を制御用の文字と認識し,スクリプトを実行してしまいます。

 前回の前提部分をまだ読んでいない方は,『脆弱性を利用した攻撃手法(2) --- Webアプリケーションを突く攻撃』と,『脆弱性を利用した攻撃手法(5)--クロスサイト・スクリプティング(前編)』に目を通しておいてください。

買い物サイトのCookieを他サイトに送る

 Cookieは,基本的に発行したサイトしか利用できない,と勉強しました。例えば,今回の実験環境(前編参照)ですと,ユーザーPCが保持している「買い物サイト(192.168.1.12)」のCookieは,「買い物サイト(192.168.1.12)」しか利用できません。他サイトが,ユーザーPCが保持している買い物サイトのCookieに,直接アクセスすることはできないのです。

 しかし,発行元(買い物サイト)から指示を受けた場合は,他サイトにCookie情報を送ってしまいます。試してみましょう。

 悪意の情報収集サイト(192.168.1.17:以下悪意サイト)を準備します。このサイトは,送られてきた情報を受け取るように出来ています。

 ユーザーは買い物サイトにアクセスして,ご注文内容の欄に図1のように記入し,購入ボタンを押します。ご注文内容欄の中身は,「192.168.1.17(悪意サイト)にCookieを書き込むスクリプトを実行」という内容です。

図1●「192.168.1.17(情報収集サイト)にCookieを書き込むスクリプト実行」という内容を買い物サイトに送信する
図1●「192.168.1.17(情報収集サイト)にCookieを書き込むスクリプト実行」という内容を買い物サイトに送信する [画像のクリックで拡大表示]

 すると,この情報が買い物サイトに送られます(図2(1))。買い物サイト上で動作しているWebアプリケーションには脆弱性があり,<や>などの制御文字を変換せずに,そのまま送り返します(2)。ユーザーのWebブラウザは,これを制御文字と認識してスクリプトを実行します(3)。

図2●買い物サイトから指示を受ける形になるため,買い物サイトのCookieを他のサイトへ送信してしまう
図2●買い物サイトから指示を受ける形になるため,買い物サイトのCookieを他のサイトへ送信してしまう [画像のクリックで拡大表示]

 本来の使い方だと,買い物サイト(192.168.1.12)で利用しているCookieを,他のサイト(192.168.1.17)に送信することはありませんが,今回のケースではCookieの発行元である買い物サイト(192.168.1.12)とのやり取りの中で指示された形になっています。このため,ブラウザは今利用している買い物サイトのCookieを192.168.1.17へ送信してしまいます(4)。

 悪意サイトが情報を収集した様子が図3です。前編で確認した,ユーザーPCが利用している買い物サイトのCookieの中身が表示されています。

図3●情報収集サイトがユーザーPCにあった買い物サイトのCookieを詐取した様子
図3●情報収集サイトがユーザーPCにあった買い物サイトのCookieを詐取した様子
[画像のクリックで拡大表示]