情報処理安全確保支援士 2014年 秋期 午後2 問02
Webサイトのセキュリティに関する次の記述を読んで、設問1~3に答えよ。
A社グループは、サービス業、小売業、ネットビジネス業及び情報サービス業のA社~G社の7社から成る企業グループである。A社を含むグループ各社が運営しているWebサイトは、企業情報サイト、BtoCサービスサイト、BtoBサービスサイト、一時的なキャンペーンサイトなど、様々である。グループ各社及びその情報システム関連部門の概要を、表1に示す。

〔4年前までのグループ各社の状況〕
4年前まで、グループ各社は、Webサイトのセキュリティ対策に各社それぞれの考えで取り組んでいた。
A社は、セキュリティ対策や個人情報の保護について、B社~G社に対して業界ガイドラインへの準拠をポリシとして求めていたが、具体的な指示も準拠状況の確認も行っていなかった。
〔セキュリティ対策プロジェクトの立上げ〕
その後、セキュリティに詳しいL氏がA社の経営陣に加わった。L氏は、A社グループ内でセキュリティ事故が発生すれば、A社グループ全体の信頼を損なうおそれがあると取締役会で問題提起した。取締役会では、セキュリティ対策プロジェクト(以下、プロジェクトという)を立ち上げ、グループ全体のセキュリティ対策を推進することを決定した。
この決定を受けて、プロジェクトの責任者にはA社情報システム部長が、プロジェクトリーダにはA社情報システム部のU課長がそれぞれ任命された。プロジェクトメンバはグループ各社から数名ずつ選出された。
U課長は、公開しているグループ各社のWebサイトに脆弱性が潜在していたり、今後作り込まれたりするおそれがあり、次の二つが必要であると考えた。
・脆弱性を作り込まず、Webサイトを安全に構築するための対策を実施する。
・攻撃を受け、セキュリティ事故となった場合に、セキュリティ事故の情報は緊急にグループ各社に展開し、対策を実施する。
そこで、部下のPさんとともに、セキュリティ専門家の支援を受けて、次のセキュリティ対策を推進する計画を立案した。
(1)セキュアサイト構築ガイドラインの制定
(2)セキュアサイト構築ガイドラインを踏まえた、具体的な内容を記載した各社セキュアサイト構築基準の制定及び定期的な見直し
(3)セキュアサイト構築基準に従った、サーバ構築及びアプリ開発
(4)セキュリティ事故が発生した直後のA社情報システム部への報告
(1)〜(4)は、グループ各社の取締役会で承認され、3か月後、(1)が完了し、(2)〜(4)についてもグループ各社に指示が出された。
〔F社ショッピングサイトαへの攻撃〕
F社からG社に運用を委託している、ショッピングサイトα(以下、サイトαという)には、PCサイト、携帯サイト及びスマートフォンサイト(以下、スマホサイトという)があり、それぞれ30画面で構成されている。今年になって、サイトαの携帯サイトに不審なアクセスがあった。G社の運用担当者が週1回のメンテナンス中にログインのエラーログを確認したところ、利用者IDに特殊記号を含んだものを多数発見した。通常の利用では考えられないエラーだったので、F社のサイトα担当者に報告した。
F社のサイトα担当者から連絡を受けたF社情報システム部のNさんは、不正アクセスの可能性があると考え、セキュリティ専門業者のX社に調査を依頼した。X社のT氏が調査した結果、携帯サイトのWebアプリケーションソフトウェア(以下、WebアプリケーションソフトウェアをWebアプリという)が、SQLインジェクション攻撃を受けていたことが分かった。そこで、Nさんはサイトα担当者に対し、携帯サイトのサーバをネットワークから切り離すように指示した。
次は、そのときのNさんとT氏の会話である。
Nさん:サイト利用者の情報を読み出されたのでしょうか。
T氏 :いいえ。携帯サイトのアクセスログと、携帯サイトのWebアプリが記録していたPOSTデータのログを確認しましたが、サイト利用者の情報を読み出すリクエストは受信していませんでした。どうやら、脆弱性を探す目的で攻撃を仕掛けられたようです。
Nさん:なるほど。それで、脆弱性はあったのでしょうか。
T氏 :はい。表2に示す、携帯サイトのアクセスログを見てください。Webサーバのアクセスログのうち、前回メンテナンス以降の部分について確認したところ、特定のIPアドレスから27画面に対して、SQLインジェクションの代表的なパターンが試行されていました。このうち、ステータスコードが200であり、かつ、応答のサイズが通常のアクセス時と比較してaであるアクセスログの番号bを見つけることができます。このログから、脆弱性があると考えられるURIのパス名はcであり、クエリ文字列中のパラメタ名はdであることが分かります。
Nさん:分かりました。攻撃が行われた27画面について、早急に対策を行います。
T氏 :念のために、①それらの画面だけでなく、携帯サイト全体に対してSQLインジェクション対策を行ってください。そのほか、PCサイトとスマホサイトの対策はどのようになっていますか。
Nさん:PCサイトは2年前にリニューアルし、スマホサイトも同時にリニューアルしました。いずれも公開前及びその後の改修時にセキュリティ診断(以下、診断という)をしたので大丈夫だと思います。一方、携帯サイトは5年前に公開してから、一度も診断をしていません。アクセスを携帯キャリアのゲートウェイからだけに制限していたので、大丈夫だと思っていました。
T氏 :そうですか。今後は、携帯サイトも診断してください。
Nさん:分かりました。

