‹ ぱすてく

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

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

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

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

この年度を解いてみる

問1 Web セキュリティ

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

A 社グループは,全体で従業員 20,000 名の製造業グループである。技術開発や新製品の製造・販売を行う A 社のほか,特化型の製品の製造・販売を行う複数の子会社(以下,グループ各社という)がある。A 社及びグループ各社には,様々な Web サイトがある。A 社では,資産管理システムを利用し,IT 資産の管理を効率化している。Web サイトの立上げ時は,資産管理システムへの Web サイトの概要,システム構成,IP アドレス,担当者などの登録申請が必要である。

A 社には,CISO が率いるセキュリティ推進部がある。セキュリティ推進部の業務は,主に次の三つである。

IoT 製品の市場拡大によってグループ各社による新規 Web サイト開発の増加が予想されている中,A 社の経営陣は,グループ各社の Web サイトのセキュリティが十分かどうかを懸念し始めた。そこで,グループ各社の重要な Web サイトも,A 社のセキュリティ推進部がグループ各社と協議しつつ診断を管理することになった。

セキュリティ推進部が B 社に診断対象となる Web サイトのリリーススケジュールを伝えたところ,同時期に多数の診断を依頼されても対応することができない可能性があるとのことだった。そこで,グループ各社の一部の Web サイトに対する診断を A 社グループ内で実施できるようにするための内製化推進プロジェクト(以下,S プロジェクトという)を立ち上げた。

セキュリティ推進部の Z さんは,S プロジェクトを担当することになった。Z さんはこれまでも B 社への診断の依頼を担当しており,診断の準備から診断結果の報告まで,診断全体をおおむね把握していた。

〔S プロジェクトの進め方〕

S プロジェクトは,B 社の支援を得ながら,表 1 のとおり進めることにした。B 社からは,セキュリティコンサルタントで情報処理安全確保支援士(登録セキスペ)である Y 氏の支援を受けることになった。

フェーズ,作業内容,説明の3列の表。フェーズ1:診断項目の決定,診断項目を決める。フェーズ2:診断ツールの選定,診断ツールを選定する。フェーズ3:Z さんと B 社での診断の実施と結果比較,A 社グループである K 社の製品のアンケートサイト(以下,サイト M という)について,Z さんと B 社がそれぞれ診断を実施する。Z さんは,B 社の診断結果との差異を評価する。フェーズ4:A 社グループの診断手順案の作成,フェーズ3の評価を基に,A 社グループの診断手順案を作成する。フェーズ5:診断手順案に従った診断の実施,K 社の会員サイト(以下,サイト N という)に対し,A 社グループの診断手順案に従って,診断を実施する。フェーズ6:A 社グループの診断手順の制定,フェーズ5の診断で残った課題についての対策を検討した上で,A 社グループの診断手順を制定する。
表1 S プロジェクトの進め方

〔フェーズ 1:診断項目の決定〕

S プロジェクトでは,診断項目を決めた。

〔フェーズ 2:診断ツールの選定〕

B 社が Web サイトの診断にツール V を使っていることもあり,A 社はツール V を購入することに決めた。ツール V の仕様を図 1 に示す。

枠で囲んだ仕様書。1. 機能概要:Dynamic Application Security Testing (DAST) のツールである。パラメータを初期値から何通りもの値に変更した HTTP リクエストを順に送信し,応答から脆弱性の有無を判定する。2. 機能:(1) プロジェクト作成機能 (1-1) プロジェクト作成機能:診断対象とする Web サイトの FQDN を登録してプロジェクトを作成する。(2) 診断対象 URL の登録機能 (2-1) 診断対象 URL の自動登録機能:探査を開始する URL を指定すると,自動探査によって,指定された URL の画面に含まれるリンク,フォームの送信先などをたどり,診断対象 URL を自動的に登録していく。診断対象 URL にひも付くパラメータ(注1)とその初期値も自動的に登録される。(2-2) 診断対象 URL の手動登録機能:診断対象 URL を手動で登録する。診断対象 URL にひも付くパラメータとその初期値は自動的に登録される。(2-3) 診断対象 URL の拡張機能:診断対象 URL ごとに設定できる。本機能を設定すると,診断対象 URL の応答だけでなく,別の URL の応答も判定対象になる。本機能を設定するには,診断対象 URL の拡張機能設定画面を開き,拡張機能設定に,判定対象に含める URL を登録する。(3) 拒否回避機能 (3-1) 拒否回避機能:特定のパラメータが同じ値であるリクエストを複数回送信すると拒否されてしまう診断対象 URL については,URL ごとに本機能を設定することで,拒否を回避できる。(4) URL にひも付くパラメータの設定機能 (4-1) パラメータ手動設定機能:パラメータの初期値を,任意の値に手動で修正して登録する。(5) 診断項目の設定機能 (5-1) 診断項目設定機能:診断項目を選択して設定する。(6) アカウント設定機能 (6-1) 利用者 ID とパスワードの設定機能:ログイン機能がある Web サイトの場合は,ログイン後の画面の URL に対して診断するために,診断用のアカウントの利用者 ID とパスワードを設定する。(6-2) アカウントの拡張機能の設定:診断用のアカウントを複数設定できる。(7) 診断機能 (7-1) 診断機能:診断項目について診断を行う。診断用のアカウントが設定されている場合は,それらを順番に使う。(8) レポート出力機能 (8-1) レポート出力機能:診断結果を PDF で出力する。枠の外の注記:注1) 例えば,検索画面から検索結果が表示される画面に遷移する URL が診断対象 URL の場合,診断時に送信される検索ワードを含むパラメータを指す。
図1 ツールVの仕様(抜粋)

診断対象 URL の自動登録機能及び手動登録機能の特徴を表 2 に示す。

自動登録機能の特徴と手動登録機能の特徴の2列の表。自動登録機能の特徴:・登録に作業者の工数がほぼ不要である。・常に一定の品質で登録できる。・Web サイトによっては,登録が漏れる場合がある。例えば,遷移先の URL が JavaScript などで動的に生成されるような場合である。・必須入力項目に適切な値を入力できず,正常に遷移できないことがある。手動登録機能の特徴:・登録に作業者の工数が必要である。・Web ブラウザを使ってトップページから順に手動でたどっても,登録が漏れる場合がある。Web サイトの全ての URL を診断対象とする場合,<u>①診断対象 URL を別の方法で調べる</u>必要がある。(“①診断対象 URL を別の方法で調べる”に下線①が付いている)
表2 診断対象 URL の自動登録機能及び手動登録機能の特徴

A 社は,診断項目のうち,ツール V では診断ができないものは手動で診断を実施することにした。

〔フェーズ 3:Z さんと B 社での診断の実施と結果比較〕

Z さんと B 社は,サイト M に対して診断を実施した。サイト M の画面遷移を図 2 に示す。

画面遷移図。トップページから,アンケート入力1とトピック一覧の2方向に遷移する。アンケート入力1→アンケート入力2→アンケート確認→アンケート送信完了。トピック一覧→トピック検索→トピック検索結果→トピック。トピック一覧からはトピックにも遷移する。
図2 サイト M の画面遷移(抜粋)

Z さんは,Z さんの診断結果と B 社の診断結果とを比較した。その結果,Z さんは脆弱性の一部を検出できていないことが分かった。検出できなかった脆弱性は,アンケート入力 1 の画面での入力値に起因するクロスサイトスクリプティング(以下,クロスサイトスクリプティングを XSS という)と,トピック検索の画面での入力値に起因する SQL インジェクションであった。サイト M のアンケート入力 1 からの画面遷移を図 3 に示す。

4つの画面が左から右へ遷移する図。アンケート入力1:姓に“山田”,名に“太郎”が入力され,会員のラジオボタンは“はい”が選択され,“次へ”ボタンがある。矢印 i でアンケート入力2へ。アンケート入力2:テキスト欄に“商品のデザインが好き。”が入力され,“戻る”“次へ”ボタンがある。矢印 ii でアンケート確認へ。アンケート確認:“山田 太郎”,“会員 はい”,“商品のデザインが好き。”が表示され,“戻る”“送信”ボタンがある。矢印 iii でアンケート送信完了へ。アンケート送信完了:“ありがとうございました。”と表示される。注記:画面遷移時に Web ブラウザから送られたパラメータの値は,次のとおりである。i:last_name=%E5%B1%B1%E7%94%B0&first_name=%E5%A4%AA%E9%83%8E&member=Y ii:text=%E5%95%86%E5%93%81%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%8C%E5%A5%BD%E3%81%8D%E3%80%82 iii:submit=Yes
図3 サイト M のアンケート入力1からの画面遷移

トピック検索の画面で検索条件として入力した値の処理に関する診断で,ツール V が送ったパラメータと検索結果の件数を表 3 に示す。なお,トピック検索の画面で検索条件として入力した値は,パラメータ keyword に格納される。

診断者,送ったパラメータ,検索結果の件数の3列の表。B 社:keyword=manual は 10件,keyword=manual' は 0件,keyword=manual[ a ]は 10件,keyword=manual[ b ]は 0件。Z さん:keyword=xyz は 0件,keyword=xyz' は 0件,keyword=xyz[ a ]は 0件,keyword=xyz[ b ]は 0件。注記1:B 社はパラメータ keyword の初期値を manual としている。注記2:Z さんはパラメータ keyword の初期値を xyz としている。
表3 ツール V が送ったパラメータと検索結果の件数(抜粋)

ツール V は,B 社の診断では,keyword=manual a と keyword=manual b の検索結果を比較して SQL インジェクションを検出できたが,Z さんの診断では SQL インジェクションを検出できなかった。

Z さんは,検出できなかった二つの脆弱性について,どうすれば検出できるのかを Y 氏に尋ねた。次は,その際の Y 氏と Z さんの会話である。

その後,Z さんは,Y 氏とともに,フェーズ 3 での診断結果を分析した。その際,偽陽性を除いてから開発者に報告することは難しいことが問題となった。

