情報処理安全確保支援士 2012年 秋期 午後2 問01
Webサイトの診断と対策に関する次の記述を読んで、設問1~4に答えよ。
J社は、従業員数1,000名の衣料品販売会社であり、店舗での販売を主としている。12年前に開設したWebサイト(以下、サイトという)は企業紹介を目的としたコーポレートサイトであったが、8年前に一般の消費者がαブランドの商品を検索したり、J社に問合せしたりすることができるサイト(以下、αサイトという)を開設した。現在では、他の商品ブランドβ及びγの通販サイト(以下、βサイト、γサイトという)も立ち上げており、新商品の宣伝、キャンペーンを積極的に行っている。
J社では、サーバをデータセンタDに設置している。OS、ミドルウェア及びWebアプリケーションは通販事業部が所管し、データセンタDとの契約やネットワーク、サーバ、機器などのシステム基盤は情報システム部が所管している。通販事業部にはサイトごとにサイト担当者がいて、サイト担当者は、それぞれ担当の通販サイトの開発業者を選び、OSのインストール及び要塞化、必要なミドルウェアのインストール及び設定並びにWebアプリケーションの開発を委託している。Webアプリケーションの簡単な修正などのメンテナンスはサイト担当者が行っている。情報システム部には品質チームがいて、各サイトのセキュリティチェックを行っている。J社のシステム構成を図1に、J社の通販サイトに関する情報を表1に示す。


〔J社通販サイトのセキュリティ対策状況〕
3年前からJ社では、脆弱性を防ぐために、開発時にセキュリティチェックシート(以下、チェックシートという)でセキュリティ対策状況を確認するよう開発業者に依頼している。チェックシートを表2に示す。

また、J社では、3年前からはサイト開設時及び再構築時に品質チームが自動診断ツールを用いて、OS及びミドルウェアに対する診断(以下、PF診断という)とWebアプリケーションに対する診断(以下、Webアプリ診断という)を行い、脆弱性の有無を確認している。品質チームが利用している自動診断ツールの仕様を図2、図3に示す。


Webアプリ診断では、診断対象のURLを自動探査で設定し、診断項目を設定した後、診断している。自動探査でたどれない画面は、手動探査で設定している。
サイトによっては、診断を行うと大量の問合せメールがサイト担当者に送られたり、大量のテスト注文が発生したりするおそれがある。また、他サイトと連携している場合には、他サイトに意図しないデータが大量に送られるおそれもある。そのため、診断の実施を関係者に連絡し、許可を得てから診断を実施している。
〔専門家によるセキュリティ診断〕
ある日、同業他社の通販サイトで、Webアプリケーションの脆弱性を狙った攻撃によって、個人情報が漏えいする事件が発生した。強い危機感をもったJ社経営陣は、J社通販サイトの安全性を改めて確認するように指示した。そこで情報システム部では、J社通販サイトに対して、専門家による詳細な診断を行うことにした。情報システム部のセキュリティ担当者のQ主任が専門業者R社に依頼して、診断を行った。診断実施後、R社のY氏がJ社を訪問し、診断結果の説明を行った。
〔αサイトの診断結果と検出された脆弱性への対応〕
αサイトでは、脆弱性が二つ検出された。αサイトで検出された脆弱性を表3に示す。
項番1の“DoS脆弱性”は、数か月前に公表された脆弱性であった。J社では脆弱性情報を入手しておらず、ミドルウェアに修正プログラムを適用していなかった。
Q主任がαサイトのサイト担当者に修正プログラムを適用するよう依頼したところ、“①修正プログラムの適用にはリスクがあるので、適用前に実施しておくべき作業がある”という回答であった。しかし、長期間対策せずにいるのは好ましくないと考えて、暫定的にWebサーバの設定変更を行うようサイト担当者に依頼した。
項番2の“管理者用ログイン画面でのログイン試行可能”について、サイト担当者に確認したところ、“ミドルウェアの管理者用ログイン画面はIDとパスワードによる認証によってアクセス制限を行っており、チェックシートに準拠しているので問題ないと思う”という回答であった。
しかし、IDとパスワードによる認証を行っていても、このようなログイン画面が攻撃者によって見つけられた場合、IDを固定して、考えられる全てのパスワードを試行する、aが行われる可能性がある。この攻撃によって、管理者権限が奪われると大きな被害になるので、Q主任はサイト担当者と検討し、インターネットから管理者用ログイン画面にアクセスする場合は、SSHを利用することにした。SSH利用時には公開鍵認証でログインするので、bがなければ、Webサーバへのaを成功させることは困難である。
なお、サイト担当者がミドルウェアの管理画面にアクセスする際には、サイト担当者のPCからWebサーバへのSSH接続時に、②サイト担当者のPCの任意の通信ポートとミドルウェアの管理画面が動作している通信ポートとの間を暗号通信させることにした。
〔βサイトの診断結果と検出された脆弱性への対応〕
βサイトでは脆弱性が三つ検出された。βサイトで検出された脆弱性を表4に示す。

診断時のHTTPリクエストとレスポンスのうち、検出された脆弱性に関連したものを図4~図9に示す。
図4と図5は診断のためにURLにセッションIDを含めた、ログイン画面表示時のリクエストとそのレスポンスである。
図6と図7はテスト用ID(test1)によるログイン時のリクエストとそのレスポンスである。


