資格部

資格・検定の試験情報、対策方法、問題解説などをご紹介

SC 令和6年度春期 午後 問4

   

Webアプリケーションプログラムに関する次の記述を読んで,設問に答えよ。

 A社は,加工食品の製造・販売を行う従業員500名の会社である。問屋や直販店からの注文の受付に,商品の注文と在庫を管理するシステム(以下,業務システムという)を利用している。業務システムは,A社内に設置したサーバ上に構築されている。
 このたび,販売拡大を目指して,インターネットを使ったギフト販売を行うことになり,個人顧客から注文を受けるためのWebシステム(以下,Web受注システムという)を構築することになった。
 A社はITベンダーのB社との間で開発の委託契約を締結し,両社はWeb受注システムの開発に着手した。

 

〔Web受注システムの要件〕
 Web受注システムの要件を表1に示す。

表1 Web受注システムの要件



〔Web受注システムの設計〕
 A社とB社はWeb受注システムを設計した。
  Web受注システムのサーバで定義されるOSアカウントの一覧を表2に,所属グループとその権限を表3に示す。

表2 OSアカウントの一覧

表3 所属グループとその権限

 業務システムとWeb受注システムは,CSV形式のデータ連携用ファイル(以下,CSVファイルという)でデータ連携を行う。1時間ごとに業務システムのバッチサーバとWeb受注システムのバッチサーバにおいてCSVファイルを作成し,HTTPSで他方のバッチサーバに送信し,他方のバッチサーバでは受信したCSVファイルを保存する。保存したCSVファイルを使用してWeb受注システム又は業務システムのDBに対して更新処理を実行する。更新処理後のCSVファイルは,障害発生に備えて1週間保存する。
 データ連携機能のプログラム一覧を表4に示す。

表4 データ連携機能のプログラム一覧

 表4のうち,No.3のプログラムの内容を図1に示す。


図1 No.3のプログラムの内容(抜粋)

 Web受注システムの開発が進み,結合テスト前に,A社は,設計書とソースコードのセキュリティレビューを,セキュリティ専門会社のC社に委託した。C社の情報処理安全確保支援士(登録セキスペ)のE氏は,セキュリティレビューを実施した。

 

データ連携機能のセキュリティレビュー
 E氏は,表2〜4及び図1の内容では表1の要件を満たしておらず,  a  がCSVファイルを閲覧できてしまうという問題を発見した。また,CSVファイルには重要情報が記録されるので,本番バッチサーバにアクセスできる者が不正に閲覧するリスクを軽減するための保険的対策も併せて実施することを提案した。具体的には,次のように提案した。

(1)問題に対しては,表2のbatchappuserについて,所属グループを  b  に変更する。

(2)保険的対策としては,表4のNo.3のプログラムに暗号化を行う処理を追加し,表4のNo.  c  のプログラムに復号を行う処理を追加する。

 

 A社は,E氏の提案どおり修正することにした。

ユーザー登録機能のセキュリティレビュー
 ユーザー登録機能は,UserDataクラスによって実現している。UserDataクラスのプログラム仕様を図2に,UserDataクラスのソースコードを図3に示す。


図2 UserDataクラスのプログラム仕様(抜粋)


図3 UserDataクラスのソースコード(抜粋)

 E氏は,図3のソースコードについて,次のように指摘した。

・パスワードからハッシュ値を得るためのハッシュ関数が,表1の要件を満たしていない。

・今後,メンテナンスなどで実行環境を変更した場合に,  d  行目で  e  が発生すると,25,26行目では,パスワードが平文でユーザーマスターテーブルに保存されてしまう。

①システム運用担当者とシステム開発者が,要件でアクセスが禁止されている情報にアクセスできてしまう

・利用するAPサーバの実装では,変数psObjの指すメモリ領域においてメモリリークが発生する可能性がある。

 

 E氏の指摘を受け,システム開発者は,UserDataクラスのソースコードを修正した。修正後のUserDataクラスのソースコードを図4に示す。