そこで,Z さんは,“開発者への報告の際に,診断結果の報告内容が脆弱性なのか偽陽性なのか,その判断を開発者に委ねる。一方,診断結果の報告内容における脆弱性の内容,リスク及び対策について,開発者が B 社に直接問い合わせる。”という案にした。なお,B 社のサポート費用は,問合せ件数に比例するチケット制である。グループ各社が B 社とサポート契約を結ぶが,費用は,当面 A 社がまとめて支払い,後日グループ各社と精算する。

これまでの検討を踏まえて,Z さんは,フェーズ 4 で A 社グループの診断手順案を作成した。

〔フェーズ 5:診断手順案に従った診断の実施〕

Y 氏の協力の下,Z さんは,診断手順案に従ってサイト N の診断を実施することにした。サイト N は既にリリースされている。サイト N の会員(以下,会員 N という)は,幾つかのグループに分けられており,申し込むことができるキャンペーンが会員の所属しているグループによって異なる。サイト N の画面遷移を図 4 に示す。

画面遷移図。トップページから,ログイン,製品情報一覧,よくある質問検索,新規会員登録申込みの4方向に遷移する。ログイン(注1)→(A)→ログイン後のトップページ。ログイン後のトップページから,会員情報変更入力とキャンペーン一覧の2方向に遷移する。会員情報変更入力→(B)→会員情報変更確認→会員情報変更完了。キャンペーン一覧→キャンペーン申込み→(C)→キャンペーン申込み完了。製品情報一覧→(D)→製品情報。よくある質問検索→(E)→検索結果→よくある質問。新規会員登録申込み→電子メールで登録 URL を送付。新規会員情報入力(注2)→新規会員情報確認→新規会員登録完了(電子メールで登録 URL を送付と新規会員情報入力の間は矢印で結ばれていない)。注記1:一つのキャンペーンに対して,会員 N は 1 回だけ申込みできる。注記2:既に登録されているメールアドレスでは,新規会員登録の申込みはできない。注記3:ログインすると,会員 N が所属しているグループを識別するための group_code というパラメータがリクエストに追加される。注記4:よくある質問検索の画面で検索する際に,次の画面に遷移する URL が JavaScript で動的に生成される。注1):パスワードを連続 5 回間違えるとアカウントがロックされる。ログイン時に発行されるセッション ID である JSESSIONID は cookie に保持される。ログイン後しばらくアクセスしないとセッション ID は破棄され,再度ログインが必要になる。注2):新規会員登録の申込み時に電子メールで送付された登録 URL にアクセスすると表示される。
図4 サイト N の画面遷移(抜粋)

まず,Z さんは,診断対象 URL,アカウントなど,診断に必要な情報を K 社に確認した。しかし,サイト N については診断に必要な情報が一元管理されていなかったので,確認の回答までに 1 週間掛かった。診断開始までに要する時間が課題として残った。

次に,Z さんは,アカウントの設定を行った後,④探査を開始する URL に図 4 のトップページを指定してツール V の診断対象 URL の自動登録機能を使用したが,一部の URL は登録されなかった。その後,登録されなかった URL を手動で登録した。診断を実施してもよいか,Y 氏に確認したところ,注意点の指摘を受けた。具体的には,⑤特定のパラメータが同じ値であるリクエストを複数回送信するとエラーになり,遷移できない箇所があることに注意せよとのことであった。適切な診断を行うために,ツール V の拒否回避機能を設定して診断を実施した。診断では,次に示す脆弱性が検出された。

Z さんは,これらの脆弱性について,サイト N の開発部門(以下,開発部 N という)に通知し,偽陽性かどうかの判断,リスクの評価及び対策の立案を依頼した。

〔XSS〕

XSS の脆弱性は,複数の画面で検出された。開発部 N から,“cookie に HttpOnly 属性が付いていると,d が禁止される。そのため,cookie が漏えいすることはなく,修正は不要である。”という回答があった。Z さんは,この回答を受けて Y 氏に相談し,“XSS を悪用しても cookie を盗めないのは確かである。しかし,⑥XSS を悪用して cookie 以外の情報を盗む攻撃があるので,修正が必要である。”と開発部 N に伝えた。

〔アクセス制御の回避〕

Z さんは,手動で診断し,アクセス制御の回避の脆弱性を,図 4 中のキャンペーン一覧の画面などで検出した。ある会員 N が⑦アクセス制御を回避するように細工されたリクエストを送ることで,その会員 N が本来閲覧できないはずのキャンペーンへのリンクが表示され,さらに,リンクをたどってそのキャンペーンに申し込むことが可能であった。正常なリクエストとそのレスポンスを図 5 に,脆弱性を検出するのに使ったリクエストとそのレスポンスを図 6 に示す。

枠で囲んだ通信内容。[リクエスト]POST /campaignSearch HTTP/1.1 Host: site-n.▲▲▲▲.jp Cookie: JSESSIONID=KCRQ88ERH2G8MGT319E50SMOAJFDIVEM (空行) group_code=0001&keyword=new。[レスポンス]<html> (省略) <h1>申込み可能キャンペーン</h1> <a href="/a_campaign1">1 A社キャンペーン1</a> <a href="/a_campaign2">2 A社キャンペーン2</a> (空行) <h1>注意事項</h1> (省略)。枠の外の注記:注記1 リクエストヘッダ部分は,設問に必要なものだけ記載している。注記2 レスポンスは,レスポンスボディから記載している。
図5 正常なリクエストとそのレスポンス
枠で囲んだ通信内容。[リクエスト]POST /campaignSearch HTTP/1.1 Host: site-n.▲▲▲▲.jp Cookie: JSESSIONID=KCRQ88ERH2G8MGT319E50SMOAJFDIVEM (空行) keyword=new(図5と違い group_code が無い)。[レスポンス]<html> (省略) <h1>申込み可能キャンペーン</h1> <a href="/a_campaign1">1 A社キャンペーン1</a> <a href="/a_campaign2">2 A社キャンペーン2</a> <a href="/b_campaign1">3 B社キャンペーン1</a> <a href="/c_campaign1">4 C社キャンペーン1</a> (省略) <a href="/z_campaign2">30 Z社キャンペーン2</a> (空行) <h1>注意事項</h1> (省略)。枠の外の注記:注記1 リクエストヘッダ部分は,設問に必要なものだけ記載している。注記2 レスポンスは,レスポンスボディから記載している。
図6 脆弱性を検出するのに使ったリクエストとそのレスポンス

開発部 N は,サイト N へ送られてきたリクエスト中の e から,ログインしている会員 N を特定し,その会員 N が所属しているグループが f の値と一致するかを検証するように,ソースコードを修正することにした。

開発部 N は,B 社の支援によって対応を終えることができたが,B 社へ頻繁に問い合わせることになった結果,B 社のサポート費用が高額になった。サポート費用をどう抑えるかが課題として残った。

〔フェーズ 6:A 社グループの診断手順の制定〕

Z さんは,フェーズ 5 の診断で残った二つの課題についての対策を検討し,グループ各社から同意を得た上で,A 社グループの診断手順を完成させた。

セキュリティ推進部は,制定した A 社グループの診断手順をグループ各社に展開した。

出題趣旨(IPA)

企業グループでは,グループ会社がそれぞれ多数のWebサイトを構築している場合がある。さらに,そうしたWebサイトのセキュリティ品質を一定に保つための脆弱性診断を第三者に委託している場合と自社で実施している場合がある。本問では,Webサイトに対する脆弱性診断を題材として,各種脆弱性に関する知識,それらを発見するためのツールの利用方法と注意点に関する知識,及び脆弱性診断を自社で実施する上での課題を解決する能力を問う。

採点講評(問全体・IPA)

問1では,Webサイトに対する脆弱性診断を題材に,脆弱性診断で注意すべき点と脆弱性に関する知識や対策について出題した。全体として正答率は平均的であった。

設問と解答例

設問1 30字以内

表 2 中の下線①について,別の方法を,30 字以内で答えよ。

解答例

  • 診断対象のWebサイトの設計書を確認するという方法
解説

本文の根拠

表2 手動登録機能の特徴

Web ブラウザを使ってトップページから順に手動でたどっても,登録が漏れる場合がある。

表2 自動登録機能の特徴

遷移先の URL が JavaScript などで動的に生成されるような場合である。

下線①は,Web サイトの全ての URL を診断対象にする場合に,診断対象 URL を“別の方法で調べる”必要があるという箇所である。自動登録機能は,リンクやフォームの送信先をたどる探査なので,JavaScript で動的に生成される URL などが漏れる。手動登録も,Web ブラウザでトップページから順にたどる限り,登録が漏れる場合がある。つまり,画面をたどる方法はどちらも“たどれなかった URL”を拾えない。

そこで,画面をたどる以外の方法として,診断対象の Web サイトの設計書(画面一覧,画面遷移図,URL 一覧など)を確認する方法が使える。設計書には,実装した画面と URL が漏れなく書かれているはずなので,探査で登録されなかった URL を補える。

30 字以内という制限なら,“設計書を確認する”という方法の中身だけを残し,“診断対象の Web サイトの”と“という方法”で形を整える。

設問2(1) 解答欄2つ

表 3 中及び本文中の a,b に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア " イ ' and 'a'='a ウ ' and 'a'='b エ and 1=0 オ and 1=1

〔a〕解答例

  • イ

〔b〕解答例

  • ウ
解説

本文の根拠

表3 B 社の診断

keyword=manualaは 10件,keyword=manualbは 0件

表3 B 社の診断

keyword=manual' は 0件

〔フェーズ 3〕 Y 氏の発言

keyword の値が文字列として扱われる仕様となっており,SQL の構文エラーが発生するような文字列を送ると検索結果が 0 件で返ってくるようです。

