‹ ぱすてく

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

令和4年度 春期 午後Ⅱ(旧試験)

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

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

この年度を解いてみる

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

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

A 社は,従業員 1,500 名の中堅システム開発会社である。A 社では,セキュリティ品質の高い Web サイトを開発するために,表 1 に示す Web セキュリティ管理基準を定めて運用している。

項番,管理策,概要の3列の表。項番1:セキュリティ要件レビュー。概要は,概要設計,基本設計,詳細設計それぞれの設計レビューにおいて,Web サイトに関するセキュリティ要件をレビューする。項番2:ツールによるソースコードレビュー。概要は,Web サイトのリリースまでに実施する/期間は,3 日間くらいが目安である/開発環境の特性などが原因で実施できない場合,項番 3 を行う/ツールが検出した指摘事項について,開発担当者は,脆弱性かどうか,対策が必要かどうかを判断する/セッション管理の脆弱性は,一部だけが対象である/認可・アクセス制御の脆弱性は,対象外である。項番3:プロジェクトメンバによるソースコードレビュー。概要は,項番 2 が実施できない場合,Web サイトのリリースまでに実施する/期間は,10 日間くらいが目安である/A 社の指定した既知の脆弱なコードパターンを見つける/レビューでの指摘事項について,開発担当者は,脆弱性かどうか,対策が必要かどうかを判断する/セッション管理の脆弱性は,一部だけが対象である/認可・アクセス制御の脆弱性は,対象外である。項番4:ツールによる脆弱性診断。概要は,Web サイトのリリースまでに実施する/期間は,3 日間くらいが目安である/Web サイトをテスト環境で稼働させ,ツールで Web サイトに様々な HTTP リクエストを送り,その応答を評価する/ツールが検出した指摘事項について,開発担当者は,脆弱性かどうか,対策が必要かどうかを判断する/セッション管理の脆弱性は,一部だけが対象である/認可・アクセス制御の脆弱性は,対象外である。項番5:専門技術者による脆弱性診断。概要は,Web サイトのリリースまでに実施する/期間は,10 日間くらいが目安である/専門会社 1) に委託する/Web サイトをテスト環境で稼働させ,Web サイトに様々な HTTP リクエストを送り,その応答を評価する/診断による指摘事項について,専門技術者と開発担当者は,対策が必要かどうかを協議して判断する/セッション管理の脆弱性は,対象である/認可・アクセス制御の脆弱性は,対象である。注 1) 脆弱性診断サービスを提供している D 社に委託している。
表1 Web セキュリティ管理基準(抜粋)

〔A 社による B 社の子会社化〕

B 社は,従業員 200 名の新興の IT サービス会社であり,各種 SaaS を提供している。アジャイル開発の能力が高く,機能の追加や性能の改善を頻繁に行っている。B 社と A 社とは協業関係にあったが,両社の経営陣は,双方の強みを生かせると判断し,A 社による B 社の子会社化について合意した。

B 社のクラウド環境には,コーポレートサイト(以下,サイト B という),及び B 社が提供中の三つの SaaS それぞれの Web サイト(以下,サイト X,サイト Y,サイト Z という)がある。それらの概要を表 2 に示す。

サイト名及び URL,概要,システム構成の3列の表。サイト B(https://www.b-sha.co.jp/):B 社に関する情報を発信している/コンテンツマネジメントシステム(CMS)を導入し,運用している。システム構成は,IaaS 上の Web サーバで構成されている。サイト X(https://x.b-sha.co.jp/):会社又は組織向けのコミュニケーションサービスであり,利用する会社間又は組織間で,情報共有やチャットが行える/利用する会社又は組織は,B 社の提携企業の新商品のモニターになると,“キャンペーン応募”をサイト X で行える。サイト Y(https://y.b-sha.co.jp/):個人向けのブログサイトであり,利用者が情報を発信できる/“A 社のニューストピック”を表示できる。サイト Z(https://z.b-sha.co.jp/):ソフトウェア開発企業向けの Web サービスである。利用者はグループを作ることができ,そのグループ内で,スケジュール,タスク,ソースコードなどのプロジェクト情報を共有できる/外部の Web サイトと連携して,経費精算,出張申請などの業務手続を行う機能を提供予定である。サイト X,サイト Y,サイト Z のシステム構成は共通で,IaaS 上の Web サーバ及びデータベースサーバ 1)(以下,DB サーバという)で構成されている。注 1) DB サーバには,B 社のシステム担当者と,それぞれのサイトの Web サーバとがアクセスできる。各 DB サーバには,レコードの更新や削除が簡単にできるメンテナンス用の Web インタフェースがある。その URL を次に示す。サイト X の DB サーバ:https://db-x.b-sha.co.jp/,サイト Y の DB サーバ:https://db-y.b-sha.co.jp/,サイト Z の DB サーバ:https://db-z.b-sha.co.jp/
表2 B 社の Web サイトの概要

子会社化に当たって,B 社の Web サイトのセキュリティ水準を確認することになり,A 社の品質管理部でセキュリティ技術を担当している R さんが対応することになった。

〔B 社の Web サイトのセキュリティ水準の確認〕

R さんは,サイト B,サイト X,サイト Y 及びサイト Z に対する脆弱性診断を D 社に依頼した。診断の結果,検出された脆弱性を表 3 に示す。

サイト名,脆弱性名の2列の表。サイト B:クロスサイトスクリプティング(以下,XSS という)脆弱性。サイト X:XSS 脆弱性,クロスサイトリクエストフォージェリ(以下,CSRF という)脆弱性,クリックジャッキング脆弱性。サイト Y:XSS 脆弱性,サーバサイドリクエストフォージェリ(以下,SSRF という)脆弱性。サイト Z:XSS 脆弱性,SSRF 脆弱性。
表3 検出された脆弱性(抜粋)

〔サイト B の XSS 脆弱性〕

D 社は,サイト B に①診断用リクエストを送ることで,XSS 脆弱性があることを確認した。このリクエストは,ライブラリ M を使ってプログラム C が処理する。ライブラリ M のコードを図 1 に示す。

ライブラリ M のコード。(省略)の間に次の 1 行(行番号 1)がある。1: out.println("<meta property=\"og:url\" content=\"https://"+serverName+"/"+scriptName+"?"+queryString+"\">");(実際の表示では 2 行に折り返されている)。注記:serverName には,リクエストの URL のホスト名が格納されている。scriptName には,URL のパス名が格納されている。queryString には,URL のクエリ文字列以降の値が URL デコードされて格納されている。
図1 ライブラリ M のコード

ライブラリ M は,SEO のためのライブラリである。

B 社では,開発部のメンバそれぞれが,開発時に利用可能なライブラリを収集している。使用するライブラリは,マルウェアが含まれていない,既知の脆弱性が修正された,安全性が確認できているライブラリを公開している Web サイトから,ファイルサーバにダウンロードし,利用している。ファイルサーバは,開発部のメンバであればアクセス可能である。

今回使われていたライブラリ M は,既知の XSS 脆弱性の対策をしていないバージョンであった。その結果,ライブラリ M を使っているサイト B,サイト X,サイト Y 及びサイト Z において,同じ XSS 脆弱性が検出された。

これを受けて,B 社における②再発防止策について検討した。

〔サイト X の CSRF 脆弱性〕

サイト X は,セッション ID を JSESSIONID という cookie に格納している。D 社は,サイト X のキャンペーン応募ページで CSRF 脆弱性を検出した。

CSRF 脆弱性を確認した手順は,次のとおりであった。

リクエストの内容。1 行目 POST /campaign HTTP/1.1,2 行目 Host: x.b-sha.co.jp,3 行目 Cookie: JSESSIONID=KCRQ88ERH2G8MGT319E5OSMOAJFDIVEM,空行を挟んで csrftoken=3f4aee446f680df6e0842d7179fcefd00fe5b232。注記 1:リクエストヘッダ部分は,設問に必要なものだけを記載している。注記 2:JSESSIONID について,SameSite 属性は指定されていない。注記 3:csrftoken の値は,サーバが発行する推測困難な値であり,ほかの利用者の利用時には別の値が発行される。注記 4:リクエストを送るとトークンが破棄される可能性があるので,リクエストの内容は,ツールで確認しただけであり,実際にはサイト X に届いていない。
図2 リクエストの内容

リクエストの内容を確認後,csrftoken を CSRF 対策用のパラメタと考え,リクエスト中の csrftoken の値を削除して送信した場合と 1 文字変更して送信した場合を試したところ,どちらもエラーになった。

この結果から,csrftoken と a 又は b とをひも付けるという対策ができていないことが分かった。

〔サイト X のクリックジャッキング脆弱性〕

サイト X では,クリックジャッキングによって,利用者が気付かずに利用者情報の公開範囲を変更させられてしまう脆弱性が検出された。攻撃者が図 3 の画面を用いてクリックジャッキングを行う場合を仮定してみる。このとき,クリックイベントは,利用者から見て手前にある画面上で発生するものとする。

二つの画面が並んでいる。左は画面 α で,“利用者情報の公開範囲設定”の見出しの下にラジオボタン“制限なし”(未選択)と“同一組織内”(選択済み)があり,その下に“更新”ボタンがある。右は画面 β で,中ほどに“ここをクリックして”(“ここ”に下線),右下に“次にここをクリック”(“ここ”に下線)と書かれている。
図3 攻撃者が用いる画面

攻撃者は,画面 c を利用者から見て d に e 状態で罠サイトに公開し,サイト X の画面 f を利用者から見て g に h 状態で重ねて表示する。この状態のサイトにアクセスした利用者は,意図せず利用者情報の公開範囲を変更させられてしまう可能性がある。

クリックジャッキング脆弱性の対策には,レスポンスヘッダに i を含める方法と j を含める方法がある。後者は標準化されている。

〔サイト Y の SSRF 脆弱性〕

サイト Y では,例えば,図 4 のリクエストを受け取ると,A 社のニューストピックを取得し,表示するようになっている。

リクエスト。1 行目 GET /news?topic=https://www.a-sha.co.jp/news/20220417.html HTTP/1.1,2 行目 (省略)。注記:topic パラメタに A 社のニューストピックの URL を指定している。
図4 A 社のニューストピックを取得するリクエスト

この処理に SSRF 脆弱性があった。D 社は,③図 4 のリクエスト中の値を変更してサイト Y に送り,サイト Y の DB サーバのメンテナンス用の Web インタフェースにアクセスできることを確認した。

〔サイト Z の SSRF 脆弱性〕

サイト Z では,最近,新機能が開発された。新機能の一つである,旅行会社 P 社の宿泊サイト(以下,P 社宿泊サイトという)との連携機能で SSRF 脆弱性が検出された。その機能は,駅名を入力すると,その駅近辺のホテルの割引クーポンなどの“お得情報”を表示できるというものである。利用者が,P 社宿泊サイトに登録されている駅名の一つ,“東京”を入力したときの流れを図 5 に,登録されていない架空の駅名である“abc”を入力したときの流れを図 6 に,D 社の専門技術者 V 氏が SSRF 脆弱性を検出した手順を表 4 に示す。

シーケンス図。登場者は利用者,サイト Z,P 社宿泊サイト。(1) 利用者からサイト Z へ,(2) サイト Z から P 社宿泊サイトへ,(3) P 社宿泊サイトからサイト Z へ,(4) サイト Z から利用者へ,の順にやり取りする。送信されるデータは次のとおり。(1) “東京”駅近辺の“お得情報”を取得するリクエスト 1):GET /station/%E6%9D%B1%E4%BA%AC HTTP/1.1,Host: z.b-sha.co.jp。(2) “東京”駅近辺の“お得情報”を取得するリクエスト 1) 2):GET /station/%E6%9D%B1%E4%BA%AC?returnURL=https://z.b-sha.co.jp/error HTTP/1.1,Authorization: Basic (省略)。(3) “東京”駅近辺の“お得情報”。(4) “東京”駅近辺の“お得情報”を含むページ。注記:送信されるデータのリクエストヘッダ部分は,一部省略している。注 1):リクエスト URI には,“/station/▲▲▲▲▲”の形式で,▲▲▲▲▲に駅名を URL エンコードした値を指定する。注 2):returnURL には,登録されていない駅名が入力されたときに利用される URL を指定する。サイト Z は,(1)の Host ヘッダの値を,returnURL 中のホスト名として指定する。
図5 登録されている駅名である“東京”を入力したときの流れ
シーケンス図。登場者は利用者,サイト Z,P 社宿泊サイト。(1) 利用者からサイト Z へ,(2) サイト Z から P 社宿泊サイトへ,(3) P 社宿泊サイトからサイト Z へ,(4) サイト Z 自身への矢印,(5) サイト Z から利用者へ,の順にやり取りする。送信されるデータは次のとおり。(1) “abc”駅近辺の“お得情報”を取得するリクエスト:GET /station/abc HTTP/1.1,Host: z.b-sha.co.jp。(2) “abc”駅近辺の“お得情報”を取得するリクエスト:GET /station/abc?returnURL=https://z.b-sha.co.jp/error HTTP/1.1,Authorization: Basic (省略)。(3) “abc”駅が登録されていなかったことを知らせるレスポンス:HTTP/1.1 301 MOVED PERMANENTLY。(4) サーバ上にあるエラーページのテンプレート情報:GET /error HTTP/1.1。(5) 登録されていない駅名が入力されたことを示すエラーページ。注記:送信されるデータのリクエストヘッダ部分は,一部省略している。
図6 登録されていない駅名である“abc”を入力したときの流れ
順序,手順の2列の表。1:P 社宿泊サイトに登録されていない駅名,例えば,“abc”を入力し,Host ヘッダの値を,V 氏が用意したサイトの FQDN に変更して,サイト Z にリクエストを送る。2:サイト Z は,P 社宿泊サイトに,“/station/abc”をリクエスト URI に指定したリクエストを送る。3:P 社宿泊サイトは,Location ヘッダに [ k ] の URL を含めたレスポンスをサイト Z に返す。4:サイト Z は,受け取ったレスポンスを基に,[ k ] にリクエストを送る。
表4 SSRF 脆弱性を検出した手順