図4 修正後のUserDataクラスのソースコード(抜粋)

 図4のソースコードについて,E氏は,セキュリティレビューを再度実施した。
 E氏は,図4のソースコードでは,レインボーテーブル攻撃を受けたときに攻撃が成立してしまうので,図2の仕様及び②図4のソースコードの6,7行目を修正すべきであると指摘した。
 A社は,E氏の指摘の対応を完了した。その後,テストを実施し,Web受注システムをリリースした。

設問1 〔データ連携機能のセキュリティレビュー〕について答えよ。

 

(1)本文中の  a  に入れる適切な字句を,解答群の中から選び,記号で答えよ。

 

  1. システム運用担当者
  2. システム運用担当者とシステム開発者
  3. システム開発者
  4. システム開発者と重要情報取扱運用者
  5. 重要情報取扱運用者
解答・解説
解答例

 XXX

解説

 ー

 

(2)本文中の  b  に入れる適切な所属グループを,表3中から選び答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(3)本文中の  c  に入れる適切なプログラムを,表4中から選び,No.列の番号で答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

設問2 〔ユーザー登録機能のセキュリティレビュー〕について答えよ。

 

(1)本文中の  d  に入れる適切な行番号を,図3中から選び,答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(2)本文中の  e  に入れる適切な字句を答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(3)本文中の下線①について,システム運用担当者とシステム開発者が,アクセスが禁止されているのにアクセスできてしまう情報は何か。図2中のユーザマスターテーブルの列名で,それぞれ全て答えよ。また,その情報が出力される場所を,解答群の中から選び,それぞれ記号で答えよ。

 

  1. 開発ログサーバのAPログを保存したテキストファイル
  2. 本番APサーバの/sbinディレクトリ配下のバイナリファイル
  3. 本番APサーバの/var/dataディレクトリ配下のCSVファイル
  4. 本番APサーバの/var/log/serverlogディレクトリ配下のテキストファイル
  5. 本番ログサーバのAPログを保存したテキストファイル
解答・解説
解答例

 XXX

解説

 ー

 

(4)図4中の  f  に入れる適切な字句を答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(5)図4中の  g  に入れる適切な処理を,ソースコード又は具体的な処理内容のいずれかで答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(6)図4中の  h  に入れる適切なソースコードを答えよ。

 

解答・解説
解答例

 XXX

解説

 ー

 

(7)本文中の下線②について,図4の6,7行目をどのように修正すればよいか。修正後の適切なソースコードを解答群の中から選び,記号で答えよ。ここで,変数saltには,addUserメソッドの呼出しごとに異なる32バイトの固定長文字列が入っているものとし,ユーザーマスターテーブルの定義に変更はないものとする。

 

  1. byte hashByte = md0bj.digest((salt+this.password).getBytes());
    this.password = salt+String.format("%x",newBigInteger(1,hashByte));
  2. byte hashByte = md0bj.digest*1;
    this.password = String.format("%x",newBigInteger(1,hashByte));
  3. bytehashByte = md0bj.digest(this.password.getBytes());
    byte
    saltByte = md0bj.digest(salt.getBytes());
    this.password = String.format("%x",newBigInteger(1,hashByte))+String.format("%x",newBigInteger(1,saltByte));
  4. bytehashByte = md0bj.digest(this.password.getBytes());
    this.password = salt+String.format("%x",newBigInteger(1,hashByte));
  5. bytehashByte = md0bj.digest(this.password.getBytes());
    this.password = String.format("%x",newBigInteger(1,hashByte));
    byte[]saltHashBytemd0bj.digest*2;
    this.password=String.format("%x",newBigInteger(1,saltHashByte));
解答・解説
解答例

 XXX

解説

 ー

 

IPA公開情報

出題趣旨

 XXX

採点講評

 XXX

前問 ナビ 次問

*1:salt+this.password).getBytes(

*2:salt+this.password).getBytes(