keyword の値は SQL 文の中で文字列として扱われる。したがって,検索条件を文字列の外に出すには,まず単引用符(')で文字列を閉じる必要がある。単引用符を付けただけの keyword=manual' は構文エラーとなって 0 件になる。

SQL インジェクションの検出は,常に真になる条件と常に偽になる条件を続けて送り,件数を比べて行う。a は,真になる ' and 'a'='a(イ)を付けたとき,元の検索(manual の 10 件)と同じ件数になる。b は,偽になる ' and 'a'='b(ウ)を付けたとき,0 件になる。この差が出れば,入力値が SQL 文の条件として解釈されていると分かる。後ろに付く単引用符はアプリが補うので,'a'='a と書けば条件式が閉じる。

アの " は文字列を閉じないので単なる検索語の一部になる。エ・オの and 1=0・and 1=1 は単引用符で閉じていないので,文字列の一部として扱われてしまい,真偽の差にならない。a と b のどちらにも真偽の違いが出る組み合わせを選ぶ点が間違えやすい。

設問2(2) 解答欄1つ

本文中の c に入れる適切な機能を,図 1 中の (1-1)〜(8-1) から選び答えよ。

〔c〕解答例

  • (2-3)
解説

本文の根拠

〔フェーズ 3〕 Y 氏の発言

入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。

図1 (2-3)

本機能を設定すると,診断対象 URL の応答だけでなく,別の URL の応答も判定対象になる。

XSS では,入力した値が入力した画面の応答ではなく,二つ先の画面で出力される。ツール V は通常,診断対象 URL に送ったリクエストの応答だけを見て脆弱性の有無を判定するので,この形の XSS は検出できない。

図1の機能のうち,診断対象 URL の応答だけでなく別の URL の応答も判定対象にできるのは,(2-3) 診断対象 URL の拡張機能である。これを設定して,スクリプトが出力される画面の URL を判定対象に含めると,二つ先の画面に出力されたスクリプトを検出できる。

(2-1),(2-2) は診断対象 URL の登録の方法,(3-1) は拒否の回避,(4-1) は初期値の修正であり,別の URL の応答を判定する機能ではない。機能の名前だけで選ばず,図1の説明文まで読んで選ぶこと。

採点講評(IPA)

設問2(2)は,正答率が低かった。“入力したスクリプトが二つ先の画面でエスケープ処理されずに出力”という具体的な事象に着目して,ツールVの設定を行う必要があった。脆弱性診断に使用するツールやマニュアルを正確に理解することは基本的なことである。脆弱性がある場合のWebアプリケーションの動き及びツールでの脆弱性を検知する方法も踏まえて,脆弱性診断を行ってほしい。

設問2(3) 60字以内

本文中の下線②について,どのような設定が必要か。設定の内容を,図 2 中の画面名を用いて 60 字以内で答えよ。

解答例

  • アンケート入力1からアンケート入力2に遷移するURLの拡張機能に,アンケート確認のURLを登録する。
解説

本文の根拠

〔フェーズ 3〕 Y 氏の発言

入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。

図1 (2-3)

本機能を設定するには,診断対象 URL の拡張機能設定画面を開き,拡張機能設定に,判定対象に含める URL を登録する。

図3

“商品のデザインが好き。”が表示され,“戻る”“送信”ボタンがある。

問題の XSS は,アンケート入力 1 の画面での入力値(姓・名など)に起因する。図2・図3のとおり,アンケート入力 1 に入力した値はアンケート入力 2 へ遷移するときに送信され(図3の i),二つ先のアンケート確認の画面で出力される。したがって,診断対象 URL は,入力値を送る“アンケート入力 1 からアンケート入力 2 に遷移する URL”である。

拡張機能の設定は,診断対象 URL ごとに行い,判定対象に含める URL を登録する。診断対象 URL の拡張機能に“アンケート確認の URL”を登録すれば,アンケート入力 1 から送ったスクリプトがアンケート確認で出力されるかを判定できる。

60 字以内に収めるには,“どの診断対象 URL に”(アンケート入力 1 からアンケート入力 2 に遷移する URL)と“何を登録するか”(アンケート確認の URL)の両方を,図2の画面名で書く。講評にあるとおり,診断対象 URL を取り違える誤りが多い。

採点講評(IPA)

設問2(3)は,正答率が低かった。診断対象URL自体を誤って解答した受験者が多かった。拡張機能を用いると,診断対象URLの応答だけでなく,別のURLの応答も判定対象になる。データを入力する画面のURLとそのデータが出力される画面のURLが異なるということに着目してほしい。

設問2(4) 40字以内

本文中の下線③について,keyword の初期値をどのような値に設定する必要があるか。初期値が満たすべき条件を,40 字以内で具体的に答えよ。

解答例

  • トピック検索結果の画面での検索結果の件数が1以上になる値
解説

本文の根拠

表3 Z さんの診断

keyword=xyzaは 0件,keyword=xyzbは 0件

〔フェーズ 3〕 Y 氏の発言

keyword の初期値として SQL インジェクションを検出できる“manual”のような値を設定する必要がありました。

表3で,B 社の初期値 manual は 10 件ヒットし,真の条件を付けても 10 件,偽の条件を付けると 0 件になった。一方,Z さんの初期値 xyz は元々 0 件なので,真の条件を付けても 0 件のままで,偽の条件との差が出ず,SQL インジェクションを検出できない。

SQL インジェクションの検出は,真の条件と偽の条件で件数が変わるかを見る方法なので,初期値の段階で検索結果が 1 件以上返る値でなければならない。トピック検索結果の画面での検索結果の件数が 1 以上になる値を初期値にすればよい。

40 字以内に収めるには,“どの画面の”(トピック検索結果),“何が”(検索結果の件数),“どうなる値か”(1 件以上)を残す。“manual のような値”だけでは条件を答えたことにならない。

設問3(1)

本文中の下線④について,URL が登録されなかった画面名を,解答群の中から全て選び,記号で答えよ。 解答群 ア 会員情報変更入力 イ キャンペーン申込み ウ 検索結果 エ 新規会員情報入力

解答例

  • ウ,エ
解説

本文の根拠

表2 自動登録機能の特徴

遷移先の URL が JavaScript などで動的に生成されるような場合である。

図4 注記4

よくある質問検索の画面で検索する際に,次の画面に遷移する URL が JavaScript で動的に生成される。

図4 注2)

新規会員登録の申込み時に電子メールで送付された登録 URL にアクセスすると表示される。

自動登録機能は,指定した URL の画面に含まれるリンクやフォームの送信先をたどって URL を登録する。したがって,リンクがたどれない画面は登録されない。

ウの検索結果は,よくある質問検索の画面で検索するときに,遷移先の URL が JavaScript で動的に生成される(注記4)。リンクやフォームの送信先として HTML に書かれていないので,探査でたどれない。エの新規会員情報入力は,電子メールで送付された登録 URL にアクセスしたときだけ表示される(注2)ので,トップページから探査をたどっても到達できない。

アの会員情報変更入力とイのキャンペーン申込みは,ログイン後のトップページ,キャンペーン一覧からリンクでたどれる。診断用アカウントを設定してから探査したので,ログイン後の画面も登録される。

設問3(2) 解答欄4つ

本文中の下線⑤について,該当する画面遷移とエラーになってしまう理由を 2 組み挙げ,画面遷移は図 4 中の (A)〜(E) から選び,理由は 40 字以内で答えよ。

〔①画面遷移〕解答例

  • (A)

〔①理由〕解答例

  • 同じアカウントで連続5回パスワードを間違えるとアカウントがロックされるから

〔②画面遷移〕解答例

  • (C)

〔②理由〕解答例

  • キャンペーンは1会員に付き1回しか申込みできないから
解説

本文の根拠

図4 注1)

パスワードを連続 5 回間違えるとアカウントがロックされる。

図4 注記1

一つのキャンペーンに対して,会員 N は 1 回だけ申込みできる。

〔フェーズ 5〕 下線⑤

特定のパラメータが同じ値であるリクエストを複数回送信するとエラーになり,遷移できない箇所

下線⑤は,同じ値のパラメータを持つリクエストを何度も送るとエラーになる箇所である。ツール V は,パラメータを何通りもの値に変えて,同じ画面に多数のリクエストを送る。図4で,そのような繰返しによって拒否される遷移を探す。

(A) のログインは,注1)により,パスワードを連続 5 回間違えるとアカウントがロックされる。診断用アカウントの利用者 ID を固定したまま誤ったパスワードを試すと,同じアカウントが 5 回でロックされて,以降は遷移できなくなる。(C) のキャンペーン申込みは,注記1により,一つのキャンペーンに会員 N は 1 回だけしか申込みできないので,同じキャンペーンを指定したリクエストを繰り返すと 2 回目以降がエラーになる。

理由は 40 字以内なので,“同じアカウントで連続 5 回パスワードを間違える”+“ロックされる”,“1 会員に付き 1 回しか申込みできない”のように,ロックの条件と 1 回限りという制約をそれぞれ書く。2 組とも画面遷移と理由が対応していることを確かめる。

設問4(1) 解答欄1つ

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

〔d〕解答例

  • HTML内のスクリプトからcookieへのアクセス
解説

本文の根拠

〔XSS〕 開発部 N の回答

cookie に HttpOnly 属性が付いていると,d が禁止される。そのため,cookie が漏えいすることはなく,修正は不要である。

cookie に HttpOnly 属性を付けると,ブラウザは,その cookie を HTTP 以外の API(document.cookie のように,スクリプトに cookie を見せる API)から読み出せないようにする(RFC 6265 の HttpOnly 属性)。XSS で挿入されたスクリプトは,Web ページの中で動くスクリプトなので,この属性が付いた cookie を読み取れない。

したがって d には,“HTML内のスクリプトからcookieへのアクセス”が入る。開発部 N の回答は,cookie を読み取る攻撃は防げるという点では正しい。ただし,HttpOnly は cookie を読むことだけを禁じる対策で,XSS という脆弱性そのものを直すものではない。

30 字以内なので,“スクリプトから”と“cookie へのアクセス”を残す。cookie の送信そのものが禁止されると書くと誤りになる(HttpOnly の cookie も HTTP リクエストには付いて送信される)。

