‹ ぱすてく

情報処理安全確保支援士試験

平成31年度 春期 午後Ⅰ(旧試験)

平成31年度 春期に実施された情報処理安全確保支援士試験 午後Ⅰの全3問(記述式)の全設問に,運営者が独自に書いた解説を付けています。事例本文のどこが根拠になるかを示し,IPA の解答例・採点講評と並べています。

この試験について:情報処理安全確保支援士試験について

この年度を解いてみる

問1 Web サイトのセキュリティ

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

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 上で表示するとともに,希望があれば,各ブランドサイトの会員に電子メールでも定期的に配信することにし,そのために売れ筋商品情報及び会員情報を取得する機能(以下,情報連携機能という)を実装することにした。具体的な機能は次のとおりである。

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

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

Web サイト B から Web サイト A への情報連携機能を図1に示す。

Web サイト A,Web サイト B(API-X と API-Y を含む),Web ブラウザ(スクリプト Z を含む)の関係図。Web サイト A と Web サイト B の API-X の間:(X-1) 売れ筋商品情報取得リクエストが送られる。(注1)(X-2) 売れ筋商品情報が返される。Web サイト A と Web ブラウザの間:(Y-1) 会員が売れ筋商品情報配信の申込ページにアクセスする。(注2)(Y-2) 申込ページに加え,Web サイト B の API-Y を呼び出すスクリプト Z が返される。(Y-3) 会員が申込みを行う(Web ブラウザ側)。Web ブラウザのスクリプト Z と Web サイト B の API-Y の間:(Y-4) 会員情報を取得するリクエストがスクリプト Z から送られる。(Y-5) 会員情報が返される。(注3)(Y-6) 会員情報が Web ブラウザに表示される。(注4)(Y-7) 申込情報と会員情報が Web サイト A に送られ,保存される。注1) API-X では,Web サイト A からだけアクセスできるように,接続元の IP アドレスを制限する。注2) 会員が Web サイト B にログインした状態のときにアクセスする。注3) 会員情報が得られない場合,エラーを返す。注4) (Y-5) でエラーが返ってきた場合,Web サイト B にログイン後再度操作を行うよう促す。
図1 Web サイト B から Web サイト A への情報連携機能

〔情報連携機能の実装についての検討〕

スクリプト Z は,a ポリシによって,b,c,d のいずれかが異なるリソースへのアクセスが制限される。そこで,C さんは,この制限をう回するために JSONP(JavaScript Object Notation with Padding)を用いることを開発部の D 課長に提案した。次は,その時の会話である。

〔CORS の概要〕

CORS とは,ある Web サイトから他の Web サイトへのアクセスを制御することができる仕組みである。XMLHttpRequest を使って“https://test2.example.com/test”にリクエストを送るスクリプトの例を図2に示す。

枠内のスクリプト(4行)。1行目 var xhr = new XMLHttpRequest(); 2行目 xhr.open('GET', 'https://test2.example.com/test', true); 3行目 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 4行目 xhr.send(null);
図2 XMLHttpRequest を使ったスクリプトの例

Web ブラウザが“https://test1.example.com/”にアクセスし,図2のスクリプトを含むページを読み込んだとする。図2のスクリプトが実行されると,最初に Web ブラウザは“https://test2.example.com/test”にプリフライトリクエストと呼ばれるリクエストを送る。そうすると,実際のリクエスト(以下,メインリクエストという)で許可されるメソッド名やヘッダフィールド名などがレスポンスとして返る。その後,メインリクエストを送り,レスポンスが返る。この一連の動作を図3に,また,図3中の(ⅲ)~(ⅵ)のリクエストとレスポンスの先頭部分の例を図4~図7に示す。

test1.example.com,Web ブラウザ,test2.example.com の3者のシーケンス図。(ⅰ)Web ブラウザから test1.example.com へ アクセス。(ⅱ)test1.example.com から Web ブラウザへ スクリプト。(ⅲ)Web ブラウザから test2.example.com へ プリフライトリクエスト。(ⅳ)test2.example.com から Web ブラウザへ レスポンス。(ⅴ)Web ブラウザから test2.example.com へ メインリクエスト。(ⅵ)test2.example.com から Web ブラウザへ レスポンス。
図3 一連の動作
枠内:OPTIONS /test HTTP/1.1 / Host: test2.example.com / Access-Control-Request-Method: GET(注1)/ Access-Control-Request-Headers: x-requested-with(注2)/ Origin: https://test1.example.com(注3)。注1) Access-Control-Request-Method には,メインリクエストで利用したいメソッド名を指定する。注2) Access-Control-Request-Headers には,メインリクエストで利用したいヘッダフィールド名を指定する。注3) Origin は,スクリプトを含むページのオリジンであり,Web ブラウザが付与している。
図4 (ⅲ)のリクエストの先頭部分の例(抜粋)
枠内:HTTP/1.1 200 OK / Access-Control-Allow-Origin: https://test1.example.com(注1)/ Access-Control-Allow-Methods: GET, POST, OPTIONS(注2)/ Access-Control-Allow-Headers: x-requested-with(注3)。注1) Access-Control-Allow-Origin には,Web サイトが許可するオリジンが返される。注2) Access-Control-Allow-Methods には,Web サイトが許可するメソッド名が返される。注3) Access-Control-Allow-Headers には,Web サイトが許可するヘッダフィールド名が返される。
図5 (ⅳ)のレスポンスの先頭部分の例(抜粋)
枠内:GET /test HTTP/1.1 / Host: test2.example.com / X-Requested-With: XMLHttpRequest / Origin: https://test1.example.com
図6 (ⅴ)のリクエストの先頭部分の例(抜粋)
枠内:HTTP/1.1 200 OK / Access-Control-Allow-Origin: https://test1.example.com
図7 (ⅵ)のレスポンスの先頭部分の例(抜粋)

また,CORS では通常,Web ブラウザは,スクリプトを読み込んだページのオリジンだけに Cookie や,ベーシック認証の情報を送る。図2では設定していないが,XMLHttpRequest のプロパティの withCredentials の値が true に設定されている場合,図3であれば,e の動作の際に,test2.example.com から発行された Cookie が送られる。

〔CORS を利用した実装〕

C さんは,スクリプト Z の実装に CORS を用いたときの一連の動作を検討し,表1にまとめた。

No. と内容の2列の表。1:Web ブラウザは,Web サイト A の売れ筋商品情報配信の申込ページにアクセスする。2:Web サイト A は,Web サイト B の API-Y を呼び出すスクリプト Z を含むページをレスポンスとして返す。3:Web ブラウザは,会員が申込みを行うと,Web サイト B にプリフライトリクエストを送信する。プリフライトリクエストは,OPTIONS メソッドの呼出しであり,Origin ヘッダフィールドには“https://site-a.m-sha.co.jp”が設定されている。4:API-Y は,送られてきたリクエストに Origin ヘッダフィールドが存在する場合,Access-Control-Allow-Origin ヘッダフィールドを付加し,レスポンスを返す。Access-Control-Allow-Origin ヘッダフィールドの値は,“[ f ]”である。Origin ヘッダフィールドが存在しない場合,エラーを返す。5:Web ブラウザは,[ g ] と Access-Control-Allow-Origin ヘッダフィールドの値を照合し,アクセスが許可されていることを確認する。許可されている場合は,次の処理に進む。確認できない場合は,メインリクエストを送らずに終了する。(省略)9:スクリプト Z は,受け取った JSON 形式の値を変数に格納し,表示する。さらに,受け取った値は Web サイト A に送られ,保存される。
表1 スクリプト Z の実装に CORS を用いたときの一連の動作

C さんは,表1について D 課長に確認した。次は,その時の D 課長と C さんの会話である。

C さんは,CORS の利用に関するコーディング規約をまとめ,表1をこれに合うように修正し,D 課長に再度確認した。修正後の内容で問題ないということだったので,C さんは実装を行った。

その後,セキュリティ専門業者に脆弱性診断を依頼し,脆弱性が検出されないことを確認した上で,情報連携機能をリリースした。その後,同様に残り四つのブランドサイトから Web サイト A への情報連携機能も実装した。

出題趣旨(IPA)

Webサービスには,Webブラウザから利用するものだけでなく,サービスの機能の一部をプログラムからWeb APIとして利用するものもある。あるWebサイトから読み込まれたスクリプトが異なるオリジンのWeb APIにアクセスする場合,Same-Originポリシによって制限される。CORS(Cross-Origin Resource Sharing)を利用すれば制限を回避することができるが,セキュリティを考慮して実装する必要がある。本問では,小売業が運営しているWebサイトでの情報連携を題材に,Web APIを設計する能力を問う。

採点講評(問全体・IPA)

