情報処理安全確保支援士 2023年 春期 午後2 問02
Webサイトのクラウドサービスへの移行と機能拡張に関する次の記述を読んで、設問に答えよ。
W社は、従業員100名のブログサービス会社であり、日記サービスというWebサービスを10年前から提供している。日記サービスの会員は、自分の食事に関する記事の投稿及び摂取カロリーの管理ができる。
日記サービスは、W社のデータセンター内で稼働している。ハードウェアの調達には1か月程度を要する。W社は、日記サービスが稼働している各機器の運用をD社に委託している。D社に委託している運用を表1に示す。

この2、3年、会員が急増しているので、W社は、日記サービスをクラウドサービスに移行することにした。
〔移行先のクラウドサービス選定〕
W社は、クラウドサービスへの移行時及び移行後の管理、運用について、検討を開始した。
まず、クラウドサービスへの移行時及び移行後に、W社が何を管理、運用する必要があるかを調べたところ、表2のとおりであった。

クラウドサービスへの移行及びクラウドサービスの設定はW社が行い、移行後、表1の項番1~項番3の運用をD社に委託する計画にした。
移行先のクラウドサービスとして、L社のクラウドサービスを選定した。L社が提供しているクラウドサービスを表3に示す。


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

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

〔日記サービスのL社のクラウドサービスへの移行〕
移行後の日記サービスの仮想ネットワーク構成を図2に、図2中の主な構成要素を表5に示す。


W社は、L社のクラウドサービスにおける、D社に付与する権限の検討を開始した。
〔L社のクラウドサービスにおける権限設計〕
L社の各クラウドサービスにおける権限ごとに可能な操作を表6に示す。

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

さらに、W社は、①D社の運用者がシステムから日記サービスのログを削除したときに、そのイベントを検知してアラートをメールで通知するための検知ルールを作成した。
W社は、L社とクラウドサービスの利用契約を締結して、日記サービスをL社のクラウドサービスに移行し、運用を開始した。
〔機能拡張の計画開始〕
W社は、サービス拡大のために、機能を拡張した日記サービス(以下、新日記サービスという)の計画を開始した。新日記サービスの要件は次のとおりである。
要件1:会員が記事を投稿する際、他社のSNSにも同時に投稿できること
要件2:スマートフォン用のアプリ(以下、スマホアプリという)を提供すること
W社は、要件1を実装した後で要件2に取り組むことに決めた。その上で、要件1を実現するために、T社のSNS(以下、サービスTという)と連携することにした。
〔サービスTとの連携の検討〕
OAuth 2.0を利用してサービスTと連携した場合のサービス要求から記事投稿結果取得までの流れを図3に、送信されるデータを表8に示す。


各リクエストの通信で TLS 1.2 及び TLS 1.3 を利用可能とするために、②暗号スイートの設定をどのようにすればよいかを検討した。また、サービス T との連携のためのモジュール(以下、Rモジュールという)の実装から単体テストまでを F社に委託することにした。F社は、新技術を積極的に活用している IT 企業である。
〔F社の開発環境〕
F社では、Rモジュールの開発は、取りまとめる開発リーダー1 名と、実装から単体テストまでを行う開発者3名のチームで行う。システム開発において、顧客から開発を委託されたプログラムのソースコードのリポジトリと外部に公開されている OSS リポジトリを利用している。二つのリポジトリは、サービス E というソースコードリポジトリサービスを利用して管理している。
サービス E の仕様と、Rモジュールについての F社のソースコード管理プロセスは、表9のとおりである。

