情報処理安全確保支援士試験 過去問 2022年(令和4年) 秋期 午後Ⅰ 問3
オンラインゲーム事業者でのセキュリティインシデント対応
M社は従業員100名のオンラインゲーム事業者である。M社のゲームは利用者がWebブラウザからインターネット経由でアクセスして利用する。M社には開発部及び運用部があり、各従業員にはPCが貸与されている。M社の各PC及び各サーバには、固定のIPアドレスが割り当てられており、コンテナエンジンがインストールされている。
M社のネットワーク構成を図1に、機器の概要を表1に示す。
| 名称 | 概要 |
|---|---|
| 業務用FW |
|
| ソースコードサーバ |
|
| レジストリサーバ |
|
| LB |
|
| ゲームサーバ1~4 |
|
M社では、定期的にゲームアプリを更新する。開発部は新たなバージョンのゲームアプリに対して品質テストを行い、品質テストが完了したゲームイメージのタグを運用部に伝達する。運用部は図2に示す更新手順でゲームアプリを更新する。
セキュリティインシデントの発生
運用部のHさんは、3月6日に開発部からタグ367を伝達され、同日10時に更新手順を開始し、3.までを終えた。同日13時40分、Hさんは、ゲームサーバ1が応答していないことに気付き、LBメンバをゲームサーバ3及びゲームサーバ4だけにした後、ゲームサーバ1上のコンテナを確認した。Hさんが確認したコンテナの一覧を表2に示す。
| コンテナID | タグ | 実行コマンド | 状態 | 利用ポート |
|---|---|---|---|---|
| (省略) | 351 | /app/game.out | 3月6日10時05分に終了 | 80/tcp |
| (省略) | 376 | /app/game.out | 3月6日10時14分に起動 | 80/tcp |
Hさんはゲームサーバ1での更新の際に誤ってタグaのゲームイメージを取得したことに気付いた。またゲームサーバ1で稼働中のコンテナ内ではgame.out及びprogというプロセスが実行中であったが、ゲームサーバ2で稼働中のコンテナ内にはprogというプロセスがなかったので、開発部に確認した。その結果、図3に示す内容が判明した。
- タグaのゲームイメージに、progという名称のファイルは含まれていない。
- progプロセスの実行ファイルのハッシュ値が、セキュリティベンダーの公開するマルウェアデータベースに登録されている。
- 当該ゲームイメージに含まれるOSSの一つに、コードZという悪意のあるプログラムコードが混入しているとの情報があった。当該ゲームイメージを調査したところコードZを発見した。
- コードZは、呼出し元プログラムの起動から3時間後に呼出し元プログラムの処理を中断させ、同時に、攻撃者が用意した外部のサーバに接続し、指示された任意の命令を実行する。
Hさんは、ゲームサーバ1上でコードZが実行されたと判断し、運用部のK主任に報告した。次は、その時のHさんとK主任との会話である。
Hさん: progという名称のファイルはタグaのゲームイメージに含まれていないのに、どうしてprogというプロセスが実行中だったのでしょうか。
K主任: ①攻撃者がコードZに指示した命令が原因だと考えられます。
Hさん: 初動対応としては、ゲームサーバ1で、まず、詳細調査に用いるOSのメモリダンプを取り、次に、稼働中のコンテナを終了すればよいでしょうか。
K主任: コンテナを終了すると、メモリ上のデータに加えてbも消失してしまいます。コンテナは終了するのではなく、一時停止してください。
Hさん: 分かりました。初動対応でそのほかにすべきことはありますか。
K主任: 過去に、②対発表情報が公開される前の脆弱性を悪用した攻撃がコンテナを介して行われ、コンテナエスケープと呼ばれるホストへの侵害が発生した事例があったので、注意してください。それから、ほかのサーバへの被害も調査してください。
Hさん: 分かりました。
各サーバ上での被害の調査
Hさんが同日の業務用FWのログを確認したところ、ゲームサーバ1はインターネット上のIPアドレス a3.b3.c3.d3 及びレジストリサーバに対してだけ接続していた。そこでHさんは、同日のレジストリサーバのHTTP及びHTTPSのアクセスログを確認した。Hさんが確認したアクセスログを、表3に示す。
| 項番 | ソース | 時刻 | メソッド | リクエストURI | ステータス |
|---|---|---|---|---|---|
| 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 |
注記2:項番8から46まで、リクエストURIの末尾の数値が1ずつ減っていくログが連続していた。
注記3:項番46より後のログは存在しなかった。
Hさんが調査したところ、項番1及び2は、Hさんがゲームイメージを取得した時のもの、項番3は、開発部の従業員がソースコードをソースコードサーバに格納したことによって、自動的にタグ379のゲームイメージが生成され、登録された時のものであると特定された。一方、項番4以降については、開発部及び運用部ともに誰も該当する操作を行っていなかったので、K主任に相談した。次は、その時のK主任とHさんとの会話である。
K主任: 時刻から考えて、攻撃者に指示された命令によってコードZが送信したリクエストと考えるとつじつまが合いそうです。攻撃者は当社のネットワーク構成について詳細を知らずに項番4のアクセスをし、③そのレスポンスの内容から、レスポンスを返したホストはコンテナイメージが登録されているサーバだと判断したようです。項番5及び項番6は、レジストリサーバに登録されたコンテナイメージを列挙するAPI呼出しを行っています。それ以降のログを見ると、レジストリサーバ上のタグ341から379までのゲームイメージが上書きされた可能性があります。したがって、ゲームサーバ3及びゲームサーバ4に対して更新を行うべきではありません。
Hさん: 分かりました。
その後、K主任は、被害の拡大を防止するために、Hさんに④レジストリサーバへの対処を指示した。
再発防止及び被害低減のための対策
初動対応と原因分析を終えたHさんは、再発防止及び被害低減のための対策を検討することにし、K主任に相談した。次は、その時のHさんとK主任との会話である。
Hさん: 調査では、ゲームサーバ1は攻撃者からの攻撃の指示をIPアドレスcのサーバから受け取っていることが分かりました。
Hさん: dはマルウェア感染によって攻撃者の制御下となったコンピュータで構成されますが、ゲームサーバ1もそのままにしておくとdに加えられてしまっていたかもしれません。そこで、IPアドレスcへの接続を業務用FWで拒否するのはどうでしょうか。
K主任: それだけでは、攻撃者が同種の方法で攻撃の指示をしたときに⑤対策として有効でない場合があります。再検討してください。
Hさん: 分かりました。
K主任: レジストリサーバについての対策は、どうするつもりですか。
Hさん: REST APIによるゲームイメージの新規登録及び上書き登録の呼出しについて、呼出し元IPアドレスをeのIPアドレスからだけに制限するということはどうでしょう。
K主任: それは効果がありますね。
Hさんは、ほかにも必要な再発防止及び被害低減のための対策を検討した。