図8と図9はtest1でログインした後の会員情報変更画面の入力時のリクエストとそのレスポンスである。このとき、“名”(name2)を入力せずに送信しているので、エラーになり、エラーメッセージを含む入力画面が表示されている。
Y氏は図9を見てXSSの脆弱性があるかもしれないと思い、あるパラメタの値に“a onmouseover=alert(document.cookie);”を指定し、そのレスポンスを確認して実際にXSSの脆弱性があることを確認した。また、“キャッシュへのコンテンツ残留”の脆弱性についても図9を見た後、診断で用いたPC内のキャッシュを確認して実際に脆弱性があることを確認した。

Q主任は、βサイトのサイト担当者Hさんを呼び、表4の各脆弱性について確認した。
Q主任:項番1の“セッションIDの固定化”については、ログイン時に新たなセッションIDが発行されていないことが図6と図7から確認できます。さらに、図4と図5からはWebサーバの好ましくない挙動が確認できます。つまり、攻撃者が利用者になりすますことができるという脆弱性がありました。
Hさん:開発時に考慮していなかったようです。
Q主任:項番2のXSSについては、出力にスクリプトが挿入可能でした。
Hさん:ブラウザから送られる各パラメタの値に対し、<、>、"、'、&などの特定の記号をそれぞれ<、>、"、'、&などに変換するエスケープ処理を出力時に行っていましたが、別のミスがありました。
Q主任:項番3の“キャッシュへのコンテンツ残留”については、Cache-Controlヘッダでの制限が不適切なことが図9から確認できます。その結果、姓、名、メールアドレスなどの情報がブラウザのキャッシュに残るような状況でした。
Hさん:この問題については意識していませんでした。
Q主任:今回検出された3種類の脆弱性を、すぐに修正してください。
Hさん:分かりました。
〔γサイトの診断結果と検出された脆弱性への対応〕
γサイトでは脆弱性が一つ検出された。γサイトで検出された脆弱性を表5に示す。