表 4 の手順によって,V 氏は,Authorization ヘッダの値を受け取ることができた。P 社の協力の下,この値を用いることで,本来許可なしではアクセスできない P 社宿泊サイトや同じ Authorization ヘッダの値を利用する P 社保有のサーバへのアクセスが可能になることを確認した。

D 社からは,P 社宿泊サイトからのレスポンスに含まれる URL が想定されたものかを調べて想定外の値の場合はその URL にはアクセスしないようにするという,SSRF 脆弱性への対策が提案された。加えて,④別の対策も実施することが望ましいとのことであった。

R さんは,D 社の脆弱性診断で検出された脆弱性について,B 社の開発部の E 課長に報告した。その後,B 社の開発部によって対策が実施され,D 社による再度の脆弱性診断で問題が修正されたことが確認された。

〔開発プロセスの見直し〕

B 社の Web サイトのセキュリティ水準について,R さんは,開発プロセスの観点からも調査を進めた。

B 社では,顧客に機能の追加要望や性能の改善要望をヒアリングしながら,開発部内で目標を設定し,アジャイル開発を行っている。また,社外の研修などでセキュアプログラミングの知識を習得し,その知識を生かして Web サイトを開発している。

B 社の開発プロセスの概要を図 7 に示す。

B 社の開発プロセスの概要図。上段の“開発フェーズ”では,設計,実装,テストの流れを 1 まとまりとした試作版 1 から試作版 N までを繰り返し,その後に新規リリースを行う。下段の“改良フェーズ”では,新規リリースの後,設計,実装,テストの流れを 1 まとまりとした改良版 1,その後に改良リリース,次に改良版 2,その後に改良リリース,…,1 か月の休止期間,…と続く。注記 1:ライブラリの活用などで 2 週間周期での改良リリースを実現しているが,およそ 20 回に 1 回は大規模な改修があり,改良リリース間隔を 1 か月とすることがある。注記 2:改良フェーズにおいて,半年に 1 回,1 か月の休止期間を設けている。その間,開発部のメンバは,長期休暇の取得,長期研修の受講,Web サイトの点検などを実施している。
図7 B 社の開発プロセスの概要

R さんは,B 社の Web サイトのセキュリティ水準を十分なものにするためには,A 社のような Web セキュリティ管理基準を B 社に導入する必要があると考えた。次は,B 社の開発プロセスについての R さんと E 課長の会話である。

その後,B 社は,セキュリティを考慮したアジャイル開発を行うことになった。

出題趣旨(IPA)

アジャイル開発を行っている企業が増えている中,短期間でリリースすることを優先した結果,システムの脆弱性対応が後回しになっているケースも見られる。本問では,Webサイトのセキュリティを題材として,Webサイトにおける脆弱性対策の理解力,開発プロセスの変化に応じたセキュリティへの対応方法を検討する能力を問う。

採点講評(問全体・IPA)

問 1 では,Web サイトのセキュリティを題材に,脆弱性に関する知識,開発プロセスについて出題した。全体として正答率は平均的であった。

設問と解答例

設問1(1)

本文中の下線①における診断用リクエストの構成要素を,解答群の中から選び,記号で答えよ。 解答群 ア リクエストライン:GET /confirm?"><img src=1 onerror=alert(1)><" イ リクエストライン:GET /confirm?><img src=1 onerror=alert(1)><" ウ リクエストライン:POST /confirm リクエストボディ:"><img src=1 onerror=alert(1)><" エ リクエストライン:POST /confirm リクエストボディ:><img src=1 onerror=alert(1)><"

解答例

  • ア
解説

本文の根拠

図1 注記

queryString には,URL のクエリ文字列以降の値が URL デコードされて格納されている。

〔サイト B の XSS 脆弱性〕

D 社は,サイト B に①診断用リクエストを送ることで,XSS 脆弱性があることを確認した。

図 1 の 1 行目は,queryString を meta タグの content 属性の値(二重引用符で囲まれた部分)にそのまま埋め込んでいる。queryString は URL のクエリ文字列以降の値なので,診断用リクエストは,クエリ文字列に値を載せる GET である。ウ・エの POST は,値がリクエストボディに入り,queryString には入らない。

埋め込まれる位置が二重引用符の中なので,まず " で属性を閉じ,次の > で meta タグを閉じる。続けて <img src=1 onerror=alert(1)> を置くと,画像の読込みエラーでスクリプトが実行される。最後の <" は,行末に残る ">(コードが付ける二重引用符と >)を,新しいタグの一部として吸収する働きをする。これらが全てそろっているのはアである。

イは先頭の " が無いので属性が閉じず,注入した文字列が content の値の一部になるだけで,タグを挿入できない。リクエストラインが GET か POST かと,属性を閉じる " の有無の両方を見る点が,間違えやすい。

設問1(2) 35字以内

