今回は、令和6年度 春期 情報処理安全確保支援士 午後 問4 を取り上げ、設問ごとに詳しく、そして分かりやすく解説していきます。この問題は、Webアプリケーション開発におけるセキュリティ設計の勘所が詰まっており、実務にも直結する非常に良質な問題です。
特に、【出題趣旨】 にあるように、「JavaとRDBMSで実装されたWebアプリケーションプログラムを題材として、セキュアプログラミングに関する能力を問う」 ことが目的とされています。
この記事を通して、「なぜその解答になるのか?」という思考プロセスを一緒に追いながら、応用力の効く知識を身につけていきましょう! 今回はまず【設問1】からです。
情報処理安全確保支援士試験 令和6年度 春期 午後 問4
【出典:情報処理安全確保支援士試験 令和6年度 春期 午後 問4(一部、加工あり)】
問4 Webアプリケーションプログラムに関する次の記述を読んで、設問に答えよ。
A社は、加工食品の製造・販売を行う従業員500名の会社である。問屋や直販店からの注文の受付に、商品の注文と在庫を管理するシステム(以下、業務システムという)を利用している。業務システムは、A社内に設置したサーバ上に構築されている。
このたび、販売拡大を目指して、インターネットを使ったギフト販売を行うことになり、個人顧客から注文を受けるためのWebシステム(以下、Web受注システムという)を構築することになった。
A社はITベンダーのB社との間で開発の委託契約を締結し、両社はWeb受注システムの開発に着手した。
[Web受注システムの要件]
Web受注システムの要件を表1に示す。
[Web受注システムの設計]
A社とB社はWeb受注システムを設計した。
Web受注システムのサーバで定義されるQSアカウントの一覧を表2に、所属グループとその権限を表3に示す。
業務システムとWeb受注システムは、CSV形式のデータ連携用ファイル(以下、CSVファイルという)でデータ連携を行う。1時間ごとに業務システムのバッチサーバとWeb受注システムのバッチサーバにおいてCSVファイルを作成し、HTTPSで他方のバッチサーバに送信し、他方のバッチサーバでは受信したCSVファイルを保存する。保存したCSVファイルを使用してWeb受注システム又は業務システムのDBに対して更新処理を実行する。更新処理後のCSVファイルは、障害発生に備えて1週間保存する。
データ連携機能のプログラム一覧を表4に示す。
表4のうち、No.3のプログラムの内容を図1に示す。
Web受注システムの開発が進み、結合テスト前に、A社は、設計書とソースコードのセキュリティレビューを、セキュリティ専門会社のC社に委託した。C社の情報処理安全確保支援士(登録セキスペ)のE氏は、セキュリティレビューを実施した。
[データ連携機能のセキュリティレビュー]
E氏は、表2〜4及び図1の内容では表1の要件を満たしておらず、(a)がCSVファイルを閲覧できてしまうという問題を発見した。また、CSVファイルには重要情報が記録されるので、本番バッチサーバにアクセスできる者が不正に閲覧するリスクを軽減するための保険的対策も併せて実施することを提案した。具体的には、次のように提案した。
⑴ 問題に対しては、表2のbatchappuserについて、所属グループを(b)に変更する。
⑵ 保険的対策としては、表4のNo.3のプログラムに暗号化を行う処理を追加し、表4のNo.(c)のプログラムに復号を行う処理を追加する。
A社は、E氏の提案どおり修正することにした。
🎯 問題の舞台設定:まずは概要をサクッと把握しよう
まずは、問題のシナリオを整理しましょう。どんなシステムで、誰が、何をするのかを把握するのが、問題を理解する第一歩です!
- 会社: A社(加工食品の製造・販売会社)
- 新システム: インターネットで個人顧客から注文を受ける「Web受注システム」を構築
- 目的: ギフト販売の拡大
- データ連携: 既存の「業務システム」と、新しい「Web受注システム」の間で、CSVファイルを使って1時間ごとにデータ連携を行う
- 登場人物と役割:
- システム運用担当者: サーバの稼働監視などを行う。重要情報へのアクセスは禁止されている 。
- システム開発者: プログラムの開発・保守を行う。障害調査でログは見るが、重要情報へのアクセスは禁止されている 。
- 重要情報取扱運用者: 個人顧客からの問い合わせ対応などで、本番環境の重要情報(氏名、住所、決済情報など)を参照する 。
- システム管理責任者: OSのメンテナンスやアカウント管理を行う 。
この設定を頭に入れた上で、早速設問を見ていきましょう!
【設問1】データ連携機能に潜むセキュリティリスクを暴け!
設問1は、システム間でデータを連携する機能のセキュリティレビューに関する問題です。レビューの結果、セキュリティ専門家のEさんは「ある問題」と「リスク軽減のための保険的対策」を提案しました。
設問1 (1)
本文中の (a) に入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア システム運用担当者
イ システム運用担当者とシステム開発者
ウ システム開発者
エ システム開発者と重要情報取扱運用者
オ 重要情報取扱運用者
【解説】
この問題を解く鍵は、Linuxのファイルパーミッションにあります。E氏は「(a) がCSVファイルを閲覧できてしまう」 という問題を発見しました。これが誰なのかを特定していきましょう。
- CSVファイルの権限設定を確認
本文の図1の説明には、CSVファイルに関する以下の設定が記載されています。- 保存場所: /var/data ディレクトリディレクトリのオーナーは batchappuser で、パーミッションは 770 。CSVファイルのオーナーは batchappuser で、パーミッションは660。
- batchappuser の所属グループを確認
次に、表2「OS アカウントの一覧」を見ると、batchappuser の所属グループが分かります。- ユーザーID: batchappuser
- 所属グループ: operation
- operation グループのメンバーを特定
では、operation グループには他に誰が所属しているのでしょうか?表2と表3を見ると、operator ユーザー(システム運用担当者が利用)が operation グループに所属していることが分かります 。
以上のことから、batchappuser と同じ operation グループに所属するシステム運用担当者は、/var/data ディレクトリにアクセスし、CSVファイルを閲覧できることが判明します。
しかし、要件では「システム運用担当者は、重要情報にアクセスしてはならない」 と定められています。注文データを含むCSVファイル は重要情報 に該当するため、これは明確な要件違反です。
したがって、(a)に当てはまるのはシステム運用担当者となります。
【解答】
ア
設問1 (2)
本文中の(b) に入れる適切な所属グループを、表3中から選び答えよ。
【解説】
(1)の問題を解決するために、E氏は「batchappuser について、所属グループを (b) に変更する」 と提案しました。システム運用担当者がアクセスできないようにしつつ、バッチ処理は正しく実行されるようにするには、どのグループが適切でしょうか?
ここで重要になるのが 「最小権限の原則」 です。プログラムには、その役割を果たすのに必要な最小限の権限のみを与えるべきです。
表3にあるグループの役割を再確認しましょう 。
- root: 特権ユーザー。権限が強すぎるため不適切です。
- operation: 問題の原因となったグループなので、当然不適切です。
- personal: 一般ユーザー権限で、本番環境へのアクセス権があります。重要情報取扱運用者が所属するグループです 。
- develop: 開発環境と本番ログサーバへのアクセス権を持つグループ。本番環境で重要情報を扱う役割とは異なります。
batchappuser が実行するプログラムは、重要情報を含む注文データ を扱います。そのため、重要情報へのアクセスが許可されているグループに所属させるのが最も自然で安全です。personal グループは、まさにそのためのグループです。batchappuser の所属グループを personal に変更すれば、operation グループのシステム運用担当者はアクセスできなくなり、問題が解決します。
【解答】
personal
設問1 (3)
本文中の(c) に入れる適切なプログラムを、表4中から選び、No.列の番号で答えよ。
【解説】
E氏は、保険的対策として「No.3のプログラムに暗号化を行う処理を追加し、表4のNo. (c) のプログラムに復号を行う処理を追加する」 ことを提案しました。 暗号化したデータは、利用する前に必ず復号しなければなりません。データの流れを追いかけて、どこで復号が必要になるか考えましょう。
データ連携のフロー(注文データ)
- 【Web受注システム側】
- No.3 注文データCSV出力バッチ処理が、DBから注文データを取得し、CSVファイルに出力します。
⇒ ここでCSVファイルを暗号化します。 - No.7 データ送信バッチ処理が、暗号化されたCSVファイルを業務システムへ送信します。
- No.3 注文データCSV出力バッチ処理が、DBから注文データを取得し、CSVファイルに出力します。
- 【業務システム側】
- No.10 データ受信2バッチ処理が、暗号化されたCSVファイルを受信し、保存します。
- No.4 注文データCSV取込みバッチ処理が、保存されたCSVファイルを読み込んで、業務システムのDBを更新します。
業務システムのDBを更新するためには、暗号化されたままのデータでは意味がありません。元の読める形式(平文)に戻す必要があります。 つまり、No.4 のプログラムがCSVファイルを読み込んだ後、DBにデータを取り込む直前のタイミングで 復号処理 を行う必要があります。
【解答】
4
まとめと、この設問から学ぶべきこと
今回の設問1は、採点講評でも「Linuxの権限設定及びセキュアコーディングについて出題した」 と述べられているように、情報セキュリティの非常に基本的ながら、極めて重要なテーマを扱っていました。
- 最小権限の原則の徹底: ユーザーやプログラムには、その役割を果たすために必要な最小限の権限のみを与えましょう。今回の事例のように、安易なグループ設定が情報漏洩に直結します。
- データフローの正確な把握: データが「どこで生成され」「どこに送られ」「どこで利用されるのか」を正確に追跡できなければ、暗号化や復号といった適切なセキュリティ対策をどこに実装すべきか判断できません。
- 多層防御の考え方: アクセス制御(パーミッション設定)という第一の壁に加え、データの暗号化という第二の壁を設けることで、仮に最初の防御が破られても、情報の機密性を守ることができます。
システムの設計・構築時には、今回のような「誰が」「どの情報に」「どんな権限で」アクセスできるのかを常に意識することが、堅牢なシステムを作る上で不可欠ですね!
次回は、設問2のユーザー登録機能に関するセキュアプログラミングの問題を解説していきます。Javaのコードが出てきますが、ポイントを押さえれば怖くありません!ぜひ続けてご覧ください。