〔悪意のある不正なプログラムコードの混入〕
F社は、Rモジュールの実装について単体テストまでを完了して、ソースコードをW社に納品した。その後、W社とT社は結合テストを開始した。
結合テスト時、外部のホストに対する通信がRモジュールから発生していることが分かった。調べたところ、不正なプログラムコード(以下、不正コードMという)がソースコードに含まれていたことが分かった。不正コードMは、OSの環境変数の一覧を取得し、外部のホストに送信する。新日記サービスでは、エンコード値GがOSの環境変数に設定されていたので、その値が外部のホストに送信されていた。
W社は、漏えいした情報が悪用されるリスクの分析と評価を行うことにした。それと並行して、不正コードMの混入の原因調査と、プログラムの修正をF社に依頼した。
〔W社によるリスク評価〕
W社は、リスクを分析し、評価した。評価結果は次のとおりであった。
・エンコード値Gを攻撃者が入手した場合、mのWebサーバであると偽ってリクエストを送信できる。しかし、図3のシーケンスでは、③攻撃者が特定の会員のアクセストークンを取得するリクエストを送信し、アクセストークンの取得に成功することは困難である。
次に、W社は、近い将来に要件2を実装する場合におけるリスクについても、リスクへの対応を検討した。
そのリスクのうちの一つは、スマホアプリのリダイレクトにカスタムURLスキームを利用する場合に発生する可能性がある。W社が提供するスマホアプリと攻撃者が用意した偽のスマホアプリの両方を会員が自分の端末にインストールしてしまうと、正規のスマホアプリとサーバとのやり取りが偽のスマホアプリに横取りされ、攻撃者がアクセストークンを不正に取得できるというものである。この対策として、PKCE(Proof Key for Code Exchange)を利用すると、偽のスマホアプリにやり取りが横取りされても、アクセストークンの取得を防ぐことができる。
要件2を実装する場合のサービス要求から記事投稿結果取得までの流れを図4に示す。

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トークンを無効化し、次の再発防止策を実施した。
・表9中のバージョン管理に関わる見直しと⑥表9中の権限管理についての変更
・Xトークンが漏えいしても不正にプログラムが登録されないようにするための、⑦表9中のサービス連携に関わる見直し
ソースコードには他の不正な変更は見つからなかったので、不正コードMが含まれる箇所だけを不正コードが追加される前のバージョンに復示した。
W社は、F社が改めて納品したRモジュールに問題がないことを確認し、新日記サービスの提供を開始した。
設問1:
表2中のa〜iに入れる適切な内容を、“○”又は“x”から選び答えよ。
模範解答
a:○
b:×
c:×
d:○
e:○
f:×
g:○
h:○
i:○
解説
解答の論理構成
- 【問題文】の「表2 W社が管理、運用する必要のある範囲」によれば、“O”は W社が管理・運用する必要がある要素、“×”は不要な要素を示します。
- クラウドサービス分類ごとの責任分界は一般的に次のとおりです。
• IaaS: 利用者が「OS, ミドルウェア」「アプリ」「アプリに登録されたデータ」を管理します。
• PaaS: ベンダが「OS, ミドルウェア」を提供し、利用者は「アプリ」「アプリに登録されたデータ」を管理します。
• SaaS: ベンダが「OS, ミドルウェア」「アプリ」を含めて提供しますが、利用者は「アプリに登録されたデータ」を管理します。 - 以上を表2の空欄に当てはめると以下のようになります。
• a IaaS の「OS, ミドルウェア」→ 利用者管理 → “○”
• b PaaS の「OS, ミドルウェア」→ ベンダ管理 → “×”
• c SaaS の「OS, ミドルウェア」→ ベンダ管理 → “×”
• d IaaS の「アプリ」→ 利用者管理 → “○”
• e PaaS の「アプリ」→ 利用者管理 → “○”
• f SaaS の「アプリ」→ ベンダ管理 → “×”
• g IaaS の「アプリに登録されたデータ」→ 利用者管理 → “○”
• h PaaS の「アプリに登録されたデータ」→ 利用者管理 → “○”
• i SaaS の「アプリに登録されたデータ」→ 利用者管理 → “○” - よって模範解答どおり
a:○、b:×、c:×、d:○、e:○、f:×、g:○、h:○、i:○ となります。
誤りやすいポイント
- SaaS では「アプリ」をベンダが提供するので利用者は運用不要ですが、「アプリに登録されたデータ」は利用者責任であることを混同しやすいです。
- 「OS, ミドルウェア」は PaaS で不要、IaaS では必要という基本を取り違えると連鎖的に誤答になります。
- ハードウェアとネットワークは全サービス形態で “×” という前提を忘れると全体のバランスが崩れます。
FAQ
Q: SaaS でもデータをクラウドベンダにバックアップしてもらえるのでは?
A: 物理的なバックアップ作業はベンダが行う場合がありますが、データ内容の正確性・保護ポリシを決定し責任を負うのは利用者側です。そのため表2では “○” になります。
A: 物理的なバックアップ作業はベンダが行う場合がありますが、データ内容の正確性・保護ポリシを決定し責任を負うのは利用者側です。そのため表2では “○” になります。
Q: PaaS において OS のパッチ適用を要求された場合は誰の責任?
A: OS の維持管理はベンダ責任なので、利用者が直接パッチを適用する必要はありません。ただし適用可否の確認やアプリの動作検証は利用者側の責務です。
A: OS の維持管理はベンダ責任なので、利用者が直接パッチを適用する必要はありません。ただし適用可否の確認やアプリの動作検証は利用者側の責務です。
Q: IaaS で「ハードウェア、ネットワーク」が “×” なのはなぜ?
A: IaaS では物理ハードウェアや基盤ネットワークはクラウドベンダが提供・管理し、利用者は仮想化されたリソースの上位層から責任を負うためです。
A: IaaS では物理ハードウェアや基盤ネットワークはクラウドベンダが提供・管理し、利用者は仮想化されたリソースの上位層から責任を負うためです。
関連キーワード: IaaS, PaaS, SaaS, 責任分界点、データ管理
設問2:〔L社のクラウドサービスにおける権限設計〕について答えよ。
(1)表7中のj〜lに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:一覧の閲覧権限、閲覧権限、編集権限
イ:一覧の閲覧権限、閲覧権限
ウ:一覧の閲覧権限
エ:なし
模範解答
j:ウ
k:エ
l:イ
解説
解答の論理構成
-
委託範囲の確認
【問題文】には「移行後、表1の項番1~項番3の運用をD社に委託する計画」とあります。
項番1~3は以下のとおりです。
・項番1「ログ保全」
・項番2「障害監視」―「サーバの一覧を参照する」
・項番3「性能監視」―「性能指標を監視する」「サーバの一覧を参照する」 -
仮想マシンサービスで必要な権限(j)
障害監視・性能監視の両方で必要なのは「サーバの一覧を参照する」ことだけで、起動・停止・削除などの操作は求められていません。
表6を見ると「仮想マシンサービス」の操作を最小に抑えるなら
一覧の閲覧権限=「仮想マシン一覧の閲覧」
だけで十分です。したがって
j=ウ「一覧の閲覧権限」 -
DBサービスで必要な権限(k)
項番1~3の運用内容にデータベース操作は一切含まれていません。
よって DB サービスには権限を与える必要がありません。
k=エ「なし」 -
モニタリングサービスで必要な権限(l)
性能監視では「性能指標を監視する」「過去から現在までの性能指標の値の閲覧」が必要です。
表6のモニタリングサービスの権限を見ると
・一覧の閲覧権限=「監視している性能指標一覧の閲覧」
・閲覧権限=「過去から現在までの性能指標の値の閲覧」
の二つがあれば目的を達成できます。追加・削除までは不要なので編集権限は与えません。
l=イ「一覧の閲覧権限、閲覧権限」 -
以上より
j:ウ、k:エ、l:イ となります。
誤りやすいポイント
- 「障害時に仮想マシンを再起動するかもしれない」と考えて編集権限まで付けてしまう。問題文では一次切分けのみで復旧操作は求められていない点に注意。
- モニタリングサービスで「性能指標の追加・削除も必要」と誤解する。追加・削除はW社側の作業であり、D社は値の閲覧だけで足りる。
- 「ログ保全だからDBにもアクセスが必要」と短絡的に判断する。実際のログはオブジェクトストレージサービスに保管され、DBサービスは対象外。
FAQ
Q: D社が障害対応で仮想マシンを停止・起動できないと復旧が遅れませんか?
A: 問題文ではD社の役割は一次切分けまでで、復旧操作はW社が担う前提です。最小権限の原則に従い、不要な操作権限は与えません。
A: 問題文ではD社の役割は一次切分けまでで、復旧操作はW社が担う前提です。最小権限の原則に従い、不要な操作権限は与えません。
Q: ログ保全のためには仮想マシン内のファイル閲覧権限が必要では?
A: ログは各機器から取得後、直接「オブジェクトストレージサービス」に保存します。仮想マシンサービス側でファイル閲覧を行う必要はありません。
A: ログは各機器から取得後、直接「オブジェクトストレージサービス」に保存します。仮想マシンサービス側でファイル閲覧を行う必要はありません。
Q: 性能指標が増えた場合は誰が追加するのですか?
A: W社です。問題文に「必要に応じて、W社への連絡をメールと電話で行う」とあるように、指標の追加・削除など設定変更はW社が実施します。
A: W社です。問題文に「必要に応じて、W社への連絡をメールと電話で行う」とあるように、指標の追加・削除など設定変更はW社が実施します。
関連キーワード: 最小権限、アクセス制御、監視運用、ログ保全、パフォーマンス監視
設問2:〔L社のクラウドサービスにおける権限設計〕について答えよ。
(2)本文中の下線①のイベント検知のルールを、JSON形式で答えよ。ここで、D社の利用者IDは、1110〜1199とする。
模範解答
{
”system”: ”4000”
”account”: ”11[1-9][0-9]”
”service”: ”オブジェクトストレージサービス”
”event”: ”オブジェクトの削除”
}
解説
解答の論理構成
-
対象システムの特定
- 本文では「ログ保管ストレージ」のシステム ID を表5で「4000」と明示しています。
- 下線①は「D社の運用者がシステムから日記サービスのログを削除したとき」を検知するとあるので、system は “4000” になります。
-
対象利用者の特定
- 小問説明で「D社の利用者IDは、1110〜1199」と指定されています。
- account パラメータは正規表現が使えるので、1110〜1199を1行で表す正規表現は “11[1-9][0-9]” となります。
- 11の後ろに1〜9を表す「[1-9]」、その後に0〜9を表す「[0-9]」を続けることで1110〜1199を網羅します。
-
service 値の決定
- 表6で「オブジェクトストレージサービス」に対し「オブジェクトの作成・編集・削除」が編集権限に該当すると示されています。
- ログ保管ストレージは「オブジェクトストレージサービス」を利用している(表5)ため、service は “オブジェクトストレージサービス” です。
-
event 値の決定
- 表4の event に関する説明で「オブジェクトストレージサービスの場合」の選択肢に “オブジェクトの削除” があります。
- ログを削除する操作は “オブジェクトの削除” に該当します。
-
以上を JSON 形式でまとめる
{
”system”: ”4000”、
”account”: ”11[1-9][0-9]”、
”service”: ”オブジェクトストレージサービス”、
”event”: ”オブジェクトの削除”
}
誤りやすいポイント
- account の正規表現で「11[0-9][0-9]」と書くと1110未満(1100〜1109)も含まれてしまいます。
- service を “仮想マシンサービス” と誤記すると、イベント種別に “オブジェクトの削除” が存在しないため検知できません。
- system に公開Webサーバ(1000)を指定すると、ログ保管領域以外の削除操作を監視してしまい目的から外れます。
FAQ
Q: 数値範囲を網羅する正規表現は必ず2つの角括弧で書く必要がありますか?
A: 本問の範囲「1110〜1199」は十の位が1〜9、1の位が0〜9なので “11[1-9][0-9]” が最短表記です。角括弧の使用回数は範囲によって変わります。
A: 本問の範囲「1110〜1199」は十の位が1〜9、1の位が0〜9なので “11[1-9][0-9]” が最短表記です。角括弧の使用回数は範囲によって変わります。
Q: “オブジェクトの削除” が検知対象になればログ保管ストレージのフォルダ削除も検知できますか?
A: はい。オブジェクトストレージではフォルダもメタデータ付きオブジェクトとして扱われるため、フォルダ削除も “オブジェクトの削除” として検知されます。
A: はい。オブジェクトストレージではフォルダもメタデータ付きオブジェクトとして扱われるため、フォルダ削除も “オブジェクトの削除” として検知されます。
Q: システム ID を正規表現で指定する方法はありますか?
A: 可能ですが、本問では単一の “4000” しか対象でないため正規表現は不要です。複数 ID をまとめたい場合に正規表現指定が有効です。
A: 可能ですが、本問では単一の “4000” しか対象でないため正規表現は不要です。複数 ID をまとめたい場合に正規表現指定が有効です。
関連キーワード: 正規表現、ログ保全、オブジェクトストレージ、監視ルール
設問3:〔サービスTとの連携の検討〕について答えよ。
(1)本文中、図3中及び図4中のm〜oに入れる適切な字句を、“新日記サービス”又は“サービスT”から選び答えよ。
模範解答
m:新日記サービス
n:サービスT
o:サービスT
解説
解答の論理構成
-
図3について
- 【問題文】には「OAuth 2.0を利用してサービスTと連携した場合のサービス要求から記事投稿結果取得までの流れを図3に示す。」とあります。
- したがって、図3のシーケンスは“新日記サービス”と“サービスT”の間で行われるやり取りです。
-
“mのWebサーバ”
- シーケンス(1)は「Webブラウザ → mのWebサーバ:サービス要求」。
- 会員がアクセスするのは“新日記サービス”のサイトであり、そこで記事の同時投稿を要求します。
- よって “mのWebサーバ” = “新日記サービス”。
-
“nの認可サーバ”
- シーケンス(3)は「Webブラウザ → nの認可サーバ:認可要求」。
- OAuth 2.0 の認可サーバはリソース提供側(今回の SNS)に属します。【問題文】では「サービスTと連携」と明記されているため、ここは “サービスT” となります。
-
“oのリソースサーバ”
- シーケンス(9)は「mのWebサーバ → oのリソースサーバ:記事投稿」。
- 記事を実際に保存するのはサービスTのSNS側リソースサーバです。
- よって “oのリソースサーバ” = “サービスT”。
-
以上より
- m:新日記サービス
- n:サービスT
- o:サービスT
誤りやすいポイント
- 認可サーバとリソースサーバを“新日記サービス”と誤解する
- OAuth 2.0 ではリソースを持つ側(今回のSNS)が両方を提供するのが一般的です。
- Webサーバの所在をサービスTと誤認する
- シーケンス(1)の「サービス要求」は会員が新日記サービスに対して行う操作です。
- 「記事投稿」を“API Gateway”など別名で考えてしまう
- 問題文は単純化しており、リソースサーバ=SNS の API であると読み替える必要があります。
FAQ
Q: 認可サーバとリソースサーバは必ず同じサービスが提供するのですか?
A: RFCでは分離も可能ですが、本問題のようなSNS連携では同一事業者が両方を運用するケースが一般的です。
A: RFCでは分離も可能ですが、本問題のようなSNS連携では同一事業者が両方を運用するケースが一般的です。
Q: 新日記サービス側に認可サーバが存在しない理由は?
A: 新日記サービスは“クライアント”の立場でサービスTのリソースを利用するため、自身で認可サーバを持つ必要はありません。
A: 新日記サービスは“クライアント”の立場でサービスTのリソースを利用するため、自身で認可サーバを持つ必要はありません。
Q: 図3のリダイレクトが二度登場する意図は?
A: 最初のリダイレクト(2)は認可エンドポイント誘導、二度目(5)は認可コードを付与したブラウザをクライアント(新日記サービス)へ戻すためです。
A: 最初のリダイレクト(2)は認可エンドポイント誘導、二度目(5)は認可コードを付与したブラウザをクライアント(新日記サービス)へ戻すためです。
関連キーワード: OAuth 2.0, 認可サーバ、リソースサーバ、アクセストークン、リダイレクト
設問3:〔サービスTとの連携の検討〕について答えよ。
(2)表8中のp、qに入れる適切な番号を、図3中の番号から選び答えよ。
模範解答
p:(3)
q:(7)
解説
解答の論理構成
-
表8の p には
“GET /authorize?response_type=code&client_id=abcd1234&redirect_uri=https://△△△.com/callback HTTP/1.1¹)”
と記載されています。
これは OAuth 2.0 における認可エンドポイント /authorize へのリクエストであり、図3で示される
“(3) 認可要求”
と同一の内容です。
したがって p = (3) になります。 -
表8の q には
“POST /oauth/token HTTP/1.1 … grant_type=authorization_code …”
と記載されています。
/oauth/token への POST は、発行された認可コードを用いてアクセストークンを要求する処理で、図3の
“(7) アクセストークン要求”
に対応します。
よって q = (7) になります。 -
以上より、解答は
p:(3)
q:(7)
となります。
誤りやすいポイント
- /authorize と /oauth/token のエンドポイントを取り違える。前者は認可コード取得、後者はアクセストークン取得。
- 図3の(5)「リダイレクト」と(7)「アクセストークン要求」を混同し、POST と GET の違いを見落とす。
- Webブラウザから送られるリクエストか、クライアント(Webサーバ)から送られるリクエストかを区別せず番号を選んでしまう。
FAQ
Q: 認可要求とアクセストークン要求の主な違いは何ですか?
A: 認可要求は利用者の同意を得るために /authorize へ送られ、結果として認可コードが発行されます。アクセストークン要求はその認可コードを使って /oauth/token へ送られ、アクセストークンを取得します。
A: 認可要求は利用者の同意を得るために /authorize へ送られ、結果として認可コードが発行されます。アクセストークン要求はその認可コードを使って /oauth/token へ送られ、アクセストークンを取得します。
Q: 図3の(5)「リダイレクト」はどの HTTP メソッドで行われますか?
A: 一般に 302 などのリダイレクトレスポンスが返り、Webブラウザは GET で自動遷移します。ただし設問では番号対応を問うていないため、解答には関係ありません。
A: 一般に 302 などのリダイレクトレスポンスが返り、Webブラウザは GET で自動遷移します。ただし設問では番号対応を問うていないため、解答には関係ありません。
Q: POST と GET を見分けるポイントはありますか?
A: OAuth 2.0 では /authorize が GET、/oauth/token が POST と仕様で定められており、フォームデータや grant_type が含まれる場合は POST になります。
A: OAuth 2.0 では /authorize が GET、/oauth/token が POST と仕様で定められており、フォームデータや grant_type が含まれる場合は POST になります。
関連キーワード: OAuth 2.0, 認可コード、アクセストークン、Authorization Endpoint, Token Endpoint
設問3:〔サービスTとの連携の検討〕について答えよ。
(3)本文中の下線②について、CRYPTRECの“電子政府推奨暗号リスト(令和4年3月30日版)”では利用を推奨していない暗号技術が含まれるTLS1.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
模範解答
ウ、エ
解説
解答の論理構成
- 下線②では「TLS 1.2 及び TLS 1.3 を利用可能とするために、暗号スイートの設定をどのようにすればよいか」を検討します。
- TLS 1.2 で利用できても、CRYPTREC の“電子政府推奨暗号リスト(令和4年3月30日版)”において推奨されない暗号技術が含まれるスイートは設定から除外する必要があります。
- 解答群の各スイートを構成要素で比較すると次のとおりです。
- 「3DES」および「RC4」「MD5」は同リストで“利用を推奨しない暗号技術”に明記されています。したがって該当スイートは
ウ:TLS_RSA_WITH_3DES_EDE_CBC_SHA
エ:TLS_RSA_WITH_RC4_128_MD5 - よって解答は「ウ、エ」となります。
誤りやすいポイント
- 「AES-CBC は危険」と短絡的に判断してしまい、TLS_DHE_RSA_WITH_AES_256_CBC_SHA256まで除外してしまう。CBC モードは SHA-256 と組み合わせた DHE キー交換であれば現行リストで「推奨」扱いです。
- 「RSA キー交換=非推奨」と思い込み、TLS_RSA_WITH_3DES_EDE_CBC_SHAだけでなくア~エすべてを疑ってしまう。問題は暗号アルゴリズムそのもの(3DES, RC4, MD5)にあります。
- TLS 1.3 のみを意識して TLS 1.2 のスイート分類を見落とす。設問は「TLS 1.2 の暗号スイート」を対象にしています。
FAQ
Q: CRYPTREC 推奨暗号リストの確認方法は?
A: デジタル庁ウェブサイトで公開されている“電子政府推奨暗号リスト(令和4年3月30日版)”の PDF で、推奨・移行・使用不可などの区分を参照できます。
A: デジタル庁ウェブサイトで公開されている“電子政府推奨暗号リスト(令和4年3月30日版)”の PDF で、推奨・移行・使用不可などの区分を参照できます。
Q: 「SHA-1 が入っているから即非推奨」と考えて良いですか?
A: SHA-1 単体であっても、同リストでは「電子証明書の署名用には不可」とされていますが、TLS 用途での扱いは“移行”に分類されます。今回は 3DES や RC4/MD5 の方が明確に「推奨しない」とされているため判断基準になります。
A: SHA-1 単体であっても、同リストでは「電子証明書の署名用には不可」とされていますが、TLS 用途での扱いは“移行”に分類されます。今回は 3DES や RC4/MD5 の方が明確に「推奨しない」とされているため判断基準になります。
Q: TLS 1.3 だけを許可すれば安全ですか?
A: TLS 1.3 では暗号スイート構成が簡素化され、問題の 3DES や RC4 は仕様上使用できません。ただし、互換性のために TLS 1.2 を併用するケースが多く、TLS 1.2 側の設定を誤ると脆弱性が残ります。
A: TLS 1.3 では暗号スイート構成が簡素化され、問題の 3DES や RC4 は仕様上使用できません。ただし、互換性のために TLS 1.2 を併用するケースが多く、TLS 1.2 側の設定を誤ると脆弱性が残ります。
関連キーワード: TLS 1.2, 暗号スイート、CRYPTREC, 3DES, RC4
設問4:〔W社によるリスク評価〕について答えよ。
(1)本文中の下線③について、アクセストークンの取得に成功することが困難である理由を、表8中のパラメータ名を含めて、40字以内で具体的に答えよ。
模範解答
アクセストークン要求に必要なcodeパラメータを不正に取得できないから
解説
解答の論理構成
- 本文には、攻撃者が「mのWebサーバであると偽ってリクエストを送信できる」ものの、下線部③として「アクセストークンの取得に成功することは困難」とあります。
- OAuth 2.0 では、アクセストークン取得時に POST /oauth/token 要求(表8の番号q)で grant_type=authorization_code とともに code=... を送信します。
- code は (3)~(6) の正規フローで認可サーバが生成し、Webブラウザ経由で「mのWebサーバ」へリダイレクトされるまで外部に漏えいしません。
- 攻撃者が偽 Web サーバを名乗るだけでは、この code パラメータを入手できないため、後続の POST /oauth/token を正しく実行できず、アクセストークンを取得できません。
- したがって解答は「アクセストークン要求に必要なcodeパラメータを不正に取得できないから」となります。
誤りやすいポイント
- client_id や redirect_uri が分かればアクセストークンを得られると勘違いする。実際には一度限りの code が必須です。
- TLS を用いていれば安全とだけ考え、code の機密性が根拠である点を見落とす。
- 表8のqリクエスト内に code が含まれることを確認せず、別パラメータ名を書いてしまう。
FAQ
Q: code が盗まれた場合はどうなりますか?
A: 有効期間が短い上、一度しか使えない設計が一般的ですが、盗まれた時点でアクセストークンを奪取される恐れがあります。PKCE などの追加対策が有効です。
A: 有効期間が短い上、一度しか使えない設計が一般的ですが、盗まれた時点でアクセストークンを奪取される恐れがあります。PKCE などの追加対策が有効です。
Q: client_secret を知られても問題ありませんか?
A: OAuth 2.0 では公開クライアントと機密クライアントで扱いが異なります。機密クライアントの場合、client_secret 流出は深刻ですが、本設問の論点は code です。
A: OAuth 2.0 では公開クライアントと機密クライアントで扱いが異なります。機密クライアントの場合、client_secret 流出は深刻ですが、本設問の論点は code です。
Q: リダイレクト先を攻撃者が操作できたらどうなりますか?
A: 不正リダイレクトが成立すると code を窃取される可能性があります。その場合も PKCE を併用することでリスクを下げられます。
A: 不正リダイレクトが成立すると code を窃取される可能性があります。その場合も PKCE を併用することでリスクを下げられます。
関連キーワード: OAuth 2.0, 認可コード、アクセストークン、PKCE, リダイレクト
設問4:〔W社によるリスク評価〕について答えよ。
(2)本文中の下線④について、認可サーバがチャレンジコードと検証コードの関係を検証する方法を、“ハッシュ値をbase64urlエンコードした値”という字句を含めて、70字以内で具体的に答えよ。ここで、code_challenge_methodこの値はS256とする。
模範解答
検証コードのSHA-256によるハッシュ値をbase64urlエンコードした値と、チャレンジコードの値との一致を確認する。
解説
解答の論理構成
- 問題文では、PKCEを利用したときに「④認可サーバが二つのコードの関係を検証する」と記載されています。
- また「code_challenge_methodこの値はS256とする」と明示されています。S256は、検証コード(verifier)の SHA-256 ハッシュ値を base64url エンコードしてチャレンジコードと比較する方式です。
- したがって認可サーバ側は、
- クライアントから送られてきた検証コードを受け取る
- その検証コードを SHA-256 でハッシュ化する
- 得られたハッシュ値を base64url エンコードする
- (3) の値が事前に受け取っているチャレンジコードと一致するか確認する
- この手順が具体的な「検証方法」となり、模範解答で示された内容と合致します。
誤りやすいポイント
- チャレンジコードをそのまま平文比較してしまい、ハッシュ化とエンコードの工程を忘れる。
- base64 と base64url の違いを意識せず実装し、文字種の違いによって不一致になる。
- SHA-256 ではなく SHA-1 や SHA-512 など別のハッシュ関数を使おうとしてしまう。
- 検証コードを一度ハッシュ化した後にさらに何らかの変換を重ねてしまい、本来の PKCE フローとずれる。
FAQ
Q: SHA-256 と base64url エンコードを行う順序は入れ替えてもよいですか?
A: いいえ。先に SHA-256 でハッシュ化し、その結果を base64url エンコードする順序が PKCE の仕様です。
A: いいえ。先に SHA-256 でハッシュ化し、その結果を base64url エンコードする順序が PKCE の仕様です。
Q: base64url エンコードとは通常の base64 と何が異なりますか?
A: 文字 ‘+’、‘/’、‘=’ を URL 安全な ‘-’、‘_’、パディング無しに置き換えた形式で、URL パラメータに含めてもエスケープ不要になります。
A: 文字 ‘+’、‘/’、‘=’ を URL 安全な ‘-’、‘_’、パディング無しに置き換えた形式で、URL パラメータに含めてもエスケープ不要になります。
Q: S256 方式以外に PKCE で使える方式はありますか?
A: S256 推奨ですが、仕様上は平文比較の plain 方式も定義されています。ただしセキュリティ上 S256 を使用するべきです。
A: S256 推奨ですが、仕様上は平文比較の plain 方式も定義されています。ただしセキュリティ上 S256 を使用するべきです。
関連キーワード: PKCE, SHA-256, base64urlエンコード、OAuth 2.0
設問5:〔F社による原因調査〕について答えよ。
(1)本文中の下線⑤について、第三者がXトークンを取得するための操作を、40字以内で答えよ。
模範解答
OSSリポジトリYのファイルZの変更履歴から削除前のファイルを取得する。
解説
解答の論理構成
-
アップロードされたソースコードは承認後に“変更履歴”へ保存
- 【問題文】表9 “バージョン管理”
「ソースコードがアップロードされ、承認されると、対象のソースコードが新バージョンとして記録され、変更履歴のダウンロードが可能になる。」 - ファイルZは開発者がアップロードし承認済みなので、削除しても履歴には残存します。
- 【問題文】表9 “バージョン管理”
-
変更履歴はダウンロード可能
- 【問題文】表9 “バージョン管理”
「…変更履歴のダウンロード…が可能である。」 - さらに【問題文】表9 “権限管理”
「変更履歴のダウンロードには、ソースコードのダウンロード権限が必要である。」
- 【問題文】表9 “バージョン管理”
-
OSSリポジトリは外部公開されており、認証不要設定も選択できる
- 【問題文】表9 “利用者認証及びアクセス制御”
「サービスEは外部に公開されている。」
「リポジトリごとに、利用者認証の要・不要を設定できる。」 - OSSリポジトリ側で認証を“不要”にしていれば第三者もアクセス可能です。
- 【問題文】表9 “利用者認証及びアクセス制御”
-
第三者の取得手順
① 公開された OSS リポジトリY に接続
② “変更履歴のダウンロード”機能で削除前バージョンを取得
③ バージョン内のファイルZを閲覧し「Xトークン」を入手 -
したがって、下線⑤の操作は
「OSSリポジトリYのファイルZの変更履歴から削除前のファイルを取得する。」
誤りやすいポイント
- 削除すればファイルが完全に消えると誤解し、変更履歴の存在を見落とす。
- “承認前”のアップロードなら履歴に残らない点と混同しがち。
- アクセス制御を設定していると思い込み、外部公開状態を失念する。
- “クローン”操作など別のダウンロード方法を解答してしまう。
FAQ
Q: 削除後に履歴も消去する運用は可能ですか?
A: 表9に「変更履歴の削除には…承認権限が必要」とあり、別途削除操作を行えば履歴も消せますが、今回は行われていません。
A: 表9に「変更履歴の削除には…承認権限が必要」とあり、別途削除操作を行えば履歴も消せますが、今回は行われていません。
Q: ダウンロード権限がなければ取得できないのでは?
A: 表9 “権限管理”で「全ての利用者に…設定できる権限全てを与える」とあるため、第三者(認証不要設定の場合)でもダウンロードが可能です。
A: 表9 “権限管理”で「全ての利用者に…設定できる権限全てを与える」とあるため、第三者(認証不要設定の場合)でもダウンロードが可能です。
Q: Xトークンだけでソースコードの変更まで行えるのはなぜ?
A: 表9 “サービス連携”に「Xトークンには、リポジトリWの全ての権限が付与されている」と明記されており、アップロードや承認も可能だったからです。
A: 表9 “サービス連携”に「Xトークンには、リポジトリWの全ての権限が付与されている」と明記されており、アップロードや承認も可能だったからです。
関連キーワード: 変更履歴、バージョン管理、アクセス制御、トークン漏えい、リポジトリ
設問5:〔F社による原因調査〕について答えよ。
(2)本文中の下線⑥について、権限管理の変更内容を、50字以内で答えよ。
模範解答
アップロードされたソースコードを承認する承認権限は、開発リーダーだけに与えるようにする。
解説
解答の論理構成
-
事故の背景
表9の権限管理では「開発者、開発リーダーなど全ての利用者に対して、設定できる権限全てを与える。」とあり、 アップロード・ダウンロード・承認の三つの権限が誰にでも付与されていました。 -
問題点の特定
その結果、Xトークンを悪用した第三者が開発者になり替わり「不正コードM」をリポジトリWへ追加しても、 承認権限を自分で行使してしまえば変更が正式版として登録されてしまう脆弱な運用でした。 -
再発防止の方向性
権限委譲の原則(最小権限の原則)に従い、アップロードと承認を同一人物が行えないよう分離すべきです。 -
具体的変更内容
アップロードは開発者が行い、承認は「開発リーダー」だけが行えるように承認権限を限定します。
これにより、Xトークンが流出しても承認フローで不正な変更を排除できます。 -
結論
以上から、承認権限を開発リーダーのみに絞る内容が最も適切です。
誤りやすいポイント
- 「承認権限を全員から削除する」と解釈してしまいがちですが、リポジトリ運用には承認者が必須です。
- 「アップロード権限も開発者から取り上げる」と勘違いすると開発フローが停止します。
- 「最小権限」という語から“閲覧だけ許可すればよい”と早合点すると、変更作業自体が出来なくなります。
FAQ
Q: 承認権限を分離するだけでトークン漏えい対策になるのですか?
A: はい。攻撃者がアップロードできても承認が通らなければ正式版にはならず、被害を抑制できます。
A: はい。攻撃者がアップロードできても承認が通らなければ正式版にはならず、被害を抑制できます。
Q: 開発リーダーが不在の場合の承認はどうなりますか?
A: 代理承認者を別途設定し、承認権限を限定したまま業務継続性を確保する運用を取ります。
A: 代理承認者を別途設定し、承認権限を限定したまま業務継続性を確保する運用を取ります。
Q: アップロードと承認を自動化してCIに任せてもよいですか?
A: CIが承認フローを代替する場合でも、承認処理を行うアカウントの権限を厳格に管理する必要があります。
A: CIが承認フローを代替する場合でも、承認処理を行うアカウントの権限を厳格に管理する必要があります。
関連キーワード: アクセス制御、権限分離、ソースコード管理、最小権限原則、トークン漏洩
設問5:〔F社による原因調査〕について答えよ。
(3)本文中の下線⑦について、見直し後の設定を、40字以内で答えよ。
模範解答
Xトークンには、ソースコードのダウンロード権限だけを付与する。
解説
解答の論理構成
- 問題文では、事故発生時の状況として
“X社CIに発行するEトークン(以下、Xトークンという)には、リポジトリWの全ての権限が付与されている。”
と記載されています。 - また、設定できる個別権限は
“ソースコードのダウンロード権限、ソースコードのアップロード権限、アップロードされたソースコードを承認する承認権限”
の3種類であることが示されています。 - 不正コード混入の原因として、下線⑤で
“第三者がXトークンを不正に取得して、リポジトリWに不正アクセス”
と推測されています。全権限が付いていたため、攻撃者はアップロードや承認まで行えました。 - 再発防止では“表9中のサービス連携に関わる見直し”とあり、X社CIが本来実施する作業はビルド・テスト用にソースコードを取得することだけです。アップロードや承認は不要です。
- したがって、見直し後は最小権限の原則に従い、X社CIへ付与する権限を
“ソースコードのダウンロード権限のみ”
に限定するのが合理的となり、模範解答
「Xトークンには、ソースコードのダウンロード権限だけを付与する。」
が導かれます。
誤りやすいポイント
- 「アップロードは不要でもテスト結果を書き戻すので承認権限が要る」と誤解する。
⇒ テスト結果の保存はX社CI側で完結し、リポジトリへの書き戻し要件は示されていません。 - “全権限”を剥奪しトークン発行を止めるとCIが動かないと考えてしまう。
⇒ ビルド・テストにはダウンロード権限さえあれば十分です。 - 権限を細分化できないと早合点し「設定変更不可」と判断する。
⇒ 問題文は「個別に設定可能」と明言しています。
FAQ
Q: なぜアップロード権限まで禁止する必要があるのですか?
A: アップロード権限があると、トークンを奪取した攻撃者が不正コードを登録できます。CIが必要とするのは取得のみなのでダウンロード権限だけで足ります。
A: アップロード権限があると、トークンを奪取した攻撃者が不正コードを登録できます。CIが必要とするのは取得のみなのでダウンロード権限だけで足ります。
Q: 承認権限を残しても安全ではありませんか?
A: 承認権限があれば、攻撃者は他人が誤ってアップした悪意あるコードを承認し正規化できます。不要な権限は削除するのが最小権限原則です。
A: 承認権限があれば、攻撃者は他人が誤ってアップした悪意あるコードを承認し正規化できます。不要な権限は削除するのが最小権限原則です。
Q: トークンの有効期間(1か月)は変更できないのですか?
A: 問題文に「有効期間の変更はできない」と明示されています。期間を短縮できないので権限を絞ることが効果的な対策になります。
A: 問題文に「有効期間の変更はできない」と明示されています。期間を短縮できないので権限を絞ることが効果的な対策になります。
関連キーワード: 最小権限、ダウンロード権限、トークン管理、アクセス制御、CI連携