問1では,Webサイト間の情報連携を題材に,Same-OriginポリシとCORS(Cross-Origin Resource Sharing)を用いた実装について出題した。

設問と解答例

設問1(1) 解答欄1つ

本文中の a に入れる適切な字句を答えよ。

〔a〕解答例

  • Same-Origin
解説

本文の根拠

〔情報連携機能の実装についての検討〕

スクリプト Z は,a ポリシによって,b,c,d のいずれかが異なるリソースへのアクセスが制限される。

〔情報連携機能の実装についての検討〕

この制限をう回するために JSONP(JavaScript Object Notation with Padding)を用いることを開発部の D 課長に提案した。

スクリプトを読み込んだページとは異なるオリジンのリソースへのアクセスを,Web ブラウザが制限する仕組みは,Same-Origin ポリシである。本文は,スクリプト Z が Web サイト A のページ上で動き,Web サイト B の API-Y にアクセスする場面なので,このポリシによる制限を受ける。JSONP や CORS は,この制限をう回する,又は緩和する側の技術である。

本文に b~d が“のいずれかが異なる”と並んでいるとおり,a には“オリジン(スキーム,ホスト,ポート番号の組)が同じであること”を条件とするポリシが入る。本文が JSONP を“この制限をう回するために”用いると述べている点が手がかりになる。

字数制限は無く,語を答える設問である。“Same-Origin”のように,Origin を含む用語で書く。“CORS”と答えるのは取り違えで,CORS はこのポリシの制限を,許可するオリジンを明示して緩める仕組みである(講評は,用語とその意味を適切に理解しておくよう求めている)。

採点講評(IPA)

設問1(1),(2)は,正答率が低かった。WebサイトAとWebサイトBのオリジンが異なるので,Same-Originポリシによって,アクセスは制限される。用語とその意味を適切に理解しておいてほしい。

設問1(2) 解答欄3つ

本文中の b ~ d に入れる適切な字句を解答群の中から選び,記号で答えよ。解答群 ア Cookie イ FQDN ウ Location ヘッダフィールド エ Referer ヘッダフィールド オ User-Agent ヘッダフィールド カ 時刻 キ スキーム ク ポート番号

〔b〕解答例

  • イ

〔c〕解答例

  • キ

〔d〕解答例

  • ク

〔備考〕順不同

解説

本文の根拠

〔情報連携機能の実装についての検討〕

スクリプト Z は,a ポリシによって,b,c,d のいずれかが異なるリソースへのアクセスが制限される。

表1 No.3

Origin ヘッダフィールドには“https://site-a.m-sha.co.jp”が設定されている。

図1 注2)

会員が Web サイト B にログインした状態のときにアクセスする。

オリジンは,URI のスキーム,ホスト,ポート番号の三つの組で決まる(RFC 6454 の 4 節)。二つのオリジンが“同じ”であるのは,この三つが全て同じ場合に限られる(同 5 節)。したがって b~d には,解答群の中から“スキーム(キ)”,“FQDN(イ,ホスト名)”,“ポート番号(ク)”が入り,三つの順序は問われない(解答例の備考は“順不同”)。

本文の例では,Web サイト A のオリジン“https://site-a.m-sha.co.jp”と,Web サイト B のオリジン“https://site-b.m-sha.co.jp”とでスキーム(https)とポート番号(https の既定の 443)は同じで,FQDN だけが違う。このように三つのうち一つでも違えば,異なるオリジンとして制限される。

誤りの選択肢は,Cookie,Location ヘッダフィールド,Referer ヘッダフィールド,User-Agent ヘッダフィールド,時刻で,どれもオリジンを構成する要素ではない。なお,パスはオリジンに含まれない。講評が“用語とその意味を適切に理解しておいてほしい”と述べるとおり,オリジンの構成要素は暗記しておく。

採点講評(IPA)

設問1(1),(2)は,正答率が低かった。WebサイトAとWebサイトBのオリジンが異なるので,Same-Originポリシによって,アクセスは制限される。用語とその意味を適切に理解しておいてほしい。

設問1(3) 20字以内

本文中の下線①について,操作の具体的な内容を,20 字以内で答えよ。

解答例

  • WebサイトBへのログイン
解説

本文の根拠

〔情報連携機能の実装についての検討〕

まず,会員情報を窃取するように攻撃者がスクリプト Z を変更して,攻撃者の Web サイトのページに置く。次に,被害者に①特定の操作をさせた上で,そのページにアクセスさせると,攻撃者が被害者の会員情報を窃取できてしまう。

図1 注2)

会員が Web サイト B にログインした状態のときにアクセスする。

図1 注3)

会員情報が得られない場合,エラーを返す。

API-Y は,会員がログインした状態のときにだけ会員情報を返し,ログインしていなければエラーを返す仕様である(図1 の注2,注3)。ログイン状態は Web サイト B の Cookie によるセッション管理で保たれている。JSONP では,攻撃者のページに置いたスクリプトを被害者のブラウザが実行して API-Y を呼び出すと,被害者の Web ブラウザは Web サイト B の Cookie を付けて API-Y にアクセスし,会員情報が返ってしまう。ただし,それは被害者が Web サイト B にログイン済みのときに限られる。したがって,被害者にさせる“特定の操作”は,Web サイト B へのログインである。

攻撃者の側から見ると,被害者を攻撃者のページに誘導するだけでは足りず,その前に被害者が Web サイト B にログインしている必要がある,というのが D 課長の説明の前提である。本文は“被害者に特定の操作をさせた上で,そのページにアクセスさせる”と順序を示している。

字数は 20 字以内で,解答例は“WebサイトBへのログイン”(13 字)。“会員情報を窃取するスクリプトのページにアクセスする”のように,後の“そのページにアクセスさせる”のほうを答える誤りが多い。講評は,攻撃者が被害者の会員情報を窃取する流れを理解できれば解答できる,としている。

採点講評(IPA)

設問1(3)は,正答率が低かった。攻撃者が被害者の会員情報を窃取する流れを理解できれば,解答できる問題であった。

設問2 解答欄1つ

本文中の e に入れる適切な記号を,(ⅲ)~(ⅵ)の中から選び,答えよ。

〔e〕解答例

  • (ⅴ)
解説

本文の根拠

〔CORS の概要〕

XMLHttpRequest のプロパティの withCredentials の値が true に設定されている場合,図3であれば,e の動作の際に,test2.example.com から発行された Cookie が送られる。

図3

(ⅴ)Web ブラウザから test2.example.com へ メインリクエスト。

CORS では,Web ブラウザは通常,スクリプトを読み込んだページのオリジンだけに Cookie 等を送る。withCredentials が true のときは,異なるオリジン(test2.example.com)にも,そのオリジンから発行された Cookie を付けて送ることができる。図3 の一連の動作のうち,実際にリソースを取りに行くリクエストは,(ⅴ)のメインリクエストである。したがって e は(ⅴ)である。

本文は,プリフライトリクエストを“実際のリクエスト(以下,メインリクエストという)で許可されるメソッド名やヘッダフィールド名などがレスポンスとして返る”ための確認と説明している。(ⅲ)は許可の確認であり,Cookie が必要になる実際のリクエストは(ⅴ)である。(ⅳ)・(ⅵ)はレスポンスで,リクエストではない。

選択肢(ⅲ)~(ⅵ)のうち,リクエストは(ⅲ)と(ⅴ)の二つだけなので,まずここまで絞り,本文の“メインリクエスト”の定義に当てはめる。

設問3(1) 解答欄1つ

表1中の f に入れる適切な URL を答えよ。

〔f〕解答例

  • https://site-a.m-sha.co.jp
解説

本文の根拠

表1 No.3

Origin ヘッダフィールドには“https://site-a.m-sha.co.jp”が設定されている。

図5

Access-Control-Allow-Origin: https://test1.example.com

図5 注1)

Access-Control-Allow-Origin には,Web サイトが許可するオリジンが返される。

API-Y は,リクエストの Origin ヘッダフィールドが存在するとき,Access-Control-Allow-Origin ヘッダフィールドを付けて返す。図4・図5 の例では,リクエストの Origin が“https://test1.example.com”のとき,レスポンスの Access-Control-Allow-Origin も同じ“https://test1.example.com”である。表1 の No.3 では,スクリプト Z を含むページは Web サイト A の申込ページなので,Origin は“https://site-a.m-sha.co.jp”であり,No.4 の f には,これと同じ URL(Web サイト A のオリジン)を入れる。

こうして Web サイト A のオリジンだけを許可することで,他のオリジンのページに置かれたスクリプトからは,API-Y の会員情報を読めなくなる。攻撃者のページに置いたスクリプトは,Origin が攻撃者のオリジンになるので許可されない。