本文中の下線②について,考えられる再発防止策を,35 字以内で述べよ。

解答例(2通り)

  • ダウンロードするライブラリに既知の脆弱性がないかを確認する。
  • 特定のWebサイトからの入手をルール化し,明文化する。
解説

本文の根拠

〔サイト B の XSS 脆弱性〕

使用するライブラリは,マルウェアが含まれていない,既知の脆弱性が修正された,安全性が確認できているライブラリを公開している Web サイトから,ファイルサーバにダウンロードし,利用している。

〔サイト B の XSS 脆弱性〕

今回使われていたライブラリ M は,既知の XSS 脆弱性の対策をしていないバージョンであった。

〔サイト B の XSS 脆弱性〕

ファイルサーバは,開発部のメンバであればアクセス可能である。

B 社の方針は,“既知の脆弱性が修正された,安全性が確認できているライブラリ”だけを使うことである。それにもかかわらず,既知の XSS 脆弱性が残るバージョンのライブラリ M が使われた。つまり,方針はあっても,開発部のメンバ一人一人が収集する運用で,ダウンロードのたびに脆弱性の有無を確かめる手順や,入手元の取り決めが無かったと読める。

再発防止策は,この運用の抜けを塞ぐものになる。一つは,ダウンロードするライブラリに既知の脆弱性がないかを確認すること。もう一つは,入手してよい Web サイトを特定し,それをルールとして明文化することである。解答例は,どちらか一方で正解となる別解である。

35 字以内なら,“何を確認するか”(既知の脆弱性の有無)か,“何をルール化するか”(入手元)のどちらかを一文で言い切る。解答例は 30 字と 27 字である。

設問2 解答欄2つ

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

〔a〕解答例

  • 利用者ID

〔b〕解答例

  • セッションオブジェクト

〔備考〕順不同

解説

本文の根拠

〔サイト X の CSRF 脆弱性〕

csrftoken の値は,サーバが発行する推測困難な値であり,ほかの利用者の利用時には別の値が発行される。

〔サイト X の CSRF 脆弱性〕

図 2 の csrftoken の値を設定して送信したところ,利用者 B として処理された。

利用者 B でログインしたまま,リクエストの csrftoken だけを利用者 A のものに差し替えても,処理は成功し,利用者 B として扱われた。サーバは csrftoken が“発行された有効な値か”だけを見ており,“今ログインしている利用者のものか”を確かめていないことになる。これでは,攻撃者が自分のアカウントで取得したトークンを,罠のリクエストに付けて使えてしまう。

CSRF 対策のトークンは,発行した相手(利用者)に結び付けて検証する。ひも付ける先は,利用者を特定する値であるセッションオブジェクト(サーバ側のセッションにトークンを保存して比較する形)か,利用者 ID である。解答例の a と b は順不同なので,この二つが入っていればよい。この方式は OWASP の CSRF Prevention Cheat Sheet でも,セッションに結び付けたトークンを使う方法として説明されている。

セッション ID(JSESSIONID の cookie)そのものも,利用者に固有の値だが,今回の問いでは“ひも付けられていない”ことを,利用者 ID かセッションオブジェクトで答える点に注意する。

設問3(1) 解答欄6つ

本文中の c~h に入れる適切な字句を,それぞれの解答群の中から選び,記号で答えよ。 c,f に関する解答群 ア α イ β d,g に関する解答群 ア 奥 イ 手前 e,h に関する解答群 ア 可視の イ 透明な

〔c〕解答例

  • イ

〔d〕解答例

  • ア

〔e〕解答例

  • ア

〔f〕解答例

  • ア

〔g〕解答例

  • イ

〔h〕解答例

  • イ
解説

本文の根拠

〔サイト X のクリックジャッキング脆弱性〕

このとき,クリックイベントは,利用者から見て手前にある画面上で発生するものとする。

〔サイト X のクリックジャッキング脆弱性〕

この状態のサイトにアクセスした利用者は,意図せず利用者情報の公開範囲を変更させられてしまう可能性がある。

図3

右は画面 β で,中ほどに“ここをクリックして”

クリックイベントは手前の画面で発生する。利用者に“公開範囲の変更”を押させたいので,サイト X の画面 α(更新ボタンがある画面)が,クリックを受け取る側になる必要がある。よって,α を手前に重ね,かつ利用者に見せないために透明にする(f=ア,g=イ,h=イ)。

一方,利用者に実際に見せてクリックさせたいのは,罠サイトの画面 β(“ここをクリックして”と誘導する画面)である。これは奥に,見える状態で置く(c=イ,d=ア,e=ア)。利用者は β の“ここ”を押したつもりで,手前の透明な α の“更新”を押している。

間違えやすいのは,手前と奥,可視と透明の組合せである。“クリックは手前で起こる”という前提文から,手前に置くものが攻撃対象の画面だと決めると,取り違えない。

設問3(2) 解答欄2つ

本文中の i,j に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア Content-Disposition イ Content-Security-Policy ウ X-Content-Type-Options エ X-Frame-Options

〔i〕解答例

  • エ

〔j〕解答例

  • イ
解説

本文の根拠

〔サイト X のクリックジャッキング脆弱性〕

クリックジャッキング脆弱性の対策には,レスポンスヘッダに i を含める方法と j を含める方法がある。後者は標準化されている。

クリックジャッキング対策は,自サイトの画面を他のサイトの frame や iframe に表示させないよう,レスポンスヘッダでブラウザに指示する。古くから使われているのが X-Frame-Options ヘッダで,RFC 7034 に書かれているが,これは標準化文書(Standards Track)ではなく Informational の RFC である。標準化されている方は,Content-Security-Policy ヘッダの frame-ancestors ディレクティブである(W3C の CSP Level 2 で定義)。

したがって,i は X-Frame-Options(エ),“標準化されている”後者の j は Content-Security-Policy(イ)である。

アの Content-Disposition はダウンロード時のファイル名や表示方法を指定するヘッダ,ウの X-Content-Type-Options は MIME タイプの推測を止める nosniff を指定するヘッダで,どちらも画面の埋込みを制限しない。講評のとおり,標準化の動向まで含めて覚えておく点が問われている。

採点講評(IPA)

設問3(2)は,正答率が低かった。クリックジャッキングの対策に使うレスポンスヘッダについては,標準化の動向を含めて正しく理解しておいてほしい。

設問4 45字以内

本文中の下線③について,図 4 のリクエスト中のどの値をどのような値に変更したか。45 字以内で具体的に述べよ。

解答例

  • topicの値をhttps://db-y.b-sha.co.jp/に変更した。
解説

本文の根拠

図4

GET /news?topic=https://www.a-sha.co.jp/news/20220417.html HTTP/1.1

表2 サイト Y,Z の注 1)

サイト Y の DB サーバ:https://db-y.b-sha.co.jp/

〔サイト Y の SSRF 脆弱性〕

サイト Y の DB サーバのメンテナンス用の Web インタフェースにアクセスできることを確認した。

サイト Y は,topic パラメタに指定された URL へ,サイト Y 自身がリクエストを送って内容を取得し,表示する。この URL を検証していないのが SSRF 脆弱性である。値を,外部から直接は届かないが,サイト Y(の Web サーバ)からは到達できる内部の URL に変えれば,サイト Y を踏み台にして内部のサーバにアクセスできる。

確認できたのは“サイト Y の DB サーバのメンテナンス用の Web インタフェース”なので,その URL である https://db-y.b-sha.co.jp/ に変えたことになる。DB サーバには,それぞれのサイトの Web サーバがアクセスできると,表 2 の注 1) に書かれている。

45 字以内で,“どの値を”(topic の値),“どのような値に”(https://db-y.b-sha.co.jp/)を,具体的に書く。解答例は 39 字である。サイト X やサイト Z の DB サーバの URL は答えにならない点に注意する。

設問5(1) 解答欄1つ

表 4 中の k に入れる適切な字句を,15 字以内で答えよ。

〔k〕解答例

  • V氏が用意したサイト
解説

本文の根拠

表4 順序1

Host ヘッダの値を,V 氏が用意したサイトの FQDN に変更して,サイト Z にリクエストを送る。

図5 注 2)

サイト Z は,(1)の Host ヘッダの値を,returnURL 中のホスト名として指定する。

〔サイト Z の SSRF 脆弱性〕

表 4 の手順によって,V 氏は,Authorization ヘッダの値を受け取ることができた。

サイト Z は,P 社宿泊サイトに送るリクエストの returnURL の中のホスト名に,利用者から届いたリクエストの Host ヘッダの値をそのまま使う。V 氏が Host ヘッダを自分のサイトの FQDN に変えると,returnURL は“https://(V 氏のサイトの FQDN)/error”になる。

登録されていない駅名なので,P 社宿泊サイトは,この returnURL を Location ヘッダに入れたレスポンス(図 6 の(3),301)を返す。サイト Z はこのレスポンスに従って,その URL に新たにリクエストを送る。このリクエストには Authorization ヘッダも付いて行くので,V 氏は Authorization ヘッダの値を受け取れた。よって,k は“V氏が用意したサイト”である。

15 字以内なら“V氏が用意したサイト”(10 字)で足りる。Host ヘッダに指定した FQDN のサイトである,という点を答える。

設問5(2) 25字以内

本文中の下線④について,別の対策とは何か。B 社で実施することが望ましい対策を,25 字以内で述べよ。

解答例

  • returnURLの値を固定値にする。
解説

本文の根拠

図5 注 2)

サイト Z は,(1)の Host ヘッダの値を,returnURL 中のホスト名として指定する。

