情報処理安全確保支援士 2023年 春期 午後2 問01
Webセキュリティに関する次の記述を読んで、設問に答えよ。
A社グループは、全体で従業員20,000名の製造業グループである。技術開発や新製品の製造・販売を行うA社のほか、特化型の製品の製造・販売を行う複数の子会社(以下、グループ各社という)がある。A社及びグループ各社には、様々なWebサイトがある。A社では、資産管理システムを利用し、IT資産の管理を効率化している。Webサイトの立上げ時は、資産管理システムへのWebサイトの概要、システム構成、IPアドレス、担当者などの登録申請が必要である。
A社には、CISOが率いるセキュリティ推進部がある。セキュリティ推進部の業務は、主に次の三つである。
・A社の情報セキュリティマネジメントを統括する。
・A社のWebサイトの脆弱性診断(以下、脆弱性診断を診断という)を管理する。例えば、A社の会員サイトなど、重要なWebサイトについて、診断を新規リリース前に実施し、その後も年1回実施する。なお、診断は、セキュリティ専門業者のB社に委託している。
・グループ各社に対して、情報セキュリティポリシーやセキュアコーディング規約を配布する。なお、診断の実施有無や内容はグループ各社の判断に任せている。
IoT製品の市場拡大によってグループ各社による新規Webサイト開発の増加が予想されている中、A社の経営陣は、グループ各社のWebサイトのセキュリティが十分かどうかを懸念し始めた。そこで、グループ各社の重要なWebサイトも、A社のセキュリティ推進部がグループ各社と協議しつつ診断を管理することになった。
セキュリティ推進部がB社に診断対象となるWebサイトのリリーススケジュールを伝えたところ、同時期に多数の診断を依頼されても対応することができない可能性があるとのことだった。そこで、グループ各社の一部のWebサイトに対する診断をA社グループ内で実施できるようにするための内製化推進プロジェクト(以下、Sプロジェクトという)を立ち上げた。
セキュリティ推進部のZさんは、Sプロジェクトを担当することになった。ZさんはこれまでもB社への診断の依頼を担当しており、診断の準備から診断結果の報告まで、診断全体をおおむね把握していた。
〔Sプロジェクトの進め方〕
Sプロジェクトは、B社の支援を得ながら、表1のとおり進めることにした。B社からは、セキュリティコンサルタントで情報処理安全確保支援士(登録セキスペ)であるY氏の支援を受けることになった。

〔フェーズ1:診断項目の決定〕
Sプロジェクトでは、診断項目を決めた。
〔フェーズ2:診断ツールの選定〕
B社がWebサイトの診断にツールVを使っていることもあり、A社はツールVを購入することに決めた。ツールVの仕様を図1に示す。

診断対象URLの自動登録機能及び手動登録機能の特徴を表2に示す。

A社は、診断項目のうち、ツールVでは診断ができないものは手動で診断を実施することにした。
〔フェーズ3:ZさんとB社での診断の実施と結果比較〕
ZさんとB社は、サイトMに対して診断を実施した。サイトMの画面遷移を図2に示す。

Zさんは、Zさんの診断結果とB社の診断結果とを比較した。その結果、Zさんは脆弱性の一部を検出できていないことが分かった。検出できなかった脆弱性は、アンケート入力1の画面での入力値に起因するクロスサイトスクリプティング(以下、クロスサイトスクリプティングをXSSという)と、トピック検索の画面での入力値に起因するSQLインジェクションであった。サイトMのアンケート入力1からの画面遷移を図3に示す。

トピック検索の画面で検索条件として入力した値の処理に関する診断で、ツール V が送ったパラメータと検索結果の件数を表3に示す。なお、トピック検索の画面で検索条件として入力した値は、パラメータ keyword に格納される。

ツール V は、B社の診断では、keyword=manuala と keyword=manualbの検索結果を比較して SQL インジェクションを検出できたが、Z さんの診断では SQL インジェクションを検出できなかった。
Zさんは、検出できなかった二つの脆弱性について、どうすれば検出できるのかをY氏に尋ねた。次は、その際のY氏とZさんの会話である。
Y氏 :XSSについては、入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。XSSの検出には、ツールVにおいて図1中のcの②設定が必要でした。SQLインジェクションについては、keywordの値が文字列として扱われる仕様となっており、SQLの構文エラーが発生するような文字列を送ると検索結果が0件で返ってくるようです。そこで、③keywordの初期値としてSQLインジェクションを検出できる“manual”のような値を設定する必要がありました。
Zさん:なるほど。ツールVは、Webサイトに応じた初期値を設定する必要があるのですね。
その後、Zさんは、Y氏とともに、フェーズ3での診断結果を分析した。その際、偽陽性を除いてから開発者に報告することは難しいことが問題となった。
そこで、Zさんは、“開発者への報告の際に、診断結果の報告内容が脆弱性なのか偽陽性なのか、その判断を開発者に委ねる。一方、診断結果の報告内容における脆弱性の内容、リスク及び対策について、開発者がB社に直接問い合わせる。”という案にした。なお、B社のサポート費用は、問合せ件数に比例するチケット制である。グループ各社がB社とサポート契約を結ぶが、費用は、当面A社がまとめて支払い、後日グループ各社と精算する。
これまでの検討を踏まえて、Zさんは、フェーズ4でA社グループの診断手順案を作成した。
〔フェーズ5:診断手順案に従った診断の実施〕
Y氏の協力の下、Zさんは、診断手順案に従ってサイトNの診断を実施することにした。サイトNは既にリリースされている。サイトNの会員(以下、会員Nという)は、幾つかのグループに分けられており、申し込むことができるキャンペーンが会員の所属しているグループによって異なる。サイトNの画面遷移を図4に示す。