間違えやすいのは,“https://site-a.m-sha.co.jp/”のように末尾に“/”を付けたり,パスを加えたりすることである。オリジンはスキーム,ホスト,ポート番号だけで構成され,本文の Origin ヘッダフィールドの例も,図5 の Access-Control-Allow-Origin の例も,パスを含まない。講評は,CORS の仕組みを理解していない解答が散見されたとしている。

採点講評(IPA)

設問3(1)は,CORSの仕組みを理解していない解答が散見された。異なるOriginのリソースにアクセスを許可する際には,CORSを使う場合があるので,理解しておいてほしい。

設問3(2) 30字以内 解答欄1つ

表1中の g に入れる適切な字句を,30 字以内で答えよ。

〔g〕解答例

  • 売れ筋商品情報配信の申込ページのオリジン
解説

本文の根拠

図4 注3)

Origin は,スクリプトを含むページのオリジンであり,Web ブラウザが付与している。

表1 No.5

Web ブラウザは,g と Access-Control-Allow-Origin ヘッダフィールドの値を照合し,アクセスが許可されていることを確認する。

CORS では,Web ブラウザが,API-Y から返された Access-Control-Allow-Origin ヘッダフィールドの値と,スクリプトを含むページのオリジンを照合する。一致すれば次の処理(メインリクエスト)に進み,確認できなければ送らずに終了する。スクリプト Z を含むページは Web サイト A の売れ筋商品情報配信の申込ページ(No.1・2)なので,g は“売れ筋商品情報配信の申込ページのオリジン”である。

Origin ヘッダフィールドは Web ブラウザが付与するので(図4 注3),スクリプトの作者が書き換えることはできない。照合の相手は,スクリプトを含むページのオリジンである。

字数は 30 字以内で,解答例は 20 字。“Web サイト A”とだけ書くと,どのページのオリジンかが曖昧になる。ページ(申込ページ)とオリジンの二つを書く。

設問3(3) 解答欄3つ

本文中の h,i に入れる適切な字句を,それぞれ 20 字以内で,本文中の j に入れる適切な字句を,5 字以内で答えよ。

〔h〕解答例

  • Originヘッダフィールドの値

〔i〕解答例

  • 許可するオリジンのリスト

〔j〕解答例

  • 一致
解説

本文の根拠

〔CORS を利用した実装〕

Access-Control-Allow-Origin ヘッダフィールドに指定できるオリジンは一つだけなので,複数のオリジンからのアクセスを許可するような仕様であった場合に,No. 4 の内容では不十分である。

〔CORS を利用した実装〕

プリフライトリクエスト又はメインリクエストが Web API に送られてきたときに,そのリクエスト中の h を,i と突合し,j した値があればその値を Access-Control-Allow-Origin ヘッダフィールドに設定するという内容もコーディング規約に含めればよいだろう。

Access-Control-Allow-Origin に指定できるオリジンは一つだけなので,複数のオリジンを許可するには,Web API 側で許可するオリジンのリストをもっておき,リクエストに含まれる“Originヘッダフィールドの値”(h)をそのリストと突合し,“一致”(j)した値があれば,その値だけを Access-Control-Allow-Origin に設定して返す。リクエストの Origin をそのまま無条件に返す実装にすると,どのオリジンからのアクセスも許可してしまうので,突合が必要になる。i は,本文で“Web API のプログラム内に,許可するオリジンのリストを用意しておく必要がある”と述べているとおり,“許可するオリジンのリスト”である。

本文は h を“そのリクエスト中の”と限定しているので,h にはリクエストのヘッダのうち Origin の値が入る。リストの項目と値が“一致”したものだけを返すので,j は“一致”の 2 字である。

字数は h,i が 20 字以内,j が 5 字以内。解答例は h=“Originヘッダフィールドの値”(16 字),i=“許可するオリジンのリスト”(12 字),j=“一致”(2 字)。h を“Origin”だけにせず,ヘッダフィールドの“値”まで書く。講評は,本文から正しく読み取れて正答率が高かったとしている。

採点講評(IPA)

設問3(3)は,正答率が高かった。複数のオリジンからのアクセスを許可する場合に,どのように実装すればよいかを,本文から正しく読み取り解答されていた。

出典:平成31年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問1(表記を一部改変)

問2 クラウドサービスのセキュリティ

クラウドサービスのセキュリティに関する次の記述を読んで,設問に答えよ。

U 社は,東京に本社をもつ従業員数 1,000 名の商社である。複数の海外拠点を設置し,海外向けに営業展開している。海外拠点の従業員数は 1 拠点当たり十数名ほどである。

本社の情報システムは,本社の情報システム部が管理しており,各海外拠点の情報システムは,現地の情報システム担当者が管理している。電子メール(以下,メールという)の送受信には,本社ではオンプレミス環境を導入しているが,海外拠点では,P 社が提供するクラウドサービス型 Web メールサービス(以下,メールサービス P という)を利用している。海外拠点では,全ての従業員にスマートフォンとノート PC を貸与している。

〔セキュリティインシデント発生〕

1月10日,送信者が海外拠点 Q の従業員 S さんのメールアドレスである不審なメールを受け取ったという連絡が,S さんとやり取りのあった本社の従業員から情報システム部にあった。情報システム部では,情報処理安全確保支援士(登録セキスペ)である T さんが,調査を担当することになった。T さんが当該メールのヘッダ情報を確認したところ,メールサービス P から送信されたものであった。

海外拠点 Q の情報システム担当者である Y さんによれば,1月10日に S さんのアカウントからの不審なメール送信と考えられる履歴が複数残っているとのことであった。そこで,T さんは,Y さんにメールサービス P の S さんのアカウントを一時的に無効化するよう依頼した。また,会社から貸与された S さんのスマートフォン及びノート PC 並びに S さんのメールボックスには重要情報がなかったことを確認した。T さんが,海外拠点 Q の全従業員のアカウントについて,メールサービス P に残っていた全てのメール送信履歴を Y さんに確認してもらったところ,S さんのアカウント以外に不審なメールの送信履歴はないとのことであった。

〔経緯の調査〕

T さんは,メールサービス P に残っていた海外拠点 Q の全従業員のアカウントのメール送信履歴及び監査ログ,並びに S さんへのヒアリングの結果を Y さんから送付してもらい,調査した。調査結果を図1に示す。

枠内に箇条書き。・1月10日は,S さんはアジアの Z 国に出張中だった。・U 社には,会社から貸与されたノート PC を U 社以外の無線 LAN に接続してはならないというルールがあるが,S さんはそのルールを知らず,その日,出張先のホテルで宿泊客用の無線 LAN(以下,ホテル Wi-Fi という)を利用していた。・ホテル Wi-Fi の SSID は,宿泊客で共通であり,その SSID と事前共有鍵はロビーなどの共有スペースに張り出されていた。・S さんのノート PC(以下,PC-S という)は,IP アドレス及び DNS サーバの情報を DHCP で自動取得する設定になっていた。・S さんは,その日,メールサービス P を利用するために,Web ブラウザのアドレスバーにメールサービス P の FQDN を手入力し,ログインページに利用者 ID とパスワードを入力した。・S さんがメールサービス P にアクセスした時,サーバ証明書が信頼できない旨のエラーは Web ブラウザ上に表示されなかった。・メールサービス P の監査ログに記録されていた S さんの利用者 ID によるログイン記録のうち不審メールが送信されていた時間帯のものは,Z 国,及び S さんが出張していない南米の W 国の IP アドレスからのものだった。
図1 調査結果(抜粋)

T さんが調べたところ,メールサービス P は HTTP over TLS でサービスが提供されている。HTTP でアクセスした場合は HTTP over TLS の URL にリダイレクトされる仕様になっており,HSTS(HTTP Strict Transport Security)は実装されていない。

こうしたことから,T さんは S さんが不正アクセスを受けたと確信し,図2に示す手口(以下,手口 G という)を使って,攻撃者がメールサービス P の S さんの利用者 ID で不正アクセスしたと推測した。

枠内に箇条書き。・攻撃者は,①無線 LAN アクセスポイント,DNS サーバ及び Web サーバを用意した。その DNS サーバには [ a ] の FQDN と [ b ] の IP アドレスとを関連付ける A レコードが設定されていた。(“無線 LAN アクセスポイント”に下線①が付いている)・S さんは,PC-S をホテル Wi-Fi に接続しようとして,攻撃者が用意した無線 LAN アクセスポイントに接続してしまった。・その結果,PC-S に攻撃者が用意した DNS サーバの情報が設定された。・S さんは,Web ブラウザからメールサービス P にアクセスしたつもりだったが,実際には Web ブラウザは②攻撃者が用意した Web サーバに接続していた。S さんは,サーバ証明書が信頼できない旨のエラーが表示されなかったので,その Web サーバに対して,利用者 ID 及びパスワードを入力してしまった。(“攻撃者が用意した Web サーバに接続していた”に下線②が付いている)・攻撃者は盗んだ S さんの利用者 ID 及びパスワードを使ってメールサービス P に不正アクセスした。
図2 手口 G