〔サイト Z の SSRF 脆弱性〕

P 社宿泊サイトからのレスポンスに含まれる URL が想定されたものかを調べて想定外の値の場合はその URL にはアクセスしないようにするという,SSRF 脆弱性への対策が提案された。

D 社の提案は,レスポンスに含まれる URL を受け取る側で調べる対策である。これに加える“別の対策”は,そもそも攻撃者が値を変えられないようにする,入口側の対策になる。今回の原因は,利用者が書き換えられる Host ヘッダの値を returnURL に使っていたことである。

そこで,returnURL は Host ヘッダから作らず,固定値(z.b-sha.co.jp の error ページの URL を決め打ち)にする。これなら,Host ヘッダを変えても returnURL は変わらず,P 社宿泊サイトが返す Location も想定した URL のままである。

25 字以内なら,“returnURLの値を固定値にする。”(19 字)が骨子になる。講評のとおり,必要な実装はシステムによって異なるので,今回のシステムの原因(Host ヘッダの利用)に合わせて答える。

採点講評(IPA)

設問5(2)は,正答率が低かった。脆弱性対策のために必要な実装は,システムによって異なる場合がある。システムごとに最適な方法を検討できるようにしておいてほしい。

設問6(1) 解答欄2つ

本文中の下線⑤について,該当する脆弱性を二つ挙げ,それぞれ 15 字以内で答えよ。

〔①〕解答例

  • 一部のセッション管理の脆弱性

〔②〕解答例

  • 認可・アクセス制御の脆弱性
解説

本文の根拠

表1 項番4

認可・アクセス制御の脆弱性は,対象外である。

表1 項番5

セッション管理の脆弱性は,対象である/認可・アクセス制御の脆弱性は,対象である。

表 1 の項番 2〜4(ツールによるレビュー・診断)と項番 5(専門技術者による診断)の違いは,対象にする脆弱性の範囲である。ツールを使う項番 2〜4 では,セッション管理の脆弱性は“一部だけ”が対象で,認可・アクセス制御の脆弱性は“対象外”である。専門技術者による診断(項番 5)だけが,この二つを対象にしている。

したがって,ソースコードレビューやツールでは発見できず専門技術者なら発見できる脆弱性は,一部のセッション管理の脆弱性(ツールが検出できない部分)と,認可・アクセス制御の脆弱性の二つである。

15 字以内なので,“一部のセッション管理の脆弱性”(14 字)と“認可・アクセス制御の脆弱性”(13 字)と書く。セッション管理は“一部”とつけないと,ツールで検出できる部分まで含むことになる点に注意する。

採点講評(IPA)

設問6(1)は,正答率が低かった。脆弱性の種類によって,検出に有効な手段が異なる。それぞれの脆弱性について,どのような検出手段が有効かを理解しておいてほしい。

設問6(2) 20字以内

本文中の下線⑥について,専門技術者による脆弱性診断が長期間行われないことを避けるためには,どのような時期に実施すればよいか。改良リリースの実施に影響を与えないことを前提に,20 字以内で答えよ。

解答例

  • 改良フェーズにおける1か月の休止期間
解説

本文の根拠

図7 注記 2

改良フェーズにおいて,半年に 1 回,1 か月の休止期間を設けている。

図7 注記 2

その間,開発部のメンバは,長期休暇の取得,長期研修の受講,Web サイトの点検などを実施している。

改良リリースの周期は 2 週間程度で,専門技術者による診断に 10 日間くらいかかると,周期の大半を使う。そこで,改良リリースを止めている時期を診断に充てれば,リリースに影響しない。

図 7 では,改良フェーズに半年に 1 回,1 か月の休止期間があり,その間は Web サイトの点検などをしている。この休止期間に診断を実施すれば,少なくとも半年に 1 回は専門技術者の診断が行われる。

20 字以内なら,“改良フェーズにおける1か月の休止期間”(18 字)が,そのまま答えになる。“改良リリースの実施に影響を与えない”という条件を満たす時期は,ここだけである。

設問6(3) 40字以内

本文中の下線⑦について,専門技術者による脆弱性診断が長期間行われないことを避けるためには,開発プロセスをどのように見直せばよいか。アジャイル開発の継続を前提に,40 字以内で述べよ。

解答例(3通り)

  • 専門技術者による脆弱性診断が必要なときは,改良リリースを次回に持ち越す。
  • 半年に一度,改良リリースの期間を長くする。
  • 定期的に,期間の長い改良リリースを設ける。
解説

本文の根拠

図7 注記 1

ライブラリの活用などで 2 週間周期での改良リリースを実現しているが,およそ 20 回に 1 回は大規模な改修があり,改良リリース間隔を 1 か月とすることがある。

R さんと E 課長の会話

専門技術者による脆弱性診断には,その周期の大半を費やしてしまうので,省略できないでしょうか。

設問 6(2) は,既にある休止期間に診断を行う案だった。ここでは,開発プロセスそのものを見直して,診断の時間を確保する。ただし,アジャイル開発(短い周期での改良リリース)は続けることが前提である。

図 7 の注記 1 のとおり,2 週間周期のリリースの中に,およそ 20 回に 1 回,大規模な改修のために間隔が 1 か月になることがある。このように,診断が必要なときは改良リリースを次回に持ち越して間隔を延ばす,半年に一度など定期的に改良リリースの期間を長く設ける,といった見直しができる。解答例の三つはいずれも別解である。

40 字以内なら,“診断の時間を確保するために,改良リリースの期間(間隔)をどうするか”を一文にする。解答例の最長は 36 字である。

設問6(4) 55字以内

本文中の下線⑧について,CSRF 脆弱性の場合では,どのような処理を行う機能が考えられるか。その処理を,55 字以内で具体的に述べよ。

解答例

  • CSRF対策用トークンの発行,HTMLへの埋め込み,必要なひも付け,及びこれを検証する処理
解説

本文の根拠

〔サイト X の CSRF 脆弱性〕

csrftoken と a 又は b とをひも付けるという対策ができていないことが分かった。

R さんと E 課長の会話

脆弱性対策が組み込まれていて,それがデフォルトで有効になっているものもある

CSRF 対策の実装には,トークンの生成と発行,HTML のフォームへの埋込み,トークンと利用者(セッション)とのひも付け,リクエストごとの検証がある。アジャイル開発で定型コードをライブラリとして用意したフレームワークには,この一連の処理を“機能として”提供し,初期設定で有効にしているものがある。サイト X の CSRF 脆弱性は,“ひも付け”が実装されていなかったことが原因だった。

したがって,考えられる機能は,CSRF 対策用のトークンを発行し,HTML に埋め込み,利用者(セッション)にひも付けて,リクエストで送られてきたトークンを検証する処理を行うものである。

55 字以内に収めるには,発行・埋込み・ひも付け・検証の四つを並べる。解答例は 45 字である。講評のとおり,フレームワークにどのような対策が組み込まれているかを知っていないと,答えにくい設問である。

採点講評(IPA)

設問6(4)は,正答率が低かった。ソフトウェア開発に使われているフレームワークにどのような脆弱性対策が組み込まれているかを知っておいてほしい。

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

問2 クラウドサービスへの移行

クラウドサービスへの移行に関する次の記述を読んで,設問 1~5 に答えよ。

X 社は,従業員 500 名の情報サービス会社であり,5 年前から動画投稿配信サービス(以下,動画サービスという)を提供している。動画サービスは,アカウント登録した会員が動画を投稿したり,投稿された動画を閲覧して評価したりすることができるサービスである。動画サービスは,Web サーバ(以下,動画サービスを提供する Web サーバを X 社動画サーバという)を用いて提供されている。X 社のシステム部は,X 社のシステム全てを管理している。X 社のシステム構成を図 1 に示す。

X 社のシステム構成図。インターネットが FW に接続し,FW は L3SW に接続している。L3SW には,DMZ の L2SW,サーバセグメントの L2SW,PC セグメントの L2SW が接続している。DMZ の L2SW には外部 DNS サーバ,外部メールサーバ,プロキシサーバ 1),X 社動画サーバが接続している。サーバセグメントの L2SW には FS,GrW サーバ,認証サーバ,内部 DNS サーバ,内部メールサーバが接続している。PC セグメントの L2SW には XPC(複数台)が接続している。略語:FW はファイアウォール,L2SW はレイヤ 2 スイッチ,GrW はグループウェア,FS はファイルサーバ,L3SW はレイヤ 3 スイッチ,XPC は会社貸与の業務 PC。注 1) 拒否リストに登録した FQDN を宛先とする通信を遮断する機能がある。
図1 X 社のシステム構成

XPC には,Web ブラウザ,電子メール(以下,メールという)ソフト,GrW 用クライアントソフトなどが導入されている。X 社の従業員の認証は,認証サーバで行われており,XPC,GrW サーバ,FS,内部メールサーバへのシングルサインオン(以下,シングルサインオンを SSO という)を実現している。

X 社のシステムでは,動画サービスの人気上昇による会員の増加に伴い,X 社動画サーバの負荷が高くなっており,インターネット回線もひっ迫している。

X 社の経営陣は,この問題への対策と併せて,セキュリティを強化するための抜本的な対策を検討するようシステム部に指示した。システム部の C さんが担当に指名され,セキュリティサービスを提供する W 社から情報処理安全確保支援士(登録セキスペ)の F 氏を招き,助言を受けることになった。

〔抜本的な対策の検討〕

