設問1
表1中の【 a 】,【 b 】に入れる字句の適切な組合せを,解答群のうちから選べ。
解答群
| a | b | |
|---|---|---|
| ア | 権限昇格 | なりすまし |
| イ | 権限昇格 | 権限昇格 |
| ウ | なりすまし | 権限昇格 |
| エ | なりすまし | 改ざん |
| オ | なりすまし | なりすまし |
| カ | 否認 | 権限昇格 |
オリジナル問題です(IPA の問題ではありません)。AI が作成し、技術・規格の主張は一次情報で確認しています。本番とは出題の癖が違うことがあります。
R社は,経費精算システム(以下,Eシステムという)を開発している。開発はJ主任のチームが担当し,情報処理安全確保支援士のKさんが支援している。
インフラはAWS上にTerraformのテンプレート(以下,IaCテンプレートという)で構築する。ソースコード等はGitHubのプライベートリポジトリ(以下,Eリポジトリという)で管理し,GitHub Actionsでデプロイする。
Kさんは,設計段階でデータフロー図(DFD)を作成し,STRIDEを用いて脅威を洗い出した(表1)。
表1 脅威分析の結果(抜粋)
| 項番 | DFDの要素 | 想定した脅威 | 分類 | 主な対策 |
|---|---|---|---|---|
| T1 | Eアプリ | 承認者が承認を後から否定し,誰が承認したのかを示せない | 否認 | 承認操作の記録,記録の改ざん検知 |
| T2 | DB | 承認済みの申請の金額が書き換えられる | 改ざん | 接続元の限定,更新履歴 |
| T3 | 上長(外部エンティティ) | 一般社員が,離席中の上長のPCに残るログイン済みの画面を操作し,自分の申請を承認する | 【 a 】 | 承認時の再認証,画面の自動ロック |
| T4 | 領収書バケット | 社外の第三者が領収書画像を閲覧する | 情報漏えい | 公開の禁止,暗号化 |
| T5 | Eアプリ | 一般社員が,自分のIDでログインしたまま承認用APIを直接呼び出し,自分の申請を承認する | 【 b 】 | API側での権限の検査 |
表2 インフラのセキュリティ要件
| 項番 | 要件 |
|---|---|
| R1 | 領収書バケットはインターネットに公開しない。画像はEアプリ経由でだけ閲覧させる。 |
| R2 | EアプリのIAMロールには,領収書バケットのオブジェクトの読み書きに必要な権限だけを与える。 |
| R3 | DBにはEアプリのサーバからだけ接続でき,インターネットからは接続できない。 |
| R4 | AWSの操作を記録し,記録の変更・削除を検知できるようにする。 |
| R5 | 社外からも利用するので,ロードバランサはインターネットからのHTTPS(443)を受け付ける。 |
Kさんは,IaCテンプレート(図1)をレビューした。
# ① 領収書バケット
resource "aws_s3_bucket_public_access_block" "rcpt" {
block_public_acls = true
ignore_public_acls = true
block_public_policy = false
restrict_public_buckets = false
}
resource "aws_s3_bucket_policy" "rcpt" {
policy = jsonencode({ Statement = [{ Effect = "Allow",
Principal = "*", Action = "s3:GetObject",
Resource = "arn:aws:s3:::r-rcpt/*" }] })
}
# ② EアプリのIAMロール
resource "aws_iam_role_policy" "app" {
policy = jsonencode({ Statement = [{ Effect = "Allow",
Action = "s3:*", Resource = "*" }] })
}
# ③ DB
resource "aws_db_instance" "db" {
publicly_accessible = false
}
resource "aws_security_group_rule" "db_in" {
from_port = 5432
to_port = 5432
source_security_group_id = aws_security_group.app.id
}
# ④ 操作の記録
resource "aws_cloudtrail" "trail" {
enable_log_file_validation = true
}
# ⑤ ロードバランサ
resource "aws_security_group_rule" "alb_in" {
from_port = 443
to_port = 443
cidr_blocks = ["0.0.0.0/0"]
}
図1 IaCテンプレート(抜粋)
注記1 一部の引数は省略している。aws_security_group.appはEアプリのサーバ用である。
注記2 各設定の意味は次のとおり。
J主任のチームは当初,デプロイ用のIAMユーザー(管理者権限をもつ)のアクセスキーをワークフロー定義ファイルに直接記述してコミットしていた。J主任は,最新のコミットでその記述を削除し,GitHubのシークレットから参照する方式に変えた。アクセスキーそのものは変更していない。Eリポジトリには委託先2社を含む約30名がアクセスでき,多くが手元に複製している。
なお,GitHub ActionsはOpenID Connect(OIDC)に対応しており,AWS側で信頼関係を設定すると,ジョブがGitHubから受け取ったトークンを提示してAWSの認証情報を取得できる。
表3 リリース判定基準
| 項番 | 基準 |
|---|---|
| C1 | IaCテンプレートの検査及び静的解析で検出された重大度「高」以上の指摘が全て解消されている。ただし,シークレット検査の指摘はC2で判定し,C1の対象にしない。 |
| C2 | 有効なシークレットが,リポジトリ(過去のコミット及び利用者の手元の複製を含む)に含まれていない。 |
| C3 | 基準を満たさない項目を例外とするときは,情報セキュリティ責任者が承認する。ただし,C2は例外にできない。 |
表4 検査結果(静的解析の指摘は全て解消済み)
| 指摘 | 重大度 | 状態 |
|---|---|---|
| 領収書バケットが公開されている(①) | 高 | 解消済み |
| IAMロールの権限が過大である(②) | 高 | 解消済み |
| 領収書バケットのアクセスログが無効である | 中 | 未解消 |
| 過去のコミットにアクセスキーが含まれている(シークレット検査) | 高 | 最新のコミットからは削除済み |
リリース判定会議で,Kさんは表3に照らして,【 c 】と意見を述べた。
設問1
表1中の【 a 】,【 b 】に入れる字句の適切な組合せを,解答群のうちから選べ。
解答群
| a | b | |
|---|---|---|
| ア | 権限昇格 | なりすまし |
| イ | 権限昇格 | 権限昇格 |
| ウ | なりすまし | 権限昇格 |
| エ | なりすまし | 改ざん |
| オ | なりすまし | なりすまし |
| カ | 否認 | 権限昇格 |
設問2
図1中の①〜⑤のうち,表2の要件を満たしていない箇所だけを全て挙げたものはどれか。解答群のうち,最も適切なものを選べ。
解答群
設問3
本文中の【 c 】に入れる意見はどれか。解答群のうち,最も適切なものを選べ。
解答群
正解 0 / 解答 0(全3設問)