T さんは,今回のセキュリティインシデントの調査結果を情報システム部長に報告した。情報システム部長は,会社から貸与されたノート PC を U 社以外の無線 LAN に接続してはならないというルールの全社への周知及びメールサービス P の認証方式の強化を T さんに指示した。

〔認証方式の強化〕

情報システム部長からメールサービス P の認証方式の強化について,次の2点が要求された。

T さんが調査したところ,メールサービス P は,単体ではパスワード認証にしか対応していないが,認証連携の機能があることが分かった。認証連携機能を使えば,メールサービス P にアクセスしようとしたときに,他の ID 管理サービスにリダイレクトされ,そこで認証が行われ,認証に成功すると,メールサービス P にアクセスできるようになる。そこで,X 社が提供するクラウドサービス型 ID 管理サービス(以下,IDaaS-X という)が対応している,より強力な認証方式を利用することにした。IDaaS-X では,認証サーバ X を使って利用者を認証する。

IDaaS-X が対応している,より強力な認証方式には,次の2種類がある。

TOTP(Time-based One-Time Password algorithm)用のスマートフォンアプリケーションプログラム(以下,TOTP アプリという)を利用した認証方式

WebAuthn(Web Authentication API)対応の Web ブラウザ及び生体認証対応のオーセンティケータを搭載したデバイスを利用した認証方式

T さんは二つの認証方式について,要求 1 及び要求 2 を満たすことができるかを検討した。

T さんは,まず OTP 認証方式を検討した。IDaaS-X における TOTP アプリ登録処理を図3に,OTP 認証方式の認証処理を図4に示す。

TOTP アプリ,Web ブラウザ(利用者が IDaaS-X にログイン済み),認証サーバ X の3者のシーケンス図。Web ブラウザから認証サーバ X へ“OTP 認証方式の利用登録要求”。認証サーバ X が“共通鍵を生成・登録”する。認証サーバ X から Web ブラウザへ“QR コード(ドメイン,共通鍵)”。Web ブラウザから TOTP アプリへ“カメラで QR コードを読取り”。TOTP アプリが“ドメイン,共通鍵を登録”する。注記 ドメイン:IDaaS-X のドメイン名。
図3 IDaaS-X における TOTP アプリ登録処理
TOTP アプリ,Web ブラウザ(利用者が IDaaS-X に未ログイン),認証サーバ X の3者のシーケンス図。TOTP アプリが“現在時刻,共通鍵から OTP 算出”。Web ブラウザから認証サーバ X へ“認証要求(利用者 ID,パスワード)”。認証サーバ X が“利用者 ID,パスワードの検証”。認証サーバ X から Web ブラウザへ“OTP 要求”。TOTP アプリから Web ブラウザへ“利用者が OTP を入力”。Web ブラウザから認証サーバ X へ“OTP”。認証サーバ X が“利用者 ID に対する共通鍵を選択,現在時刻,共通鍵から OTP を検証”。認証サーバ X から Web ブラウザへ“利用者 ID の認証結果”。
図4 IDaaS-X における OTP 認証方式の認証処理

OTP 認証方式を利用した場合,ログインには時刻によって変化する OTP も必要になるので,パスワードが窃取された場合でも不正ログインを防ぐことが可能となる。しかし,③OTP 認証方式を利用し,かつ,登録処理を正しく行ったとしても,要求 2 を満たすことができないおそれがある。

次に T さんは,パスワードレス認証方式を検討した。IDaaS-X におけるオーセンティケータ登録処理を図5に,認証処理を図6に示す。

オーセンティケータ(注1),Web ブラウザ(利用者が IDaaS-X にログイン済み),認証サーバ X の3者のシーケンス図。Web ブラウザから認証サーバ X へ“オーセンティケータの登録要求”。認証サーバ X が“乱数 c を生成”。認証サーバ X から Web ブラウザへ“利用者 ID,ドメイン,乱数 c”。Web ブラウザからオーセンティケータへ“利用者 ID,ドメイン,H(オリジン b || 乱数 c)”。オーセンティケータが次を行う:生体認証によって,現在の利用者が利用者 ID に結びついていることを確認/利用者 ID とドメインの組みに対して IDc を発行/IDc ごとの公開鍵 K,秘密鍵 K を生成/IDc,利用者 ID,ドメイン,公開鍵 K,秘密鍵 K の組合せを登録/[ c ] を用いて署名 L を生成。オーセンティケータから Web ブラウザへ“IDc,H(ドメイン),公開鍵 K,証明書 A,署名 L”。Web ブラウザから認証サーバ X へ“IDc,H(ドメイン),公開鍵 K,証明書 A,オリジン b,乱数 c,署名 L”。認証サーバ X が次を行う:オリジン b とオリジン s の一致を確認/乱数 c の一致を確認/証明書 A を検証/[ d ] を用いて署名 L を検証/利用者 ID,IDc,公開鍵 K の組合せを登録。凡例 H(A):A のハッシュ値。A || B:A と B を連結。オリジン b:Web ブラウザがアクセスした Web サイトのオリジン。オリジン s:認証サーバ X の Web サイトのオリジン。IDc:利用者 ID とドメインの組みに対して,オーセンティケータごとに発行される ID。署名 L:IDc,H(ドメイン),公開鍵 K,H(オリジン b || 乱数 c)に対するディジタル署名。注1) オーセンティケータには,搭載されたデバイスごとにユニークな公開鍵 A,秘密鍵 A,及び証明書 A が組み込まれている。ここで,証明書 A は,信頼された認証局が発行した,公開鍵 A に対するディジタル証明書である。
図5 IDaaS-X におけるオーセンティケータ登録処理
オーセンティケータ,Web ブラウザ(利用者が IDaaS-X に未ログイン),認証サーバ X の3者のシーケンス図。Web ブラウザから認証サーバ X へ“認証要求(利用者 ID)”。認証サーバ X が“利用者 ID に対する IDc を選択,乱数 c′ を生成”。認証サーバ X から Web ブラウザへ“IDc,ドメイン,乱数 c′”。Web ブラウザからオーセンティケータへ“利用者 ID,IDc,ドメイン,H(オリジン b || 乱数 c′)”。オーセンティケータが次を行う:生体認証によって,現在の利用者が利用者 ID に結びついていることを確認/利用者 ID とドメインの組みに対する IDc 及び [ e ] を取得/[ e ] を用いて署名 M を生成。オーセンティケータから Web ブラウザへ“IDc,H(ドメイン),署名 M”。Web ブラウザから認証サーバ X へ“IDc,H(ドメイン),オリジン b,乱数 c′,署名 M”。認証サーバ X が次を行う:オリジン b とオリジン s の一致を確認/IDc,乱数 c′ の一致を確認/IDc に対する [ f ] を選択/[ f ] を用いて署名 M を検証。認証サーバ X から Web ブラウザへ“利用者 ID の認証結果”。凡例 署名 M:H(ドメイン),H(オリジン b || 乱数 c′)に対するディジタル署名。
図6 IDaaS-X におけるパスワードレス認証方式の認証処理

④パスワードレス認証方式を利用すれば,要求 2 を満たすことができると考えられた。

T さんは,検討結果を情報システム部長に報告した。情報システム部長は,海外拠点 Q におけるメールサービス P へのパスワードレス認証方式の導入を,T さん及び Y さんに指示した。

海外拠点で従業員に貸与しているスマートフォンとノート PC にはオーセンティケータが搭載されていたので,パスワードレス認証方式を速やかに導入することができた。

U 社では,他の海外拠点でのクラウドサービスについても,同様の方式を導入することにした。

出題趣旨(IPA)

近年,クラウドサービスに対するパスワード認証が破られての不正アクセス事件が度々発生している。さらに,利用するサービスが増えると,サービス毎に別々のパスワードを人が記憶することも難しくなるので,クラウドサービス利用においては,認証連携及びより強力な認証方式が必要になってきている。そうした背景もあり,パスワードレス認証方式の標準化が進められている。本問では,クラウドサービスの利用における認証方式の強化を題材に,認証方式の安全性を評価する能力を問う。

採点講評(問全体・IPA)

問2では,クラウドサービスのセキュリティを題材に,通信を攻撃者に中継され得る環境下での認証方式の強化について出題した。

設問と解答例

設問1(1) 30字以内

図2中の下線①について,攻撃者が用意した無線 LAN アクセスポイントには何が設定されていたと考えられるか。設定を 30 字以内で述べよ。

解答例

  • ホテルWi-Fiと同じSSIDと事前共有鍵
解説

本文の根拠

図1