まず、Zさんは、診断対象URL、アカウントなど、診断に必要な情報をK社に確認した。しかし、サイトNについては診断に必要な情報が一元管理されていなかったので、確認の回答までに1週間掛かった。診断開始までに要する時間が課題として残った。
次に、Zさんは、アカウントの設定を行った後、④探査を開始するURLに図4のトップページを指定してツールVの診断対象URLの自動登録機能を使用したが、一部のURLは登録されなかった。その後、登録されなかったURLを手動で登録した。診断を実施してもよいか、Y氏に確認したところ、注意点の指摘を受けた。具体的には、⑤特定のパラメータが同じ値であるリクエストを複数回送信するとエラーになり、遷移できない箇所があることに注意せよとのことであった。適切な診断を行うために、ツールVの拒否回避機能を設定して診断を実施した。診断では、次に示す脆弱性が検出された。
・XSS
・アクセス制御の回避
Zさんは、これらの脆弱性について、サイトNの開発部門(以下、開発部Nという)に通知し、偽陽性かどうかの判断、リスクの評価及び対策の立案を依頼した。
〔XSS〕
XSSの脆弱性は、複数の画面で検出された。開発部Nから、“cookieにHttpOnly属性が付いていると、dが禁止される。そのため、cookieが漏えいすることはなく、修正は不要である。”という回答があった。Zさんは、この回答を受けてY氏に相談し、“XSSを悪用してもcookieを盗めないのは確かである。しかし、⑥XSSを悪用してcookie以外の情報を盗む攻撃があるので、修正が必要である。”と開発部Nに伝えた。
〔アクセス制御の回避〕
Zさんは、手動で診断し、アクセス制御の回避の脆弱性を、図4中のキャンペーン一覧の画面などで検出した。ある会員Nが⑦アクセス制御を回避するように細工されたリクエストを送ることで、その会員Nが本来閲覧できないはずのキャンペーンへのリンクが表示され、さらに、リンクをたどってそのキャンペーンに申し込むことが可能であった。正常なリクエストとそのレスポンスを図5に、脆弱性を検出するのに使ったリクエストとそのレスポンスを図6に示す。


