H27 秋 情報セキュリティスペシャリスト試験 午後Ⅰ 問1 俺的解説(β版)

お久しぶりです。今回はIPA情報セキュリティスペシャリスト試験の俺的解説を行いたいと思います。
背景としては、前回(H27S)でこの試験には合格したのですが、合格したから勉強をやめる、というのはやはり良くない!というわけで、解説的なことをやってみよう、というわけです。
個人の見解です。間違っている可能性も大いにあります。鵜呑みしないように!
指摘、議論などありましたらお願いします。

午後Ⅰ

問1

これはApache Struts脆弱性(CVE-2014-0112)を題材とした問題です。

参考
更新:Apache Struts2 の脆弱性対策について(CVE-2014-0094)(CVE-2014-0112)(CVE-2014-0113):IPA 独立行政法人 情報処理推進機構

【Struts脆弱性】サルでも分かるStrutsのClassloader脆弱性(CVE-2014-0094)(CVE-2014-0112) - Javaプログラマーのはしくれダイアリー

Struts1の脆弱性問題の対処方法 - エンタープライズギークス (Enterprise Geeks)

設問1

Eシステム及びFシステムのそれぞれについて、Q社のビジネスを踏まえて、情報セキュリティの3要素のうち重視すべき要素とその理由を、重視すべき要素は5字以内、理由は25字以内でそれぞれ述べよ。

情報セキュリティの3要素といえば、

機密性
完全性
可用性

のことです。私は「きみ完全かよ」で覚えています。

機密性とは、正当な者のみが情報にアクセスすることができる、ということです。
たとえば、あるサービスでAさんが不正ログインをしてBさんになりすました場合、Bさんだけが見れる情報にアクセス出来てしまいます。これは機密性が冒されていると言えます。

完全性とは、データが常に正確に保たれている、ということです。
たとえば、AさんがBさんに手紙を送って、経路の途中でCさんが横取りし、内容を書き換えたものをBさんに送ると、BさんはAさんからの手紙と思ってCさんの手紙を読むことになります。これは完全性が冒されていると言えます。

可用性とは、システムがいつでも使用可能である、ということです。
たとえば、システムに障害が発生して、システムが全く使えない状態が長時間続くと、可用性が冒されていると言えます。

これを頭に入れておけば、Eシステムで重視すべき要素、Fシステムで重視すべき要素がわかります。 改めて本文を読むと、

EシステムはQ社の販売チャネルの大部分を担っており、保守のための時間帯を除き、常時稼働している。Fシステムは投資家などに対する財務情報・会社情報を提供している。

Eシステムは常時稼働する必要があるので、可用性ですね。
Fシステムは、財務情報・会社情報を提供しているとのことなので正確な情報を提供しなければならない、つまり完全性になります。

解答としては、このようになります。

解答
Eシステム
重視すべき要素:可用性(3字)
理由:保守のための時間帯を除き常時稼働させるため。(22字)
Fシステム
重視すべき要素:完全性(3字)
理由:保持する財務情報・会社情報を正確に保つため。(22字)

設問2

本文中のaに入れる適切な字句を、図2中の字句を用いて答えよ。

本文の該当箇所を抜粋。

表2の攻撃コードの送信後、WASのアクセスログ(以下、WASログという)のファイルがaに作成されます。

アクセスログのファイルの場所が答えのようです。表2を見れば良さそうですね。
表2

項番 攻撃コード 説明
1 GET/app1/app.action?▲▲.directory=webapps/ROOT WASログの出力先を公開ディレクトリ上に変更する。

答えがそのまま書かれています。

解答
a:公開ディレクトリ上

設問3

(1)
表3中のb~gに入れる適切な字句を、図2中の字句を用いて答えよ。

本文の該当箇所を抜粋。
表3

項番 [検証対象] [パターン] [動作]
1 b (^|\W)[cC]lass\W c
2 d (^|\W)[cC]lass\W e
3 f (^|\W)[cC]lass\W g

WAFのルールを記述します。どんなルールを設定すればよいかは、本文中のS主任とTさんの会話にヒントがあります。

今回の脆弱性情報によると、GETメソッドに限らずPOSTメソッド、Multipart/form-dataのPOSTメソッド、Cookieによる攻撃の可能性もあります。

これらを遮断するとよさそうですね。
ここで、図2中の[検証対象]にはGET,POST,ANY,COOKIE,Multipartが指定できる、とあります。

ではGET,POST,COOKIEを遮断にすればいいのかと思ってしまいますがそれは間違いです。
なぜなら図3の注記に

注記 Multipart/from-dataによるHTTPリクエストは、[検証対象]にMultipartが指定されたときだけ[パターン]とのマッチングを行う。

とあるからです。注記はしっかり読みましょう。
つまり、ANY,COOKIE,Multipartが答えになります。 ANYは全てのメソッドを指しますので、わざわざGET、POSTで指定する必要はありませんね。

解答
b:ANY    c:遮断
d:COOKIE   e:遮断
f:Multipart   g:遮断

(2)
本文中の下線①に示した[パターン]にマッチする文字列を解答群から全て選び、記号で答えよ。

では、下線①を見てみます。

当初、   ①"^class\..*"という[パターン]   がセキュリティ専門家によって公表されましたが、これでは遮断されない攻撃が見つかりました。

①"^class..*"という[パターン]にマッチするものを解答群から探します。正規表現が読めるかが問われますが、図2で解説されているので慣れていなくても解けます。
つまり、class.が先頭にある選択肢を選びます。