XSSの脆弱性は、新規会員登録機能において検出された。新規会員登録機能の画面遷移を、表6に示す。
表6の項番5の“新規会員本登録(2)”画面の出力で二つのパラメタにスクリプト及びタグが挿入可能であると指摘された。
この脆弱性について、Q主任がγサイトのサイト担当者に確認したところ、“開発業者にチェックシートの利用を要求していたが、プログラマがそれぞれの解釈でコーディングしたため、エスケープ処理に一部漏れがあるプログラムが作られてしまったという話だった。また、リリース前に品質チームが、新規会員本登録の画面も含む全ての画面の診断を自動診断ツールで行ったようだが、脆弱性は指摘されなかった”とのことであった。Q主任は、すぐに脆弱性の修正をサイト担当者に依頼した。後日、R社に、J社通販サイトについて再度診断を依頼し、指摘された脆弱性が全て修正されたことを確認した。
〔サイトのセキュリティ向上〕
Q主任は、今回の診断結果を参考に、チェックシート、システム開発手法、及び既存サイトの診断について改善すべき事項を検討した。
これらの対応によって、J社はサイトのセキュリティをより向上させた。
設問1:〔αサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(5)に答えよ。
問題文を見る(1)本文中の下線①の修正プログラムの適用に際して考慮すべきリスクは何か。20字以内で述べよ。
模範解答
サーバが正常に動作しなくなるリスク
解説
解答の論理構成
- 原文では、DoS脆弱性を解消するためにミドルウェアの「修正プログラムを適用」する必要があるが、サイト担当者は “①修正プログラムの適用にはリスクがある” と発言しています。
- この文脈で言うリスクとは、修正プログラムを導入した結果、既存システムに想定外の影響が生じ、Webサーバや関連サービスが停止・不安定化する可能性を指します。
- したがって設問が求める「リスク」は、パッチ適用後にサービスが正しく提供できなくなる事態であり、解答例「サーバが正常に動作しなくなるリスク」となります。
誤りやすいポイント
- 攻撃を受けるリスクとパッチ適用リスクを混同し、DoS攻撃自体を答えてしまう。
- リスクを「互換性の問題」など抽象的に述べ、サーバ停止の可能性を明示しない。
- 「リスク=業務停止」と誤解し、“業務が停止する” とだけ書き技術的視点を欠く。
FAQ
Q: なぜパッチ適用でサーバが動かなくなることがあるのですか?
A: 新旧バージョンで設定ファイルやAPI仕様が変わり、既存アプリが想定外の挙動をする、あるいは依存モジュールとの整合が取れなくなる場合があるためです。
A: 新旧バージョンで設定ファイルやAPI仕様が変わり、既存アプリが想定外の挙動をする、あるいは依存モジュールとの整合が取れなくなる場合があるためです。
Q: パッチ適用前に推奨される具体的な作業は?
A: テスト環境での動作確認、バックアップ取得、ロールバック手順の整備などが一般的です。
A: テスト環境での動作確認、バックアップ取得、ロールバック手順の整備などが一般的です。
Q: 暫定的な対策として設定変更を行う場合の留意点は?
A: 本質対策ではないため恒久的な安全は得られません。早期にパッチ適用を完了し、設定変更を元に戻せるよう記録を残すことが重要です。
A: 本質対策ではないため恒久的な安全は得られません。早期にパッチ適用を完了し、設定変更を元に戻せるよう記録を残すことが重要です。
関連キーワード: パッチ管理、可用性、ロールバック、テスト環境、依存関係
設問1:〔αサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(5)に答えよ。
問題文を見る(2)(1)のリスクに対する対策として、検知及び回復の観点から修正プログラム適用前に実施しておくべき作業は何か。それぞれ30字以内で述べよ。
模範解答
検知:サーバ停止などの異常を検知するための監視体制の整備
回復:サーバを元の状態に戻すための必要なファイルのバックアップ
解説
解答の論理構成
-
原因の整理
- 表3項番1では「サービスを提供できなくなる可能性がある」DoS脆弱性が指摘されています。
- さらに、サイト担当者は“①修正プログラムの適用にはリスクがある”と発言しています。
-
リスクの中身
- 修正プログラム適用時にサービス停止・機能不全が起こると、外部利用者に影響が及びます。
- したがって、適用後に“止まったかどうか”を即時に気付ける仕組み(検知)と、“元に戻す”ための準備(回復)が必要です。
-
検知に必要な作業
- サービス停止などの異常をいち早く把握するには、リソースやプロセス死活・応答時間を監視し、通知できる体制が不可欠です。
- これにより、適用作業による想定外の停止を即時発見できます。
-
回復に必要な作業
- 適用が失敗した場合、迅速にロールバックするにはファイルや設定を事前に退避しておくことが必須です。
- “ミドルウェアに修正プログラムを適用していなかった”現状から安全に戻すには、バックアップが最も確実な回復策です。
-
よって、
- 検知:サーバ停止を把握できる監視体制の整備
- 回復:サーバを元の状態へ戻すためのバックアップ
が解答となります。
誤りやすいポイント
- “検知”をログ取得と混同し、監視体制ではなく“アクセスログの出力設定”だけを書く。
- “回復”を再起動と短絡的に捉え、バックアップ準備を忘れる。
- パッチ適用の前後手順と、DoS脆弱性そのものの回避策(WAF設定など)を混同して記述する。
FAQ
Q: 監視体制には具体的に何を含めるべきですか?
A: 死活監視、CPU・メモリなどリソース監視、HTTP応答監視、アラート通知経路(メール・SMS等)を組み合わせるのが一般的です。
A: 死活監視、CPU・メモリなどリソース監視、HTTP応答監視、アラート通知経路(メール・SMS等)を組み合わせるのが一般的です。
Q: バックアップはどの範囲を取得すれば良いですか?
A: ミドルウェアのバイナリ・設定ファイル、サイトの静的コンテンツ、動的ファイル、構成管理情報を丸ごと取得し、リストア手順を合わせて文書化しておくと安全です。
A: ミドルウェアのバイナリ・設定ファイル、サイトの静的コンテンツ、動的ファイル、構成管理情報を丸ごと取得し、リストア手順を合わせて文書化しておくと安全です。
Q: パッチ適用のテスト環境を用意すれば監視やバックアップは不要ですか?
A: テスト環境での検証は推奨ですが、本番固有の設定差異やデータ量の違いで不具合が出る場合があります。本番環境での監視とバックアップは依然として必要です。
A: テスト環境での検証は推奨ですが、本番固有の設定差異やデータ量の違いで不具合が出る場合があります。本番環境での監視とバックアップは依然として必要です。
関連キーワード: 監視体制、バックアップ、ロールバック、パッチ適用、サービス可用性
設問1:〔αサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(5)に答えよ。
問題文を見る(3)本文中のaに入れる攻撃手法の名称を15字以内で答えよ。
模範解答
a:ブルートフォース攻撃
解説
解答の論理構成
- 【問題文】では
“IDを固定して、考えられる全てのパスワードを試行する、aが行われる可能性がある。”
と記載されています。 - “IDを固定”し“考えられる全てのパスワードを試行”する行為は、パスワード候補を総当たりで入力して突破を狙う攻撃です。
- この攻撃は一般に「ブルートフォース攻撃」と呼ばれます。
- したがって、a に入る語句は
- ブルートフォース攻撃
となります。
誤りやすいポイント
- 「辞書攻撃」と混同しやすい
辞書攻撃は頻出単語リストを使う方法であり、“考えられる全て”という表現には合致しません。 - 「パスワードリスト攻撃」との取り違え
既に漏えいしたID/パスワードの組合せを試す手法で、本問の説明とは異なります。 - “DoS脆弱性”や“総当たりDoS”と誤解
文脈はIDとパスワードの試行であり、サービス妨害ではなく認証突破が主目的です。
FAQ
Q: ブルートフォース攻撃と辞書攻撃はどう区別すればいいですか?
A: ブルートフォース攻撃は文字種・桁数を総当たりで試す方式、辞書攻撃はあらかじめ用意した単語集を試す方式です。問題文の“全てのパスワードを試行”という記述が総当たりを示しています。
A: ブルートフォース攻撃は文字種・桁数を総当たりで試す方式、辞書攻撃はあらかじめ用意した単語集を試す方式です。問題文の“全てのパスワードを試行”という記述が総当たりを示しています。
Q: 本問でSSHと公開鍵認証を導入した理由は?
A: 公開鍵認証では秘密鍵がなければログインできず、パスワード入力の試行自体が成立しません。そのため“Webサーバへのaを成功させることは困難”になります。
A: 公開鍵認証では秘密鍵がなければログインできず、パスワード入力の試行自体が成立しません。そのため“Webサーバへのaを成功させることは困難”になります。
Q: ブルートフォース攻撃への追加対策には何がありますか?
A: アカウントロック、CAPTCHA、アクセス元IP制限、多要素認証などで試行回数を抑止・制限する方法があります。
A: アカウントロック、CAPTCHA、アクセス元IP制限、多要素認証などで試行回数を抑止・制限する方法があります。
関連キーワード: 認証、総当たり攻撃、公開鍵認証、パスワード、アクセス制御
設問1:〔αサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(5)に答えよ。
問題文を見る(4)本文中のbに入れる適切な字句を5字以内で答えよ。
模範解答
b:秘密鍵
解説
解答の論理構成
-
問題文の該当箇所を確認
– 「SSH利用時には公開鍵認証でログインするので、bがなければ、Webサーバへのaを成功させることは困難である。」
ここで鍵となるのは “公開鍵認証” というキーワードです。 -
公開鍵認証の仕組みを整理
– クライアント側は “秘密鍵” を保持し、サーバ側に “公開鍵” を登録します。
– 認証時、サーバは公開鍵で署名検証を行うため、攻撃者がログインを試みても秘密鍵がなければ認証に失敗します。
– よって、公開鍵認証において “攻撃を防ぐ要素” は 秘密鍵 です。 -
文脈との整合
– 直前で説明されている攻撃 “a” は「IDを固定して、考えられる全てのパスワードを試行する」すなわち総当たり攻撃(ブルートフォース)。
– 公開鍵認証ではパスワードを使わないため、攻撃者が“秘密鍵”を持たない限り総当たり攻撃は成立しません。 -
結論
– したがって “b” に入る語は「秘密鍵」となります。
誤りやすいポイント
- パスワードを入力しない=「パスワード」が不要と短絡し、b に「パスワード」と書いてしまうケース。公開鍵認証の本質を取り違えています。
- 公開鍵と秘密鍵を混同し、「公開鍵」と記入してしまうケース。サーバに登録して誰でも取得できる公開鍵では、攻撃防御の役割を果たしません。
- SSH=暗号化とだけ理解し、鍵ペアの必要性を意識しないまま回答を決めてしまうケース。
FAQ
Q: 公開鍵認証ではパスフレーズも設定できますが、b はパスフレーズではないのですか?
A: パスフレーズは秘密鍵の保護手段であり、認証そのものに必要なのは“秘密鍵”です。問題文は秘密鍵がなければ攻撃が成立しない点に着目しています。
A: パスフレーズは秘密鍵の保護手段であり、認証そのものに必要なのは“秘密鍵”です。問題文は秘密鍵がなければ攻撃が成立しない点に着目しています。
Q: 公開鍵が漏えいすると危険ではないのですか?
A: 公開鍵は漏えいしても直ちに危険とはなりません。攻撃者が署名を生成するには対応する秘密鍵が不可欠だからです。
A: 公開鍵は漏えいしても直ちに危険とはなりません。攻撃者が署名を生成するには対応する秘密鍵が不可欠だからです。
Q: パスワード総当たり攻撃を根本的に防ぐには公開鍵認証しか方法はありませんか?
A: 多要素認証やアカウントロックなど複数の手段がありますが、本問では「SSH+公開鍵認証」による防御を採用しています。
A: 多要素認証やアカウントロックなど複数の手段がありますが、本問では「SSH+公開鍵認証」による防御を採用しています。
関連キーワード: 公開鍵認証、秘密鍵、SSH, 総当たり攻撃、認証
設問1:〔αサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(5)に答えよ。
問題文を見る(5)本文中の下線②は、SSHの何と呼ばれる機能を示しているか。15字以内で答えよ。
模範解答
ポートフォワーディング
解説
解答の論理構成
- 【問題文】では、管理者用ログイン画面を直接インターネット公開するのではなく、
“インターネットから管理者用ログイン画面にアクセスする場合は、SSHを利用することにした”
とし、さらに
“②サイト担当者のPCの任意の通信ポートとミドルウェアの管理画面が動作している通信ポートとの間を暗号通信させる”
と記述しています。 - SSHには、ローカル側で開けた任意ポートとリモート側ポートを暗号化トンネルで接続し、あたかもローカルにサービスがあるかのように利用できる機能があります。
- この機能を使えば、管理画面のポートを外部に公開せずに済み、トンネル経由(公開鍵認証)でのみアクセスが可能になるため、【問題文】中の“IDを固定して…全てのパスワードを試行する”ブルートフォース攻撃を防止できます。
- 以上より、下線②が示すSSHの機能は「ポートフォワーディング」と判断できます。
誤りやすいポイント
- 「公開鍵認証」と勘違いする
→ 下線②は“通信ポート間を暗号通信させる”仕組みであり、認証方式そのものではありません。 - 「トンネリング」「SSHトンネル」など別名で書く
→ 用語として最も一般的で、問題集でも採用されやすい表記は「ポートフォワーディング」です。 - VPNと混同する
→ VPNはネットワーク層全体を延伸するのに対し、ポートフォワーディングは指定ポートのTCP通信だけを転送します。
FAQ
Q: ローカルとリモートどちらのポートでも構成できるのですか?
A: はい。SSHではローカルポートフォワーディングとリモートポートフォワーディングの両方があり、今回はローカル側で任意ポートを開けるローカルポートフォワーディングに相当します。
A: はい。SSHではローカルポートフォワーディングとリモートポートフォワーディングの両方があり、今回はローカル側で任意ポートを開けるローカルポートフォワーディングに相当します。
Q: “ダイナミックポートフォワーディング”とは違うのですか?
A: ダイナミックはSOCKSプロキシとして動作する応用形です。問題文は特定ポートを一対一で中継する基本形のポートフォワーディングを指しています。
A: ダイナミックはSOCKSプロキシとして動作する応用形です。問題文は特定ポートを一対一で中継する基本形のポートフォワーディングを指しています。
Q: なぜHTTPSで公開せずSSHトンネルを選んだのですか?
A: 管理画面のURLやポート番号自体を外部に露出させないことで、ブルートフォース攻撃や脆弱性スキャンを受けるリスクを最小化できるからです。
A: 管理画面のURLやポート番号自体を外部に露出させないことで、ブルートフォース攻撃や脆弱性スキャンを受けるリスクを最小化できるからです。
関連キーワード: SSH, ポートフォワーディング、トンネリング、暗号化通信、ブルートフォース
設問2:〔βサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
リクエストのURLに含まれていたセッションIDを、レスポンスでクッキーとして発行していた。
解説
解答の論理構成
- 図4のリクエストには、URLパスにセッションIDが埋め込まれている。
引用:図4行1「GET /brandbeta/login;jsessionid=65H3809KCGO30CPGCDHJ4PJ369H62OP7 HTTP/1.1」 - 図5のレスポンスでは、同一値のセッションIDをSet-Cookieヘッダでブラウザへ返している。
引用:図5行4「Set-Cookie: JSESSIONID=65H3809KCGO30CPGCDHJ4PJ369H62OP7; Domain=www.j-sha.jp; Path=/brandbeta/; Secure」 - 利用者が指定したセッションIDをサーバがそのまま正式なIDとして発行する動作は、攻撃者が任意のIDを固定して利用者に使わせる“セッションIDの固定化”を引き起こす。
- したがって「リクエストのURLに含まれていたセッションIDを、レスポンスでクッキーとして発行していた」という指摘が妥当である。
誤りやすいポイント
- Set-Cookieが返ること自体は正常動作と誤解し、リクエスト由来のIDかどうかを確認し忘れる。
- URLに付与された ;jsessionid= を「トラッキング用」などと勘違いし、脆弱性と結び付けられない。
- “セッション固定化”と“セッションハイジャック”を混同し、原因と結果を逆に説明してしまう。
FAQ
Q: URLに ;jsessionid= が付いているのは一般的では?
A: URLへの付与自体は代替手段として存在しますが、クライアント提供のIDをサーバがそのまま正式採用する実装は問題です。
A: URLへの付与自体は代替手段として存在しますが、クライアント提供のIDをサーバがそのまま正式採用する実装は問題です。
Q: なぜ同じIDをSet-Cookieで返すと危険なのですか?
A: 攻撃者が事前に用意したIDを利用者に埋め込ませれば、そのIDが正規セッションとして確立され、以後攻撃者が自由に利用できるからです。
A: 攻撃者が事前に用意したIDを利用者に埋め込ませれば、そのIDが正規セッションとして確立され、以後攻撃者が自由に利用できるからです。
Q: 対策はクッキーのみ使用に変更すれば良いですか?
A: クッキー送出前にサーバ側で新しいランダムIDを再生成し、URLから渡されたIDを無視または失効させることが重要です。
A: クッキー送出前にサーバ側で新しいランダムIDを再生成し、URLから渡されたIDを無視または失効させることが重要です。
関連キーワード: セッションID固定化、URLパラメータ、Set-Cookie, 認証セキュリティ、Web脆弱性
設問2:〔βサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(3)に答えよ。
問題文を見る(2)Y氏がXSSの脆弱性があるかもしれないと判断したのは、図9の何行目か。行番号で答えよ。また、その理由を30字以内で述べよ。
模範解答
行番号:74
理由:value値が二重引用符で囲まれていなかったから
解説
解答の論理構成
- 図9の入力フォーム部分を確認すると、
行46に
“<td align="center"><input type="text" name="name1" value="鈴木"></td>”
とあり、type・name・valueがすべて 二重引用符付きで囲まれています。 - これに対し行74は
“<td align="center"><input type=text name=mbmail value=taro@mb.xx.yy></td>”
と、type・name・valueの各属性値が引用符で囲まれていません。 - 属性値が引用符で囲まれていない場合、半角空白で区切って任意のJavaScriptイベント属性(例:onmouseover)を追加でき、a=“クロスサイトスクリプティング”で示される攻撃が成立しやすくなります。
- したがって、Y氏がXSSの可能性を直感したのは 行番号「74」 であり、理由は 「value値が二重引用符で囲まれていなかったから」 となります。
誤りやすいポイント
- 行50にも空のvalue="" があり紛らわしいが、引用符は付いているためXSSとは直接関係しない。
- 「空欄だから危険」と誤解し、行50を選んでしまうケースが多い。重要なのは 引用符の有無。
- Cache-Control: privateやautocomplete="off" などヘッダ・属性ばかりに目が行き、HTML属性の書式を見落とすミス。
FAQ
Q: なぜ引用符がないとXSSにつながるのですか?
A: 半角空白を挟んでonmouseover=alert(…); などのイベント属性を追加でき、スクリプトが実行されるためです。
A: 半角空白を挟んでonmouseover=alert(…); などのイベント属性を追加でき、スクリプトが実行されるためです。
Q: 行46と行74の違いは何を示していますか?
A: 行46は正しく属性値を " " で囲み、エスケープも完備していますが、行74は囲みがなく属性境界が不明確で、スクリプトを注入しやすい状態です。
A: 行46は正しく属性値を " " で囲み、エスケープも完備していますが、行74は囲みがなく属性境界が不明確で、スクリプトを注入しやすい状態です。
Q: value属性だけを引用符で囲めば安全ですか?
A: 原則として すべての属性値 を引用符で囲み、さらにサーバ側でエスケープ/入力検証を行う必要があります。
A: 原則として すべての属性値 を引用符で囲み、さらにサーバ側でエスケープ/入力検証を行う必要があります。
関連キーワード: XSS, HTML属性、エスケープ処理、クッキー、クロスサイトスクリプティング
設問2:〔βサイトの診断結果と検出された脆弱性への対応〕について、(1)〜(3)に答えよ。
問題文を見る(3)ブラウザのキャッシュにコンテンツが残留しないようにするためには、どのCache-Controlヘッダを出力すればよいか。適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア Cache-Control:max-age=10800
イ Cache-Control:no-store
ウ Cache-Control:no-transform
エ Cache-Control:public
模範解答
イ
解説
解答の論理構成
- βサイトで検出された脆弱性の一つは、表4項番3の“キャッシュへのコンテンツ残留”です。
- 原因は、図9行4に示されている現在のヘッダが“Cache-Control: private”となっており、 “Cache-Controlヘッダでの制限が不適切なことが図9から確認できます”と問題文が指摘している点にあります。
- “キャッシュに一切残さない”ことを明示する最も厳格な指示は“Cache-Control: no-store”です。HTTP/1.1仕様においてno-storeは「レスポンスを含むどの情報も、いかなるキャッシュにも保持・再利用させない」ことをクライアントと中継キャッシュに命令します。
- 他の選択肢の効果
ア “max-age=10800” … 3時間は保持可。残留の根本対策にならない。
ウ “no-transform” … 圧縮や画像変換の禁止であり保存可否とは無関係。
エ “public” … 共有キャッシュも保存可にする逆効果。 - よって、ブラウザのキャッシュに一切残させないために出力すべきヘッダは“Cache-Control: no-store”であり、解答群の記号は「イ」となります。
誤りやすいポイント
- no-cacheとno-storeの混同
no-cacheは再利用前の再検証を要求するだけで保存自体を禁止しません。完全排除はno-storeです。 - privateを「安全」と誤解
private は共有キャッシュを禁止するだけでローカルブラウザには保存を許可します。 - 有効期限を短くすれば良いと考える誤認
max-ageで0や短時間にしても、その期間中は残留します。共有PCでは閲覧直後に覗かれる危険が消えません。
FAQ
Q: Pragma: no-cacheを付ければ十分ですか?
A: HTTP/1.0との後方互換としては有効ですが、HTTP/1.1ではCache-Control: no-storeを必ず併用する必要があります。
A: HTTP/1.0との後方互換としては有効ですが、HTTP/1.1ではCache-Control: no-storeを必ず併用する必要があります。
Q: HTMLメタタグ <meta http-equiv="Pragma" content="no-cache"> でも代替できますか?
A: ブラウザ依存で無視される場合があり、HTTPヘッダでCache-Control: no-storeを送る方が確実です。
A: ブラウザ依存で無視される場合があり、HTTPヘッダでCache-Control: no-storeを送る方が確実です。
Q: ログイン後のページだけno-storeにすればよいですか?
A: 個人情報を含む全てのレスポンスが対象です。エラーページや確認画面など、個人データが出力される箇所を網羅してください。
A: 個人情報を含む全てのレスポンスが対象です。エラーページや確認画面など、個人データが出力される箇所を網羅してください。
関連キーワード: HTTP, Cache-Control, キャッシュ制御、Webセキュリティ、レスポンスヘッダ
設問3:〔γサイトの診断結果と検出された脆弱性への対応〕について、(1)、(2)に答えよ。
問題文を見る(1)XSSの脆弱性が存在していたと考えられるパラメタを、表6中の字句を用いて二つ答えよ。
模範解答
①:ID
②:mail
解説
解答の論理構成
- XSSは「入力値がそのままレスポンスに埋め込まれる」ことが本質です。問題文には
“表6の項番5の“新規会員本登録(2)”画面の出力で二つのパラメタにスクリプト及びタグが挿入可能”
とあります。 - どのパラメタかを探るため、挿入元(リクエスト)と表示先(レスポンス)を確認します。
- 項番2のPOSTデータ:
“action=input&ID=taro&mail=taro@xx.yy” - 項番5の画面出力:
“ユーザID taro”
“メールアドレスtaro@xx.yy”
- 項番2のPOSTデータ:
- これらはどちらもユーザ入力値がそのまま表示されています。もし入力を
“a onmouseover=alert(document.cookie);”
に変えても画面に反映されうるため、XSSの対象となります。 - よって、挿入可能だったパラメタはPOSTデータに現れる
“ID” と “mail” です。
誤りやすいポイント
- “ユーザID” と画面に書かれているのでパラメタ名を “user” と思い込む。実際のPOSTデータでは “ID” が使われています。
- トークン “c_token” や “c_token2” はサーバ側発行値なのでXSSとは無関係です。
- “name” や “address” なども入力値ですが、XSSが報告されたのは項番5の二つだけという記述を読み落とさないようにしましょう。
FAQ
Q: 画面に表示される値ならすべてXSSの脆弱性になりますか?
A: いいえ。出力前に “<、>、&” などを正しくエスケープしていれば脆弱性にはなりません。本問ではその処理が漏れていたパラメタが “ID” と “mail” です。
A: いいえ。出力前に “<、>、&” などを正しくエスケープしていれば脆弱性にはなりません。本問ではその処理が漏れていたパラメタが “ID” と “mail” です。
Q: “ID” と “ユーザID” の表記ゆれが気になります。どちらで答えるべきですか?
A: 設問は「表6中の字句を用いて」と指示しています。POSTデータに記載されている “ID” と “mail” が該当します。
A: 設問は「表6中の字句を用いて」と指示しています。POSTデータに記載されている “ID” と “mail” が該当します。
Q: 本登録(2) 画面でのみXSSが指摘されたのはなぜですか?
A: 仮登録(2) 画面ではエスケープ処理が入っていたか、あるいは診断で試した結果問題が出なかったと推測されます。画面ごとに実装が異なる典型的なバグです。
A: 仮登録(2) 画面ではエスケープ処理が入っていたか、あるいは診断で試した結果問題が出なかったと推測されます。画面ごとに実装が異なる典型的なバグです。
関連キーワード: XSS, 反射型攻撃、入力検証、エスケープ処理、パラメータ
設問3:〔γサイトの診断結果と検出された脆弱性への対応〕について、(1)、(2)に答えよ。
問題文を見る(2)リリース前の診断でXSSの脆弱性を検出できなかったのは、自動診断ツールの機能に限界があったからである。その限界を40字以内で具体的に述べよ。
模範解答
パラメタについては入力した値が次画面で処理される場合にだけ診断可能である点
解説
解答の導き方
-
設問は「自動診断ツールの機能の限界」を問うています。まず、診断ツールの仕様とγサイトの画面遷移を対応させて考えます。
-
図3に「診断対象画面に存在する全てのパラメタのうち、入力した値が次画面で取り扱われるものだけ診断可能」と明記されています。これは自動診断ツールが、ある画面で得られた入力値が「次画面」に反映されると判定できる場合に限ってそのパラメタを操作・検査する、という意味です。また図3は診断可能画面について「a) 巡回できる画面b) 同じ処理が繰返しできる画面」を満たす必要があるとしています。つまり「自動で到達(巡回)でき、かつ再現して試行できる画面」だけが完全に診断対象になります。
-
表6の画面遷移を確認すると、項番3に「本登録に必要なURL(下記のURL)が記載された電子メールが送られる」、項番4に「電子メール中に記載された本登録に必要なURL(項番3の操作結果中のURL)にアクセスする」とあります。該当のXSSは表6の項番5の「新規会員本登録(2)画面の出力で二つのパラメタにスクリプト及びタグが挿入可能」で見つかっていますが、その画面へは電子メール中の個別URL(キー付き)で遷移する必要があり、自動探査の通常の巡回で発見・再現できない構造になっています。さらにメール中のURLはワンタイム/非公開のトークンを含む可能性が高く「同じ処理が繰返しできる画面」の条件も満たさないことが多いです。
-
以上から、図3の仕様により自動診断ツールは当該パラメタを「次画面で取り扱われるもの」と認識できず、かつその画面が自動巡回・再現可能でなかったためにXSSを検出できなかったと結論できます。要点を一文で示すと、
「パラメタについては入力した値が次画面で処理される場合にだけ診断可能である点」
誤りやすいポイント
- 「同じ画面で反映される/次画面で反映される」の区別を曖昧にする。多段フォームでは「確認画面」が別URLか同一URLかで自動診断の可否が変わる点に注意すること。
- 自動診断ツールがメール内のリンクやワンタイムキーを自動取得できると誤解する。メール遷移は自動巡回の対象外になりやすいです。
- 「全画面を診断した」という報告を「全てのフロー(ワークフロー)」を診たと取り違える。ページ単位の走査と、外部トリガを含むフローの診断は別です。
- ツール任せにして手動探査や設計レビューを省くと、今回のような検出漏れが起こりやすいです。
FAQ
Q: 自動診断で見つからない画面はどうやって検査すればよいですか?
A: 図3にあるように「手動探査」で特定のURLを診断対象として設定する、またはテスト環境でメール送信をキャプチャしてそのURLを手動で自動診断ツールに渡す、さらに手動によるペネトレーションテストやソースコードレビューを行うとよいです。
A: 図3にあるように「手動探査」で特定のURLを診断対象として設定する、またはテスト環境でメール送信をキャプチャしてそのURLを手動で自動診断ツールに渡す、さらに手動によるペネトレーションテストやソースコードレビューを行うとよいです。
Q: なぜワンタイムのキーやメール遷移が自動診断の障害になるのですか?
A: 自動診断は「巡回できる画面」であり「同じ処理が繰返しできる画面」を前提に動作します。メール遷移やワンタイムキーは発見不能・再現困難であり、ツールがパラメタの反映を確認できないため診断対象から漏れます。
A: 自動診断は「巡回できる画面」であり「同じ処理が繰返しできる画面」を前提に動作します。メール遷移やワンタイムキーは発見不能・再現困難であり、ツールがパラメタの反映を確認できないため診断対象から漏れます。
Q: 開発段階で自動診断のカバレッジを上げる具体策は?
A: テスト環境でメール送信を無効化し代わりに確認用URLをログに出す、あるいはツールの手動探査機能を使ってメールURLを登録する、さらに多段フォームを想定した手動テストやコードの出力エスケープの確認を組み合わせることです。
A: テスト環境でメール送信を無効化し代わりに確認用URLをログに出す、あるいはツールの手動探査機能を使ってメールURLを登録する、さらに多段フォームを想定した手動テストやコードの出力エスケープの確認を組み合わせることです。
関連キーワード: 自動探査(クローリング)、手動探査、クロスサイトスクリプティング(XSS)、ワンタイムトークン(メール遷移)、確認画面(多段フォーム)
設問4:サイトのセキュリティ向上について、(1)、(2)に答えよ。
問題文を見る(1)表3の項番1の脆弱性が、今回のR社の診断で発見されるまで残存していたのは、新たに発見される脆弱性への対策の遅れが原因であった。今後、このような遅れを防ぐためにセキュリティ対策の運用をどのように改善すべきか。改善点を二つ挙げ、それぞれ50字以内で述べよ。
模範解答
①:システムで利用しているOSやミドルウェアの脆弱性情報を定期的に収集し、必要な対応を行う。
②:自動診断ツールを最新のものに更新し、定期的に診断を実施し、必要な対応を行う。
解説
解答の論理構成
- 表3の項番1は“サービス妨害の脆弱性”であり、「数か月前に公表された脆弱性であった。J社では脆弱性情報を入手しておらず、ミドルウェアに修正プログラムを適用していなかった」と明記されています。
➔ 公開情報を継続的に収集・対応しなかった点が残存要因です。 - さらにJ社は「3年前から…自動診断ツールを用いて…脆弱性の有無を確認」していますが、これは“サイト開設時及び再構築時”に限られ、ツール自体の更新頻度も示されていません。
➔ 運用後の定期診断やツールのアップデートが不足していると判断できます。 - 以上より、①脆弱性情報の定期収集とパッチ適用、②診断ツールの最新化と定期診断――の二点が改善策として導かれます。
誤りやすいポイント
- 「チェックシートがあるから十分」と思い込み、外部公開後の運用監視を忘れる。
- 自動診断ツール=万能と誤解し、シグネチャ更新やバージョンアップを怠る。
- パッチ適用を“開発部門の責任”と決め付け、運用部門での継続的管理を設けない。
- 新規構築時のみ診断を実施し、“運用フェーズの脆弱性”を想定しない。
FAQ
Q: 公開済みシステムの脆弱性情報はどこから得ればよいですか?
A: ベンダーのアドバイザリ、JVN、NVDなど公式情報源を定期巡回し、RSSやメール通知を活用して自動取得します。
A: ベンダーのアドバイザリ、JVN、NVDなど公式情報源を定期巡回し、RSSやメール通知を活用して自動取得します。
Q: ツール更新だけで十分ですか?
A: いいえ。最新ツールであっても設定ミスや論理的欠陥は検知しきれません。定期診断に加え、手動レビューやペネトレーションテストも並行しましょう。
A: いいえ。最新ツールであっても設定ミスや論理的欠陥は検知しきれません。定期診断に加え、手動レビューやペネトレーションテストも並行しましょう。
Q: パッチ適用に伴う動作リスクが心配です。
A: 検証用環境で適用‐動作確認→本番反映というステージングを確立し、適用計画とロールバック手順を文書化してください。
A: 検証用環境で適用‐動作確認→本番反映というステージングを確立し、適用計画とロールバック手順を文書化してください。
関連キーワード: 脆弱性情報収集、パッチ管理、定期セキュリティ診断、ツールアップデート、運用プロセス
設問4:サイトのセキュリティ向上について、(1)、(2)に答えよ。
問題文を見る(2)γサイトでチェックシートを利用したにもかかわらず、エスケープ処理に漏れがあった。製造工程をどのように改善すればよいか、35字以内で述べよ。
模範解答
チェックシートに基づきコーディング規約を整備する。
解説
解答の論理構成
-
原因の特定
- 【問題文】には、γサイトで“開発業者にチェックシートの利用を要求していたが、ブログラマがそれぞれの解釈でコーデイングしたため、エスケープ処理に一部漏れがあるプログラムが作られてしまった”とあります。
- つまりチェックシートは配布されていたものの、“それぞれの解釈”という属人的運用が品質低下の主因です。
-
是正方針の抽出
- 属人的な解釈を排除し、一律・具体的なルールで実装させる必要があります。
- そこで“チェックシート”の要求事項を平易かつ具体的にプログラマへ落とし込む手段として“コーディング規約”が最適です。
-
解答の導出
- 上記より、製造工程では「チェックシート → コーディング規約 → 実装」へと要求をブレークダウンさせる仕組みが不可欠となります。
- よって「チェックシートに基づきコーディング規約を整備する。」が適切な改善策となります。
誤りやすいポイント
- 「テスト工程で検出できなかったのが問題」と短絡し、製造工程の課題を見落とす。
- コーディング規約を作るだけでなく“チェックシートとの対応付け”が必要である点を忘れる。
- XSS対策=入力エスケープと誤解し、出力時エスケープの重要性に触れない。
FAQ
Q: チェックシートを詳細化すれば規約は不要では?
A: チェックシートは“何を守るか”の一覧であり、“どう書くか”までは示しません。実装レベルの統一には具体的なコーディング規約が必須です。
A: チェックシートは“何を守るか”の一覧であり、“どう書くか”までは示しません。実装レベルの統一には具体的なコーディング規約が必須です。
Q: コーディング規約だけで脆弱性は完全に防げますか?
A: 規約は予防策ですが、静的解析やコードレビューなど“検出”の仕組みと併用することで効果が高まります。
A: 規約は予防策ですが、静的解析やコードレビューなど“検出”の仕組みと併用することで効果が高まります。
Q: 既存システムにも規約を適用すべき?
A: はい。新旧問わず同一基準でソースを保守することで、修正時に再発を防止できます。
A: はい。新旧問わず同一基準でソースを保守することで、修正時に再発を防止できます。
関連キーワード: XSS, エスケープ処理、コーディング規約、チェックシート、製造工程