設問4(2) 40字以内

本文中の下線⑥について,攻撃の手口を,40 字以内で答えよ。

解答例

  • 偽の入力フォームを表示させ,入力情報を攻撃者サイトに送る手口
解説

本文の根拠

〔XSS〕 下線⑥

XSS を悪用して cookie 以外の情報を盗む攻撃

〔XSS〕 開発部 N の回答

XSS を悪用しても cookie を盗めないのは確かである。

HttpOnly 属性は,スクリプトによる cookie の読出しを防ぐ。しかし,XSS が成立すると,攻撃者のスクリプトは正規の画面の中で動くので,cookie 以外の画面上の情報や操作も自由に扱える。具体的な手口の一つが,ログイン画面などに偽の入力フォームを表示させ,利用者が入力した情報(利用者 ID・パスワードなど)を攻撃者のサイトに送らせる方法である。

本文は,攻撃者の手口を“cookie 以外の情報を盗む攻撃”と書いているだけなので,どう盗むかを書く必要がある。そのほか,画面に表示されている個人情報を読み取って外部に送る,利用者の代わりに操作(リクエスト)を実行させる,なども XSS の悪用例である。

40 字以内に収めるには,“偽の入力フォームを表示させる”という方法と,“入力情報を攻撃者サイトに送る”という結果の両方を書く。“cookie 以外の情報を盗む”だけでは手口になっていない。講評にもあるとおり,XSS の悪用の手口は様々なので,具体的に書くこと。

採点講評(IPA)

設問4(2)は,正答率が低かった。XSSを悪用した攻撃の手口は,様々あり,大きな被害にもつながり得る。対策を考える際にも必要な知識となるので,よく理解してほしい。

設問5(1) 30字以内

本文中の下線⑦について,リクエストの内容を,30 字以内で具体的に答えよ。

解答例

  • group_codeが削除されているリクエスト
解説

本文の根拠

図4 注記3

ログインすると,会員 N が所属しているグループを識別するための group_code というパラメータがリクエストに追加される。

図5 正常なリクエスト

group_code=0001&keyword=new

図6 脆弱性を検出したレスポンス

30 Z社キャンペーン2

図5の正常なリクエストは,ログイン後に追加された group_code=0001 を含んでおり,レスポンスには,そのグループが申し込めるキャンペーン(A 社キャンペーン 1,2)だけが表示される。図6のリクエストは,この group_code を削除して keyword=new だけにしたもので,レスポンスには A 社から Z 社までの 30 件のキャンペーンが表示されている。

つまり,サーバが group_code というクライアントから送られたパラメータを基に表示するキャンペーンを決めており,これがなければ全グループのキャンペーンが出る。したがって,下線⑦のリクエストの内容は“group_codeが削除されているリクエスト”である。

30 字以内なので,“group_code”“削除”の 2 点を書けばよい。group_code の値を別のグループの値に書き換えるリクエストも考えられるが,図6は削除であり,答えは図6のとおりに書く。

設問5(2) 解答欄2つ

本文中の e,f に入れる適切なパラメータ名を,図 5 中から選び,それぞれ 15 字以内で答えよ。

〔e〕解答例

  • JSESSIONID

〔f〕解答例

  • group_code
解説

本文の根拠

図5 リクエスト

Cookie: JSESSIONID=KCRQ88ERH2G8MGT319E50SMOAJFDIVEM

図4 注1)

ログイン時に発行されるセッション ID である JSESSIONID は cookie に保持される。

図4 注記3

group_code というパラメータがリクエストに追加される

サーバ側でログイン中の会員 N を特定する手掛かりは,ログイン時に発行され cookie に保持されるセッション ID である JSESSIONID(e)である。これをキーにすれば,サーバ側が持っている会員 N の所属グループを引ける。

一方,クライアントから送られる group_code(f)は,利用者が書き換えたり削除したりできる値である。図6のように group_code を削除した場合に全キャンペーンが出たのは,サーバがこの値を信用して表示を決めていたからである。修正では,セッション ID から特定した会員 N の所属グループが,リクエストの group_code の値と一致するかを検証して,一致しなければ拒否する。

パラメータ名は,図5のリクエストにあるとおりに 15 字以内で答える。Cookie ヘッダ全体ではなく,JSESSIONID という名前だけを書く。

設問6(1) 40字以内

診断開始までに要する時間の課題について,A 社で取り入れている管理策を参考にした対策を,40 字以内で具体的に答えよ。

解答例

  • グループ各社で資産管理システムを導入し,Webサイトの情報を管理する。
解説

本文の根拠

本文冒頭

A 社では,資産管理システムを利用し,IT 資産の管理を効率化している。Web サイトの立上げ時は,資産管理システムへの Web サイトの概要,システム構成,IP アドレス,担当者などの登録申請が必要である。

〔フェーズ 5〕

サイト N については診断に必要な情報が一元管理されていなかったので,確認の回答までに 1 週間掛かった。

診断開始までに時間が掛かったのは,サイト N の診断に必要な情報(診断対象 URL,アカウントなど)が一元管理されておらず,K 社に確認して回答を待つ必要があったためである。A 社は,資産管理システムに Web サイトの概要,システム構成,IP アドレス,担当者などを登録することで,IT 資産を効率よく管理している。

この管理策をグループ各社にも広げ,グループ各社でも資産管理システムを導入して Web サイトの情報を管理すれば,診断に必要な情報をその場で確認でき,確認の待ち時間をなくせる。

40 字以内に収めるには,“グループ各社で”(範囲),“資産管理システムを導入し”(手段),“Web サイトの情報を管理する”(目的)の 3 つを残す。単に“情報を一元管理する”だけでは,A 社の管理策を参考にした対策にならない。

設問6(2) 50字以内

B 社のサポート費用の課題について,B 社に対して同じ問合せを行わず,問合せ件数を削減するために,A 社グループではどのような対策を実施すべきか。セキュアコーディング規約の必須化や開発者への教育以外で,実施すべき対策を,50 字以内で具体的に答えよ。

解答例

  • B社への問合せ窓口をA社の診断部門に設置し,窓口が蓄積した情報をA社グループ内で共有する。
解説

本文の根拠

〔フェーズ 3〕

B 社のサポート費用は,問合せ件数に比例するチケット制である。

〔フェーズ 3〕

グループ各社が B 社とサポート契約を結ぶが,費用は,当面 A 社がまとめて支払い,後日グループ各社と精算する。

〔フェーズ 5〕

B 社へ頻繁に問い合わせることになった結果,B 社のサポート費用が高額になった。

B 社のサポート費用は問合せ件数に比例するので,費用を抑えるには,B 社への問合せの件数を減らす必要がある。グループ各社が各自で B 社に問い合わせると,同じ脆弱性や偽陽性について同じ問合せが何度も行われ,件数が増える。

そこで,B 社への問合せの窓口を A 社の診断部門(セキュリティ推進部)に一本化して設置し,窓口が B 社から得た回答の内容を蓄積して,A 社グループ内で共有する。共有された情報があれば,同じ内容は B 社に問い合わせずに済む。費用を A 社がまとめて支払って精算する体制とも整合する。

50 字以内に収めるには,“問合せ窓口を A 社に設置”と“回答(情報)を蓄積してグループ内で共有”の 2 点を残す。“開発者に教育する”などは設問の条件で除かれている。

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

問2 Web サイトのクラウドサービスへの移行と機能拡張

Web サイトのクラウドサービスへの移行と機能拡張に関する次の記述を読んで,設問に答えよ。

W 社は,従業員 100 名のブログサービス会社であり,日記サービスという Web サービスを 10 年前から提供している。日記サービスの会員は,自分の食事に関する記事の投稿及び摂取カロリーの管理ができる。

日記サービスは,W 社のデータセンター内で稼働している。ハードウェアの調達には 1 か月程度を要する。W 社は,日記サービスが稼働している各機器の運用を D 社に委託している。D 社に委託している運用を表 1 に示す。

項番,運用,運用内容の3列の表。項番1 ログ保全:・定期的に,日記サービスが稼働している各機器の全てのログを外部メディアにバックアップする。・外部メディアにバックアップする前に,ログを一時的に D 社作業用端末にダウンロードする。・D 社作業用端末でのバックアップ作業後に,D 社作業用端末からログを削除する。なお,各機器からログを削除する作業は W 社が行う。項番2 障害監視:・アプリケーションプログラム(以下,アプリという)の問題の一次切分けを行う。アプリの問題は,ログを監視しているソフトウェアによって検知される。・ログを確認して一次切分けを行う。その際に,サーバの一覧を参照する。・W 社への連絡は,電子メール(以下,メールという)と電話で行う。項番3 性能監視:・W 社が定めた,CPU 稼働率,処理性能及び応答時間に関わる指標(以下,性能指標という)を監視する。・異常を検知すると,一次切分けを行う。その際に,サーバの一覧を参照する。・必要に応じて,W 社への連絡をメールと電話で行う。項番4 機器故障対応:・交換対象のハードウェアの発注を行う。・故障機器のハードウェア交換作業を行う。
表1 D 社に委託している運用(概要)

この 2,3 年,会員が急増しているので,W 社は,日記サービスをクラウドサービスに移行することにした。

〔移行先のクラウドサービス選定〕

W 社は,クラウドサービスへの移行時及び移行後の管理,運用について,検討を開始した。

まず,クラウドサービスへの移行時及び移行後に,W 社が何を管理,運用する必要があるかを調べたところ,表 2 のとおりであった。

構成要素の行と,クラウドサービスの分類(IaaS,PaaS,SaaS)の列の表。ハードウェア,ネットワーク:IaaS は×,PaaS は×,SaaS は×。OS,ミドルウェア:IaaS は[ a ],PaaS は[ b ],SaaS は[ c ]。アプリ:IaaS は[ d ],PaaS は[ e ],SaaS は[ f ]。アプリに登録されたデータ:IaaS は[ g ],PaaS は[ h ],SaaS は[ i ]。注記:“○”は W 社が管理,運用する必要があるものを示し,“×”は必要がないものを示す。
表2 W 社が管理,運用する必要のある範囲