F 氏は,X 社動画サーバをクラウドサービスへ移行し,さらに,Content Delivery Network(CDN)を利用する案を図 2 のように提案した。

1 X 社動画サーバのクラウドサービスへの移行:コンピュータリソースを柔軟に増強できるようにするため,X 社動画サーバをクラウドサービス事業者の IaaS に移行する。クラウドサービス事業者が提供する FW 及び IPS の利用を検討する。2 CDN の利用:X 社動画サーバの可用性を高めるため,CDN を利用する。CDN の利用によって,セキュリティ対策の効果も期待できる。
図2 X 社動画サーバのクラウドサービスへの移行及び CDN の利用案(抜粋)

次は,図 2 の 2 についての C さんと F 氏の会話である。

(1) M 社 CDN から X 社動画サーバ用に割り当てられた FQDN(以下,X-CDN-M-FQDN という)が発行される。(2) X 社の外部 DNS サーバの CNAME レコードで,X 社動画サーバの FQDN(以下,X-FQDN という)と X-CDN-M-FQDN とをひも付ける。
図3 M 社 CDN の利用手順(抜粋)
(1) 会員が端末から X 社動画サーバに動画配信を要求すると,X 社の外部 DNS サーバに問合せが届く。X 社の外部 DNS サーバは,図 3 の設定に基づいて,X-CDN-M-FQDN を返す。(2) 会員の端末は,M 社の DNS サーバに問い合わせて,X-CDN-M-FQDN の名前解決を行う。(3) 会員の端末は,X-CDN-M-FQDN を名前解決した IP アドレスのサーバとの HTTPS 通信を行うため,TLS 接続を確立する。(4) 会員の端末は,動画配信を要求する HTTP リクエストを送信する。TLS の接続先サーバ名には RFC 6066 に基づいて,HTTP リクエストの [ c ] ヘッダには RFC 7230 に基づいて,X-FQDN が指定される。要求された動画を M 社 CDN が保持していない場合,M 社 CDN は,HTTP リクエストの [ c ] ヘッダから X 社動画サーバを特定し,HTTP リクエストを転送する。
図4 動画配信時の動作(抜粋)
(1) ある CDN(以下,CDN-U という)が,X 社内から頻繁にアクセスする他社の Web サイトの複数で利用されているとする。それらの Web サイトの一つを Y 社 Web サイトとする(以下,Y 社 Web サイトの FQDN を Y-FQDN といい,CDN-U から Y 社 Web サイト用に割り当てられた FQDN を Y-CDN-U-FQDN という)。また,CDN-U は攻撃者サーバも利用しているとする(以下,攻撃者サーバの FQDN を Z-FQDN といい,CDN-U から攻撃者サーバ用に割り当てられた FQDN を Z-CDN-U-FQDN という)。(2) この状況で XPC の 1 台がマルウェアに感染すると,次のような攻撃が行われることがある。(3) 当該マルウェアは,Y 社 Web サイトとの HTTPS 通信を行うため,Y-FQDN の名前解決を行うと,まず Y-CDN-U-FQDN が返される。次に,Y-CDN-U-FQDN の名前解決を行い,Y-CDN-U-FQDN を名前解決した IP アドレスのサーバとの HTTPS 通信を行うため,TLS 接続を確立する。(4) 当該マルウェアは,HTTP リクエストを送信する際,[ c ] ヘッダに Z-FQDN を指定する。CDN-U は,攻撃者サーバに HTTP リクエストを転送することになる。(5) 結果として,当該マルウェアと攻撃者サーバとの間の通信が CDN 経由でできてしまう。
図5 ドメインフロンティング攻撃が成功する例

システム部は,X 社動画サーバのクラウドサービスへの移行及び CDN の利用案について経営陣に報告した。この案は経営陣に承認され,X 社動画サーバの移行が開始された。

〔他のサーバのクラウドサービスへの移行案〕

X 社動画サーバの移行が完了し,CDN の利用も開始された。X 社動画サーバに関する課題が解決されると,経営陣は,自社が保有する他のサーバについてもクラウドサービスへの移行を検討するようシステム部に指示した。システム部では,図 6 に示すクラウドサービスへの移行案を作成した。

・GrW 及びメールを SaaS に移行する。SaaS に切り替え後,GrW サーバ,外部メールサーバ及び内部メールサーバは,廃止する。・従業員の利便性を確保するために,移行後の SaaS でも SSO を実現する。
図6 他のサーバのクラウドサービスへの移行案(抜粋)

〔SSO の現状〕

X 社では,Kerberos 認証で SSO が実現されている。XPC から GrW サーバにアクセスする場合の Kerberos 認証の流れを図 7 に,図 7 中の各処理の概要を表 1 に示す。

シーケンス図。登場者は GrW サーバ,XPC,認証サーバ。XPC から認証サーバへ“利用者 ID とパスワード”を送る。認証サーバは処理 1 を行い,XPC へ TGT 1) を返す。XPC は TGT を保存する。(中略を示す波線)利用者が XPC に“GrW サーバへのアクセス要求”を行う(破線)。XPC から認証サーバへ TGT を送る。認証サーバは処理 2 を行い,XPC へ ST 2) を返す。XPC は ST を保存する。XPC から GrW サーバへ ST を送る。GrW サーバは処理 3 を行い,XPC へ“サービス提供”を行う。注 1) 利用者のアクセス権限を示すチケットである。認証サーバに登録された TGT 発行用アカウントのパスワードハッシュ値を鍵として暗号化されている。注 2) アクセス対象のサーバごとに発行されるチケットである。アクセス対象のサーバの管理者アカウント(以下,サーバ管理者アカウントという)のパスワードハッシュ値を鍵として暗号化されている。
図7 XPC から GrW サーバにアクセスする場合の Kerberos 認証の流れ
処理名,処理内容の2列の表。処理 1:利用者 ID とパスワードが正しければ,TGT を発行する。処理 2:TGT を復号して検証し,問題なければ,ST を発行する。処理 3:ST を復号して検証し,問題なければ,アクセスを許可する。
表1 図 7 中の各処理の概要

次は,図 7 についての C さんと F 氏の会話である。

〔SaaS での SSO の実現〕

C さんは,GrW 及びメールの SaaS への移行後の SSO の実現方法を F 氏に尋ねた。次は,その際の F 氏と C さんの会話である。

シーケンス図。登場者は SaaS,XPC,IDaaS。(1) XPC から SaaS へサービス要求。SaaS は処理 1 を行う。(2) SaaS から XPC へ SAML Request を含むリダイレクト。(3) XPC から IDaaS へ SAML Request を含む HTTP リクエスト。IDaaS は処理 2 を行う。(4) IDaaS から XPC へログイン画面応答。(5) XPC から IDaaS へ認証情報。IDaaS は処理 3 を行う。(6) IDaaS から XPC へ SAML Response の送信フォーム。(7) XPC から SaaS へ SAML Response。SaaS は処理 4 を行う。(8) SaaS から XPC へサービス提供。
図8 SAML 認証の流れ
処理名,処理内容の2列の表。処理 1:・IDaaS に認証を要求する SAML Request を生成し,エンコードする。・エンコード結果と IDaaS のログイン画面の URL を組み合わせて,リダイレクト先 URL を生成する。処理 2:・図 8 中の(3)の HTTP リクエスト中の [ e ] から SAML Request を取得する。・信頼関係が構築された SaaS からの認証要求であることを検証する。処理 3:・認証処理を行う。利用者の認証が成功した場合,処理 4 で用いる SAML アサーションと,それに対するデジタル署名を含めた SAML Response の送信フォームを生成する。処理 4:・SAML Response に含まれるデジタル署名を検証することで,デジタル署名が [ f ] のものであること,及び SAML アサーションの [ g ] がないことを確認する。・SAML アサーションの内容を検証し,サービス提供すべきかどうかを決定する。
表2 図 8 中の各処理の概要

C さんは,F 氏の提案を受け,SAML 認証をサポートしている IDaaS を調査した。同時に,GrW サービス及びメールサービスを提供し,かつ,SAML 認証をサポートしている SaaS を調査した。調査の結果,G 社の SaaS と IDaaS(以下,G 社の GrW サービスを GrW-G,メールサービスをメール-G,IDaaS を IDaaS-G という)に移行することを経営陣に提案した。この案は経営陣に承認され,GrW-G 及びメール-G への移行並びに IDaaS-G での SSO の準備が開始された。

〔従業員からの要望〕

GrW-G,メール-G 及び IDaaS-G への移行及び SSO の準備が完了し,利用が開始された 3 か月後に,システム部は,X 社の従業員に対して,GrW-G 及びメール-G についてのヒアリングを実施した。その回答に,GrW-G でスケジュールを管理しているが,会議の主催者が会議日程の調整をもっと簡単にできるようにしてほしいという要望があった。C さんは,S 社が提供しているスケジュール調整サービス(以下,S サービスという)を導入し,GrW-G と連携させることで,その要望に応えることができると考えた。S サービスの内容を表 3 に示す。

項番,項目,内容の3列の表。項番 1,概要:SaaS で提供されており,S サービスのスマートフォン用アプリケーションプログラム(以下,スマートフォン用アプリケーションプログラムをスマホアプリという)又は PC の Web ブラウザから利用できる。項番 2,利用手順:(1) 主催者は,S サービスにアクセスする。(2) S サービスは,GrW-G から主催者のスケジュールを取得し,空き時間を表示する。(3) 主催者は,空き時間の中から会議日程の候補を複数選ぶ。(4) S サービスは,会議の参加予定者に,各候補に対する参加可否の回答を依頼するメールを送信する。(5) 会議の参加予定者は,可否を回答する。(6) S サービスは,会議の参加予定者の各候補に対する参加可否の一覧表を主催者に示す。(7) 主催者は,一覧表を見て会議日程を決定する。(8) S サービスは,会議の参加予定者に招待メールを送付し,会議日程を GrW-G の主催者のスケジュールに登録する。
表3 S サービスの内容(抜粋)

