公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
シナリオ4 は、悪意のサイトのコンテンツにブラウザが操られ、ユーザの意思に反して善意のAPI への攻撃が起こるというものである。このシナリオで考えられる攻撃には「リクエスト強要攻撃」がある。本節では、クライアントサイドマッシュアップの状況におけるリクエスト強要攻撃について論じる。
リクエスト強要攻撃は、罠のコンテンツを用いてブラウザを誘導し、ユーザの意思に反した HTTPリクエストを善意のWebサーバへ送信させる攻撃である。ユーザ本人の望まない「更新系」のトランザクションが投入され、被害が生じる。
これまで注意深いWebアプリケーション開発者の間では、サーバにおける「更新系」の処理について「リクエスト強要攻撃」が警戒され、対策がとられてきた。対策が「更新系」に限定されていたのは、従来型のWebアプリケーションでは「参照系」のトランザクションが投入されても攻撃者がその処理結果を入手することが困難であり、あまり実害が無かったからである。
しかし、クライアントサイドマッシュアップにおいては「非同期の他源泉リクエスト」という手法が多用され、その状況においては「更新系」の処理のみならず、「参照系」の処理についても「リクエスト強要攻撃」への警戒と対策が必要になってきた。
本稿で「非同期の他源泉リクエスト」と呼ぶのは次のような動作を実現するプログラミング手法のことである──
ブラウザ上の JavaScript コード内からその JavaScript コードの出身サーバ ("源泉") とは異なる Web サーバ ("他源泉") へ HTTP リクエストを送ってレスポンスを受け取り、その後も元の JavaScript コードが動作を継続する動作
「非同期の他源泉リクエスト」の実現方法には、これまで次の 5つが知られている。
5種類の「非同期の他源泉リクエスト」方法のそれぞれについて、サーバの「参照系」処理に対する「リクエスト強要攻撃」が情報漏えいを引き起こす模様を想定してみる。
JSONP におけるリクエスト強要攻撃は下記の図のように行われる。
善意のサーバ (サーバB) のセッションが Cookie で維持されている状況下で、悪意のサーバのコンテンツが正常系と同様の JSONP 手法を用い、サーバBからデータを不正に入手する。
ここでは次を仮定している。
ブラウザがサーバBの有効なセッションID の Cookie をもっている
iframeコールにおけるリクエスト強要攻撃は下記の図のように行われる。
善意のサーバ (サーバB) のセッションが Cookie で維持されている状況下で、悪意のサーバのコンテンツが正常系と同様の iframe コール手法を用い、サーバB からデータを不正に入手する。
ここでは次を仮定している。
ブラウザが、サーバB の有効なセッションIDのCookieをもっている(XHR1 でも Cookie が飛ぶ)
サーバBの iframeコンテンツに対して孫iframe にロードさせるコンテンツのURIをパラメタで指定できるが、その妥当性に関するサーバBにおける検査が甘い
iframe+postMessageにおけるリクエスト強要攻撃は下記の図のように行われる。
善意のサーバ(サーバB)のセッションが Cookie で維持されている状況下で、iframe 子要素が親要素へ postMessage でデータを受け渡してくるのをそのまま受け取り、悪意のサーバがデータを不正に入手する。
ここでは次を仮定している。
ワーカ+importScripts におけるリクエスト強要攻撃は下記の図のように行われる。
善意のサーバ(サーバB)のセッションが Cookie で維持されている状況下で、悪意のサーバのコンテンツが importScripts を使用して、サーバB からデータを不正に入手する。
ここでは次を仮定している。
XHR2 におけるリクエスト強要攻撃は下記の図のように行われる。
善意のサーバ(サーバB)のセッションが Cookie で維持されている状況下で、悪意のサーバのコンテンツが XHR2 を使用して、サーバB からデータを不正に入手する。
ここでは次を仮定している。
どのリクエスト手段もリクエスト強要攻撃の餌食になり得る。「非同期の他源泉リクエスト」の 5つの方法それぞれのリクエスト強要攻撃への耐性を一覧にすると次のようになる 。
XHR2(XMLHttpRequest level 2)は「非同期の他源泉リクエスト」の 5つの方法の中でも比較的強固である。XHR2 の通信上の特徴は、HTTPリクエストおよびレスポンスの中で次のようなヘッダを用いるというものである。
上記のヘッダ群を用いて、XHR2 はセキュリティ確保のための振る舞いをする。主なものは次の3つである。
XHR2 を用いた他源泉リクエストの通信の流れを次に示す。
セキュリティの配慮がある XHR2 であっても、次のような条件が成立する場合にはリクエスト強要攻撃が成立し得る。