クラウドサービスへの移行及びクラウドサービスの設定は W 社が行い,移行後,表 1 の項番 1〜項番 3 の運用を D 社に委託する計画にした。

移行先のクラウドサービスとして,L 社のクラウドサービスを選定した。L 社が提供しているクラウドサービスを表 3 に示す。

クラウドサービス名と説明の2列の表。仮想マシンサービス:・利用者が OS やアプリを配備することによって,物理サーバと同じ機能を実行するための仮想化基盤である。データベース(以下,DB という)サービス:・関係 DB である。・容量の拡張,バックアップなどは,自動で実行される。ブロックストレージサービス:・固定長のブロックという論理単位で管理できるストレージである。仮想マシンサービスのファイルシステムとして割り当てることが可能である。オブジェクトストレージサービス:・データをオブジェクトとして扱い,各オブジェクトをメタデータで管理できるストレージである。・オブジェクトの保存のために必要なサーバの資源管理,容量の拡張などは,自動で実行される。モニタリングサービス:・利用者が利用している L 社の各クラウドサービスについて,性能指標を監視する。(表は次のページに続く)
表3 L 社が提供しているクラウドサービス
クラウドサービス名と説明の2列の表(表3の続き)。アラートサービス:・L 社のクラウドサービスの環境(注1)でイベント(注2)が発生したときに,そのイベントを検知してアラートをメールで通知する。仮想ネットワークサービス:・レイヤー2 スイッチ(以下,L2SW という),ファイアウォール(以下,FW という),ルータなどのネットワーク機器を含むネットワークを仮想的に構成でき,インターネットとの接続を可能にする。注1):L 社の各クラウドサービスを利用して構築したシステム及びネットワークを指す。注2):特定の利用者による操作,システム構成の変更,設定変更などである。
表3 L 社が提供しているクラウドサービス(続き)

イベント検知のルールは JSON 形式で記述する。そのパラメータを表 4 に示す。

パラメータ,内容,取り得る値の3列の表。system:検知対象とするシステム ID,取り得る値は・0000 〜 9999。account:検知対象とする利用者 ID,取り得る値は・0000 〜 9999。service:検知対象とするクラウドサービス名,取り得る値は・仮想マシンサービス・オブジェクトストレージサービス・モニタリングサービス。event:検知対象とするイベント,取り得る値は,event の取り得る値は,service の値によって異なる。・仮想マシンサービスの場合 − 仮想マシンの起動 − 仮想マシンの停止 − 仮想マシンの削除 ・オブジェクトストレージサービスの場合 − オブジェクトの作成 − オブジェクトの編集 − オブジェクトの削除 − オブジェクトの閲覧 − オブジェクトのダウンロード ・モニタリングサービスの場合 − 監視する性能指標の追加 − 監視する性能指標の削除。注記:system と account の取り得る値には正規表現を利用できる。正規表現は次の規則に従う。[012]は,0,1 又は 2 のいずれか数字 1 文字を表す。[0-9]は,0 から 9 までの連続する数字のうち,いずれか数字 1 文字を表す。* は,直前の正規表現の 0 回以上の繰返しを表す。+ は,直前の正規表現の 1 回以上の繰返しを表す。
表4 イベント検知のルールに記述するパラメータ

仮想マシンサービスを利用して構築した,システム ID が 0001 のシステムにおいて,利用者 ID が 1000 である利用者が仮想マシンを停止させた場合の,イベント検知のルールの例を図 1 に示す。

枠で囲んだ JSON。1: { 2: "system": "0001", 3: "account": "1000", 4: "service": "仮想マシンサービス", 5: "event": "仮想マシンの停止" 6: }
図1 イベント検知のルールの例

〔日記サービスの L 社のクラウドサービスへの移行〕

移行後の日記サービスの仮想ネットワーク構成を図 2 に,図 2 中の主な構成要素を表 5 に示す。

インターネットにルータが接続し,ルータの下に FW がある。FW の左側が DMZ,右側が内部セグメントで,全体が仮想ネットワークの枠に入っている。DMZ には L2SW があり,公開 Web サーバと権威 DNS サーバが L2SW に接続している。内部セグメントには L2SW があり,日記 DB(注1)とログ保管ストレージ(注2)が L2SW に接続している。FW は DMZ の L2SW と内部セグメントの L2SW の間にある。注1):日記サービスのデータを管理する DB。注2):日記サービスのログを保管するストレージ。
図2 移行後の日記サービスの仮想ネットワーク構成
システム ID,構成要素,利用する L 社のクラウドサービスの3列の表。1000:公開 Web サーバ,・仮想マシンサービス・ブロックストレージサービス。2000:権威 DNS サーバ,・仮想マシンサービス・ブロックストレージサービス。3000:日記 DB,・DB サービス。4000:ログ保管ストレージ,・オブジェクトストレージサービス。5000:仮想ネットワーク,・仮想ネットワークサービス。注記:日記サービスでは,モニタリングサービスとアラートサービスを利用する。
表5 図2中の主な構成要素

W 社は,L 社のクラウドサービスにおける,D 社に付与する権限の検討を開始した。

〔L 社のクラウドサービスにおける権限設計〕

L 社の各クラウドサービスにおける権限ごとに可能な操作を表 6 に示す。

クラウドサービス名,一覧の閲覧権限,閲覧権限,編集権限の4列の表。仮想マシンサービス:一覧の閲覧権限は仮想マシン一覧の閲覧,閲覧権限は仮想マシンに割り当てたファイルシステム上のファイルの閲覧,編集権限は・仮想マシンの起動,停止,削除・仮想マシンへのファイルシステムの割当て・仮想マシンに割り当てたファイルシステム上のファイルの作成,編集,削除・仮想マシンの性能の指定。DB サービス:一覧の閲覧権限はスキーマー覧及びテーブル一覧の閲覧,閲覧権限はテーブルに含まれるデータの閲覧,編集権限は・テーブルの作成,編集,削除・テーブルに含まれるデータの追加,編集,削除。ブロックストレージサービス:一覧の閲覧権限は生成したストレージ一覧の閲覧,閲覧権限はストレージの使用済み容量及び空き容量の閲覧,編集権限は・ストレージの生成・ストレージの容量の指定。オブジェクトストレージサービス:一覧の閲覧権限はオブジェクト一覧の閲覧,閲覧権限はオブジェクトの閲覧,編集権限は・オブジェクトの作成,編集,削除・オブジェクトのダウンロード。モニタリングサービス:一覧の閲覧権限は監視している性能指標一覧の閲覧,閲覧権限は過去から現在までの性能指標の値の閲覧,編集権限は・監視する性能指標の追加,削除。
表6 L 社の各クラウドサービスにおける権限ごとに可能な操作(抜粋)

W 社は,D 社に付与する権限が必要最小限となるように,表 7 に示す D 社向けの権限のセットを作成した。

クラウドサービス名と D 社に付与する権限の2列の表。仮想マシンサービス:[ j ]。DB サービス:[ k ]。オブジェクトストレージサービス:一覧の閲覧権限,閲覧権限,編集権限。モニタリングサービス:[ l ]。
表7 D 社向けの権限のセット(抜粋)

さらに,W 社は,①D 社の運用者がシステムから日記サービスのログを削除したときに,そのイベントを検知してアラートをメールで通知するための検知ルールを作成した。

W 社は,L 社とクラウドサービスの利用契約を締結して,日記サービスを L 社のクラウドサービスに移行し,運用を開始した。

〔機能拡張の計画開始〕

W 社は,サービス拡大のために,機能を拡張した日記サービス(以下,新日記サービスという)の計画を開始した。新日記サービスの要件は次のとおりである。

W 社は,要件 1 を実装した後で要件 2 に取り組むことに決めた。その上で,要件 1 を実現するために,T 社の SNS(以下,サービス T という)と連携することにした。

〔サービス T との連携の検討〕

OAuth 2.0 を利用してサービス T と連携した場合のサービス要求から記事投稿結果取得までの流れを図 3 に,送信されるデータを表 8 に示す。

シーケンス図。左から,Web ブラウザ,[ m ]の Web サーバ,[ n ]の認可サーバ,[ o ]のリソースサーバ。(1) サービス要求:Web ブラウザから Web サーバ。(2) リダイレクト:Web サーバから Web ブラウザ。(3) 認可要求:Web ブラウザから認可サーバ。(4) 認可同意処理:Web ブラウザと認可サーバの間の双方向。(5) リダイレクト:認可サーバから Web ブラウザ。(6) 認可コード:Web ブラウザから Web サーバ。(7) アクセストークン要求:Web サーバから認可サーバ。(8) アクセストークン応答:認可サーバから Web サーバ。(9) 記事投稿:Web サーバからリソースサーバ。(10) 記事投稿結果取得:リソースサーバから Web サーバ。
図3 サービス要求から記事投稿結果取得までの流れ
番号と送信されるデータの2列の表。[ p ]:GET /authorize?response_type=code&client_id=abcd1234&redirect_uri=https://△△△.com/callback HTTP/1.1(注1)。[ q ]:POST /oauth/token HTTP/1.1 Authorization: Basic YWJjZDEyMzQ6UEBzc3dvcmQ=(注2) (空行) grant_type=authorization_code&code=5810f68ad195469d85f59a6d06e51e90&redirect_uri=https://△△△.com/callback。注記:△△△.com は,新日記サービスのドメイン名である。注1):クエリ文字列中の“abcd1234”は,英数字で構成された文字列であるクライアント ID を示す。注2):“YWJjZDEyMzQ6UEBzc3dvcmQ=”は,クライアント ID と,英数字と記号で構成された文字列であるクライアントシークレットとを,“:”で連結して base64 でエンコードした値(以下,エンコード値 G という)である。
表8 送信されるデータ(抜粋)

