Part3では,ログイン中のエンドユーザーのパソコンをスクリプトで操る「クロスサイト・リクエスト・フォージェリ」という手口が,いったいどんな攻撃か,細かく見てみよう。
クラッカが正規ユーザーの意図に反してWebアプリを勝手に操作する攻撃がある。Webサイトはユーザーを,IDとパスワードの組や,セッションIDと呼ぶ情報で識別している。クラッカがWebアプリを勝手に操作するには,ユーザーのIDとパスワードやセッションIDを盗む必要があると思うかもしれないが,それは間違い。これらを盗まなくても,ログイン中のエンドユーザーのパソコンをスクリプトで操る「クロスサイト・リクエスト・フォージェリ」という手口を使えば,会員を偽って不正アクセスができる。
クロスサイト・リクエスト・フォージェリによる攻撃は,会員制サイト「mixi(ミクシィ)」で実際に発生した。書き込まれた内容が他愛もないもので,mixiの対応も素早かったため,深刻な被害は出なかった。しかし,これが金品を取引するサイトを対象とした攻撃だったなら,クラッカが勝手に口座振替をしたり決済したりして深刻な被害が広がる可能性がある。クロスサイト・リクエスト・フォージェリがいったいどんな攻撃か,細かく見てみよう。
巧妙にスクリプトを送り込む
クロスサイト・リクエスト・フォージェリの手口を一言で説明すると,勝手にWebアプリにアクセスするスクリプトを,ログイン中のエンドユーザーのパソコンに送り込んで起動させること――である。mixiの実例をベースに手口を追ってみよう(図1)。
クラッカがクロスサイト・リクエスト・フォージェリを成功させるには,悪意のあるスクリプト付きのWebページをエンドユーザーにダウンロードさせる必要がある。そうはいっても,そうした怪しげなWebページはなかなかアクセスされない。そのためにクラッカはさまざまな手を尽くす。
mixiのケースでは,まずクラッカは,有名な掲示板サイトに気を引く言葉とともに罠を仕掛けたリンクを書き込んだ(図1の1)。被害に遭ったユーザーは,たまたまこの掲示板の書き込みを見た(同2)。表示された記事に掲載されたリンクのURLは,検索サイトを示すドメイン名で始まっている。URLをちょっと見ただけでは,検索結果が表示されると勘違いしてしまう。
しかしこのリンクは,検索サイトのリダイレクト機能を使っていた。ユーザーがリンクをクリックすると(同3),いったん検索サイトにアクセスする。アクセスを受け付けた検索サイトは,URLの後半にあるリダイレクトを示すパラメータを読み取ると,そこに指定されたクラッカのWebサイトにWebページをリダイレクトしてしまう(同4)。結果としてユーザーのパソコンには,クラッカが用意したスクリプト入りのWebページがダウンロードされる(同5)。
ログイン中なら認証チェックはパス
ユーザーのパソコンに送り込まれたスクリプトは,そのユーザーのmixiの日記に特定の文字列を勝手に書き込むようにできていた(同6)。
mixiを使うときの一般的な手順は,mixiにログインして,表示されたメニュー画面から日記入力画面を選び,そこから書き込むという格好になる。それに対してスクリプトは,こうした手順をすべて飛ばして,直接日記を書き込むようになっていた。mixiが用意する日記入力画面からのアクセスと同じ形式でHTTPリクエストを送信していた。
ユーザーがmixiにログインを済ませた状態でWebブラウザを使っていれば,mixiは新たにログインを要求しない。ログイン中の正規会員からのものだと判断して,スクリプトからの書き込みを受け付けてしまったわけだ。