Same-Originポリシ・クロスサイトリクエストフォージェリ【情報処理安全確保支援士試験 平成31年度 春期 午後1 問1 No.1】

情報処理安全確保支援士試験 平成31年度 春期 午後1 問1 設問1

【出典:情報処理安全確保支援士試験 平成31年度 春期 午後1問1(一部、加工あり)】

問1 Webサイトのセキュリティに関する次の記述を読んで、設問1〜3に答えよ。

 M社は、従業員数200名の小売業である。コーポレートサイトであるWebサイトA(URLは、https://site-a.m-sha.co.jp/)と、自社の特定のブランドを取り扱うECサイト(以下、ブランドサイトという)を複数運営している。現在運営しているブランドサイトは、WebサイトBからWebサイトFの五つである。Webサイトの開発や運用は自社の開発部で行なっている。
 WebサイトAは、ブランドサイト全体のポータルサイトでもあり、各ブランドのキャンペーン情報などを掲載している。会員専用の機能は有していない。
 WebサイトB(URLは、https://site-b.m-sha.co.jp)は、ブランドBの商品を扱うECサイトで、会員数は10万名である。WebサイトBでは、Cookieを利用したセッション管理を行っている。
 会員情報は、各ブランドサイトで個別に管理している。

【各ブランドサイトからWebサイトAへの情報連携】
 今回、各ブランドサイトの売上数を基にした、ブランド別の売れ筋商品情報を、WebサイトA上で表示するとともに、希望があれば、各ブランドサイトの会員に電子メールでも定期的に配信することにし、そのために売れ筋商品情報及び会員情報を取得する機能(以下、情報連携機能という)を実装することにした。具体的な機能は次のとおりである。

機能1 WebサイトAが各ブランドサイトの売れ筋商品情報を取得する。
機能2 希望する会員に電子メールを配信するために、WebサイトAは、当該会員の会員情報を取得する。
    なお、配信の申込みは、WebサイトA上で行う。

 情報連携機能の実装は、開発部のCさんが中心になって進めることになった。まず初めにWebサイトBからWebサイトAへの情報連携を行うために、次の二つのWebAPIをWebサイトBに実装することにした。

  • WebサイトBの売れ筋商品情報を取得可能とするためのWebAPI(以下、API-Xという)
  • WebサイトBの会員情報を取得可能とするためのWebAPI(以下、API-Yという)

 なお、WebAPIで受け渡されるデータは、JSON(JavaScript Object Notation)形式にする。Cさんは、API-Yからブランドサイトの会員情報を取得する際、配信を希望する会員の同意を得たいと考えた。そこで、会員情報の取得には、会員のWebブラウザを経由して行う方式を採用することにした。
 WebサイトBからWebサイトAへの情報連携機能を図1に示す。


【情報連携機能の実装についての検討】
 スクリプトZは、(a:Same-Origin)ポリシによって、(b:FQDN)、(c:スキーム)、(d:ポート番号)のいずれかが異なるリソースへのアクセスが制限される。そこで、Cさんは、この制限をう回するためにJSONP(JavaScript Object Notation with Padding)を用いることを開発部のD課長に提案した。次は、その時の会話である。

Cさん:API-Yからの会員情報の取得にJSONPを用いるつもりです。
D課長:JSONPは、アクセス先を制限する機能をもたないので、その実装では問題がある。例えば、まず、会員情報を窃取するように攻撃者がスクリプトZを変更して、攻撃者のWebサイトのページに置く。次に、被害者に①特定の操作をさせた上で、そのページにアクセスさせると、攻撃者が被害者の会員情報を窃取できてしまう。
Cさん:JSONPの代わりに何の技術を用いればよいでしょうか。
D課長:CORS(Cross-Origin Resource Sharing)を用いるのがよいだろう。

a:Same-Origin、b:FQDN、c:スキーム、d:ポート番号

 スクリプトZは、WebサイトAからWebブラウザに返され、WebサイトBにリクエストするものです。
 WebブラウザのJavaScript実行環境においては、あるWebサイトのスクリプトから、そのサイトとは異なるドメインのWebサイトのデータは読み込むことはできません。
 これをSame-Originポリシ(SOP、同一生成元ポリシ、同一オリジンポリシ)といいます。
 同一かどうかチェックするパラメータは、URLに含まれるスキーム、FQDN、ポート番号です。
 「WebサイトA(URLは、https://site-a.m-sha.co.jp/)」と「WebサイトB(URLは、https://site-b.m-sha.co.jp)」では、FQDNが異なり、同一オリジンではない(クロスオリジンという)ことになります。

①について、操作の具体的内容を、20字以内で答えよ。:WebサイトBへのログイン

 会員情報を窃取するには、ユーザがログインした状態であることが前提になります。
 この代表的な攻撃はクロスサイトリクエストフォージェリです。
 この問題の場合、被害者がWebサイトBにログインした状態で攻撃者のWebサイトにアクセスさせることで、偽スクリプトZを実行させます。これによりWebサイトBから被害者の会員情報を窃取できてしまいます。
 問題文に「WebサイトBでは、Cookieを利用したセッション管理を行っている。」とあるように、会員情報を識別するためにCookieを利用しているようです。