各リクエストの通信で TLS 1.2 及び TLS 1.3 を利用可能とするために,②暗号スイートの設定をどのようにすればよいかを検討した。また,サービス T との連携のためのモジュール(以下,R モジュールという)の実装から単体テストまでを F 社に委託することにした。F 社は,新技術を積極的に活用している IT 企業である。

〔F 社の開発環境〕

F 社では,R モジュールの開発は,取りまとめる開発リーダー 1 名と,実装から単体テストまでを行う開発者 3 名のチームで行う。システム開発において,顧客から開発を委託されたプログラムのソースコードのリポジトリと外部に公開されている OSS リポジトリを利用している。二つのリポジトリは,サービス E というソースコードリポジトリサービスを利用して管理している。

サービス E の仕様と,R モジュールについての F 社のソースコード管理プロセスは,表 9 のとおりである。

機能,サービス E の仕様,F 社のソースコード管理プロセスの3列の表。利用者認証及びアクセス制御:サービス E の仕様は・利用者 ID とパスワードによる認証,及び他の IdP と連携した SAML 認証が可能である。・リポジトリごとに,利用者認証の要・不要を設定できる。・サービス E は外部に公開されている。・IP アドレスなどで接続元を制限する機能はない。F 社のソースコード管理プロセスは・利用者認証には,F 社内で運用している認証サーバと連携した,SAML 認証を利用する。・R モジュール開発向けのリポジトリ(以下,リポジトリ W という)には,利用者認証を“要”に設定する。バージョン管理:サービス E の仕様は・ソースコードのアップロード(注1),承認,ダウンロード,変更履歴のダウンロード,削除が可能である。・新規作成,変更,削除の前後の差分をソースコードの変更履歴として記録する。・ソースコードがアップロードされ,承認されると,対象のソースコードが新バージョンとして記録され,変更履歴のダウンロードが可能になる。F 社のソースコード管理プロセスは・開発者は,静的解析と単体テストを実施する。開発者が,それら二つの結果とソースコードをアップロードして,開発リーダーに承認を依頼するルールとする。ただし,静的解析と単体テストについてリスクが少ないと開発者が判断した場合は,開発者自身がソースコードのアップロードとその承認の両方を実施できるルールとする。権限管理:サービス E の仕様は・設定できる権限には,ソースコードのダウンロード権限,ソースコードのアップロード権限,アップロードされたソースコードを承認する承認権限がある。・利用者ごとに,個別のリポジトリの権限を設定することが可能である。・変更履歴のダウンロードには,ソースコードのダウンロード権限が必要である。・変更履歴の削除には,アップロードされたソースコードを承認する承認権限が必要である。・外部の X 社が提供している継続的インテグレーションサービス(注2)(以下,X 社 CI という)と連携するには,ソースコードのダウンロード権限を X 社 CI に付与する必要がある。F 社のソースコード管理プロセスは・開発者,開発リーダーなど全ての利用者に対して,設定できる権限全てを与える。サービス連携:サービス E の仕様は・別のクラウドサービスと連携する際に,権限を付与するトークン(以下,E トークンという)を,リポジトリへアクセスしてきた連携先に発行することができる。・E トークンの有効期間は 1 か月である。E トークンの発行形式や有効期間の変更はできない。F 社のソースコード管理プロセスは・X 社 CI と連携する。・X 社 CI に発行する E トークン(以下,X トークンという)には,リポジトリ W の全ての権限が付与されている。注記:OSS リポジトリには,利用者認証を“不要”に設定している。また,OSS リポジトリのソースコードと変更履歴のダウンロードは誰でも可能である。注1):ソースコードのアップロードには,関連するファイルの新規作成,変更,削除の操作が含まれる。注2):アップロードされたソースコードが承認されると,ビルドと単体テストを自動実行するサービスである。
表9 サービス E の仕様と F 社のソースコード管理プロセス

〔悪意のある不正なプログラムコードの混入〕

F 社は,R モジュールの実装について単体テストまでを完了して,ソースコードを W 社に納品した。その後,W 社と T 社は結合テストを開始した。

結合テスト時,外部のホストに対する通信が R モジュールから発生していることが分かった。調べたところ,不正なプログラムコード(以下,不正コード M という)がソースコードに含まれていたことが分かった。不正コード M は,OS の環境変数の一覧を取得し,外部のホストに送信する。新日記サービスでは,エンコード値 G が OS の環境変数に設定されていたので,その値が外部のホストに送信されていた。

W 社は,漏えいした情報が悪用されるリスクの分析と評価を行うことにした。それと並行して,不正コード M の混入の原因調査と,プログラムの修正を F 社に依頼した。

〔W 社によるリスク評価〕

W 社は,リスクを分析し,評価した。評価結果は次のとおりであった。

次に,W 社は,近い将来に要件 2 を実装する場合におけるリスクについても,リスクへの対応を検討した。

そのリスクのうちの一つは,スマホアプリのリダイレクトにカスタム URL スキームを利用する場合に発生する可能性がある。W 社が提供するスマホアプリと攻撃者が用意した偽のスマホアプリの両方を会員が自分の端末にインストールしてしまうと,正規のスマホアプリとサーバとのやり取りが偽のスマホアプリに横取りされ,攻撃者がアクセストークンを不正に取得できるというものである。この対策として,PKCE (Proof Key for Code Exchange) を利用すると,偽のスマホアプリにやり取りが横取りされても,アクセストークンの取得を防ぐことができる。

要件 2 を実装する場合のサービス要求から記事投稿結果取得までの流れを図 4 に示す。

シーケンス図。左から,スマホアプリ,[ m ]の Web サーバ,[ n ]の認可サーバ,[ o ]のリソースサーバ。(1) サービス要求:スマホアプリから Web サーバ。(2) リダイレクト:Web サーバからスマホアプリ。(3) 認可要求:スマホアプリから認可サーバ。(4) 認可同意処理:スマホアプリと認可サーバの間の双方向。(5) リダイレクト:認可サーバからスマホアプリ。(6) 認可コード:スマホアプリから Web サーバ。(7) アクセストークン要求:Web サーバから認可サーバ。(8) アクセストークン応答:認可サーバから Web サーバ。(9) 記事投稿:Web サーバからリソースサーバ。(10) 記事投稿結果取得:リソースサーバから Web サーバ。
図4 要件2を実装する場合のサービス要求から記事投稿結果取得までの流れ

PKCE の実装では,乱数を基に,チャレンジコードと検証コードを生成する。(3) のリクエストにチャレンジコードと code_challenge_method パラメータを追加し,(7) のリクエストに検証コードパラメータを追加する。最後に,④認可サーバが二つのコードの関係を検証することで,攻撃者からのアクセストークン要求を排除できる。

〔F 社による原因調査〕

F 社は,不正コード M が混入した原因を調査した。調査の結果,サービス E の OSS リポジトリ上に,X トークンなどの情報が含まれるファイル(以下,ファイル Z という)がアップロードされた後に削除されていたことが分かった。

F 社の開発者の 1 人が,ファイル Z を誤ってアップロードし,承認した後,誤ってアップロードしたことに気付き,ファイル Z を削除した上で開発リーダーに連絡していた。開発リーダーは,ファイル Z が OSS リポジトリから削除されていること,ファイル Z がアップロードされてから削除されるまでの間にダウンロードされていなかったことを確認して,問題なしと判断していた。

F 社では,⑤第三者が X トークンを不正に取得して,リポジトリ W に不正アクセスし,不正コード M をソースコードに追加したと推測した。そこで,F 社では,X トークンを無効化し,次の再発防止策を実施した。

ソースコードには他の不正な変更は見つからなかったので,不正コード M が含まれる箇所だけを不正コード M が追加される前のバージョンに復元した。

W 社は,F 社が改めて納品した R モジュールに問題がないことを確認し,新日記サービスの提供を開始した。

出題趣旨(IPA)

近年,クラウドサービスへの移行が加速する中で,セキュリティについてオンプレミスとは異なる知見が求められている。また,外部サービスとの連携が増加しているが,セキュアではない設定がされるケースも散見される。本問では,Webサイトのクラウドサービスへの移行と機能拡張を題材として,自社システムからクラウドサービスへの移行時及び移行後におけるセキュリティに関わる設定と,外部サービスと連携する際の認可,権限設定についての分析能力を問う。

採点講評(問全体・IPA)

問2では,Webサイトのクラウドサービスへの移行と機能拡張を題材に,権限設定及び認可に関連するセキュリティ対策について出題した。全体として正答率は平均的であった。

設問と解答例

設問1 解答欄9つ

表 2 中の a〜i に入れる適切な内容を,“○”又は“×”から選び答えよ。

〔a〕解答例

  • ○

〔b〕解答例

  • ×

〔c〕解答例

  • ×

〔d〕解答例

  • ○

〔e〕解答例

  • ○

〔f〕解答例

  • ×

〔g〕解答例

  • ○

〔h〕解答例

  • ○

〔i〕解答例

  • ○
解説

本文の根拠

表3 仮想マシンサービス

利用者が OS やアプリを配備することによって,物理サーバと同じ機能を実行するための仮想化基盤である。

表3 DB サービス

容量の拡張,バックアップなどは,自動で実行される。

表2 注記

“○”は W 社が管理,運用する必要があるものを示し,“×”は必要がないものを示す。

クラウドサービスの分類では,利用者(W 社)が管理する範囲は IaaS,PaaS,SaaS の順に狭くなる。ハードウェアとネットワークは,どの分類でもクラウド事業者の管理なので全て×である。IaaS は,仮想マシンサービスのように利用者が OS やアプリを配備するので,OS・ミドルウェア(a),アプリ(d),登録されたデータ(g)が全て○になる。PaaS は OS・ミドルウェアまでを事業者が管理するので,b は×,アプリ(e)とデータ(h)は○になる。SaaS は,アプリまで事業者が管理するので c,f は×,利用者が登録したデータ(i)だけが○になる。

