今週のSecurity Check 第207回

 インターネット上のWebサイトでグループウエアやERP(統合基幹業務)といった業務アプリケーションを提供するサービスが注目を集めている。いわゆるSaaS(software as a service)だ。ユーザーは,インターネット回線さえあればいつでもアプリケーションを利用できる。

 このようなサービスを利用する際,サービス提供者の情報漏えい対策が気になるIT管理者は少なくないだろう。ただ実際には,ユーザーは複数のサービス提供事業者のサービス,自社のシステムを組み合わせて利用するケースが多くなる。もちろん,取引先などのシステムとの連携も考えられる。こうした環境に備えるなら,提供者側のセキュリティ・レベルに注意するだけでなく,ユーザー側で可能な限り対策を施すことが重要になる。

 そこで今回は,様々なWebアプリケーションを連携させる際に使われるJSON(JavaScript object notation)という技術を悪用する攻撃,「JSONハイジャック」について紹介しよう。JSONはWebサーバーとブラウザの間のデータ交換フォーマットで,RFC 4627に仕様が記述されている。名前にある通りJavaScriptを使って容易にデータを扱えるため,Ajax(asynchronous JavaScript+XML)によるWebアプリケーション環境でのデータ送受信によく利用されている。

 JSONハイジャックは,このデータ交換の際に攻撃者がユーザーになりすまし,Webサイト上の機密情報を盗む攻撃である。うまく誘導されると,ユーザーは気付かないうちに情報を盗み取られてしまう。

図1●JSONデータの利用イメージ
[画像のクリックで拡大表示]

 攻撃者がJSONデータをどのように盗み取るのか,見ていこう。前提として,攻撃者は悪意のあるサイトに被害者を誘導する必要がある。

 まずはサービス利用者のパソコンではブラウザを起動して,SaaSなどのWebアプリケーションを使って業務をしている状況をイメージしてほしい。そこにサービス提供者を装った偽メールが届くとする。「サービスについての重要なお知らせ」と題した,いわゆるフィッシング・メールである。

図2●悪意のあるサイトへの誘導
[画像のクリックで拡大表示]

 このフィッシング・メールに含まれるURLへのリンクをクリックすると,ユーザーは悪質サイトに誘導される。すると悪質サイトは悪意のあるコンテンツを返す。このコンテンツには,JavascriptのObject関数と外部ファイルの取り込みに使用されるscriptタグが含まれる。

 scriptタグにはサービス提供者のWebサイト上にあるJSONデータへのURLが含まれるため,このコンテンツを受け取ったブラウザは自動的にJSONデータを取得する。Object関数内には,取得したJSONデータを悪質サイトに送信するコードが含まれているため,ブラウザがJSONデータを自動的に悪質サイトに送信してしまう。

図3●JSONハイジャック攻撃概要
[画像のクリックで拡大表示]