ホテル Wi-Fi の SSID は,宿泊客で共通であり,その SSID と事前共有鍵はロビーなどの共有スペースに張り出されていた。

図2

S さんは,PC-S をホテル Wi-Fi に接続しようとして,攻撃者が用意した無線 LAN アクセスポイントに接続してしまった。

S さんは本物のホテル Wi-Fi に接続しようとして,攻撃者が用意した無線 LAN アクセスポイントに接続してしまっている。PC-S がそちらに接続するのは,攻撃者のアクセスポイントが,ホテル Wi-Fi と同じ SSID と事前共有鍵で設定されていたからだと考えられる。SSID も事前共有鍵も,宿泊客共通のものがロビーなどの共有スペースに張り出されているので,攻撃者も入手でき,同じ設定を再現できる(偽のアクセスポイントを立てる手口である)。

図1 は,SSID と事前共有鍵が宿泊客で共通であり,しかも共有スペースに張り出されていたことを述べている。この二つの条件が,攻撃者が本物と見分けのつかない設定を用意できる根拠である。

字数は 30 字以内で,解答例は“ホテルWi-Fiと同じSSIDと事前共有鍵”(21 字)。“SSID”だけでは不足で,事前共有鍵も同じにしている点まで書く。講評によれば,設問1(1),(2)は全体的に正答率が高かった。

採点講評(IPA)

設問1(1),(2)は,全体的に正答率が高かった。攻撃者の用意した無線アクセスポイントに誘導される仕組みについて十分理解されていた。

設問1(2) 解答欄2つ

図2中の a,b に入れる適切な字句を,本文,図1又は図2中の字句を用いて答えよ。

〔a〕解答例

  • メールサービスP

〔b〕解答例

  • 攻撃者が用意したWebサーバ
解説

本文の根拠

図2

攻撃者は,①無線 LAN アクセスポイント,DNS サーバ及び Web サーバを用意した。その DNS サーバには a の FQDN と b の IP アドレスとを関連付ける A レコードが設定されていた。

図2

S さんは,Web ブラウザからメールサービス P にアクセスしたつもりだったが,実際には Web ブラウザは②攻撃者が用意した Web サーバに接続していた。

A レコードは,FQDN と IP アドレスを関連付ける DNS のレコードである。S さんは Web ブラウザにメールサービス P の FQDN を手入力してアクセスしたが,実際には攻撃者が用意した Web サーバに接続している。したがって,攻撃者の DNS サーバには,“メールサービス P の FQDN”と,“攻撃者が用意した Web サーバの IP アドレス”を関連付ける A レコードが設定されていたことになる。a はメールサービス P,b は攻撃者が用意した Web サーバである。

PC-S は DHCP で DNS サーバの情報を自動取得する設定だった(図1)ので,攻撃者のアクセスポイントに接続した結果,攻撃者の DNS サーバが設定された(図2)。この DNS サーバが,メールサービス P の名前を攻撃者の Web サーバに解決する。

“本文,図1又は図2中の字句を用いて”と指定されているので,a は図1 の“メールサービスP”,b は図2 の“攻撃者が用意したWebサーバ”をそのまま使う。a に“S さんの利用者 ID”のような別の語を入れたり,b を“攻撃者”だけにしたりしない。

採点講評(IPA)

設問1(1),(2)は,全体的に正答率が高かった。攻撃者の用意した無線アクセスポイントに誘導される仕組みについて十分理解されていた。

設問1(3) 20字以内

図2中の下線②について,この時,サーバ証明書が信頼できない旨のエラーが表示されなかったのはなぜか。メールサービス P に HSTS が実装されていないことを踏まえ,理由を 20 字以内で述べよ。

解答例

  • HTTPで接続が開始されたから
解説

本文の根拠

図1

S さんは,その日,メールサービス P を利用するために,Web ブラウザのアドレスバーにメールサービス P の FQDN を手入力し,ログインページに利用者 ID とパスワードを入力した。

図1 の後

HTTP でアクセスした場合は HTTP over TLS の URL にリダイレクトされる仕様になっており,HSTS(HTTP Strict Transport Security)は実装されていない。

図1

S さんがメールサービス P にアクセスした時,サーバ証明書が信頼できない旨のエラーは Web ブラウザ上に表示されなかった。

サーバ証明書の検証は TLS の接続の中で行われるので,TLS(HTTPS)を使わなければ,証明書が信頼できない旨のエラーは出ない。S さんは FQDN を手入力しており(図1),この場合は HTTP で接続が開始されたと考えられる(解答例の理由もこれである)。メールサービス P は HTTP でアクセスされると HTTP over TLS の URL にリダイレクトする仕様だが,HSTS を実装していない。HSTS は,一度 TLS で接続したサーバについて,以後は HTTP を使わず TLS で接続するようブラウザに求める仕組みで,これが無いと最初の HTTP の接続は保護されない(RFC 6797 は,この初回の接続が中間者攻撃を受けうることを指摘している)。

そのため,攻撃者の Web サーバは,リダイレクトを返さずに HTTP のまま応答でき,S さんは偽のログインページに利用者 ID とパスワードを入力してしまった。HTTP 接続には TLS もサーバ証明書もないので,エラーが表示される場面がそもそも無い。

字数は 20 字以内で,解答例は“HTTPで接続が開始されたから”(15 字)。“HSTS が無いから”だけでは,なぜエラーが出ないのかの説明にならない。HTTP で開始されるので TLS の検証が行われない,という因果を短く書く。

設問2(1) 35字以内

本文中の下線③について,偽サイトにおいてどのような処理が行われればメールサービス P への不正アクセスが成立するか。行われる処理を 35 字以内で述べよ。

解答例

  • OTPの入力を要求し,OTPを認証サーバXに中継する処理
解説

本文の根拠

図4 の後

OTP 認証方式を利用した場合,ログインには時刻によって変化する OTP も必要になるので,パスワードが窃取された場合でも不正ログインを防ぐことが可能となる。

図4

認証サーバ X から Web ブラウザへ“OTP 要求”。

〔認証方式の強化〕

要求 2 手口 G に限らず,偽サイトにアクセスしてしまったときにフィッシングの手口によるメールサービス P への不正アクセスを防ぐこと

偽サイトは,S さんが入力した利用者 ID とパスワードを本物のサーバ(認証サーバ X)に転送してログインを試み,認証サーバ X から OTP を要求されたら,S さんに OTP の入力を求める。S さんが入力した OTP を偽サイトが認証サーバ X に中継すれば,攻撃者はログインに成功する。つまり,OTP の入力を要求し,その OTP を認証サーバ X に中継する処理が行われれば,OTP 認証方式でも不正アクセスが成立する。

TOTP の OTP は時刻から計算され,一定時間だけ有効(RFC 6238)なので,その時間内に中継されれば,認証サーバ X から見て正しい OTP と区別がつかない。図4 の認証処理では,OTP は利用者がブラウザに入力して認証サーバ X に送るので,その途中に偽サイトが入ると中継できる。講評も,通信を攻撃者に中継され得る環境下では,毎回変わる情報でも悪用され得ると述べている。

字数は 35 字以内で,解答例は“OTPの入力を要求し,OTPを認証サーバXに中継する処理”(28 字)。“OTP を盗む”だけでなく,偽サイトが本物のサーバに中継して初めて成立する点(中継)を入れる。

採点講評(IPA)

設問2(1)は,正答率が低かった。通信を攻撃者に中継され得る環境下では,ネットワーク上を流れる情報は,ワンタイムパスワードのような毎回変わる情報であっても,攻撃者に悪用され得ることを理解しておいてほしい。

設問2(2) 解答欄4つ

図5及び図6中の c ~ f に入れる適切な字句を,解答群の中から選び,記号で答えよ。解答群 ア 公開鍵 A イ 公開鍵 K ウ 秘密鍵 A エ 秘密鍵 K

〔c〕解答例

  • ウ

〔d〕解答例

  • ア

〔e〕解答例

  • エ

〔f〕解答例

  • イ
解説

本文の根拠

図5 注1)

オーセンティケータには,搭載されたデバイスごとにユニークな公開鍵 A,秘密鍵 A,及び証明書 A が組み込まれている。

図5

c を用いて署名 L を生成

図5

d を用いて署名 L を検証

図6

IDc 及び e を取得

図6

IDc に対する f を選択

ディジタル署名は,秘密鍵で署名し,対応する公開鍵で検証する。図5(登録)の署名 L は,IDc,H(ドメイン),公開鍵 K などに対する署名で,オーセンティケータに組み込まれた秘密鍵 A で生成する(c=ウ)。認証サーバ X は,直前に検証した証明書 A に含まれる公開鍵 A で署名 L を検証する(d=ア)。これで,登録しようとする公開鍵 K が,正規のオーセンティケータで生成されたものだと確認できる。