解答
イ、ウ

(3)
本文中のhに入れる適切な字句を解答群の中から選び、記号で答えよ。

これは解答群の用語の意味を知っていれば簡単ですが、似た言葉が並んでいるので混乱する方も多いのではないでしょうか。もういちど確認しましょう。

ア:フェールセーフ
なんらかの装置・システムにおいて、誤操作・誤動作による障害が発生した場合、常に安全側に制御すること。またはそうなるような設計手法で信頼性設計のひとつ。これは装置やシステムは必ず故障するということを前提にしたものである。(Wikipediaより)
例えば、ストーブがついたまま、何らかの原因でストーブが転倒してしまったときに自動的にストーブが切れるなどの設計がフェールセーフです。
フェール(失敗)セーフ(安全)という言葉から覚えましょう。

イ:フェールソフト
故障箇所を切り離すなど被害を最小限に抑え、機能低下を許しても、システムを完全には停止させずに機能を維持した状態で処理を続行(縮退運転)する設計のこと。これは信頼性設計の一つである。(Wikipediaより)
例えば、列車の運行中に1車両のドアが全て故障したとします。しかし、列車はなるべく時間通りに運行させたいので、その車両に人が入れないようにしたり、切り離したりして運行を続ける、これがフェールソフトです。(うまい例えが見つかりませんでした)

ウ:フォールスネガティブ
IDS,IPSの用語です。
パターンマッチングなどを行った結果、攻撃を見逃し通過させてしまうことを意味します。
攻撃の見逃しは、正常な通信の誤検知よりも取り返しがつかないのでネガティブ、と覚えましょう。

エ:フォールスポジティブ
IDS,IPSの用語です。
パターンマッチングなどを行った結果、正常な通信を誤検知してしまうことを意味します。
誤検知してしまっても、それによる影響が小さいため「気にするな、この失敗は次で取り返そう」という風にポジティブ、と覚えましょう。

解答

(4)
本文中の下線②について、設定をどのように見直すべきか。25字以内で述べよ。

下線②部分です。

さらに、WAFによる対策に加えて、攻撃時のリスク軽減対策として、 ②現在のWASの動作権限設定を見直します。

WAFの動作権限の話ですね。動作権限なので、表1がヒントになりそうです。
表1

ソフトウェア 現在の動作権限設定 備考
OS - -
HTTPサーバ(WAF含む) 管理者権限 -
WAS 管理者権限 -
WebアプリE(WF使用) - WASの動作権限と同一

WASは現在、管理者権限で動作していますね。
しかし、管理者権限では権限が強すぎます。それをどうするかが答えになります。
ここで、なぜ管理者権限が危険かというと、もしもWASが攻撃者に乗っ取られてしまった場合、攻撃者はWASが動く動作権限が使えることになります。管理者権限ならそのサーバでの全ての操作が許可されてしまうので、非常に危険です。逆に、必要最小限の権限しか与えられていないと、攻撃者の行動を制限することができます。
被害を最小限に食い止めるためにも、人間だけでなくアプリケーションの動作権限も最小に留めるべきです。

解答
必要最小限の権限で動作させるよう設定する。(22字)

設問4

本文中の下線③について、WAFに関して具体的に何を検証すべきか。二つ挙げ、それぞれ30字以内で述べよ。

下線②部分です。

開発検証用のシステムで ③動作検証を実施し 、問題がないことを確認後、本番環境のシステムで設定を行い、Eシステムを再稼働させた。

動作検証で確認するポイントは、大きく分けて2種類あります。
①変更・追加したことが正常に動作しているか。
②既存のシステムに想定外の影響を与えていないか。
これを今回追加したWAFのルールの動作に関して、具体的に書いてみるとこのようになります。
脆弱性Xを悪用した攻撃を遮断できるかどうか検証する。
②正常なアクセスを誤って遮断してしまわないか検証する。
これが、そのまま答えになります。

解答
脆弱性Xを悪用した攻撃を遮断できるかどうか検証する。(26字)
正常なアクセスを誤って遮断してしまわないか検証する。(26字)

設問5

本文中の下線④について、WAFのルールの[動作]に"検知"を指定し、一定期間運用することにはどのような利点があるか。45字以内で述べよ。

下線④の部分です。

本来ならば、追加したWAFのルールで攻撃を遮断する前に、 ④本番環境のシステムに追加したルールの[動作]に"検知"を指定し、一定期間運用する のが望ましい。しかし、今回は緊急対応のため、そのような運用はしなかった。

この問題は、設問3(3)で出てきたフォールスポジティブ、フォールスネガティブが関わってきます。
新しいルールを設定させたWAFを使い本番稼働させた場合、例えばWEBサイトに買い物に来た顧客が、自分の情報を登録するためにフォームの入力を行います。そのときに、偶然にもWAFのパターンマッチングにマッチしてしまう正当なメールアドレスが入力されてしまうと、WAFは遮断してしまいます。これでは顧客は買い物ができません。
そのため、フォールスネガティブは当然無くすべきなのですが、フォールスポジティブも減らすべきなのです。
"検知"にして一定期間運用することで、攻撃は勿論、誤検知の通信のログも記録できるので、そのログを基に本番運用までに見逃しや誤検知のないように調整していくことができるのです。
しかし今回は重大な0dayへの対策なので、悠長なことはできず、いきなり"遮断"として運用しているようです。

解答としては、このようになります。

解答
後に"遮断"と指定する際、フォールスポジティブとフォールスネガティブを減らすことができる。(45字)