C さんは,S サービスの導入検討を進める中で,S サービス,GrW-G 及び IDaaS-G の間の連携について F 氏に相談した。次は,その際の F 氏と C さんの会話である。

シーケンス図。登場者は,利用者(従業員)の端末,[ k ],[ l ],[ m ]。(1) 端末から k へサービス要求。(2) k から端末へリダイレクト。(3) 端末から l へ認可要求。(4) 端末と l の間で認可同意処理(双方向)。(5) l から端末へリダイレクト。(6) 端末から k へ認可コード。(7) k から l へトークン要求。(8) l から k へトークン応答。(9) k から m へ利用者情報の問合せ。(10) m から k へ利用者情報。その下に,端末・k・l・m の全ての生存線をまたぐ枠 [ n ] がある。
図9 OAuth 2.0 を利用したサービス要求からスケジュール情報の取得までの流れ

〔企画チームからの要望〕

C さんは,企画チームから要望を受けた。要望は,T 社が運営しているメッセージ投稿サイト(以下,T 社投稿サイトという)と X 社動画サーバとを連携させ,T 社投稿サイトの認証サーバを用いた認証機能,及び T 社投稿サイトの投稿サーバへの自動投稿機能を X 社動画サーバに追加したいというものだった。この要望に対応することで,T 社投稿サイトのアカウントをもつ動画サービスの会員は,T 社投稿サイトにログインすれば X 社動画サーバも利用できる。また,X 社動画サーバに動画を投稿すると,“動画の概要”が T 社投稿サイトに自動で投稿されるようにもできる。C さんは,T 社投稿サイトと X 社動画サーバの連携方法について,F 氏に助言を求めた。次は,その際の F 氏と C さんの会話である。

シーケンス図。登場者は,利用者(会員)の端末,[ r ],[ s ],[ t ]。(1) 端末から r へサービス要求。(2) r から端末へリダイレクト。(3) 端末から s へ認証要求。(4) 端末と s の間でログイン処理(双方向)。(5) s から端末へリダイレクト。(6) 端末から r へ認可コード。(7) r から s へトークン要求。(8) s から r へトークン応答。(中略を示す波線)r から t へ,API を使った“動画の概要”の投稿。
図10 OIDC を用いた T 社投稿サイトと X 社動画サーバの連携の流れ

システム部は,T 社投稿サイトと動画サービスとを,OIDC で連携することに決め,X 社動画サーバの改修に着手した。

設問 4(2)の解答群として示されている図。登場者は,利用者(従業員)の端末,[ k ],[ l ],[ m ]。ア:(11) スケジュール取得要求が端末から l へ,(12) スケジュール情報が l から端末へ。イ:(11) スケジュール取得要求が端末から m へ,(12) スケジュール情報が m から端末へ。ウ:(11) スケジュール取得要求が k から l へ,(12) スケジュール情報が l から k へ。エ:(11) スケジュール取得要求が k から m へ,(12) スケジュール情報が m から k へ。

出題趣旨(IPA)

昨今,クラウドサービスが積極的に活用されるようになってきており,クラウドサービスへの移行が増加している。クラウドサービスへの移行では,情報セキュリティについて,オンプレミスのシステムとは異なる知識と技術,運用の知見が求められる。本問では,クラウドサービスへの移行を題材として,各種認証の仕組み,認証に関するセキュリティ対策などの知識及び技術力を問う。

採点講評(問全体・IPA)

問 2 では,クラウドサービスへの移行を題材に,各種認証の仕組み,認証に関するセキュリティ対策について出題した。全体として正答率は平均的であった。

設問と解答例

設問1(1) 解答欄1つ

本文中の a に入れる適切な字句を,5 字以内で答えよ。

〔a〕解答例

  • キャッシュ
解説

本文の根拠

〔抜本的な対策の検討〕 F 氏の発言

要求された動画を保持していれば代理応答し,保持していなければ動画を保持している X 社動画サーバにアクセスして動画を取得し,応答します。

CDN は,インターネット上にコンテンツのコピーを置くサーバを分散配置し,利用者に近いサーバから配信する仕組みである。そのサーバは,動画を保持していれば代理応答し,無ければ元の X 社動画サーバから取得して応答する,という動きをする。保持した内容を再利用する動作なので,この分散配置するサーバはキャッシュサーバである。

キャッシュサーバが多くの配信を代理応答することで,X 社動画サーバの負荷とインターネット回線の使用量が減る。これは,図 2 の目的(可用性を高める)とも合う。

5 字以内の指定なので,“キャッシュ”(5 字)と書く。リバースプロキシのように働くが,問いは“分散配置するサーバ”の呼び名である。

設問1(2) 解答欄1つ

本文中の b に入れる適切な字句を,英字 5 字以内で答えよ。

〔b〕解答例

  • DDoS
解説

本文の根拠

〔抜本的な対策の検討〕 F 氏の発言

多くの動画配信が代理応答されるので,X 社動画サーバの負荷が軽減されます。

CDN のキャッシュサーバは世界中に分散していて,多数のサーバで要求を受け止める。動画の配信要求が大量に来ても,多くは代理応答で済み,元の X 社動画サーバには届かない。多数の機器から大量の通信を送りつけてサービスを停止させる攻撃は,DDoS 攻撃である。分散した多数のキャッシュサーバで受け止められるので,この攻撃への耐性が高まる。

負荷が軽減される仕組みは,会話文に書かれている。“負荷”“回線のひっ迫”に対応する攻撃として,DoS ではなく DDoS(分散型)である点に注意する。

英字 5 字以内なので“DDoS”(4 字)と書く。

設問1(3) 解答欄1つ

図 4 中,図 5 中及び本文中の c に入れる適切な字句を,英字 5 字以内で答えよ。

〔c〕解答例

  • Host
解説

本文の根拠

図4 (4)

TLS の接続先サーバ名には RFC 6066 に基づいて,HTTP リクエストの c ヘッダには RFC 7230 に基づいて,X-FQDN が指定される。

図5 (4)

当該マルウェアは,HTTP リクエストを送信する際,c ヘッダに Z-FQDN を指定する。

図 4 の動作は,M 社 CDN が複数の顧客のサイトを同じ IP アドレスのサーバで扱うために,HTTP リクエストで宛先のサイトを伝える必要があることを示している。TLS の接続先サーバ名は RFC 6066 の server_name 拡張(SNI)であり,HTTP リクエスト側で同じ役割を持つのは,HTTP/1.1 の Host ヘッダである。RFC 7230 は HTTP/1.1 のメッセージ構文を定めた RFC で,Host ヘッダもここで定義されている。M 社 CDN は,この Host ヘッダから X 社動画サーバを特定して転送する。

図 5 のドメインフロンティング攻撃は,TLS の接続先(Y-CDN-U-FQDN)と,TLS の中に入った HTTP リクエストの Host ヘッダ(Z-FQDN)とを別々の値にする攻撃である。外から見える TLS の接続先は正当な Y 社 Web サイトのままなので,FW やプロキシサーバが見ただけでは区別が付かない。

英字 5 字以内なので“Host”(4 字)と書く。講評のとおり,DNS のレコードや名前解決の話と混同して誤る解答が多かった。

採点講評(IPA)

設問1(3)及び(5)は,正答率が低かった。HTTPとTLSに関する問題であったが,DNSと混同していると思われる解答が多かった。CDNを悪用したドメインフロンティング攻撃は,標的型攻撃などでもよく登場する攻撃手法なので,是非知っておいてほしい。

設問1(4) 60字以内

本文中の下線①について,Y-CDN-U-FQDN を名前解決した IP アドレスを宛先とする通信を FW で拒否した場合に閲覧できなくなる Web サイトの範囲を,60 字以内で具体的に述べよ。

解答例

  • Y-CDN-U-FQDNを名前解決したIPアドレスと同じIPアドレスをもつWebサイト
解説

本文の根拠

図5 (1)

ある CDN(以下,CDN-U という)が,X 社内から頻繁にアクセスする他社の Web サイトの複数で利用されているとする。

〔抜本的な対策の検討〕 F 氏の発言

Y-CDN-U-FQDN を名前解決した IP アドレスを宛先とする通信を FW で拒否すると,複数の Web サイトが閲覧できなくなる影響があります。

CDN は,一つの IP アドレスのサーバで,複数の顧客のサイトを扱う。CDN-U は,Y 社 Web サイトを含む複数の Web サイトで使われている。Y-CDN-U-FQDN を名前解決した IP アドレスを FW で拒否すると,その IP アドレス宛の通信が全て遮断される。

したがって,閲覧できなくなるのは,Y 社 Web サイトだけではなく,Y-CDN-U-FQDN を名前解決した IP アドレスと同じ IP アドレスをもつ Web サイト(CDN-U を利用していて,同じ IP アドレスに解決される他の Web サイト)である。

60 字以内なら,“どの IP アドレスと同じか”(Y-CDN-U-FQDN の名前解決結果)と“何がもつサイトか”(IP アドレスが同じ Web サイト)を具体的に書く。解答例は 43 字である。