数日後、NさんはG社から携帯サイトの対策が完了したという報告を受けた。そこで、Nさんは、X社にソースコードを提示し、脆弱性が修正されていることを確認してもらった。その後、F社では携帯サイトを開し、NさんはA社情報システム部に、F社でセキュリティ事故が発生したことを報告した。
〔グループ各社の管理強化〕
F社から報告を受けたU課長は、F社のセキュリティ事故を分析し、次のような施策案を考えた。
(1) 今回の携帯サイトの脆弱性を含め、脆弱性の多くは診断によって発見できるので、Webサイトの公開前の診断を義務付ける。また、稼働中の全Webサイトに対しては、優先順位を決めて、順次診断をしていく。
(2) Webサイトによってリスクが異なるので、実施すべき対策をWebサイトごとに各社で決める。
(3) 対策の実施状況と併せて、グループ各社のセキュアサイト構築基準の制定状況と定期的な見直し状況を調査し、問題があれば改善を指示する。
次は、上記の施策案の具体的な進め方に関する、U課長と部下のPさんの会話である。
U課長:インターネットに公開しているWebサイトでは診断を必須とするが、インターネットに公開していない社内用Webサイトでは診断はどうしたらいいだろうか。
Pさん:グループ各社に任せるにしても判断に困るでしょうね。
U課長:それなら、基準を統一するために診断ガイドラインを作成しよう。また、グループ各社のWebサイトについて、診断履歴の調査はもちろん必要だが、サイトについてもっと詳しく情報を収集した上で、診断していないWebサイトについて、診断の優先順位を整理してほしい。
Pさん:Webサイトの情報収集は調査票を用意して、グループ各社の情報システム部に回答してもらいます。
U課長:しかし、情報システム部でWebサイトをよく把握していない場合もあるな。
Pさん:そうですね。そのような場合の情報システム部への指示方法も検討します。
U課長:セキュアサイト構築基準についても、制定状況及び見直し状況について調査票に回答してもらえばよいだろう。
Pさん:分かりました。
〔診断ガイドラインの制定〕
U課長は、セキュリティ専門家の協力を得て診断ガイドラインを作成するようPさんに指示した。1か月後、図1に示す診断ガイドライン案が作成された。