図6(認証)の署名 M は,登録時に生成した IDc ごとの鍵ペアのうち,オーセンティケータが保存している秘密鍵 K で生成し(e=エ。“IDc 及び秘密鍵 K を取得”),認証サーバ X は,登録済みの IDc に対する公開鍵 K を選択して検証する(f=イ)。図5 の“IDc,利用者 ID,ドメイン,公開鍵 K,秘密鍵 K の組合せを登録”と,認証サーバ側の“利用者 ID,IDc,公開鍵 K の組合せを登録”とが,この対応の根拠である。

間違えやすいのは公開鍵と秘密鍵の取り違えで,講評も,公開鍵と秘密鍵を取り違えている解答が散見された,としている。署名する側が秘密鍵,検証する側が公開鍵,という原則に戻って考える。また,鍵 A(機器固有)と鍵 K(IDc ごと)を取り違えないよう,署名 L は鍵 A,署名 M は鍵 K と,どの署名にどの鍵ペアが対応するかを図で追う。

採点講評(IPA)

設問2(2)は,正答率が低かった。公開鍵と秘密鍵を取り違えている解答が散見された。ディジタル署名の仕組みについて理解しておいてほしい。

設問2(3) 40字以内

本文中の下線④について,理由を図5又は図6中の字句を用いて,40 字以内で述べよ。

解答例

  • 認証サーバXでオリジンbとオリジンsの一致を確認しているから
解説

本文の根拠

図6

オリジン b とオリジン s の一致を確認

図6 の凡例

署名 M:H(ドメイン),H(オリジン b || 乱数 c′)に対するディジタル署名

図5 の凡例

オリジン b:Web ブラウザがアクセスした Web サイトのオリジン。

図5 の凡例

オリジン s:認証サーバ X の Web サイトのオリジン。

パスワードレス認証では,Web ブラウザが,実際にアクセスした Web サイトのオリジン b を認証要求に含めてオーセンティケータに渡し,署名 M は H(オリジン b || 乱数 c′)を対象に生成される。認証サーバ X は,受け取ったオリジン b と自身の Web サイトのオリジン s の一致を確認する。偽サイトにアクセスしている場合,オリジン b は偽サイトのオリジンであり,オリジン s と一致しないので,認証は失敗する。フィッシング(中間者)では,ブラウザが付けるオリジンを偽サイトが本物のものに偽装できないので,認証を中継しても成立しない。

OTP 認証方式(設問2(1))は,ユーザが入力した OTP を中継されると防げなかったが,パスワードレス認証方式は,署名に“アクセスした Web サイトのオリジン”が含まれ,しかも認証サーバ X がそれを確認する。これが要求 2 を満たせる理由である。

字数は 40 字以内で,解答例は“認証サーバXでオリジンbとオリジンsの一致を確認しているから”(30 字)。講評に,“攻撃者が入手できないオーセンティケータの秘密鍵で署名しているから”といった解答(被害者が署名したデータを攻撃者がそのまま悪用することを想定していない)が一部に見られたとある。署名の秘密性ではなく,署名の対象にオリジンが含まれることと,その一致確認を書く。

採点講評(IPA)

設問2(3)は,正答率が低かった。中間者攻撃では偽装できない情報が何かを考えれば,解答できる問題であった。被害者が署名したデータを攻撃者がそのまま悪用することを想定していない,“攻撃者が入手できないオーセンティケータの秘密鍵で署名しているから”といった解答が一部に見られた。

出典:平成31年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2(表記を一部改変)

問3 IoT 機器の開発

IoT 機器の開発に関する次の記述を読んで,設問に答えよ。

V 社は,IoT 機器を製造・販売している従業員数 3,000 名の会社である。家庭用ゲーム機(以下,ゲーム機 V という)の発売を予定しており,設計を開発部が担当している。設計リーダは,開発部の H さんである。利用者はゲーム機 V とゲームプログラムの利用権を購入し,ゲーム機 V からゲームサーバ上のゲームプログラムを利用する。複数のゲームプログラム開発会社が,それぞれ複数のゲームプログラムを開発し,販売する予定である。開発部が設計したゲーム機 V,認証サーバ及びゲームサーバ(以下,三つを併せてゲームシステム V という)の構成を図1に,構成要素とその概要を表1に示す。

ゲームシステム V の構成図。複数台(重ねて表示)のゲーム機 V は,専用 OS(その中に通信プログラム),クライアント証明書,デバイス ID をもち,インターネットに接続される。インターネットは,クラウド V の中の認証サーバ及び複数のゲームサーバ(ゲームサーバ 1 〜 ゲームサーバ m)に接続される。認証サーバは,利用者認証プログラム,利用者情報(注1),購入情報(注2),サーバ証明書をもつ。ゲームサーバ 1 は,複数のゲームプログラム(ゲームプログラム 1 〜 ゲームプログラム n。それぞれゲームプログラム ID をもつ)とサーバ証明書をもつ。クラウド V:V 社が用意したクラウドサービス。注記1 ファイアウォールなどのネットワーク機器は省略している。注記2 ゲーム機 V と各サーバとの間の通信には,HTTP over TLS を使用する。注1) 利用者 ID,パスワードのハッシュ値,ニックネーム,性別及び誕生日から成る。注2) 利用者 ID,利用者が購入したゲームプログラムのゲームプログラム ID から成る。
図1 ゲームシステム V の構成(概要)
構成要素と概要の2列の表。ゲーム機 V:・無線 LAN 機能,コントローラ(注1)及びディスプレイを備えている。・専用 OS がインストールされており,ブートローダから起動される。・専用 OS に含まれる通信プログラムは,ゲームサーバ上のゲームプログラム及び認証サーバ上の利用者認証プログラムと通信する。・通信プログラムは,コントローラの操作情報をリアルタイムにゲームプログラムに送信し,ゲームプログラムからゲームの処理結果をゲーム画面として受信してディスプレイに表示する。・ゲーム機 V ごとに一意のデバイス ID が付与される。・ゲーム機 V ごとに発行されたクライアント証明書を格納している。各サーバとの通信時には,クライアント証明書を使用したクライアント認証が行われる。・各サーバとの通信時には,サーバ認証を行い,クラウド V 中のサーバとだけ通信を行う。・初期セットアップ時に認証サーバに利用者情報を登録する。・PC に接続しても外部ストレージとして認識されず,内部のデータを直接読み出すことはできない。ゲームサーバ:・クラウド V に複数のゲームプログラム開発会社がそれぞれゲームサーバを立ち上げ,各ゲームサーバで一つ又は複数のゲームプログラムを稼働させる。・ゲームプログラム開発会社のゲームサーバ管理者が運用する。・各ゲームプログラムには,固有のゲームプログラム ID が付与される。・ゲームサーバごとに発行されたサーバ証明書を格納している。認証サーバ:・利用者情報と購入情報を管理する。・利用者認証プログラムは,ゲーム機 V がゲームプログラムを利用する際の利用者の認証を行う。認証の結果,利用者が購入したゲームプログラムだけの利用を許可する。・認証サーバに発行されたサーバ証明書を格納している。注1) ゲームを行う際などに使用する入力装置
表1 ゲームシステム V の構成要素とその概要

ゲームを行う際は図2の認証フローで利用者の認証が行われる。

ゲーム機 V の通信プログラム,認証サーバの利用者認証プログラム,ゲームサーバのゲームプログラムの3者のシーケンス図。1. 通信プログラムから利用者認証プログラムへ 利用者 ID とパスワード。2. 利用者認証プログラムから通信プログラムへ アクセス可能なゲームプログラム ID の一覧。3. 通信プログラムから利用者認証プログラムへ アクセスするゲームプログラム ID。4. 利用者認証プログラムから通信プログラムへ 認証トークンとゲームプログラムの URL(注1)。5. 通信プログラムからゲームプログラムへ 認証トークン。6. ゲームプログラムから通信プログラムへ ゲーム画面。注記 1. 又は 5. で認証に失敗した場合は,ゲーム機 V に認証エラー画面が送信される。注1) URL はゲームプログラムごとに固有である。
図2 利用者がゲームを行う際の認証フロー

認証トークンには,認証サーバの FQDN,利用者 ID 及び MAC(Message Authentication Code)が格納される。①MAC は,認証サーバの FQDN と利用者 ID に対して,ハッシュ関数を共通鍵と組み合わせて使用し,生成する。共通鍵は,ゲームシステム V 全体で一つの鍵が使用され,ゲームサーバ管理者がゲームプログラムに設定する。図2の 5. では,ゲームプログラムによる認証トークンの MAC の検証が成功し,かつ,FQDN が確かに認証サーバのものであることが確認された場合だけ,認証が成功し,図2の 6. でゲームプログラムからゲーム画面が送信される。