設問1(5) 解答欄1つ

本文中の d に入れる適切な字句を,20 字以内で答えよ。

〔d〕解答例

  • TLSの接続先サーバ名
解説

本文の根拠

〔抜本的な対策の検討〕 F 氏の発言

X 社では,FW 又はプロキシサーバを,アウトバウンド通信の復号及び高機能な通信解析ができるものに替え

図5 (3)

Y-CDN-U-FQDN を名前解決した IP アドレスのサーバとの HTTPS 通信を行うため,TLS 接続を確立する。

ドメインフロンティングでは,TLS の接続先サーバ名(SNI)と,HTTP リクエストの Host ヘッダの値が食い違う。通常の通信では,この二つは同じ宛先を指すはずなので,一致しているかを確かめ,一致しなければ遮断すれば攻撃を止められる。

対策は,通信の復号ができる FW 又はプロキシサーバを使い,TLS の接続先サーバ名(d)と,HTTP リクエスト中の Host ヘッダの値を比べる形になる。TLS の中の Host ヘッダは,復号しないと見えないので,“アウトバウンド通信の復号”が要る。

20 字以内なので,“TLSの接続先サーバ名”(11 字)と書く。図 4 の(4)にも“TLSの接続先サーバ名”という言い方が出ている。講評のとおり,DNS の名前解決と混同して誤る解答が多かった。

採点講評(IPA)

設問1(3)及び(5)は,正答率が低かった。HTTPとTLSに関する問題であったが,DNSと混同していると思われる解答が多かった。CDNを悪用したドメインフロンティング攻撃は,標的型攻撃などでもよく登場する攻撃手法なので,是非知っておいてほしい。

設問2(1) 30字以内

本文中の下線②について,認証サーバ側では検知することができない理由を,30 字以内で述べよ。

解答例

  • STは認証サーバに送られないから
解説

本文の根拠

図7

XPC から認証サーバへ TGT を送る。認証サーバは処理 2 を行い,XPC へ ST 2) を返す。

図7

XPC から GrW サーバへ ST を送る。

Kerberos 認証では,認証サーバに TGT を提示して ST を発行してもらう。発行された ST は XPC に保存され,XPC から GrW サーバに送られる。つまり,ST の提示先は GrW サーバ(処理 3 でアクセスを許可する側)であり,認証サーバには ST が送られない。

認証サーバが検証できるのは,自分に提示される TGT(処理 2 で復号して検証)までである。偽造された ST が GrW サーバなどに提示されても,その通信は認証サーバを通らないので,認証サーバ側では気付けない。

30 字以内なら,“STは認証サーバに送られないから”(16 字)で足りる。“ST を認証サーバが発行しているのに,なぜ検知できないか”と迷うところだが,答えは“提示先に認証サーバが含まれない”ことである。

設問2(2) 35字以内

本文中の下線③について,対策にならない理由を,35 字以内で述べよ。

解答例

  • 総当たり攻撃はオフラインで行われ,ログインに失敗しないから
解説

本文の根拠

図7 注 2)

アクセス対象のサーバの管理者アカウント(以下,サーバ管理者アカウントという)のパスワードハッシュ値を鍵として暗号化されている。

〔SSO の現状〕 F 氏の発言

奪取された ST に対してサーバ管理者アカウントのパスワードの総当たり攻撃が行われ,それが成功すると,当該サーバ管理者アカウントでアクセスできるサーバが乗っ取られてしまいます。

ST は,サーバ管理者アカウントのパスワードのハッシュ値を鍵として暗号化されている。攻撃者は,奪取した ST を手元に持ち帰り,パスワードの候補から作った鍵で復号を試せる。復号に成功した候補が,そのアカウントのパスワードである。

この試行は攻撃者の手元(オフライン)で行われ,サーバにログインを試みるわけではない。したがって,サーバ側で“ログイン連続失敗時のアカウントロック”を有効にしても,ロックされる対象(ログインの失敗)が発生せず,対策にならない。

35 字以内なら,“総当たり攻撃はオフラインで行われ,ログインに失敗しないから”(29 字)で足りる。講評のとおり,パスワードスプレー攻撃などオンラインの攻撃と取り違えた解答が散見された。オンラインかオフラインかが分かれ目である。

採点講評(IPA)

設問2(2)は,正答率が平均的であった。オフラインにおける総当たり攻撃の問題であったが,パスワードスプレー攻撃などパスワードに対するオンラインの攻撃手法に言及した解答も散見された。パスワードに対する攻撃手法の種類や違いについて,理解を深めてほしい。

設問3(1) 解答欄1つ

表 2 中の e に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア cookie イ HTML ウ クエリ文字列 エ ボディ オ リファラ

〔e〕解答例

  • ウ
解説

本文の根拠

表2 処理1

エンコード結果と IDaaS のログイン画面の URL を組み合わせて,リダイレクト先 URL を生成する。

図8

(3) XPC から IDaaS へ SAML Request を含む HTTP リクエスト。

処理 1 は,エンコードした SAML Request を IDaaS のログイン画面の URL と組み合わせて,リダイレクト先 URL を作る。つまり SAML Request は URL の一部として運ばれる。XPC はこの URL へ HTTP リクエストを送るので,(3) の HTTP リクエストでは,SAML Request は URL のクエリ文字列に入っている。SAML 2.0 の HTTP Redirect バインディングは,SAMLRequest というパラメタを URL のクエリ文字列に入れて運ぶ。処理 2 の IDaaS は,クエリ文字列から SAML Request を取り出す。

このように,リダイレクト先 URL に載せる以上,cookie,HTML,ボディ,リファラのいずれでもなく,クエリ文字列(ウ)になる。

エのボディは POST バインディングで SAML Response などを運ぶ場所である。本問の(6)(7)の SAML Response は“送信フォーム”を使う形で,向きと役割が違う点で混同しやすい。

設問3(2) 解答欄1つ

表 2 中の f に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア IDaaS イ SaaS ウ XPC

〔f〕解答例

  • ア
解説

本文の根拠

図8

(5) XPC から IDaaS へ認証情報。IDaaS は処理 3 を行う。

表2 処理3

利用者の認証が成功した場合,処理 4 で用いる SAML アサーションと,それに対するデジタル署名を含めた SAML Response の送信フォームを生成する。

SAML Response とそのデジタル署名は,処理 3 で生成される。処理 3 を行うのは IDaaS(図 8 の(5)で認証情報を受け取る側)なので,処理 4 で SaaS が確認するデジタル署名は,IDaaS のものであるはずだ。署名の検証によって,SAML Response を作った相手が IDaaS であることを確かめる。

SaaS や XPC のものであれば,信頼している IDaaS が発行した証明にならない。

アの IDaaS を選ぶ。署名を作る処理と,その署名を確かめる処理の登場者が違う点に注意する。

設問3(3) 解答欄1つ

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

〔g〕解答例

  • 偽造
解説

本文の根拠

表2 処理4

SAML Response に含まれるデジタル署名を検証することで,デジタル署名が f のものであること,及び SAML アサーションの g がないことを確認する。

デジタル署名の検証でできることは,署名者が正しいこと(f),及び署名の対象(SAML アサーション)の内容が署名時から変わっていないことの確認である。内容が作り替えられたり,別のものにすり替えられたりしていないということは,アサーションの偽造がないということである。

解答例は“偽造”である。署名を付けた後で内容が書き換わると,検証に失敗して検出できる。

5 字以内なので,“偽造”(2 字)と書く。f が“誰が作ったか”(IDaaS),g が“内容が正しいか”(偽造がない)を確かめる,という対応で考える。

設問3(4) 解答欄3つ

本文中の h~j に入れる適切な数字を,それぞれ答えよ。

〔h〕解答例

  • 1

〔i〕解答例

  • 3

〔j〕解答例

  • 4

〔備考〕i,j は順不同

解説

本文の根拠

表2 処理1

エンコード結果と IDaaS のログイン画面の URL を組み合わせて,リダイレクト先 URL を生成する。

表2 処理4

SAML Response に含まれるデジタル署名を検証することで,デジタル署名が f のものであること

表2 処理3

それに対するデジタル署名を含めた SAML Response の送信フォームを生成する。

h は,事前に共有する URL を使う処理である。表 2 のうち URL を使うのは,IDaaS のログイン画面の URL を使ってリダイレクト先 URL を作る処理 1 である。したがって h は 1 である。

i,j は,デジタル証明書が必要な処理である。デジタル署名に関わるのは,署名を含めた SAML Response を生成する処理 3(署名する側)と,署名を検証する処理 4(検証する側)である。この二つの順序は問われず,3 と 4 のどちらを i,j に入れてもよい(解答例は順不同)。

処理 2 は“信頼関係が構築された SaaS からの認証要求であることを検証する”処理だが,署名や証明書の話は書かれていないので,答えは 3 と 4 になる。数字で答える問いなので,表 2 の処理名の番号を取り違えないようにする。

設問4(1) 解答欄3つ

図 9 中の k~m に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア GrW-G イ IDaaS-G ウ S サービス

〔k〕解答例

  • ウ

〔l〕解答例

  • イ

〔m〕解答例

  • ア
解説

本文の根拠

〔従業員からの要望〕

S サービス,GrW-G 及び IDaaS-G は,OAuth 2.0 をサポートしています。

表3 項番2

S サービスは,GrW-G から主催者のスケジュールを取得し,空き時間を表示する。