U課長は、診断ガイドライン案を確認するとともに、それをグループ各社へ展開することについてA社取締役会で承認を得た。その後、グループ各社のWebサイトについて診断ガイドラインに沿って診断を進めるよう指示した。
〔新技術によって生じる脆弱性への対応〕
グループ各社のセキュアサイト構築基準について調査した結果、制定はしているが、見直しをしていないことが分かった。
U課長は、最近の脆弱性への対応に加え、今後Webサイトに新技術を採用した場合の対応も必要になると考えた。そこで、グループ各社の情報システムで今後採用する可能性がある技術を調査した上で、その技術を使った場合に考えられる脆弱性について、セキュリティ専門家に調査を依頼した。
セキュリティ専門家の調査結果によると、セキュアサイト構築ガイドラインに追加が必要な項目は次の三つであった。
(Ⅰ)DOM(Document Object Model)ベースのXSS(クロスサイトスクリプティング)の対策
(Ⅱ)クリックジャッキングの対策
(Ⅲ)HSTS(HTTP Strict Transport Security)の使用
(Ⅰ)DOMベースのXSSの対策
JavaScriptによるWebページ操作に問題がある場合に起きるXSSは、DOMベースのXSSと呼ばれている。JavaScriptを利用する場合は、注意が必要である。
例えば、図2に示すHTML(http://www.example.jp/domxss.html)があった場合に、図3に示すURIにブラウザからアクセスすると、“1”という警告ダイアログが表示される。


反射型(reflected 型、non-persistent 型)のXSSと違って、DOMベースのXSSでは攻撃者が注入するデータがWebサイトからの応答中に出力されない。ブラウザ上のHTMLデータに入力データを動的に挿入するようなJavaScriptが応答中に含まれていると、入力データにスクリプトが含まれていたときに、そのスクリプトがブラウザ上で実行されてしまう。そのため、DOMベースのXSSは、③反射型のXSSとは診断方法が異なる。
DOMベースのXSSの対策のためには、“document.write”、“innerHTML”などの、動的にブラウザ上のHTMLデータを操作するメソッドやプロパティを使用するのではなく、“createElement”などのDOM操作用のメソッドやプロパティを使用して、ブラウザ上のHTMLデータを構築することが必要である。
(II) クリックジャッキングの対策
クリックジャッキングの対策には、④HTTP応答ヘッダで“X-FRAME-OPTIONS”にDENYを指定することによって、自サイトをフレーム内で表示させないようにする方法がある。近年、クリックジャッキングによると思われる事件が発生しており、この応答ヘッダに対応したブラウザが増えている。
(III) HSTSの使用
HSTSとは、WebサイトがHTTPSの使用をブラウザに強制させる機能である。HSTSがブラウザで有効となるまでの通信の流れを、図4に示す。また、HSTSが有効になったブラウザのアドレスバーに“http://www.example.jp/”を入力した場合のブラウザの挙動を、図5に示す。HSTSは、HTTPS応答のヘッダにiを指定することによって有効となる。


正規のWebサイトでHSTSが有効になるように設定していない場合、正規のWebサイトがHTTPS通信だけを受け付けるように構成していても、中間者攻撃が行われると、⑤ブラウザがHTTP通信で接続してしまい、中間者によって通信を盗聴されてしまう。
利用者は毎回jことでこの攻撃を受けても気付くことができる。しかし、jことを利用者に徹底させるのは難しいので、HSTSのプロトコルが開発され、2012年にRFC 6797として公開された。その後、この機能に対応するブラウザが増えている。
Pさんは、グループ各社のWebサイトにおける(I)~(III)の取組状況をWebサイトの概要と併せて調査した。調査結果を表3に示す。
なお、クリックジャッキングについては、フレーム内での表示有無だけでなく、クリックジャッキングによって被害を受けるおそれについても整理している。

表3の調査結果から、対応の必要なWebサイトがあることが分かったので、U課長は、セキュアサイト構築ガイドラインに項目(I)~(I)を追加した上でグループ各社に伝え、さらに、各Webサイトでの対策を検討するよう指示した。
以上の対策によって、グループ各社のWebサイトのセキュリティが強化された。
設問1:〔F社ショッピングサイトαへの攻撃〕について(1)〜(4)に答えよ。
(1)本文中のa、bに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:6%未満
イ:45〜55%
ウ:95〜105%
エ:200%以上
オ:2
カ:7
キ:11
ク:14
模範解答
a:ウ
b:ク
解説
解答の論理構成
- 【問題文】では、対象ログを「ステータスコードが200」かつ「応答のサイズが通常のアクセス時と比較してa」と条件づけています。
- 表2を見ると /GoodsDetail について
- 通常アクセス(番号「12」)の応答サイズは「1,798」バイト
- インジェクションを含むリクエスト(番号「14」)の応答サイズは「1,806」バイト
となっており、ほぼ同じサイズです。
- 解答群で“ほぼ同じ”を表すのは「ウ:95〜105%」。よって a=ウ。
- 条件を満たすログ番号は「ステータスコード200」「応答サイズほぼ同じ」を同時に満たす番号「14」。解答群では「ク:14」が対応します。
- 以上より
- a:ウ
- b:ク
誤りやすいポイント
- 応答サイズが「小さい」「大きい」と早合点し、「ア:6%未満」「エ:200%以上」を選んでしまう。実際には約0.4%の差で“ほぼ同じ”に該当します。
- 番号「7」や「11」もインジェクション文字列を含みますが、通常リクエスト(番号「4」「8」)と比較したときに“ほぼ同じ”かどうかを確認せずに選んでしまう。
- ステータスコードが200であることを失念し、500エラーの「13」を選択してしまう。
FAQ
Q: 応答サイズがほぼ同じだと脆弱性と判断できるのはなぜですか?
A: インジェクション文字列を受け取ってもエラー画面にならず正常応答を返すため、SQLがそのまま実行された可能性が高いからです。
A: インジェクション文字列を受け取ってもエラー画面にならず正常応答を返すため、SQLがそのまま実行された可能性が高いからです。
Q: ステータスコード500のログ(番号「13」)は脆弱性検知に役立たないのですか?
A: 500はサーバ内部エラーで“入力値を正しく処理できなかった”ことを示すだけで、実行結果を判断できません。問題文が指定する「200」こそが“実行されてしまった”証拠になります。
A: 500はサーバ内部エラーで“入力値を正しく処理できなかった”ことを示すだけで、実行結果を判断できません。問題文が指定する「200」こそが“実行されてしまった”証拠になります。
Q: ほぼ同じ応答サイズという判断基準は一般的ですか?
A: 多くの診断ツールや手動解析でも、通常応答と±5%程度以内のサイズ差であれば“同一画面が返った”とみなし、脆弱性の有無を絞り込む際のヒントにします。
A: 多くの診断ツールや手動解析でも、通常応答と±5%程度以内のサイズ差であれば“同一画面が返った”とみなし、脆弱性の有無を絞り込む際のヒントにします。
関連キーワード: SQLインジェクション、HTTPステータスコード、アクセスログ解析、応答サイズ、脆弱性診断
設問1:〔F社ショッピングサイトαへの攻撃〕について(1)〜(4)に答えよ。
(2)本文中のcに入れるURIのパス名と、本文中のdに入れるパラメタ名を、それぞれ15字以内で答えよ。
模範解答
c:/GoodsDetail
d:goodsNo
解説
解答の論理構成
- 攻撃者は、携帯サイトの「表2 携帯サイトのアクセスログ(抜粋)」に示されるように
「/Catalog」「/GoodsSearch」「/GoodsDetail」など複数画面へ典型的な SQL インジェクション用の文字列(' や and '1'='1 など)を投入しています。 - T 氏はログの中から「ステータスコードが200」で「応答のサイズが通常時と比較して異常」である行を抽出しています。
- 通常アクセス(番号「12」)
GET /GoodsDetail goodsNo=10001 200 1,798 - 攻撃リクエスト(番号「14」)
GET /GoodsDetail goodsNo=10001 and 1=1 200 1,806
いずれも HTTP 200 ですが、後者の応答サイズ「1,806」は通常時「1,798」と異なり、わずかな差が生じています。
- 通常アクセス(番号「12」)
- この差分は、SQL 文が正常終了しつつ条件が無害化(and 1=1)されたことで取得結果が変わり、ページサイズに変化が出たことを示唆します。
- 従って、
• 脆弱性が潜む画面=URI のパス名は「/GoodsDetail」
• 問題となるクエリ文字列中のパラメタ名は「goodsNo」
であると判断できます。
誤りやすいポイント
- 「/Catalog」や「/GoodsSearch」にも ' を含むリクエストがありますが、応答サイズが変わらずページが静的に生成されているため脆弱性の有無を誤判定しやすいです。
- ステータスコード「500」の行(番号「13」)だけに注目すると「エラーだから脆弱」と思いがちですが、T 氏は正常応答かつサイズ差分の行(番号「14」)を根拠にしています。
- パラメタ名は URI に含まれるキー部分のみを答える必要があり、「goodsNo=...」全体や値まで書いてしまうミスが頻出です。
FAQ
Q: なぜ応答サイズのわずかな差で脆弱性と断定できるのですか?
A: 条件が真になる不要句(and 1=1 など)を付与しても結果が変わらない画面ではサイズ差が出ません。差が出るということは SQL が実行され、結果セットが変化した可能性が高く、脆弱性特有の挙動と判断できます。
A: 条件が真になる不要句(and 1=1 など)を付与しても結果が変わらない画面ではサイズ差が出ません。差が出るということは SQL が実行され、結果セットが変化した可能性が高く、脆弱性特有の挙動と判断できます。
Q: ステータスコード「500」でなく「200」を重視する理由は?
A: 500 は単にエラー応答で、アプリケーションが例外処理で停止しているだけの場合があります。攻撃者はむしろ正常応答で内部構造を推測しようとするため、200 かつ内容変化を伴う応答の方が危険度が高いからです。
A: 500 は単にエラー応答で、アプリケーションが例外処理で停止しているだけの場合があります。攻撃者はむしろ正常応答で内部構造を推測しようとするため、200 かつ内容変化を伴う応答の方が危険度が高いからです。
Q: パラメタ名が複数ある場合はどう調べるのですか?
A: 1 つずつ値を差し替えて同様のテストを行い、サイズ変化やエラー/正常応答の違いで脆弱性のあるパラメタを特定します。テスト自動化ツールを併用することも一般的です。
A: 1 つずつ値を差し替えて同様のテストを行い、サイズ変化やエラー/正常応答の違いで脆弱性のあるパラメタを特定します。テスト自動化ツールを併用することも一般的です。
関連キーワード: SQLインジェクション、アクセスログ解析、URI, クエリパラメータ、Webアプリケーション
設問1:〔F社ショッピングサイトαへの攻撃〕について(1)〜(4)に答えよ。
(3)本文中の下線①について、T氏が携帯サイト全体に対して対策を行うべきであると考えた理由を、40字以内で述べよ。
模範解答
残り3画面にSQLインジェクションの脆弱性があるかもしれないから
解説
解答の論理構成
- 携帯サイトの規模
【問題文】には「ショッピングサイトα…それぞれ30画面で構成されている。」とあります。携帯サイトも 30 画面存在します。 - 攻撃の対象範囲
T 氏は「特定のIPアドレスから27画面に対して、SQLインジェクションの代表的なパターンが試行されていました。」と報告しています。 - 攻撃を受けなかった画面の存在
30 画面中 27 画面だけが試行されたという事実は、残り 3 画面が攻撃対象になっていないことを示します。 - 未試行=安全ではない
攻撃が届かなかっただけで「脆弱性がない」とは言えません。未試行の 3 画面にも同様の実装があれば同じ欠陥を含む可能性があります。 - よって T 氏は「①それらの画面だけでなく、携帯サイト全体に対してSQLインジェクション対策を行ってください」と指示しました。
誤りやすいポイント
- 「27 画面に試行=脆弱性は 27 画面限定」と誤解し、残り 3 画面の危険性を見落とす。
- 「エラーが出ていない画面は安全」と早合点し、根本的な入力値検証を怠る。
- PC/スマホサイトは診断済みだから携帯サイトも安全と連想し、サイト単位ではなくソース単位で脆弱性を考える視点が抜ける。
FAQ
Q: 27 画面すべてでステータスコードが「200」なら深刻度は低くないのですか?
A: 正常応答でも脆弱性は潜在します。入力値がそのまま SQL に連結されていれば、条件次第で情報漏えいに至ります。
A: 正常応答でも脆弱性は潜在します。入力値がそのまま SQL に連結されていれば、条件次第で情報漏えいに至ります。
Q: 攻撃ログが残っていない画面も診断する必要がありますか?
A: はい。ログに現れないだけで将来攻撃される可能性があります。全画面に一貫した入力値検証を実装し、再診断で確認することが不可欠です。
A: はい。ログに現れないだけで将来攻撃される可能性があります。全画面に一貫した入力値検証を実装し、再診断で確認することが不可欠です。
Q: PC と携帯で同じコードなら片方だけ対策すれば十分ですか?
A: 各サイトごとに公開方法やミドルウェアが異なり、設定ミスが発生し得ます。共通コードでも環境差異を考慮してそれぞれ診断・対策する方が安全です。
A: 各サイトごとに公開方法やミドルウェアが異なり、設定ミスが発生し得ます。共通コードでも環境差異を考慮してそれぞれ診断・対策する方が安全です。
関連キーワード: SQLインジェクション、脆弱性診断、入力値検証、攻撃ログ、セキュリティ対策
設問1:〔F社ショッピングサイトαへの攻撃〕について(1)〜(4)に答えよ。
(4)事故発生後のNさんの対応について、改善すべき点を30字以内で述べよ。
模範解答
A社情報システム部に事故発生後にすぐ報告していない点
解説
解答の論理構成
-
プロジェクトで定めた報告ルール
・U課長は対策として「(4) “セキュリティ事故が発生した直後のA社情報システム部への報告”」を各社に指示しました。
⇒ 事故が判明したら即時に A社情報システム部へ連絡することが義務です。 -
Nさんの実際の行動
・携帯サイトの切離し・修正・再開を済ませた後で「NさんはA社情報システム部に、F社でセキュリティ事故が発生したことを報告した。」とあります。
⇒ 事故対応がほぼ完了した後になって初めて報告しています。 -
ギャップの整理
・要求は “直後に報告” であるのに対し、実態は “事後報告”。
・その結果、グループ全体で早期に注意喚起や被害抑止策を取る機会を逸しました。 -
以上より、改善すべき点は「事故発生を認知した時点ですぐに A社情報システム部へ報告していないこと」と導けます。
誤りやすいポイント
- SQLインジェクション対策の不備が主因だと勘違いし、報告フローの問題を見落とす。
- 「切り離してから数日以内なので許容範囲」と判断してしまう。
- 報告先を G社運用担当者や X社だけで十分と考え、グループ全体への連絡義務を失念する。
FAQ
Q: 事故後の修正確認をしているのに、なぜ報告の遅れが問題なのですか?
A: グループポリシーは“発生直後”に共有し、他サイトへの波及を防ぐことを目的としています。修正の有無にかかわらず迅速な情報共有が必須です。
A: グループポリシーは“発生直後”に共有し、他サイトへの波及を防ぐことを目的としています。修正の有無にかかわらず迅速な情報共有が必須です。
Q: 「直後」とは具体的に何時間以内ですか?
A: 文中では時間を定義していませんが、検知後ただちに連絡を開始する運用を想定しています。事後対策よりも先に第一報を入れるのが原則です。
A: 文中では時間を定義していませんが、検知後ただちに連絡を開始する運用を想定しています。事後対策よりも先に第一報を入れるのが原則です。
Q: 報告が遅れるとどんなリスクがありますか?
A: 同一脆弱性が他社サイトにも存在する場合、攻撃が横展開される恐れがあります。早期共有により緊急の遮断・診断が可能になり、被害を最小化できます。
A: 同一脆弱性が他社サイトにも存在する場合、攻撃が横展開される恐れがあります。早期共有により緊急の遮断・診断が可能になり、被害を最小化できます。
関連キーワード: セキュリティインシデント、インシデント報告、情報共有、CSIRT, リスク抑止
設問2:〔診断ガイドラインの制定〕について(1)〜(3)に答えよ。
(1)図1中のeに入れる適切な字句を15字以内で答えよ。
模範解答
e:診断ツールのIPアドレス
解説
解答の論理構成
- 問題は、図1の診断ガイドライン案にある次の記述から空所eを補うものです。
引用:
「IPS、WAFなどによって、eからの通信が遮断されると、対象Webサイトの脆弱性を検出できないので、eからの通信は遮断しないように設定した上で診断する。」 - 文脈では“診断”を実施する主体は図1の「プラットフォーム診断」「Webアプリ診断」を行うツールやサービスです。
それらが送信するパケットが IPS や WAF にブロックされると脆弱性を検出できません。 - したがって、遮断してはならない通信元は“診断に用いるツールが設置された機器”を特定する情報であり、もっとも具体的に識別できるのは IP アドレスです。
- 以上より、空所eには「診断ツールのIPアドレス」が入ると結論付けられます。
誤りやすいポイント
- 「診断者の端末」など抽象的な語を入れてしまい、IPS/WAF の設定対象として不十分になる。
- “スキャナ”や“ペネトレーションテストツール”と答え、通信元ではなく機器そのものを表現してしまう。
- WAF の例外設定は宛先ではなく送信元(通信元)に着目することを見落とす。
FAQ
Q: なぜ「診断ツールのポート番号」ではいけないのですか?
A: WAF や IPS はポート番号だけでなく送信元 IP アドレスをキーにフィルタリングするのが一般的で、診断元を正確に許可するには送信元 IP の指定が不可欠だからです。
A: WAF や IPS はポート番号だけでなく送信元 IP アドレスをキーにフィルタリングするのが一般的で、診断元を正確に許可するには送信元 IP の指定が不可欠だからです。
Q: 社内ネットワークから診断する場合でも同じ設定が必要ですか?
A: はい。社内からでも IPS や WAF を経由する構成なら同様に診断元 IP を除外しないと検査用パケットが遮断される恐れがあります。
A: はい。社内からでも IPS や WAF を経由する構成なら同様に診断元 IP を除外しないと検査用パケットが遮断される恐れがあります。
関連キーワード: IPS, WAF, 脆弱性診断、アクセス制御、例外設定
設問2:〔診断ガイドラインの制定〕について(1)〜(3)に答えよ。
(2)図1中のfに入れる適切な内容を、“ファイアウォール”と“ポート”の二つの用語を用いて40字以内で述べよ。
模範解答
f:ファイアウォールで遮断されているポート番号の通信に関わる脆弱性
解説
解答の論理構成
- 【問題文】では「ファイアウォールの内側から行った診断で検出された脆弱性のうちfについては、深刻な脆弱性であっても、対策の優先順位を下げてよい。」と指示しています。
- ここで鍵となるのは「ファイアウォールの内側から行った診断」という条件です。外部からの攻撃はファイアウォールで遮断されるため、本来は到達できないサービスや“ポート番号”に対する脆弱性まで検出されてしまいます。
- したがって、優先順位を下げてよいのは「ファイアウォールで遮断されている通信」すなわち「外部から到達不可能なポート番号に関する脆弱性」です。
- 以上よりfには「ファイアウォールで遮断されているポート番号の通信に関わる脆弱性」と記述するのが適切になります。
誤りやすいポイント
- 「内部診断だから重大度が低い」と一律に判断し、ファイアウォールで遮断されていないポートまで優先順位を下げてしまう。
- “ポート”という語を忘れ「サービス」や「通信経路」など曖昧な表現でまとめる。
- ファイアウォール設定変更の可能性を無視し、外部公開予定のサービスも低優先度にしてしまう。
FAQ
Q: 内部診断で見つかった全ての脆弱性が後回しでも良いのですか?
A: いいえ。外部からアクセス可能なポートの脆弱性は高リスクのままです。【問題文】が優先順位を下げて良いと述べているのは「ファイアウォールで遮断されているポート番号の通信」に限定されています。
A: いいえ。外部からアクセス可能なポートの脆弱性は高リスクのままです。【問題文】が優先順位を下げて良いと述べているのは「ファイアウォールで遮断されているポート番号の通信」に限定されています。
Q: ファイアウォール設定が将来変更されるかもしれません。その場合も優先度を下げて良いですか?
A: 将来的に外部公開する可能性がある場合は、優先度を下げずに対策計画に組み込みます。リスク評価はネットワーク構成の変更予定を含めて行う必要があります。
A: 将来的に外部公開する可能性がある場合は、優先度を下げずに対策計画に組み込みます。リスク評価はネットワーク構成の変更予定を含めて行う必要があります。
Q: インターナルネットワークからの攻撃を完全に無視して良いのでしょうか?
A: 内部不正も考慮すべきですが、外部攻撃と比較したリスク差分を評価したうえで優先順位を調整するのが現実的です。
A: 内部不正も考慮すべきですが、外部攻撃と比較したリスク差分を評価したうえで優先順位を調整するのが現実的です。
関連キーワード: ファイアウォール、ポート番号、脆弱性評価、リスク低減、ネットワーク診断
設問2:〔診断ガイドラインの制定〕について(1)〜(3)に答えよ。
(3)図1中の下線②の診断は、検出された脆弱性が適切に修正されたこと以外に何を確認することを目的としているか。30字以内で述べよ。
模範解答
修正によって新たな脆弱性が発生していないこと
解説
解答の論理構成
- 問題では、下線付き②の診断について「脆弱性の修正完了後、公開前にプラットフォーム診断及びWebアプリ診断を再度行う」と明示しています。
- これは一度見つかった脆弱性を“修正した直後”という限定されたタイミングで“再度”診断することを義務付けています。
- 同じ診断を再実施する意図は、①当初の脆弱性が本当に塞がれたか、②修正作業によって別の脆弱性が混入していないか、という二点の検証にあります。
- 設問は「検出された脆弱性が適切に修正されたこと以外に何を確認することを目的としているか」を問うため、②に含まれるもう一つの目的、すなわち「修正作業が原因の新たな脆弱性有無の確認」を導きます。
- 以上から解答「修正によって新たな脆弱性が発生していないこと」となります。
誤りやすいポイント
- 「再度診断=修正ミスの有無」とだけ捉え、修正に伴う“新規”脆弱性まで意識しない。
- プラットフォーム診断とWebアプリ診断の対象範囲を誤解し、コードのみ、あるいはOS設定のみと限定してしまう。
- “公開前”というタイミングを軽視し、運用開始後の定期診断と混同する。
FAQ
Q: 修正後の動作テストと再診断はどう違いますか?
A: 動作テストは機能要件が満たされているかを確認します。再診断はセキュリティ要件、特に脆弱性が残存・新規発生していないかを専門ツール等で検証します。
A: 動作テストは機能要件が満たされているかを確認します。再診断はセキュリティ要件、特に脆弱性が残存・新規発生していないかを専門ツール等で検証します。
Q: コードを一行も触っていないOSパッチ適用でも再診断は必要ですか?
A: はい。ミドルウェアや設定の変更でポート開放・権限付与が変わる可能性があり、新たな脆弱性を誘発する場合があります。
A: はい。ミドルウェアや設定の変更でポート開放・権限付与が変わる可能性があり、新たな脆弱性を誘発する場合があります。
Q: WAFを通さずに診断するのはなぜですか?
A: 診断トラフィックが遮断されると脆弱性を検出できないからです。必要に応じてWAF内側から実施し“素の状態”を検査します。
A: 診断トラフィックが遮断されると脆弱性を検出できないからです。必要に応じてWAF内側から実施し“素の状態”を検査します。
関連キーワード: リグレッションテスト、プラットフォーム診断、Webアプリ診断、脆弱性管理、セキュア開発
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(1)図3中のg、hに入れる適切な文字列を答えよ。
模範解答
g:#
h:</script>
解説
解答の論理構成
-
問題文の前提
「例えば、図2に示すHTML(http://www.example.jp/domxss.html)があった場合に、図3に示すURIにブラウザからアクセスすると、“1”という警告ダイアログが表示される。」と記されています。図2の JavaScript は URI からフラグメント(location.hash 部分)を取得して画面に出力する仕組みであるため、攻撃者はフラグメントにスクリプトを埋め込めば DOM ベースの XSS が発生します。 -
g の導出
フラグメント識別子は URI 中で # から始まります。よって、スクリプトをフラグメントに挿入するにはパス名直後に # を置く必要があります。従って g は「#」となります。 -
h の導出
フラグメントに挿入するスクリプト部分は で終わらせなければブラウザが正しく解析できません。したがって h は「」となります。 -
結論
以上より、図3の URI に入る文字列は
・g:#
・h:</script>
誤りやすいポイント
- フラグメント識別子とクエリ文字列を混同し、「?」を選んでしまう。DOM ベースの XSS ではサーバに送信されないフラグメント(#)が利用される点に注意が必要です。
- スクリプトの終了タグを省略したりエンティティ化せずに書いてしまう。HTML 上は を明示的に閉じないと後続の文字列がすべてスクリプトとして解釈されます。
FAQ
Q: フラグメント(#)はサーバに送られないのに、なぜ攻撃が成立するのですか?
A: JavaScript が location.hash を参照すると、ブラウザは「#」以降の文字列をページ内で取得できます。サーバに届かなくても、クライアント側でスクリプトが実行されるため攻撃が成立します。
A: JavaScript が location.hash を参照すると、ブラウザは「#」以降の文字列をページ内で取得できます。サーバに届かなくても、クライアント側でスクリプトが実行されるため攻撃が成立します。
Q: を書かずにタグを閉じない場合はどうなりますか?
A: 以降のページ内容がすべて JavaScript として解釈され、シンタックスエラーになるか、意図しないコード実行につながります。閉じタグは必須です。
A: 以降のページ内容がすべて JavaScript として解釈され、シンタックスエラーになるか、意図しないコード実行につながります。閉じタグは必須です。
Q: クエリ文字列「?」では DOM ベースの XSS にならないのですか?
A: クエリ文字列はサーバに送信され、サーバ側の処理結果がレスポンスに反映されないとスクリプトは動作しません。本問は DOM 上で完結する XSS の例なので「#」が適切です。
A: クエリ文字列はサーバに送信され、サーバ側の処理結果がレスポンスに反映されないとスクリプトは動作しません。本問は DOM 上で完結する XSS の例なので「#」が適切です。
関連キーワード: DOM XSS, フラグメント識別子、スクリプトタグ、クライアントサイド攻撃、URI
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(2)本文中の下線③について、反射型のXSSの診断方法を65字以内で述べよ。また、その診断方法ではDOMベースのXSSを発見できない理由を35字以内で述べよ。
模範解答
診断方法:スクリプトを含むデータをWebアプリに入力し、それがWebサイトからの応答中に出力されているかを確認する。
理由:Webサイトからの応答中に不正なスクリプトが含まれていないから
解説
解答の論理構成
- 本文には「DOMベースのXSSは、攻撃者が注入するデータがWebサイトからの応答中に出力されない」ため、下線部「③反射型のXSSとは診断方法が異なる」とあります。
- 反射型 XSS の特徴は、(a) 攻撃者が送ったパラメタがそのままサーバ側の応答に挿入され、(b) ブラウザで即実行される点です。したがって診断では、
・テスト用スクリプト(例:)を各入力項目に埋め込む
・HTTP 応答に同じスクリプトがそのまま含まれているかを確認する
という手順で脆弱性の有無を判定します。 - しかし「DOMベースのXSSでは攻撃者が注入するデータがWebサイトからの応答中に出力されない」ため、上記のサーバ応答チェックでは検知できません。応答にスクリプトが見えないので、診断者が「安全」と誤認してしまいます。
誤りやすいポイント
- 「ブラウザでスクリプトが実行されるか」を直接見るのではなく、「応答にスクリプトが反映されているか」を確認することが反射型 XSS 診断の要点です。
- DOM ベース XSS はクライアント側 JavaScript が DOM を生成・書換える過程で起こるため、サーバ応答だけを調べても見つからない点を忘れがちです。
- 反射型と DOM ベースの診断を混同し、同じ手順で十分と考えてしまう失点が多発します。
FAQ
Q: 反射型 XSS の診断で自動ツールを使えば DOM ベース XSS も検出できますか?
A: サーバ応答のみを解析するツールでは検出できません。ブラウザ内 DOM 変化まで観測できるツールや手動テストが必要です。
A: サーバ応答のみを解析するツールでは検出できません。ブラウザ内 DOM 変化まで観測できるツールや手動テストが必要です。
Q: DOM ベース XSS を見つける代表的な方法は?
A: ブラウザのデベロッパーツールなどで DOM 変化を追跡し、入力値が innerHTML などに渡される箇所を確認します。
A: ブラウザのデベロッパーツールなどで DOM 変化を追跡し、入力値が innerHTML などに渡される箇所を確認します。
Q: 反射型 XSS 診断時に WAF が有効だと検出率は下がりますか?
A: 文字列フィルタでスクリプトがブロックされる場合があり、診断結果が正しく出ないことがあります。
A: 文字列フィルタでスクリプトがブロックされる場合があり、診断結果が正しく出ないことがあります。
関連キーワード: 反射型XSS, DOMベースXSS, 入力値検証、サーバ応答解析、ブラウザDOM操作
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(3)本文中の下線④の対策を行うと、正規の利用において不具合が発生するサイトを、表3の中から選び、全て答えよ。また、不具合が起こらないようにするためには、下線④の対策をどのように変更すればよいか。45字以内で述べよ。
模範解答
サイト:サイト5、サイト6
変更内容:X-FRAME-OPTIONSヘッダのDENYをSAMEORIGINにする。
解説
解答の論理構成
- クリックジャッキング対策として本文では
「④HTTP応答ヘッダで“X-FRAME-OPTIONS”にDENYを指定する」
と示されており、DENY は“全てのドメインからのフレーム埋込を拒否”する挙動を持ちます。 - 表3「フレーム内での表示の有無」を確認すると、
・サイト5 … 「あり(同じドメインページ内で表示)」
・サイト6 … 「あり(同じドメインページ内で表示)」
の2サイトは、自サイト内ページをフレームで呼び出す正規機能があると読み取れます。 - DENY を設定すると同一ドメインを含めフレーム表示が完全に阻止され、正規機能が動作しなくなる=不具合発生サイトは「サイト5」「サイト6」と判断できます。
- 不具合を防ぎつつ外部サイトからの埋込だけを拒否したい場合、X-FRAME-OPTIONS の値を
SAMEORIGIN(同一オリジンからのフレーム埋込のみ許可)に変更すれば要件を満たせます。
誤りやすいポイント
- 「クリックジャッキング対策=とにかく DENY」と短絡し、フレームを正規利用しているサイトを見落とす。
- ALLOW-FROM も候補に挙げたくなるが、主要ブラウザでの実装状況が限定的であることに気付かず選択してしまう。
- 表3の「あり(同じドメインページ内で表示)」を“外部からは表示されないので安全”と理解し、対策不要と考える。
FAQ
Q: SAMEORIGIN でもサブドメインが違うとブロックされますか?
A: されます。同一オリジン判定はスキーム・ホスト・ポートが完全一致する必要があります。
A: されます。同一オリジン判定はスキーム・ホスト・ポートが完全一致する必要があります。
Q: 既に Content-Security-Policy: frame-ancestors を使っている場合、X-FRAME-OPTIONS は要りませんか?
A: 近年は CSP の方が推奨ですが、互換性確保目的で併用するケースが多いです。
A: 近年は CSP の方が推奨ですが、互換性確保目的で併用するケースが多いです。
Q: フレームを用いない SPA(Single Page Application)でも X-FRAME-OPTIONS は設定すべきですか?
A: 埋込の予定が一切なくても攻撃抑止のため設定することが一般的です。
A: 埋込の予定が一切なくても攻撃抑止のため設定することが一般的です。
関連キーワード: X-FRAME-OPTIONS, クリックジャッキング、SAMEORIGIN, フレーム、オリジン
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(4)本文中、図4中及び図5中のiに入れる適切な応答ヘッダフィールド名を解答群の中から選び、記号で答えよ。
解答群
ア:Content-Disposition
イ:Content-Security-Policy
ウ:Strict-Transport-Security
エ;X-Content-Type-Options
オ:X-XSS-Protection
模範解答
i:ウ
解説
解答の論理構成
- 【問題文】には「HSTSとは、WebサイトがHTTPSの使用をブラウザに強制させる機能である。」とあり、さらに「HSTSは、HTTPS応答のヘッダにiを指定することによって有効となる。」と明記されています。
- HSTS(HTTP Strict Transport Security)の仕様(RFC 6797)では、ブラウザに HTTPS を強制するために送信する HTTP 応答ヘッダは "Strict-Transport-Security" です。
- 解答群を確認すると、HSTS に対応するヘッダフィールド名は「ウ:Strict-Transport-Security」のみです。
- したがって、i に入る適切な応答ヘッダフィールド名は「Strict-Transport-Security」となり、記号「ウ」が正答です。
誤りやすいポイント
- 「Content-Security-Policy」と混同する
同じくセキュリティ強化ヘッダですが、CSP はスクリプト実行やリソース読み込み元の制限を行うもので HTTPS 強制ではありません。 - 「X-Content-Type-Options」との誤選択
これは MIME 型のスニッフィング防止ヘッダであり、HSTS とは無関係です。 - “HSTS” という略称から “HTTP”・“HTTPS” を含む別ヘッダを連想してしまい、正式フィールド名を思い出せないケースがあります。
FAQ
Q: 「Strict-Transport-Security」ヘッダは HTTP 通信でも送る必要がありますか?
A: いいえ。仕様上は HTTPS で配信した応答にのみ含めて有効になります。HTTP 応答に載せてもブラウザは無視します。
A: いいえ。仕様上は HTTPS で配信した応答にのみ含めて有効になります。HTTP 応答に載せてもブラウザは無視します。
Q: HSTS を設定すれば証明書エラーも防げますか?
A: 証明書の不正や失効は防げません。HSTS は「常に HTTPS へリダイレクトさせる」「HTTP での接続を禁止する」機能であり、証明書の妥当性は別途正しく管理する必要があります。
A: 証明書の不正や失効は防げません。HSTS は「常に HTTPS へリダイレクトさせる」「HTTP での接続を禁止する」機能であり、証明書の妥当性は別途正しく管理する必要があります。
Q: max-age を短く設定しても効果はありますか?
A: 効果はありますが、期間が短いとブラウザに設定が残る時間も短くなります。推奨は 6 か月~1 年程度(例: 31536000 秒)です。
A: 効果はありますが、期間が短いとブラウザに設定が残る時間も短くなります。推奨は 6 か月~1 年程度(例: 31536000 秒)です。
関連キーワード: HSTS, HTTPヘッダ、HTTPS, 中間者攻撃、セキュア設定
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(5)本文中のjに入れる、利用者のすべきことを、40字以内で具体的に述べよ。
模範解答
j:ブラウザのアドレスバーの情報で、httpsで通信していることを確認する
解説
解答の論理構成
- 問題文では「正規のWebサイトでHSTSが有効になるように設定していない場合、正規のWebサイトがHTTPS通信だけを受け付けるように構成していても、中間者攻撃が行われると、⑤ブラウザがHTTP通信で接続してしまい、中間者によって通信を盗聴されてしまう。」と述べ、HTTP に誘導された際の危険性を示しています。
- その直後に「利用者は毎回jことでこの攻撃を受けても気付くことができる。」とあり、利用者自身が都度確認すれば危険を回避できると示唆しています。
- 中間者攻撃で HTTP に誘導されても、ブラウザのアドレスバーに表示されるスキームは「http://」になり、錠前アイコンも消えます。したがって利用者は URL 表示を確認すれば異常に気付けます。
- 以上より j には「ブラウザのアドレスバーを見て HTTPS 接続であることを確かめる」という内容が入るのが妥当となります。
誤りやすいポイント
- 錠前アイコンの有無だけを書くと、スキーム確認も必要な点を落としがちです。
- 「証明書情報を毎回詳細表示で確認する」とすると日常的に実行しづらく、問題文のニュアンスとずれます。
- 「URL のドメイン名を確認する」だけでは HTTP/HTTPS の違いに触れず不十分です。
FAQ
Q: HSTS が設定されていれば利用者は確認不要ですか?
A: HSTS が正しく動作するブラウザでは自動で HTTPS に固定されるため、利用者確認の負担は大幅に減ります。
A: HSTS が正しく動作するブラウザでは自動で HTTPS に固定されるため、利用者確認の負担は大幅に減ります。
Q: アドレスバー確認だけで完全に安全と言えますか?
A: 中間者攻撃以外の脅威(フィッシングサイトなど)を防げるわけではありません。SSL証明書の正当性確認やブラウザアップデートも重要です。
A: 中間者攻撃以外の脅威(フィッシングサイトなど)を防げるわけではありません。SSL証明書の正当性確認やブラウザアップデートも重要です。
Q: モバイルアプリの場合はどうしますか?
A: アドレスバーがないため、アプリ側で証明書ピンニングなどを実装し、通信経路を保証する方法が推奨されます。
A: アドレスバーがないため、アプリ側で証明書ピンニングなどを実装し、通信経路を保証する方法が推奨されます。
関連キーワード: HSTS, 中間者攻撃、HTTPS, URLスキーム、SSL/TLS
設問3:〔新技術によって生じる脆弱性への対応〕について(1)〜(6)に答えよ。
(6)WebサイトでHSTSが有効になるよう設定している場合でも、本文中の下線⑤の事象が起きる場合がある。HSTSの有効期限が切れた場合以外に、どのような場合に起きるのか。35字以内で述べよ。
模範解答
初回にブラウザでWebサイトへhttpでアクセスした場合
解説
解答の論理構成
- 本文には、HSTSが有効になる条件として
「HSTSは、HTTPS応答のヘッダにiを指定することによって有効となる」
とあり、図4では「HTTPS要求 → HTTPS応答(i: max-age=31536000)」のやり取り後にブラウザがHSTSを記憶すると示されています。 - つまり、ユーザのブラウザは“最初に”対象サイトへHTTPSでアクセスし、Strict-Transport-Security ヘッダ(i)を受信して初めて強制機能を学習します。
- 一方、下線⑤では「ブラウザがHTTP通信で接続してしまい、中間者によって通信を盗聴されてしまう」と説明されています。これは “ブラウザがまだHSTSを学習していない” 状況を前提としています。
- したがって、有効期限切れ以外に問題が起きるのは「最初のアクセスがHTTPだったため、HSTSポリシを受け取っていないケース」であり、模範解答は「初回にブラウザでWebサイトへhttpでアクセスした場合」となります。
誤りやすいポイント
- 「HTTPSに強制される=常に安全」と早合点し、初回アクセス時の“学習前状態”を忘れやすいです。
- 有効期限切れと混同し、「ヘッダのmax-ageが短い場合」などと解答すると設問の趣旨と外れます。
- “HTTPでブックマークされたとき”“httpリンクを踏んだとき”など、個別例に寄せすぎてしまうと要点がぼやけます。
FAQ
Q: HSTSプリロードリストに登録していれば初回HTTPアクセスも安全ですか?
A: はい。主要ブラウザに組み込まれたプリロードリスト入りドメインは、ブラウザが初回からHTTPSへ自動切替えします。ただし登録していないサイトでは初回HTTPアクセスは依然としてリスクが残ります。
A: はい。主要ブラウザに組み込まれたプリロードリスト入りドメインは、ブラウザが初回からHTTPSへ自動切替えします。ただし登録していないサイトでは初回HTTPアクセスは依然としてリスクが残ります。
Q: Strict-Transport-Security ヘッダをHTTP応答で返せば学習できますか?
A: できません。RFC 6797ではHTTPS応答でのみ有効と規定されています。HTTP応答で送ってもブラウザは無視します。
A: できません。RFC 6797ではHTTPS応答でのみ有効と規定されています。HTTP応答で送ってもブラウザは無視します。
Q: サイトをHTTPS強制にし、HTTPをリダイレクトすれば十分では?
A: リダイレクトも一旦はHTTP通信が発生するため、中間者がリダイレクト応答を書き換える恐れがあります。HSTSはそのリスクを根本的に防ぐ仕組みです。
A: リダイレクトも一旦はHTTP通信が発生するため、中間者がリダイレクト応答を書き換える恐れがあります。HSTSはそのリスクを根本的に防ぐ仕組みです。
関連キーワード: HSTS, Strict-Transport-Security, 初回アクセス、中間者攻撃、HTTPS