〔セキュリティレビューの実施〕

認証トークンが認証サーバ以外で不正に生成されると,購入していないゲームプログラムを利用されたり,クラウド V 上のリソースを不正に利用されたりするおそれがある。そこで仮に認証サーバ以外で認証トークンを生成されたとしてもゲームプログラムでは検証に失敗することが求められる。また,利用者がコントローラの不正な操作情報をゲーム機 V から送信することによって,ゲームを有利に進めるといったことも防ぐ必要がある。

V 社では,システム設計にセキュリティ上の問題がないか,製品の設計工程でセキュリティレビュー(以下,レビューという)を実施することになっており,ゲームシステム V はセキュリティ部の N さんがレビューを担当することになった。次は,N さんがゲームシステム V のレビューを行った時の,H さんとの会話である。

〔ブートローダ及び専用 OS の改ざん対策〕

2回目のレビューでは,ブートローダ及び専用 OS の改ざん対策について確認した。次は,その時の H さんと N さんの会話である。

枠内に番号付きの手順。1. ブートローダ及び専用 OS 中の起動時に実行されるファイルのハッシュ値をあらかじめ計算し,ハッシュ値のリスト(以下,ハッシュ値リストという)を作成しておく。ゲーム機 V への専用 OS の導入時,ハッシュ値リストを併せて保存する。起動時に専用 OS 中のファイルが実行される順番は,あらかじめ決められている。2. ゲーム機 V の起動時には,CRTM(Core Root of Trust for Measurement)と呼ばれる,改ざんが困難な起動コードから起動処理を開始する。3. CRTM は,ブートローダのハッシュ値を計算し,そのハッシュ値がハッシュ値リスト中に存在することを確認できたら実行する。4. ブートローダは,専用 OS の最初に実行されるファイルのハッシュ値を計算し,ハッシュ値リスト中に存在することを確認し,実行する。同様に,後続のファイルについて計算,確認,実行を繰り返し,専用 OS が起動する。5. ハッシュ値がハッシュ値リスト中に存在しないファイルは改ざんされていると判定され,起動処理が中止される。
図3 ブートローダ及び専用 OS の改ざん対策の処理の流れ

H さんは,⑦ハッシュ値リストを保護するための方法を説明した。

その後,クラウド V の準備が整い,ゲーム機 V が発売された。

出題趣旨(IPA)

近年,IoT機器が増加しており,そのセキュリティ対策も重要になってきている。IoT機器はネットワーク経由だけでなく,物理的なアクセスも可能なので,それも考慮してセキュリティ設計を進める必要がある。また,IoT機器が接続するサーバが複数あると,それらを連携して動作させるために,認証連携が必要になることも多い。本問では,家庭用ゲーム機の開発を題材に,IoT機器と複数のサーバ間での認証連携について設計する能力,及びIoT機器のセキュリティ対策を検討する能力を問う。

採点講評(問全体・IPA)

問3では,IoT機器を題材に,サーバ間での認証連携,及びIoT機器への物理的な不正アクセスへの対策について出題した。

設問と解答例

設問1

本文中の下線①に該当する方式はどれか。該当する方式を解答群の中から選び,記号で答えよ。解答群 ア CBC-MAC イ CMAC ウ CSR エ HMAC オ MD5 カ RC4

解答例

  • エ
解説

本文の根拠

〔経緯の調査〕を受けた認証トークンの説明

①MAC は,認証サーバの FQDN と利用者 ID に対して,ハッシュ関数を共通鍵と組み合わせて使用し,生成する。

ハッシュ関数を共通鍵と組み合わせて使うメッセージ認証コードは HMAC(Hash-based Message Authentication Code)である。HMAC は,ハッシュ関数と秘密の共通鍵からメッセージ認証コードを計算する方式で,RFC 2104 が規定している。認証トークンの MAC は,認証サーバの FQDN と利用者 ID を,ゲームシステム全体で共通の鍵と組み合わせて計算するので,HMAC に当たる。

CBC-MAC と CMAC は,ブロック暗号を使って MAC を作る方式で,ハッシュ関数は使わない(CMAC は NIST SP 800-38B)。CSR は証明書署名要求,MD5 は鍵を使わないハッシュ関数,RC4 はストリーム暗号で,どれも“ハッシュ関数と共通鍵を組み合わせる MAC”ではない。

解答群が MAC の方式の名前に偏っているので,“ハッシュ関数を使う”ことと“MAC である”ことの両方を満たす選択肢を選ぶ。MD5 はハッシュ関数だが,鍵を使わないので MAC ではない。

設問2(1) 15字以内

本文中の下線②について,対策として認証トークンに追加する必要がある情報を,15 字以内で答えよ。

解答例

  • ゲームプログラムID
解説

本文の根拠

〔セキュリティレビューの実施〕

情報が不足していることによって,ゲームプログラム A 用の認証トークンがゲームプログラム B においても認証に成功してしまうので,攻撃者がゲームプログラムの URL を知ることができれば,購入していないゲームプログラムも利用できてしまいます。

認証トークンの説明

認証トークンには,認証サーバの FQDN,利用者 ID 及び MAC(Message Authentication Code)が格納される。

認証トークンは,認証サーバの FQDN,利用者 ID,MAC だけで作られており,どのゲームプログラムのためのトークンかを表す情報が入っていない。そのため,ゲームプログラム A 用のトークンが,共通鍵が同じ別のゲームプログラム B でも MAC の検証に通ってしまう。対策は,認証トークンにゲームプログラム ID を追加し,その ID も MAC の計算対象に含め,ゲームプログラム側で自分の ID と一致することを確認することである。

図2 の 3. で利用者が“アクセスするゲームプログラム ID”を認証サーバに伝え,4. で認証サーバがその ID に対応するゲームプログラムの URL と認証トークンを返す。認証サーバは購入情報を基に,アクセス可能なゲームプログラム ID の一覧を返しているので(2.),どのゲームプログラムの利用を許可したかを知っている。それをトークンに入れれば,ゲームプログラム側で検証できる。講評は,本問のような認証連携方式では,利用を許可するリソースの範囲をトークンに含める必要があることがよく理解されていた,としている。

字数は 15 字以内で,解答例は“ゲームプログラムID”(10 字)。“利用者が購入したゲームプログラムの一覧”などと書くと,字数を超えやすく,ゲームプログラムごとに分ける目的からも外れる。

採点講評(IPA)

設問2(1)は,正答率が高かった。本問のような認証連携方式では,利用を許可するリソースの範囲を認証トークンに含める必要があることについて,よく理解されていた。

設問2(2) 30字以内

本文中の下線③について,その原因となるゲームサーバの仕様を,30 字以内で述べよ。

解答例

  • ゲームサーバに認証サーバと同じ共通鍵を保存する。
解説

本文の根拠

認証トークンの説明

共通鍵は,ゲームシステム V 全体で一つの鍵が使用され,ゲームサーバ管理者がゲームプログラムに設定する。

〔セキュリティレビューの実施〕

二つ目の問題は,③認証トークンをゲームサーバ管理者が不正に生成できてしまうことです。

MAC は,生成する側と検証する側が同じ共通鍵をもつ方式である。本システムでは,認証サーバが MAC を生成し,ゲームプログラムが同じ共通鍵で検証するので,ゲームプログラムを動かしているゲームサーバにも,認証サーバと同じ共通鍵が保存されている。共通鍵を知るゲームサーバ管理者は,自分で認証トークンの MAC を計算でき,認証サーバ以外が,正しい MAC の付いた認証トークンを不正に生成できてしまう。

本文は,共通鍵を“ゲームサーバ管理者がゲームプログラムに設定する”と述べている。管理者は鍵を知っているだけでなく,設定する当人である。原因は,認証トークンの検証に,認証サーバと同じ共通鍵をゲームサーバに置く仕様にある。

字数は 30 字以内で,解答例は“ゲームサーバに認証サーバと同じ共通鍵を保存する。”(24 字)。“管理者が鍵を知っている”だけでなく,認証サーバと同じ共通鍵がゲームサーバにある,という仕様の形で書く。

設問2(3) 解答欄2つ

本文中の下線④について,その原因となる認証トークンの仕様を,20 字以内で述べよ。また,不正に生成した認証トークンで利用できるゲームプログラムの範囲を,35 字以内で述べよ。

〔仕様〕解答例

  • MACの生成に共通鍵を使用する。

〔範囲〕解答例

  • 自身が管理するゲームサーバ上で動作する全ゲームプログラム
解説

本文の根拠

〔セキュリティレビューの実施〕

その設計にしたとしても,不正にゲームプログラムが利用できる認証トークンをゲームサーバ管理者が生成できてしまいます。

表1 ゲームサーバ