開発部Nは、サイトNへ送られてきたリクエスト中のeから、ログインしている会員Nを特定し、その会員Nが所属しているグループがfの値と一致するかを検証するように、ソースコードを修正することにした。
開発部Nは、B社の支援によって対応を終えることができたが、B社へ頻繁に問い合わせることになった結果、B社のサポート費用が高額になった。サポート費用をどう抑えるかが課題として残った。
〔フェーズ6:A社グループの診断手順の制定〕
Zさんは、フェーズ5の診断で残った二つの課題についての対策を検討し、グループ各社から同意を得た上で、A社グループの診断手順を完成させた。
設問1:
表2中の下線①について、別の方法を、30字以内で答えよ。
模範解答
診断対象のWebサイトの設計書を確認するという方法
解説
解答の論理構成
- 【問題文】表2の手動登録機能の特徴には
「Web サイトの全ての URL を診断対象とする場合、①診断対象 URL を別の方法で調べる必要がある。」
と明記されています。 - 手動でリンクをたどる方法だけでは、リンクが隠れている・動的に生成される場合に URL の漏れが発生します。
- 漏れなく URL を収集する“別の方法”として、開発時に必ず作成される仕様書・画面遷移図・API 定義などを確認すれば、公開/非公開を問わず全 URL を一覧できます。
- したがって「診断対象のWebサイトの設計書を確認する」という回答が根拠を満たします。
誤りやすいポイント
- クローラの再実行を挙げてしまう
└ 自動登録で漏れた URL は同じクローラでは再度漏れる可能性が高いです。 - テスト環境での“総当たり”リクエストと書く
└ 網羅性より非効率が問題となり、設問が求める「別の方法」には当たりません。 - 動的 URL をブラウザのデベロッパーツールで確認とする
└ 手動操作に含まれるため「別の方法」とは言い切れません。
FAQ
Q: サイトマップ XML を使う案は誤りですか?
A: 公開用サイトマップは管理画面や非公開 API を含まないため、全 URL を網羅できません。
A: 公開用サイトマップは管理画面や非公開 API を含まないため、全 URL を網羅できません。
Q: ソースコード解析ツールで URL を抽出する方法は?
A: コード資産が入手できる場合は有効ですが、一般に外部開発委託やブラックボックス診断では難しいため、設計書確認がより汎用的です。
A: コード資産が入手できる場合は有効ですが、一般に外部開発委託やブラックボックス診断では難しいため、設計書確認がより汎用的です。
Q: 仕様書が整備されていない場合は?
A: 画面遷移図・API 仕様・テストケース・開発チケットなど、URL を列挙した別資料を兼用する方法を検討します。
A: 画面遷移図・API 仕様・テストケース・開発チケットなど、URL を列挙した別資料を兼用する方法を検討します。
関連キーワード: サイトマップ、設計ドキュメント、URLリスト作成、脆弱性診断、動的ページ
設問2:〔フェーズ3:ZさんとB社での診断の実施と結果比較〕について答えよ。
(1)表3中及び本文中のa、bに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:”
イ:' and ' a'=' a
ウ:' and ' a'=' b
エ:and 1=0
オ:and 1=1
模範解答
a:イ
b:ウ
解説
解答の論理構成
- 表3には次のような結果が示されています。
- keyword=manual → 検索結果「10件」
- keyword=manual’ → 検索結果「0件」
- keyword=manuala → 検索結果「10件」
- keyword=manualb → 検索結果「0件」
- keyword=manual’ だけで 0 件になったのは、シングルクォートで文字列リテラルが閉じられ、SQL 構文エラーが発生したためと推測できます。
- 後ろに a / b を付けたパラメータでは構文エラーが回避されています。したがって両者は
- manual に対して真(True)を返す条件
- manual に対して偽(False)を返す条件
をそれぞれ付与していると考えられます。
- 解答群を確認すると、文字列リテラルを閉じたうえで論理式を付けるパターンは
- イ:' and ' a'=' a(常に真)
- ウ:' and ' a'=' b(常に偽)
です。
- これを踏まえると
- a は“検索結果が 10 件になる=真になる式” → イ
- b は“検索結果が 0 件になる=偽になる式” → ウ
誤りやすいポイント
- 文字列リテラルを閉じるシングルクォート(')を忘れ、and 1=1/and 1=0 に飛び付いてしまう。
- 「真偽が逆」と勘違いし、' and ' a'=' b を真、' and ' a'=' a を偽と誤って判断する。
- SQL インジェクションでは「構文エラーを回避する書式」が肝心であることを見逃す。
FAQ
Q: なぜ and 1=1 / and 1=0 ではないのですか?
A: 元のクエリの文字列リテラルを閉じるシングルクォートが足りないため構文エラーになります。解答群イ・ウは文字列を閉じてから論理式を加えている点が適切です。
A: 元のクエリの文字列リテラルを閉じるシングルクォートが足りないため構文エラーになります。解答群イ・ウは文字列を閉じてから論理式を加えている点が適切です。
Q: シングルクォートを含む攻撃文字列が通るのはなぜ?
A: アプリケーション側がエスケープやプリペアドステートメントを使わず、受信パラメータをそのまま SQL に連結しているためです。
A: アプリケーション側がエスケープやプリペアドステートメントを使わず、受信パラメータをそのまま SQL に連結しているためです。
Q: “manual” ではなく “xyz” で検出できなかった理由は?
A: keyword=xyz 系の検索では元々 0 件だったため、真偽を切り替えても結果数が変わらずツールが異常を検知できなかったためです。
A: keyword=xyz 系の検索では元々 0 件だったため、真偽を切り替えても結果数が変わらずツールが異常を検知できなかったためです。
関連キーワード: SQLインジェクション、論理条件、シングルクォート、構文エラー、パラメータ操作
設問2:〔フェーズ3:ZさんとB社での診断の実施と結果比較〕について答えよ。
(2)本文中のcに入れる適切な機能を、図1中の(1-1)〜(8-1)から選び、答えよ。
模範解答
c:(2-3)
解説
解答の論理構成
-
状況整理
- 会話文より、XSSは「入力したスクリプトが二つ先の画面でエスケープ処理されずに出力」されると説明されています。
- つまり“入力画面”のリクエストに対するレスポンスではなく、“二つ先の画面”のレスポンスを解析対象に含めないと XSS を検出できません。
-
ツール V の仕様確認
- 図1の「(2-3) 診断対象 URL の拡張機能」には、
「診断対象 URL の応答だけでなく、別の URL の応答も判定対象になる」
と記載されています。 - まさに“別の URL(=二つ先の画面)の応答”を判定対象に追加する機能です。
- 図1の「(2-3) 診断対象 URL の拡張機能」には、
「診断対象 URL の応答だけでなく、別の URL の応答も判定対象になる」
-
選択肢の当てはめ
- 「(2-1) 診断対象 URL の自動登録機能」や「(4-1) パラメータ手動設定機能」などは、URL の登録・パラメータ値に関する機能であり、応答範囲の拡張には関係しません。
- 応答範囲を広げられるのは「(2-3)」だけであるため、c には「(2-3)」が入ります。
-
結論
- よって、c は図1中の「(2-3) 診断対象 URL の拡張機能」です。
誤りやすいポイント
- 「入力値が二つ先の画面で反映される」という記述を読み飛ばし、「自動登録機能(2-1)」を選んでしまう。応答範囲の問題か URL 収集の問題かを切り分けられないとミスになります。
- 「拡張機能」という語だけを見て「(6-2) アカウントの拡張機能」を選択してしまう。どの対象(URL/アカウント)を拡張するのかに注意が必要です。
- 「パラメータを初期値から何通りもの値に変更」とあるため「(4-1) パラメータ手動設定機能」と早合点するケース。これは値を変更する機能であり、画面遷移後の応答を対象にする機能ではありません。
FAQ
Q: 拡張機能設定はすべての URL で必須ですか?
A: いいえ。今回のようにレスポンスが“別の画面”に現れるケースだけで設定すれば十分です。通常の同一画面内反映型 XSS では不要です。
A: いいえ。今回のようにレスポンスが“別の画面”に現れるケースだけで設定すれば十分です。通常の同一画面内反映型 XSS では不要です。
Q: 拡張機能を設定しても XSS を検出できない場合は?
A: 入力値がさらに複数画面先へ渡る、または JavaScript で DOM 操作が行われるケースなどが考えられます。ツールだけに頼らず手動診断を併用しましょう。
A: 入力値がさらに複数画面先へ渡る、または JavaScript で DOM 操作が行われるケースなどが考えられます。ツールだけに頼らず手動診断を併用しましょう。
Q: (2-3) を設定すると診断時間は増えますか?
A: 判定対象レスポンスが増えるため解析コストは上がりますが、多くの場合は実行時間より「検出漏れ防止」を優先すべきです。
A: 判定対象レスポンスが増えるため解析コストは上がりますが、多くの場合は実行時間より「検出漏れ防止」を優先すべきです。
関連キーワード: XSS, 画面遷移、URL拡張、レスポンス解析、自動診断
設問2:〔フェーズ3:ZさんとB社での診断の実施と結果比較〕について答えよ。
(3)本文中の下線②について、どのような設定が必要か。設定の内容を、図2中の画面名を用いて60字以内で答えよ。
模範解答
アンケート入力1からアンケート入力2に遷移するURLの拡張機能に、アンケート確認のURLを登録する。
解説
解答の論理構成
- 本文の会話で、Y氏は
「XSSの検出には、ツールVにおいて図1中のcの②設定が必要でした。」
と述べています。 - 図1の機能説明には
「診断対象 URL の拡張機能…判定対象に含める URL を登録する」
という設定があり、cがこの“診断対象 URL の拡張機能”に相当します。 - サイトMでは、スクリプトを入力する画面が「アンケート入力1」、実際にスクリプトが反映されるのは二つ先の「アンケート確認」です。
- したがって、ツールVが「アンケート入力1 → アンケート入力2」遷移時のレスポンスだけでなく、「アンケート確認」のレスポンスも評価できるよう、 「アンケート入力1からアンケート入力2に遷移するURL」の拡張機能に「アンケート確認のURL」を追加登録する必要があります。
誤りやすいポイント
- 拡張機能ではなく、パラメータ手動設定や診断対象 URL の手動登録を選んでしまう。
- 登録すべきURLを「アンケート送信完了」と誤解する。XSSが現れるのは「アンケート確認」であり、ここを判定対象に含めなければ検出できません。
- 自動登録機能だけで十分と判断し、後続画面の出力チェックが行われないまま診断を開始してしまう。
FAQ
Q: 拡張機能にURLを追加すると何が変わるのですか?
A: 追加したURLのレスポンスも脆弱性判定の対象になります。今回のように入力直後ではなく後続画面でスクリプトが反映されるケースで有効です。
A: 追加したURLのレスポンスも脆弱性判定の対象になります。今回のように入力直後ではなく後続画面でスクリプトが反映されるケースで有効です。
Q: 後続画面を別個に診断対象 URL として登録する方法では駄目なのですか?
A: 可能ですが、入力値と出力が別セッションになる恐れがあり、再現に失敗しやすいです。拡張機能なら同一リクエスト系列として扱えるため検出精度が上がります。
A: 可能ですが、入力値と出力が別セッションになる恐れがあり、再現に失敗しやすいです。拡張機能なら同一リクエスト系列として扱えるため検出精度が上がります。
Q: 拡張機能設定は全てのURLに行うべきですか?
A: いいえ。入力値が次画面以降で利用される箇所など、必要なところだけに限定しないと診断範囲が広がり過ぎ、時間が掛かります。
A: いいえ。入力値が次画面以降で利用される箇所など、必要なところだけに限定しないと診断範囲が広がり過ぎ、時間が掛かります。
関連キーワード: XSS, DAST, 拡張機能、URL登録、脆弱性診断
設問2:〔フェーズ3:ZさんとB社での診断の実施と結果比較〕について答えよ。
(4)本文中の下線③について、keywordの初期値をどのような値に設定する必要があるか。初期値が満たすべき条件を、40字以内で具体的に答えよ。
模範解答
トピック検索結果の画面での検索結果の件数が1以上になる値
解説
解答の論理構成
- ツールVは「パラメータを初期値から何通りもの値に変更した HTTP リクエストを順に送信し、応答から脆弱性の有無を判定する。」と【問題文】に明記されています。
- SQLインジェクション判定では、「keyword=manuala と keyword=manualbの検索結果を比較して SQL インジェクションを検出できた」が、「keyword=xyza 〜 すべて0件」で検出できなかったという事例が【問題文】表3に示されています。
- Y氏は「③keywordの初期値としてSQLインジェクションを検出できる“manual”のような値を設定する必要がありました」と助言しています。
- 以上より、初期値に求められる条件は「通常検索でヒットし、件数が0ではないこと」。この値を基準にツールVがエラーを誘発する値へ変形したとき、「1件以上 → 0件」の差分で異常を検知できるためです。
- したがって、解答は「トピック検索結果の画面での検索結果の件数が1以上になる値」となります。
誤りやすいポイント
- 「SQLの構文エラーが発生するような文字列を送ると検索結果が0件」とあるため、エラー文字列自体を初期値にしてしまう誤答。
- “manual”と同じ文字列を書くだけでなく、「ヒット件数があるか」を条件に含め忘れる誤答。
- 件数が多いほど良いと考え、極端に大量ヒットする語を選び、レスポンス負荷で診断が不安定になるケース。
FAQ
Q: ツールVが比較対象にするのは検索件数だけですか?
A: 表3の例では件数差分で検知していますが、実装によってはエラーメッセージやHTTPステータスの変化も併用します。今回は件数差分がキーです。
A: 表3の例では件数差分で検知していますが、実装によってはエラーメッセージやHTTPステータスの変化も併用します。今回は件数差分がキーです。
Q: ヒット件数が1件だけでも問題ありませんか?
A: はい。重要なのは「0件ではない」ことで、1件でも差分比較が成立します。
A: はい。重要なのは「0件ではない」ことで、1件でも差分比較が成立します。
Q: 初期値に日本語キーワードを使ってもよいですか?
A: 可能ですが、文字コード変換やエンコーディングの影響で期待通りに動かない場合があります。英数字を推奨します。
A: 可能ですが、文字コード変換やエンコーディングの影響で期待通りに動かない場合があります。英数字を推奨します。
関連キーワード: SQLインジェクション、パラメータ操作、DAST, 検索結果差分、自動診断
設問3:〔フェーズ5:診断手順案に従った診断の実施〕について答えよ。
(1)本文中の下線④について、URLが登録されなかった画面名を、解答群の中から全て選び、記号で答えよ。
解答群
ア:会員情報変更入力
イ:キャンペーン申込み
ウ:検索結果
エ:新規会員情報入力
模範解答
ウ、エ
解説
解答の論理構成
-
事実確認
【問題文】には、 ・「④探査を開始するURLに図4のトップページを指定してツールVの診断対象URLの自動登録機能を使用したが、一部のURLは登録されなかった」
とあります。つまり“トップページから自動巡回したが拾えなかった画面”を特定する設問です。 -
自動登録機能が漏れる典型パターン
表2に、- 「遷移先の URL が JavaScript などで動的に生成されるような場合である。」
- 「必須入力項目に適切な値を入力できず、正常に遷移できないことがある。」
という自動登録漏れの要因が明示されています。
-
各候補画面の到達可否を図4・注記から判定
-
結論
自動登録機能で漏れたのは「ウ:検索結果」と「エ:新規会員情報入力」であり、模範解答「ウ、エ」と一致します。
誤りやすいポイント
- ログイン後画面は巡回できないと思い込み、「ア」「イ」を選んでしまう。実際は【図01】(6-1)「利用者 ID とパスワードの設定機能」で自動ログインが可能です。
- 「必須入力項目があると到達不能」という表2の注意だけに着目し、「新規会員情報入力」だけを選ぶケース。JavaScript 動的生成による URL も漏れ原因である点を見落としがちです。
- メール送付 URL の特殊性を把握できず、「電子メールで登録URLを送付」画面と混同する誤回答。
FAQ
Q: 自動登録機能は JavaScript を全く解釈できないのですか?
A: 簡易的な DOM 解析や静的リンクは追えますが、表2にあるように「遷移先の URL が JavaScript などで動的に生成」される場合は漏れが発生しやすいとされています。
A: 簡易的な DOM 解析や静的リンクは追えますが、表2にあるように「遷移先の URL が JavaScript などで動的に生成」される場合は漏れが発生しやすいとされています。
Q: 「キャンペーン申込み」は必須入力があるのでは?
A: 画面自体はリンククリックで遷移可能で、入力フォームはその次の「キャンペーン申込み完了」へ進む際に必要です。よって画面 URL は静的リンクで取得できます。
A: 画面自体はリンククリックで遷移可能で、入力フォームはその次の「キャンペーン申込み完了」へ進む際に必要です。よって画面 URL は静的リンクで取得できます。
Q: メールに含まれる URL を自動登録させる方法はありますか?
A: テスト用メールサーバを経由させ内容を API で取り込むなどの方法はありますが、本ツール V の標準機能だけでは対応できないため手動登録が推奨されます。
A: テスト用メールサーバを経由させ内容を API で取り込むなどの方法はありますが、本ツール V の標準機能だけでは対応できないため手動登録が推奨されます。
関連キーワード: 自動クローリング、JavaScript生成URL, 認証付き診断、メールリンク、クライアントサイド遷移
設問3:〔フェーズ5:診断手順案に従った診断の実施〕について答えよ。
(2)本文中の下線⑤について、該当する画面遷移とエラーになってしまう理由を2組み挙げ、画面遷移は図4中の(A)〜(E)から選び、理由は40字以内で答えよ。
模範解答
①:
画面遷移:(A)
理由:同じアカウントで連続5回パスワードを間違えるとアカウントがロックされるから
②:
画面遷移:(C)
理由:キャンペーンは1会員に付き1回しか申込みできないから
解説
解答の論理構成
- 【問題文】には「特定のパラメータが同じ値であるリクエストを複数回送信するとエラーになり、遷移できない箇所がある」と記載されています。
- 図4の画面遷移を照合すると、同一値のリクエストが短時間に繰返されやすい場面は次の二つです。
- (A) ログイン → 「ログイン後のトップページ」
- (C) 「キャンペーン申込み」→「キャンペーン申込み完了」
- それぞれの遷移でエラーになる背景は次のとおりです。
- (A) 連続して誤ったパスワードを送るとアカウントがロックされ、同一アカウントでのログイン要求が拒否される。
- (C) 1会員につき同一キャンペーンへの申込みは1回のみ許可されており、同一パラメータで再度リクエストすると申込み不可となる。
- 以上より、画面遷移(A)・(C)が該当し、理由は上記のとおり整理できます。
誤りやすいポイント
- (B) や (E) を選んでしまう
- 「会員情報変更」や「よくある質問検索」は同一値再送でも通常は拒否されず、要件を満たさない。
- 「拒否回避機能」=脆弱性対策と誤解
- 本機能は診断を続行するための機能であり、アプリ側の制御を回避するものではない。
- ロックや二重申込みを“脆弱性”と捉える
- これらは意図的なビジネスロジックであり、診断時のエラー要因として扱う。
FAQ
Q: ログイン繰返しエラーはツール側でどう回避しますか?
A: ツールVの拒否回避機能でアカウントを複数用意し、一定回数ごとに切替える方法が有効です。
A: ツールVの拒否回避機能でアカウントを複数用意し、一定回数ごとに切替える方法が有効です。
Q: キャンペーンの二重申込み検証は自動化できますか?
A: 一度目のリクエスト後にセッションやデータベースが更新されるため、手動確認または状態初期化スクリプトとの併用が必要です。
A: 一度目のリクエスト後にセッションやデータベースが更新されるため、手動確認または状態初期化スクリプトとの併用が必要です。
Q: 拒否回避機能設定ミスによる誤検出を防ぐポイントは?
A: 事前に業務仕様を確認し、“リクエストを複数回送ると拒否される URL”だけに限定して設定することが重要です。
A: 事前に業務仕様を確認し、“リクエストを複数回送ると拒否される URL”だけに限定して設定することが重要です。
関連キーワード: レートリミット、アカウントロック、二重送信、ビジネスロジック、自動診断
設問4:〔XSS〕について答えよ。
(1)本文中のdに入れる適切な字句を、30字以内で答えよ。
模範解答
d:HTML 内のスクリプトから cookie へのアクセス
解説
解答の論理構成
- 【問題文】には
“cookieにHttpOnly属性が付いていると、dが禁止される。”
とあり、HttpOnly 属性の効果を問うている。 - HttpOnly 属性は、ブラウザが受信した Cookie を HTTP ヘッダ以外の手段で読み取らせない目的で付与する属性である。
- 具体的には、HTML 内で実行される JavaScript から document.cookie などを用いて Cookie を参照・改変することを禁止する。
- したがって、d に入る語句は「HTML 内のスクリプトから cookie へのアクセス」である。
誤りやすいポイント
- 「Secure 属性」と混同し、HTTPS 以外での送信禁止と勘違いする。
- 「SameSite 属性」と混同し、CSRF 対策だと誤解する。
- 「JavaScript から Cookie へのアクセス」が禁止なのに「外部ドメインへの送信が禁止」と答えてしまう。
- HttpOnly は読み取りだけでなく書き込みも不可である点を忘れ、片方のみを答えてしまう。
FAQ
Q: HttpOnly 属性が付与されていても、サーバへの送信時に Cookie は同送されますか?
A: はい。ブラウザは通常どおり HTTP リクエストヘッダに Cookie を付加して送信します。閲覧側のスクリプト操作だけが禁止されます。
A: はい。ブラウザは通常どおり HTTP リクエストヘッダに Cookie を付加して送信します。閲覧側のスクリプト操作だけが禁止されます。
Q: XSS 以外の攻撃でも HttpOnly 属性は有効ですか?
A: JavaScript を介した Cookie 盗聴を前提とする攻撃(例えば DOM ベース XSS)には有効ですが、サーバに直接送られる Cookie 盗用やセッション固定には直接の効果はありません。
A: JavaScript を介した Cookie 盗聴を前提とする攻撃(例えば DOM ベース XSS)には有効ですが、サーバに直接送られる Cookie 盗用やセッション固定には直接の効果はありません。
Q: HttpOnly を設定したら XSS 対策は不要ですか?
A: いいえ。Cookie 盗聴は防げても、ページ改ざんや CSRF トークン窃取など他の悪用手段が残るため、入力値のエスケープや CSP などの根本対策が必要です。
A: いいえ。Cookie 盗聴は防げても、ページ改ざんや CSRF トークン窃取など他の悪用手段が残るため、入力値のエスケープや CSP などの根本対策が必要です。
関連キーワード: HttpOnly, XSS, Cookie, JavaScript, セッション管理
設問4:〔XSS〕について答えよ。
(2)本文中の下線⑥について、攻撃の手口を、40字以内で答えよ。
模範解答
偽の入力フォームを表示させ、入力情報を攻撃者サイトに送る手口
解説
解答の論理構成
-
本文には、開発部Nが「cookieにHttpOnly属性が付いている」と主張し、「修正は不要」と回答したとあります。
引用:「“cookieにHttpOnly属性が付いていると、dが禁止される。そのため、cookieが漏えいすることはなく、修正は不要である。”」
HttpOnly 属性により JavaScript から document.cookie 取得ができない点を指しています。 -
これに対し Y氏は次のように指摘しています。
引用:「“しかし、⑥XSSを悪用してcookie以外の情報を盗む攻撃があるので、修正が必要である。”」
つまり、攻撃者は cookie 以外の機密情報を奪う手口を想定していることがわかります。 -
XSS で盗める「cookie以外の情報」の代表例は、被害者が画面に入力するクレジットカード番号やパスワードなどです。攻撃者は不正スクリプトで偽の入力フォームを表示し、被害者がそこに入力した内容を攻撃者サーバへ送信させます。
-
したがって、下線⑥に該当する攻撃の手口は「偽の入力フォームを表示させ、入力情報を攻撃者サイトに送る」ことであり、模範解答と一致します。
誤りやすいポイント
- 「HttpOnly があれば XSS も安全」と誤解する。実際にはフォーム入力や DOM 取得など他の経路で情報窃取が可能です。
- XSS = cookie 盗難と思い込み、フィッシング型(偽フォーム表示)の被害を見落とす。
- 手口を「リダイレクトさせる」「メール送信させる」などと書き、入力フォームを介した情報搾取という本質を外す。
FAQ
Q: HttpOnly を付ければ XSS は放置しても良いですか?
A: いいえ。フォーム入力窃取、CSRF トークン漏えい、UI 攻撃など多数のリスクが残ります。
A: いいえ。フォーム入力窃取、CSRF トークン漏えい、UI 攻撃など多数のリスクが残ります。
Q: 偽フォーム型 XSS と通常のフィッシングの違いは?
A: 通常のフィッシングは外部サイトに直接誘導しますが、偽フォーム型 XSS は正規サイト上に攻撃者が生成したフォームで情報を奪う点が異なります。
A: 通常のフィッシングは外部サイトに直接誘導しますが、偽フォーム型 XSS は正規サイト上に攻撃者が生成したフォームで情報を奪う点が異なります。
Q: 対策は HttpOnly 以外に何を行うべきですか?
A: 出力時エスケープ、CSP(Content Security Policy)、入力値検証など多層防御を実装する必要があります。
A: 出力時エスケープ、CSP(Content Security Policy)、入力値検証など多層防御を実装する必要があります。
関連キーワード: クロスサイトスクリプティング、フィッシング、入力フォーム、情報漏えい
設問5:〔アクセス制御の回避〕について答えよ。
(1)本文中の下線⑦について、リクエストの内容を、30字以内で具体的に答えよ。
模範解答
group_code が削除されているリクエスト
解説
解答の論理構成
- 本文では「ある会員Nが⑦アクセス制御を回避するように細工されたリクエストを送ることで、その会員Nが本来閲覧できないはずのキャンペーンへのリンクが表示され」と記述されています。
- 同じ箇所で正常リクエスト(図5)と細工リクエスト(図6)が対比され、正常側にはリクエストボディに group_code パラメータが含まれている一方、細工側には含まれていません。
- また「ログインすると、会員Nが所属しているグループを識別するためのgroup_codeというパラメータがリクエストに追加される。」とあり、group_code がアクセス制御のキーであることが分かります。
- 以上より、アクセス制御の回避は「group_code を送らない」ことで実現されており、設問が求める “リクエストの内容” は《group_code が削除されているリクエスト》となります。
誤りやすいポイント
- 「group_code の値を他グループに書き換えた」と誤解しがちですが、実際は“値の改ざん”ではなく“パラメータの欠落”が本質です。
- keyword パラメータに着目してしまい、検索語の操作が原因だと思い込むケース。
- 図5・図6の相違点を細かく数えようとして時間を浪費すること。要はアクセス制御トークンの有無だけが論点です。
FAQ
Q: group_code を送らないだけでなぜ制御が回避できるのですか?
A: サーバ側ロジックが「パラメータが無い場合は全件表示」のように実装されていたためです。必須パラメータの存在チェックを怠る典型的な実装不備です。
A: サーバ側ロジックが「パラメータが無い場合は全件表示」のように実装されていたためです。必須パラメータの存在チェックを怠る典型的な実装不備です。
Q: 値を 0002 などに変えても同じ脆弱性になりますか?
A: 実装によります。今回のケースでは値の変更より“欠落”が決定的でした。まずはパラメータ有無の検証漏れを修正することが最優先です。
A: 実装によります。今回のケースでは値の変更より“欠落”が決定的でした。まずはパラメータ有無の検証漏れを修正することが最優先です。
Q: 対策はどうすれば良いですか?
A: 受信したリクエストに必須パラメータが存在するかをサーバ側で検証し、欠落していればエラーを返すとともにアクセス権限チェックを確実に行う実装へ修正します。
A: 受信したリクエストに必須パラメータが存在するかをサーバ側で検証し、欠落していればエラーを返すとともにアクセス権限チェックを確実に行う実装へ修正します。
関連キーワード: アクセス制御、パラメータ検証、権限昇格、入力値検証
設問5:〔アクセス制御の回避〕について答えよ。
(2)本文中のe、fに入れる適切なパラメータ名を、図5中から選び、それぞれ15字以内で答えよ。
模範解答
e:JSESSIONID
f:group_code
解説
解答の論理構成
- 図5のリクエストには
- Cookie: JSESSIONID=KCRQ88ERH2G8MGT319E5OSM0AJFDIVEM
- group_code=0001&keyword=new
が含まれています。
- 本文には
- 「開発部Nは、サイトNへ送られてきたリクエスト中のeから、ログインしている会員Nを特定し、
その会員Nが所属しているグループがfの値と一致するかを検証するように、ソースコードを修正する」
と記載されています。
- 「開発部Nは、サイトNへ送られてきたリクエスト中のeから、ログインしている会員Nを特定し、
その会員Nが所属しているグループがfの値と一致するかを検証するように、ソースコードを修正する」
- 会員Nを特定するにはセッション管理用の値が必要です。図5のヘッダでセッションを示すのは
JSESSIONID だけです。 - 所属グループを示す値は、図5のボディにある group_code=0001 です。これは注記3でも
「ログインすると、… group_codeというパラメータがリクエストに追加される」と明示されています。 - したがって
- e = JSESSIONID
- f = group_code
となります。
誤りやすいポイント
- セッションIDとクッキー名の混同
JSESSIONID は値ではなくクッキー名である点を見落としやすいです。 - group_code の位置
ボディ部にあるためヘッダしか読まずに見逃す受験者がいます。 - keyword との取り違え
グループ識別は keyword ではなく group_code であることに注意が必要です。
FAQ
Q: どうしてリクエストボディ内の group_code がアクセス制御に関係するのですか?
A: 注記3に「ログインすると、会員Nが所属しているグループを識別するためのgroup_codeというパラメータがリクエストに追加される」とあり、サーバ側はこれでグループ判定を行います。
A: 注記3に「ログインすると、会員Nが所属しているグループを識別するためのgroup_codeというパラメータがリクエストに追加される」とあり、サーバ側はこれでグループ判定を行います。
Q: JSESSIONID が漏えいすると何が起こりますか?
A: 他者に盗まれるとセッション固定/ハイジャックが可能になり、本人になりすまして操作される危険があります。
A: 他者に盗まれるとセッション固定/ハイジャックが可能になり、本人になりすまして操作される危険があります。
Q: ボディ部のパラメータは必ずしもセキュリティ検証対象ですか?
A: はい。ヘッダ・クエリ・ボディなど送信経路を問わず、権限や状態を示す値は全て検証対象です。
A: はい。ヘッダ・クエリ・ボディなど送信経路を問わず、権限や状態を示す値は全て検証対象です。
関連キーワード: セッションID, クッキー、アクセス制御、パラメータ検証
設問6:〔フェーズ6:A社グループの診断手順の制定〕について答えよ。
(1)診断開始までに要する時間の課題について、A社で取り入れている管理策を参考にした対策を、40字以内で具体的に答えよ。
模範解答
グループ各社で資産管理システムを導入し、Webサイトの情報を管理する。
解説
解答の論理構成
- 課題の把握
- 【問題文】「サイトNについては診断に必要な情報が一元管理されていなかったので、確認の回答までに1週間掛かった。」
→ Webサイト関連情報が散在していることが診断準備を長期化させています。
- 【問題文】「サイトNについては診断に必要な情報が一元管理されていなかったので、確認の回答までに1週間掛かった。」
- 参考にすべき既存の管理策
- 【問題文】「A社では、資産管理システムを利用し、IT資産の管理を効率化している。」
- 同じ段落で「Webサイトの立上げ時は、資産管理システムへのWebサイトの概要、システム構成、IPアドレス、担当者などの登録申請が必要」と明示。
→ A社本体では資産管理システムが情報集約と最新化を担保しており、診断対象確認の手戻りを防いでいます。
- 解答の導出
- グループ各社にもこの仕組みを展開すれば、診断に必要なURL・アカウント・構成情報を即時取得可能。
- したがって解答は「グループ各社で資産管理システムを導入し、Webサイトの情報を管理する。」となります。
誤りやすいポイント
- 「情報を一元管理する」とだけ書き、どの仕組みかを具体的に示さない。
- 単に「一覧表を作る」などA社で実施済みの「資産管理システム」を示唆しない回答。
- 診断ツールやY氏の助言と混同し、技術的な設定変更を対策に挙げてしまう。
FAQ
Q: 資産管理システムはIT機器専用ではないのですか?
A: A社ではWebサイトの「概要、システム構成、IPアドレス、担当者」まで登録しており、Web診断にも活用できます。
A: A社ではWebサイトの「概要、システム構成、IPアドレス、担当者」まで登録しており、Web診断にも活用できます。
Q: グループ各社に同システムを導入するコストが心配です。
A: 既にA社で運用実績があるため、ライセンス共有やクラウド型でのスケールアウトによりコスト削減が見込めます。
A: 既にA社で運用実績があるため、ライセンス共有やクラウド型でのスケールアウトによりコスト削減が見込めます。
Q: 手順書に「資産管理システム」の項目を入れるだけでも効果がありますか?
A: ある程度の改善は期待できますが、運用ルールと責任者を明確にし、情報の最新化を継続的に行うことが肝要です。
A: ある程度の改善は期待できますが、運用ルールと責任者を明確にし、情報の最新化を継続的に行うことが肝要です。
関連キーワード: 資産管理、情報一元化、セキュリティ診断、URL管理、DAST
設問6:〔フェーズ6:A社グループの診断手順の制定〕について答えよ。
(2)B社のサポート費用の課題について、B社に対して同じ問合せを行わず、問合せ件数を削減するために、A社グループではどのような対策を実施すべきか。セキュアコーディング規約の必須化や開発者への教育以外で、実施すべき対策を、50字以内で具体的に答えよ。
模範解答
B社への問合せ窓口をA社の診断部門に設置し、窓口が蓄積した情報をA社グループ内で共有する。
解説
解答の論理構成
-
課題の把握
・問題文には「B社へ頻繁に問い合わせることになった結果、B社のサポート費用が高額になった。」と明記されています。
・さらに「B社のサポート費用は、問合せ件数に比例するチケット制である。」とも書かれており、件数削減が直接費用削減につながる構造です。 -
重複問合せの発生要因
・グループ各社が個別に問い合わせるため、同じ内容の質問がB社に何度も届く可能性があります。
・情報共有の場や窓口がないことが原因であると読み取れます。 -
解決方針
・同じ質問をB社に送らないようにするには「問い合わせ内容を一元管理し、社内で共有する」仕組みが必要です。
・一元管理の主体はA社の診断部門が適任です。理由は、同部門は「セキュリティ推進部がグループ各社と協議しつつ診断を管理」しており全体管理機能を既に担っているためです。 -
具体策
・A社の診断部門にB社への専用窓口を設ける。
・窓口がB社から得た回答や過去の事例をナレッジとして蓄積し、グループ内ポータルなどで共有する。 -
解答(50字以内)
「B社対応の社内窓口を設置し、回答をデータベース化して全社で共有し重複問合せを防ぐ。」
誤りやすいポイント
- 「教育や規約の徹底」で費用が減ると答えてしまう
(設問で除外条件として明示)。 - 「B社との値引き交渉」などコスト交渉に走りがち
(件数削減を求められている点を見落とす)。 - 「各社にFAQを作らせる」とすると重複問合せがなくならない
(一元管理が鍵)。
FAQ
Q: 問合せ窓口を一本化するだけで本当に費用削減になりますか?
A: 同じ質問を内部で解決できるため、チケット消費が抑えられます。新規の技術的疑問だけをB社へ送れば良くなります。
A: 同じ質問を内部で解決できるため、チケット消費が抑えられます。新規の技術的疑問だけをB社へ送れば良くなります。
Q: 共有方法はメールやファイルサーバでも良いですか?
A: 共有は可能ですが、検索性や更新履歴を考慮するとナレッジベースやFAQシステムの方が効率的です。
A: 共有は可能ですが、検索性や更新履歴を考慮するとナレッジベースやFAQシステムの方が効率的です。
Q: 窓口担当にはどの部門が最適ですか?
A: 「セキュリティ推進部」が診断全体を統括しているため、ここを中心に設置するのが自然です。
A: 「セキュリティ推進部」が診断全体を統括しているため、ここを中心に設置するのが自然です。
関連キーワード: チケット制、ナレッジベース、ヘルプデスク、コスト削減、情報共有