OAuth 2.0 では,リソースへのアクセスを要求するクライアント(今回は S サービス),認可を行う認可サーバ(今回は IDaaS-G),保護されたリソースを持つリソースサーバ(今回は GrW-G)が登場する。S サービスが GrW-G から主催者のスケジュールを取得する,というのが表 3 の利用手順である。

図 9 では,利用者の端末が最初にサービス要求を送り,リダイレクトの起点となる k がクライアントの S サービス(ウ)。認可要求を受け付け,認可コードを出し,トークンを発行する l が認可サーバの IDaaS-G(イ)。(9) で利用者情報の問合せを受ける m が,リソースサーバの GrW-G(ア)である。

間違えやすいのは,IDaaS-G を“SSO の認証サーバ”と見て k に置くことである。(1) のサービス要求を受けるのは S サービスである。

設問4(2) 解答欄1つ

図 9 中の n に入れる適切な流れを解答群の中から選び,記号で答えよ。 解答群 ア~エ(本文末尾の図に示されている)

〔n〕解答例

  • エ
解説

本文の根拠

表3 項番2

S サービスは,GrW-G から主催者のスケジュールを取得し,空き時間を表示する。

図9

(9) k から m へ利用者情報の問合せ。

(10) までで,S サービス(k)はトークンを得ている。その後,S サービスは,そのトークンを使って GrW-G(m)に主催者のスケジュールの取得を要求し,GrW-G が返す。つまり,(11) スケジュール取得要求は k から m へ,(12) スケジュール情報は m から k へ流れる。これはエである。

ア・イは,利用者の端末が直接 IDaaS-G 又は GrW-G とやり取りする形で,スケジュールの取得は S サービスが行うという表 3 と合わない。ウは,スケジュール情報を持たない認可サーバ(l)にスケジュールを要求する形で,誤りである。

選択肢の矢印の向きと,どのサーバ間の通信かを読む点が要である。

設問4(3) 解答欄2つ

本文中の o,p に入れる適切な通信を,図 9 中の(1)~(10)から選び,番号で答えよ。

〔o〕解答例

  • (2)

〔p〕解答例

  • (6)
解説

本文の根拠

〔従業員からの要望〕

適切な実装であれば,図 9 中の o において,state パラメタを付与して送信し,図 9 中の p で送られてきたものと比較することで,攻撃を検知しているはずです。

図9

(6) 端末から k へ認可コード。

state パラメタは,OAuth 2.0 の CSRF 対策である(RFC 6749 が,認可要求と認可応答を結び付ける値として説明している)。クライアントは,利用者ごとに推測困難な state を作り,利用者のセッションに保存したうえで,認可要求に付けて送る。認可サーバは,認可コードを返す応答にその値をそのまま付けて返す。クライアントは,受け取った値を,保存しておいた値と比較する。

認可要求は,クライアント(k)がリダイレクトで利用者の端末を認可サーバに向かわせる (2) で作られるので,o は (2) である。認可コードが端末から k に届く (6) で,認可サーバからの応答の state が戻ってくるので,p は (6) である。(3) は利用者の端末からの送信で,k が state を付けて送る通信ではない。

講評のとおり,OAuth 2.0 のメカニズムと攻撃手法を理解していないと答えにくい設問で,正答率が低かった。“送る”“戻ってくる”の向きに注意して,クライアント側の通信を選ぶ。

採点講評(IPA)

設問4(3)は,正答率が低かった。OAuth 2.0のメカニズムと攻撃手法は,安全なAPIアクセスの実現のために必要な知識なのでよく理解してほしい。

設問4(4) 解答欄1つ

本文中の q に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア ASLR(Address Space Layout Randomization) イ EIAM(Enterprise Identity and Access Management) ウ PKCE(Proof Key for Code Exchange) エ SCIM(System for Cross-domain Identity Management)

〔q〕解答例

  • ウ
解説

本文の根拠

〔従業員からの要望〕

S サービスのスマホアプリでランダムな検証コードとその値を基にしたチャレンジコードを作成して,そのチャレンジコードを認可要求に追加し,検証コードをトークン要求に追加します。

検証コード(code verifier)から作ったチャレンジコード(code challenge)を認可要求に付け,検証コードをトークン要求で示す仕組みは,PKCE(Proof Key for Code Exchange,RFC 7636)である。認可コードを横取りした攻撃者は,検証コードを知らないので,トークンを得られない。

アの ASLR はメモリ配置のランダム化,イの EIAM は企業内の ID・アクセス管理,エの SCIM は ID 情報を自動プロビジョニングで同期するための仕様であり,認可コードの横取り対策ではない。

会話文の“検証コード”“チャレンジコード”から PKCE の名前を引けるかが問われている。

設問5(1) 解答欄3つ

図 10 中の r~t に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア IDaaS-G イ S サービス ウ T 社投稿サイトの投稿サーバ エ T 社投稿サイトの認証サーバ オ X 社動画サーバ

〔r〕解答例

  • オ

〔s〕解答例

  • エ

〔t〕解答例

  • ウ
解説

本文の根拠

〔企画チームからの要望〕

T 社投稿サイトの認証サーバを用いた認証機能,及び T 社投稿サイトの投稿サーバへの自動投稿機能を X 社動画サーバに追加したい

図10

r から t へ,API を使った“動画の概要”の投稿。

要望は,X 社動画サーバに,T 社投稿サイトの認証サーバを使った認証と,T 社投稿サイトの投稿サーバへの自動投稿を追加することである。OIDC では,認証を依頼する側(RP)が X 社動画サーバ,認証を行う側(OP)が T 社投稿サイトの認証サーバである。

図 10 では,利用者が最初にサービス要求を送り,リダイレクトの起点となる r が X 社動画サーバ(オ)。認証要求を受け,認可コード・トークン応答を返す s が T 社投稿サイトの認証サーバ(エ)。最後に r から API で“動画の概要”の投稿を受ける t が,T 社投稿サイトの投稿サーバ(ウ)である。

IDaaS-G や S サービスは,図 9 の OAuth 2.0 の登場者で,この要望には出てこない。選択肢のうち使わないものがある点に注意する。

設問5(2) 解答欄1つ

本文中の u に入れる適切な通信を,図 10 中の(1)~(8)から選び,番号で答えよ。

〔u〕解答例

  • (8)
解説

本文の根拠

図10

(7) r から s へトークン要求。(8) s から r へトークン応答。

〔企画チームからの要望〕 F 氏の発言

認可コードフローの場合,ID トークンは,図 10 中の u で送付されます。

OpenID Connect の認可コードフローでは,認可コードを受け取ったクライアントが,トークンエンドポイントにトークン要求を送り,そのレスポンス(トークン応答)で,アクセストークンと ID トークンが返る(OpenID Connect Core)。認可コードを受け取る (6) の時点では,ID トークンはまだ届かない。

図 10 のトークン応答は (8)(s から r へ)である。よって,u は (8) である。

(6) の認可コードは,ID トークンを得るための引換券であり,ID トークンそのものではない。通信の番号で答える問いなので,(6) と (8) を取り違えないようにする。

設問5(3) 解答欄1つ

本文中の v に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア base32 イ base64url ウ ROT13 エ UTF-8

〔v〕解答例

  • イ
解説

本文の根拠

〔企画チームからの要望〕 F 氏の発言

ID トークンは,JSON Web Token 形式で表現され,ヘッダ,ペイロード,署名の三つの部分で構成されます。

JSON Web Token(JWT,RFC 7519)は,ヘッダ,ペイロード,署名を,それぞれ Base64url(URL に使える形の Base64)でエンコードし,ピリオドでつないだ文字列として表現する(JWS,RFC 7515)。よって v は base64url(イ)である。

アの base32 は別のエンコード方式で JWT では使わない。ウの ROT13 は文字をずらす簡易変換で,エンコード方式として使われない。エの UTF-8 は文字コードで,JSON 文字列を UTF-8 のバイト列にしてから base64url にする際に使うが,ヘッダ,ペイロード,署名を“エンコード”する方式の答えとしては,base64url が適切である。

通常の Base64 ではなく,URL に含められるよう +,/ を -,_ に置き換え,パディングの = を省く Base64url である点が,間違えやすい。

設問5(4) 解答欄2つ

本文中の w,x に入れる適切な字句を,それぞれ 10 字以内で答えよ。

〔w〕解答例

  • 認証要求

〔x〕解答例

  • IDトークン
解説

本文の根拠

〔企画チームからの要望〕 F 氏の発言

ハイブリッドフローを用いる場合,state パラメタのほか,nonce 値を実装しているかを確認すべきです。

図10

(3) 端末から s へ認証要求。

nonce は,クライアントが生成して認証要求に含め,ID トークンの中に同じ値が入って返ってくる値である。クライアントは,受け取った ID トークンに含まれる nonce を,送った値と比較する。一致しなければ,攻撃者が別のところで手に入れた ID トークンの使い回し(リプレイ)などと判断できる。

したがって w は,nonce を含めて送信するもので,図 10 では (3) の認証要求である。x は,送られてきたものの中で nonce を検証する対象で,ID トークンである。

10 字以内なので,w は“認証要求”(4 字),x は“IDトークン”(6 字)。state と nonce の違い(state は認可要求と応答の結び付け,nonce は ID トークンとの結び付け)を取り違えやすい。講評のとおり,OpenID Connect のメカニズムと攻撃手法の理解が問われている。

採点講評(IPA)

設問5(4)は,正答率が低かった。OpenID Connectのメカニズムと攻撃手法は,安全な認証基盤の実現のために必要な知識なのでよく理解してほしい。

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