クラウド V に複数のゲームプログラム開発会社がそれぞれゲームサーバを立ち上げ,各ゲームサーバで一つ又は複数のゲームプログラムを稼働させる。

表1 ゲームサーバ

ゲームプログラム開発会社のゲームサーバ管理者が運用する。

ゲームプログラムごとに別の共通鍵を使っても,MAC は検証側と生成側で同じ鍵を使う仕様のままである。したがって,ゲームサーバの管理者は,自分が管理するゲームサーバ上のゲームプログラムの共通鍵を全て知ることになり,それらのゲームプログラム用の認証トークンを不正に生成できる。原因となる認証トークンの仕様は,“MAC の生成に共通鍵を使用する”ことである。範囲は,自身が管理するゲームサーバ上で動作する全てのゲームプログラムである。

別の管理者が運用する他社のゲームサーバ上のゲームプログラムは,その鍵を知らないので,利用できる範囲は自分の管理するゲームサーバ上のものに限られる。表1 に“各ゲームサーバで一つ又は複数のゲームプログラムを稼働させる”とあるので,一つのサーバ上に複数のゲームプログラムがあり,その全てが範囲になる。

字数は,仕様が 20 字以内(解答例は 16 字),範囲が 35 字以内(同 28 字)。“共通鍵を使用する”とだけ書かず,何の生成に使うか(MAC)まで書く。範囲は“全ゲームプログラム”に“自身が管理するゲームサーバ上”の限定を付ける。

設問2(4) 解答欄3つ

本文中の a ~ c に入れる適切な字句を解答群の中から選び,記号で答えよ。解答群 ア 共通鍵 イ ゲーム機 V ウ ゲームサーバ エ 公開鍵 オ 認証サーバ カ 秘密鍵

〔a〕解答例

  • オ

〔b〕解答例

  • エ

〔c〕解答例

  • カ
解説

本文の根拠

〔セキュリティレビューの実施〕

では,a で公開鍵と秘密鍵の鍵ペアを生成し,b をゲームサーバに配布しておきます。a が c を使って認証トークンに署名を付加し,ゲームプログラムでは b を使って署名の検証を行います。

ディジタル署名は,秘密鍵で署名し,公開鍵で検証する。認証トークンは認証サーバが発行するので,鍵ペアを生成して署名を付加するのは認証サーバ(a=オ)で,署名に使うのは秘密鍵(c=カ)である。ゲームサーバ(のゲームプログラム)には検証用の公開鍵(b=エ)を配布する。公開鍵は署名を作れないので,ゲームサーバ管理者が知っても,不正に認証トークンを生成することはできない。

設問2(2)・(3) で問題になっていたのは,生成と検証に同じ共通鍵を使うことだった。署名なら,生成に必要な秘密鍵は認証サーバだけが保持し,ゲームサーバには検証用の公開鍵だけを置けばよい。これが“そうすればゲームサーバ管理者が認証トークンを不正に生成したとしても,ゲームプログラムで検証が失敗します”という N さんの発言の根拠である。

講評は,正答率は高かったが,公開鍵と秘密鍵を取り違えている解答が一部に見られたとしている。b に秘密鍵(カ)を入れると,ゲームサーバに秘密鍵を配布することになり,MAC の共通鍵と同じ問題に戻る。

採点講評(IPA)

設問2(4)は,正答率が高かったが,公開鍵と秘密鍵を取り違えている解答が一部に見られた。公開鍵暗号方式やディジタル署名はセキュリティ技術の基礎なので,よく理解しておいてほしい。

設問2(5) 25字以内

本文中の下線⑤について,どのようにするとクライアント証明書と鍵 C を PC などから使用可能にしてしまうことができるか。攻撃者が使用前に行う必要があることを,25 字以内で具体的に述べよ。

解答例

  • SSDを取り出し,PCなどにつなげる。
解説

本文の根拠

表1 ゲーム機 V

PC に接続しても外部ストレージとして認識されず,内部のデータを直接読み出すことはできない。

〔セキュリティレビューの実施〕

鍵 C を含めた全てのデータは,搭載する SSD(Solid State Drive)に格納します。搭載する SSD は,広く流通しているものです。

〔セキュリティレビューの実施〕

攻撃者がゲーム機 V を購入すれば,専用 OS を改ざんせずに,ゲーム機 V 内のクライアント証明書と鍵 C を PC などから不正に使用できます。

ゲーム機 V は PC に接続しても外部ストレージとして認識されないので,ゲーム機 V の専用 OS を経由した読み出しはできない。しかし,鍵 C を含む全てのデータは,広く流通している SSD に格納されている。そこで,攻撃者は,購入したゲーム機 V から SSD を取り出し,PC などに直接つなげば,専用 OS を改ざんせずにクライアント証明書と鍵 C を読み出して,PC から各サーバに接続できる。使用前に行うことは,SSD を取り出し,PC などにつなげることである。

本文は,“専用 OS に脆弱性が存在しなかったとしても”,“専用 OS を改ざんせずに”と述べている。つまり OS 側を攻めるのではなく,ゲーム機の筐体から記憶装置を物理的に取り出す攻撃である。対策として TPM に鍵 C を保存する案が続く。

字数は 25 字以内で,解答例は“SSDを取り出し,PCなどにつなげる。”(19 字)。“PC に接続する”とだけ書くと,表1 のとおり外部ストレージとして認識されないので成立しない。SSD を取り出す,という手順を入れる。

設問2(6) 10字以内

本文中の下線⑥について,この性質を何というか。10 字以内で答えよ。

解答例

  • 耐タンパ性
解説

本文の根拠

〔セキュリティレビューの実施〕

TPM は,⑥内部構造や内部データを解析されにくい性質を備えているので,TPM 内に鍵 C を保存すれば不正に読み取ることは困難になります。

内部構造や内部データを,物理的な手段を含めて解析されにくくする性質を,耐タンパ性(tamper resistance)という。TPM(Trusted Platform Module)は,鍵などを内部に保護し,外部から読み出しにくい作りになっているので,SSD のように取り出して直接読まれる危険が小さい。

本文は“内部構造や内部データを解析されにくい性質を備えているので,TPM 内に鍵 C を保存すれば不正に読み取ることは困難になります”と,その性質が鍵 C の保護に役立つことを述べている。講評は,設問3 に関連して,設問2(6)で出題した耐タンパ性についてよく理解しておいてほしいとしている。

字数は 10 字以内で,解答例は“耐タンパ性”(5 字)。解答は用語どおり“耐タンパ性”と書く。

設問3 25字以内

本文中の下線⑦について,保護するための適切な方法を本文中の用語を使って,25 字以内で具体的に述べよ。

解答例

  • ハッシュ値リストをTPMに保存する。
解説

本文の根拠

図3 手順1

ゲーム機 V への専用 OS の導入時,ハッシュ値リストを併せて保存する。

図3 手順3

CRTM は,ブートローダのハッシュ値を計算し,そのハッシュ値がハッシュ値リスト中に存在することを確認できたら実行する。

〔セキュリティレビューの実施〕

TPM 内に鍵 C を保存すれば不正に読み取ることは困難になります。

図3 の改ざん検知は,ファイルのハッシュ値がハッシュ値リストにあるかを確かめる仕組みである。リストが改ざんされると,改ざんしたファイルのハッシュ値をリストに加えて,検知を回避できてしまう。そこで,リストを耐タンパ性のある TPM に保存すれば,外部から読み出して書き換えることが困難になる。したがって,答えは“ハッシュ値リストを TPM に保存する”である。

図3 の手順1 は,リストを専用 OS の導入時に併せて保存するとしているだけで,保存先は決めていない。手順2 の CRTM は,改ざんが困難な起動コードとして起動処理の出発点になっているが,リスト自体の保護は別に必要である。講評は,ディジタル署名の付与だけを書き,秘密鍵の保護を考慮していない解答が散見されたとしている。秘密鍵が盗まれれば,不正に署名を付けられ,改ざんを検出できなくなるからである。

字数は 25 字以内で,解答例は“ハッシュ値リストをTPMに保存する。”(18 字)。“本文中の用語を使って”とあるので,“ハッシュ値リスト”と“TPM”をそのまま使う。

採点講評(IPA)

設問3は,ハッシュ値リストを保護するためにTPM(Trusted Platform Module)を用いる解答を期待したが,ディジタル署名の付与についてだけ記述し,秘密鍵の保護を考慮していない解答が散見された。ハッシュ値リストにディジタル署名を付与した場合,秘密鍵が盗まれてしまうと,不正にディジタル署名を付与され,データの改ざんを検出できなくなってしまうおそれがある。IoT機器では特に物理的な不正アクセスへの対策が重要になるので,TPM及び設問2(6)で出題した耐タンパ性についてよく理解しておいてほしい。

出典:平成31年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問3(表記を一部改変)