本文の表3では,仮想マシンサービスが“利用者が OS やアプリを配備する”ものとして IaaS に当たる。DB サービスは,容量の拡張やバックアップを事業者が自動で行い,利用者は DB に登録したデータとそれを使うアプリを管理するので,PaaS に近い。分類の定義は NIST SP 800-145 にあり,利用者が管理する範囲が分類ごとに違うという考え方もそこで確かめられる。

間違えやすいのは,アプリに登録されたデータの行である。データはどの分類でも利用者のものなので,SaaS でも○になる。逆に,クラウドに移したからといって OS・ミドルウェアの管理が不要になるのは PaaS と SaaS だけで,IaaS では必要である。

設問2(1) 解答欄3つ

表 7 中の j〜l に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア 一覧の閲覧権限,閲覧権限,編集権限 イ 一覧の閲覧権限,閲覧権限 ウ 一覧の閲覧権限 エ なし

〔j〕解答例

  • ウ

〔k〕解答例

  • エ

〔l〕解答例

  • イ
解説

本文の根拠

表1 項番2 障害監視

ログを確認して一次切分けを行う。その際に,サーバの一覧を参照する。

表1 項番3 性能監視

W 社が定めた,CPU 稼働率,処理性能及び応答時間に関わる指標(以下,性能指標という)を監視する。

〔移行先のクラウドサービス選定〕

表 1 の項番 1〜項番 3 の運用を D 社に委託する計画にした。

〔L 社のクラウドサービスにおける権限設計〕

W 社は,D 社に付与する権限が必要最小限となるように,表 7 に示す D 社向けの権限のセットを作成した。

D 社に委託するのは,表1の項番1〜3(ログ保全,障害監視,性能監視)で,項番4の機器故障対応は委託しない。権限は,この運用に必要な最小限にする。

仮想マシンサービス(j):項番2・項番3の一次切分けでサーバの一覧を参照するので,仮想マシン一覧の閲覧に当たる“一覧の閲覧権限”(ウ)だけが必要である。ログはログ保管ストレージ(オブジェクトストレージサービス)から取り出すので,仮想マシン上のファイルの閲覧権限や,起動・停止などの編集権限は不要である。DB サービス(k):D 社の運用は DB に登録された会員のデータに触れる必要がなく,権限は“なし”(エ)にする。モニタリングサービス(l):項番3で性能指標を監視するので,監視している指標の一覧と,過去から現在までの値を見る“一覧の閲覧権限,閲覧権限”(イ)が必要である。監視する指標の追加・削除は W 社が定めるものなので,編集権限は付与しない。

間違えやすいのは,“なし”を選ぶ DB サービスである。表6のとおり DB サービスの一覧の閲覧権限でもスキーマー覧とテーブル一覧が見えるので,運用に必要がなければ付与しない。表7の権限のセットで,オブジェクトストレージサービスにだけ編集権限まで与えているのは,ログのバックアップに使うためである。

設問2(2)

本文中の下線①のイベント検知のルールを,JSON 形式で答えよ。ここで,D 社の利用者 ID は,1110〜1199 とする。

解答例

  • { "system": "4000", "account": "11[1-9][0-9]", "service": "オブジェクトストレージサービス", "event": "オブジェクトの削除" }
解説

本文の根拠

〔L 社のクラウドサービスにおける権限設計〕 下線①

D 社の運用者がシステムから日記サービスのログを削除したときに,そのイベントを検知してアラートをメールで通知するための検知ルール

表1 項番1 ログ保全

D 社作業用端末でのバックアップ作業後に,D 社作業用端末からログを削除する。なお,各機器からログを削除する作業は W 社が行う。

表5

4000:ログ保管ストレージ,・オブジェクトストレージサービス

表4 注記

system と account の取り得る値には正規表現を利用できる。

日記サービスのログは,ログ保管ストレージ(システム ID 4000)に保管され,ストレージは,オブジェクトストレージサービスで構築されている(表5)。したがって,ルールの system は "4000",service は "オブジェクトストレージサービス",event は表4にある“オブジェクトの削除”になる。

account は,D 社の利用者 ID である 1110〜1199 の全てに合致する正規表現にする。表4の注記の規則に従い,“11”の後に 1〜9 の 1 文字,続けて 0〜9 の 1 文字を並べた 11[1-9][0-9] で,1110〜1199 になる。図1の形のまま,値だけを入れ替えた JSON を書く。

D 社には各機器のログを削除する作業は委託されていない(W 社が行う)ので,D 社の利用者によるログの削除は,意図しない操作や不正の疑いがあるイベントとして検知する。account を 1000 や 11** のように広げると,W 社の担当者の正規の操作まで検知してしまうので,D 社の ID の範囲だけにする。

設問3(1) 解答欄3つ

本文中,図 3 中及び図 4 中の m〜o に入れる適切な字句を,“新日記サービス”又は“サービス T”から選び答えよ。

〔m〕解答例

  • 新日記サービス

〔n〕解答例

  • サービスT

〔o〕解答例

  • サービスT
解説

本文の根拠

〔機能拡張の計画開始〕

要件 1 を実現するために,T 社の SNS(以下,サービス T という)と連携することにした。

図3

(9) 記事投稿:Web サーバからリソースサーバ。

表8

Authorization: Basic YWJjZDEyMzQ6UEBzc3dvcmQ=

OAuth 2.0 では,利用者(会員)の代わりに他のサービスの資源にアクセスするものをクライアントと呼ぶ。図3の Web サーバは,会員が投稿した記事を他社の SNS にも投稿するために (9) で記事を投稿しており,クライアントである新日記サービス(m)の Web サーバである。一方,アクセストークンを発行する認可サーバ(n)と,記事の投稿を受け付けるリソースサーバ(o)は,連携先のサービス T が提供する。

表8の (7) のリクエストの Authorization ヘッダにある Basic 認証の値は,クライアント ID とクライアントシークレットを連結してエンコードしたもので,Web サーバがクライアントとして認可サーバに認証を受けていることを示す。W 社が管理するのは新日記サービスの側(Web サーバ)である。

間違えやすいのは認可サーバである。会員のログインを受け付ける認可サーバだから新日記サービスと考えがちだが,記事を投稿する先の SNS(サービス T)の会員が同意をする場面なので,サービス T である。図4(スマホアプリを使う場合)も,m〜o は図3と同じ組合せになる。

設問3(2) 解答欄2つ

表 8 中の p,q に入れる適切な番号を,図 3 中の番号から選び答えよ。

〔p〕解答例

  • (3)

〔q〕解答例

  • (7)
解説

本文の根拠

表8

GET /authorize?response_type=code&client_id=abcd1234&redirect_uri=https://△△△.com/callback HTTP/1.1

表8

POST /oauth/token HTTP/1.1

表8

grant_type=authorization_code&code=5810f68ad195469d85f59a6d06e51e90&redirect_uri=https://△△△.com/callback

p は,response_type=code,client_id,redirect_uri を指定して /authorize に GET するリクエストで,認可コードを要求する“認可要求”に当たる。会員の Web ブラウザが (2) のリダイレクトを受けて認可サーバに送るので,図3の (3) である。q は,/oauth/token に POST し,grant_type=authorization_code と code(認可コード)を送るので,認可コードをアクセストークンに交換する“アクセストークン要求”に当たる。Web サーバが認可サーバに直接送るので,図3の (7) である(RFC 6749)。

表8の p,q は,それぞれ,クライアントが認可サーバに送る要求の内容である。p は,会員の Web ブラウザ経由のリクエストで,認可サーバの画面((4) の認可同意処理)につながる。q は,(6) で Web サーバが受け取った認可コード(code)を入れて,Web サーバから認可サーバに送られる。

間違えやすいのは,(8) のアクセストークン応答や (6) の認可コードの受け渡しとの混同である。p,q はリクエストなので,レスポンスである (5),(8) は選ばない。講評にも,q を HTTP レスポンスの (8) とする誤答が多かったとある。

採点講評(IPA)

設問3(2)qは,正答率がやや低かった。HTTPレスポンスである(8)と誤って解答した受験者が多かった。HTTPプロトコルの理解を深め,HTTPリクエストとHTTPレスポンスとのデータの違いをよく確認しておいてほしい。

設問3(3)

本文中の下線②について,CRYPTREC の“電子政府推奨暗号リスト(令和 4 年 3 月 30 日版)”では利用を推奨していない暗号技術が含まれる TLS 1.2 の暗号スイートを,解答群の中から全て選び,記号で答えよ。 解答群 ア TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 イ TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 ウ TLS_RSA_WITH_3DES_EDE_CBC_SHA エ TLS_RSA_WITH_RC4_128_MD5

解答例

  • ウ,エ
解説

本文の根拠

〔サービス T との連携の検討〕

各リクエストの通信で TLS 1.2 及び TLS 1.3 を利用可能とするために,②暗号スイートの設定をどのようにすればよいかを検討した。

〔サービス T との連携の検討〕

OAuth 2.0 を利用してサービス T と連携した場合のサービス要求から記事投稿結果取得までの流れを図 3 に,送信されるデータを表 8 に示す。

TLS 1.2 の暗号スイート名は,鍵交換(DHE_RSA や RSA),暗号(AES_128_GCM,3DES_EDE_CBC,RC4_128 など),ハッシュ(SHA256,SHA,MD5)の組合せで書かれている。ア・イは,DHE による鍵交換,AES の暗号,SHA-256 のハッシュで,いずれも CRYPTREC の電子政府推奨暗号リストにある方式(AES,SHA-256 など)である。

ウは,64 ビットブロックの 3DES と SHA-1,エは,ストリーム暗号の RC4 と MD5 を使っていて,電子政府推奨暗号リストの推奨暗号に含まれないので,利用を推奨しないものとして,答えは“ウ,エ”になる。RC4 を使う暗号スイートは,TLS での使用を禁止する RFC 7465 でも禁じられている。

間違えやすいのは,鍵交換の方式(DHE か RSA か)で選んでしまうことである。DHE は前方秘匿性があるが,設問の観点は電子政府推奨暗号リストに載っているかどうかであり,鍵交換の違いではない。イの CBC モードは暗号利用モードとして推奨される方式で,選ばない。

設問4(1) 40字以内

本文中の下線③について,アクセストークンの取得に成功することが困難である理由を,表 8 中のパラメータ名を含めて,40 字以内で具体的に答えよ。

解答例

  • アクセストークン要求に必要なcodeパラメータを不正に取得できないから
解説

本文の根拠

表8 注2)

クライアント ID と,英数字と記号で構成された文字列であるクライアントシークレットとを,“:”で連結して base64 でエンコードした値

表8 q

grant_type=authorization_code&code=5810f68ad195469d85f59a6d06e51e90&redirect_uri=https://△△△.com/callback

図3

(6) 認可コード:Web ブラウザから Web サーバ。

エンコード値 G は,クライアント ID とクライアントシークレットを連結して base64 でエンコードしたものなので,これを入手した攻撃者は,新日記サービスの Web サーバになりすまして,認可サーバにリクエストを送れる。しかし,アクセストークンを取得するための表8 q のリクエストには,クライアント認証の値のほかに,認可コード(code パラメータ)が要る。

認可コードは,会員が認可に同意した後に,(5)・(6) で会員の Web ブラウザ経由で正規の Web サーバに渡される。攻撃者は特定の会員の認可コードを手に入れる手段がなく,エンコード値 G だけでは q のリクエストを作れない。認可コードは短い有効期間で 1 回しか使えないとされている(RFC 6749)。

40 字以内に収めるには,“アクセストークン要求に必要な code パラメータ”と“不正に取得できない”の 2 点を書く。“エンコード値 G は推測できない”と書くと,G を入手した前提に反する。

採点講評(IPA)

設問4は,(1),(2)ともに正答率が低かった。OAuth 2.0のメカニズムについては,用語だけではなく,その具体的な方法を理解してほしい。また,ハッシュ関数など,暗号技術の基礎的な仕組みを理解しておくことが認証認可の中で使われるPKCEなどのメカニズムを理解する上でも重要であることを知ってほしい。

設問4(2) 70字以内

本文中の下線④について,認可サーバがチャレンジコードと検証コードの関係を検証する方法を,“ハッシュ値を base64url エンコードした値”という字句を含めて,70 字以内で具体的に答えよ。ここで,code_challenge_method の値は S256 とする。

解答例

  • 検証コードのSHA-256によるハッシュ値をbase64urlエンコードした値と,チャレンジコードの値との一致を確認する。
解説

本文の根拠

〔W 社によるリスク評価〕

PKCE の実装では,乱数を基に,チャレンジコードと検証コードを生成する。

〔W 社によるリスク評価〕

(3) のリクエストにチャレンジコードと code_challenge_method パラメータを追加し,(7) のリクエストに検証コードパラメータを追加する。

PKCE では,クライアントが乱数から検証コード(code_verifier)を作り,そのハッシュ値を基にチャレンジコード(code_challenge)を作る。(3) の認可要求にはチャレンジコードを付け,(7) のアクセストークン要求には検証コードを付ける。code_challenge_method が S256 のとき,チャレンジコードは検証コードの SHA-256 のハッシュ値を base64url エンコードした値である(RFC 7636)。

認可サーバは,(3) で受け取ったチャレンジコードを認可コードに関連付けて保持しておき,(7) で受け取った検証コードに同じ計算(SHA-256 のハッシュ値を base64url エンコード)をして,保持しているチャレンジコードと一致するかを確認する。偽のスマホアプリが認可コードを横取りしても,検証コードは (3) では送られず,ハッシュ値から元の検証コードは求められないので,(7) のリクエストで一致させられない。

70 字以内に収めるには,“検証コードのハッシュ値(SHA-256)を base64url エンコードした値”と,“チャレンジコードの値との一致を確認する”の 2 点を書く。設問の指定の字句は“ハッシュ値を base64url エンコードした値”なので,そのまま含める。講評のとおり,OAuth 2.0 の用語だけでなく,ハッシュ関数を含む具体的な方法を理解しておく。

採点講評(IPA)

設問4は,(1),(2)ともに正答率が低かった。OAuth 2.0のメカニズムについては,用語だけではなく,その具体的な方法を理解してほしい。また,ハッシュ関数など,暗号技術の基礎的な仕組みを理解しておくことが認証認可の中で使われるPKCEなどのメカニズムを理解する上でも重要であることを知ってほしい。

設問5(1) 40字以内

本文中の下線⑤について,第三者が X トークンを取得するための操作を,40 字以内で答えよ。

解答例

  • OSSリポジトリのファイルZの変更履歴から削除前のファイルを取得する。
解説

本文の根拠

〔F 社による原因調査〕

F 社の開発者の 1 人が,ファイル Z を誤ってアップロードし,承認した後,誤ってアップロードしたことに気付き,ファイル Z を削除した上で開発リーダーに連絡していた。

表9 バージョン管理

新規作成,変更,削除の前後の差分をソースコードの変更履歴として記録する。

表9 注記

OSS リポジトリのソースコードと変更履歴のダウンロードは誰でも可能である。

〔F 社による原因調査〕

ファイル Z がアップロードされてから削除されるまでの間にダウンロードされていなかったことを確認して,問題なしと判断していた。

ファイル Z には X トークンが含まれていた。開発リーダーは,ファイル Z が OSS リポジトリから削除されていることと,アップロードから削除までの間にダウンロードされていないことだけを確認して問題なしと判断した。しかし,サービス E は,削除も含む変更の前後の差分を変更履歴として記録するので,削除前のファイル Z の内容は変更履歴に残っている。

OSS リポジトリには利用者認証がなく,ソースコードと変更履歴のダウンロードは誰でも可能である(表9注記)。したがって,第三者は OSS リポジトリの変更履歴をダウンロードして,削除前のファイル Z を取得し,X トークンを得られる。

40 字以内に収めるには,“OSS リポジトリのファイル Z の変更履歴”という取得元と,“削除前のファイルを取得する”という操作を書く。ファイルが削除されていても履歴に残るという点が,この設問の分かれ目である。講評にもあるように,インシデントの再発防止では攻撃の経路を特定することが重要である。

採点講評(IPA)

設問5(1)は,正答率が低かった。インシデントの再発防止では,受けた攻撃の経路を特定することが重要であることを知っておいてほしい。

設問5(2) 50字以内

本文中の下線⑥について,権限管理の変更内容を,50 字以内で答えよ。

解答例

  • アップロードされたソースコードを承認する承認権限は,開発リーダーだけに与えるようにする。
解説

本文の根拠

表9 権限管理

開発者,開発リーダーなど全ての利用者に対して,設定できる権限全てを与える。

表9 権限管理

変更履歴の削除には,アップロードされたソースコードを承認する承認権限が必要である。

表9 バージョン管理

開発者が,それら二つの結果とソースコードをアップロードして,開発リーダーに承認を依頼するルールとする。

F 社では,開発者・開発リーダーなど全ての利用者に,設定できる権限を全て与えていた。承認権限を持つ開発者は,自分でアップロードしたソースコードを承認できるうえ,変更履歴の削除(承認権限が必要)も行える。これは,権限は必要最小限にするという原則に反している。

F 社のルールでは,開発者がソースコードをアップロードして,開発リーダーに承認を依頼する。そこで,承認権限を開発リーダーだけに与えれば,開発者は承認できず,変更履歴の削除もできなくなり,不正なソースコードや X トークンが入ったファイルが残る経路が絞られる。開発者にはアップロード権限とダウンロード権限だけを付与する。

50 字以内に収めるには,“承認権限”“開発リーダーだけに与える”の 2 点を書く。“開発者の権限を減らす”と書くだけでは,どの権限を誰に与えるかが分からず,権限管理の変更内容として具体性に欠ける。講評にあるように,権限は必要最小限だけを与える。

採点講評(IPA)

設問5は,(2),(3)ともに正答率がやや高かった。権限は,利用者には必要最小限しか与えないよう,慎重に検討することが求められる。業務などの要件と照らし合わせて,設定が必要最小限かどうかを確認してほしい。

設問5(3) 40字以内

本文中の下線⑦について,見直し後の設定を,40 字以内で答えよ。

解答例

  • Xトークンには,ソースコードのダウンロード権限だけを付与する。
解説

本文の根拠

表9 権限管理

ソースコードのダウンロード権限を X 社 CI に付与する必要がある。

表9 サービス連携

X 社 CI に発行する E トークン(以下,X トークンという)には,リポジトリ W の全ての権限が付与されている。

表9 注2)

アップロードされたソースコードが承認されると,ビルドと単体テストを自動実行するサービスである。

X 社 CI は,承認されたソースコードをダウンロードして,ビルドと単体テストを自動実行するサービスである。連携に必要なのはソースコードのダウンロード権限だけだが,X トークンにはリポジトリ W の全ての権限が付与されていた。そのため,X トークンが漏えいすると,第三者がソースコードをアップロードして承認し,不正コード M を追加できてしまった。

E トークンの発行形式と有効期間は変更できない(表9 サービス連携)ので,見直しの対象はトークンに付与する権限である。X トークンには,ソースコードのダウンロード権限だけを付与する。そうすれば,トークンが漏えいしても,ダウンロードされるだけで,ソースコードの追加や変更は行われない。

40 字以内に収めるには,“X トークン”,“ソースコードのダウンロード権限だけ”を付与する,の 2 点を書く。“有効期間を短くする”は,仕様上変更できず,設問の“見直し後の設定”として答えられない。

採点講評(IPA)

設問5は,(2),(3)ともに正答率がやや高かった。権限は,利用者には必要最小限しか与えないよう,慎重に検討することが求められる。業務などの要件と照らし合わせて,設定が必要最小限かどうかを確認してほしい。

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