情報処理安全確保支援士 2018年 春期 午後2 問02
Webサイトのセキュリティに関する次の記述を読んで、設問1~6に答えよ。
A社は、従業員数1,200名のマスメディア関連会社である。A社では、提供するサービスごとにWebサイトを用意し、インターネット上に公開している。Webサイトには、情報提供サイトやショッピングサイトなど様々なものがある。Webサイトでは、Webアプリケーションソフトウェア(以下、Webアプリという)が動作し、その設計、実装、テスト(以下、この3工程を開発という)及び運用は、Webサイトごとに情報システム子会社B社又は外部の業者に委託されている。多くのWebサイトでは、キャンペーンなどのたびに、開発とリリースを繰り返している。
〔現状のセキュリティ施策〕
A社では、脆弱性を作り込まないようにするために、Webサイトのライフサイクルの五つの工程(要件定義、設計、実装、テスト、運用)に関するセキュリティガイドライン(以下、Webセキュリティガイドという)を整備している。現行のWebセキュリティガイド第1版を図1に示す。

Webセキュリティガイドは、開発及び運用を委託している外部の業者にも順守を義務付けている。
〔Webサイトの運用について〕
A社のカスタマサポートサービス提供用のWebサイトXは、A社のデータセンタXに設置されている。WebサイトXは、B社に開発と運用を委託している。データセンタXとB社本社のシステム構成を図2に示す。

WebサーバX上では、WebアプリXが稼働している。WebアプリXは、Webアプリケーションフレームワーク(以下、WFという)の一つであるWF-Kを使用して開発されている。
WebサイトXとシステム構成が全く同じWebサイトYを、別のデータセンタYに災害対策用として設置している。WebサイトX稼働時にはWebサイトYは、インターネットに公開しておらず、ホットスタンバイの状態で運用している。
WebサイトXとWebサイトYのソフトウェアの脆弱性修正プログラム(以下、パッチという)は、3か月ごとの定期メンテナンス日にB社運用チームのCさんが適用している。Cさんは、新しいパッチが公開されているかを定期メンテナンス日の前に確認し、もしあれば、まずWebサイトYにパッチを適用している。WebサイトYでの稼働に問題がなければ、WebサイトXにもパッチを適用している。コンテンツも、まずWebサイトYを更新し、問題がなければ、WebサイトXを更新している。パッチ適用とコンテンツ更新は、B社PC-LAN上のCさんのPCから行っている。
なお、B社では、全従業員にPCが1台ずつ貸与されており、そのPCでWebサイトを閲覧して情報を収集したり、電子メール(以下、メールという)を送受信したりしている。
〔セキュリティインシデントの発生〕
ある日、WebサイトXの利用者から、WebサイトXのダウンロードページでファイルをダウンロードしたところ、マルウェア対策ソフトが警告を表示したという連絡があった。Cさんがダウンロードページを確認したところ、あるダウンロードファイルへのリンクが外部のURLに改ざんされていた。Cさんは運用チームのリーダであるDさんに報告し、WebサイトYに切り替えるべきかを相談した。Dさんは、切り替えるとWebサイトYも改ざんされてしまうことを懸念して、WebサイトYには切り替えないようCさんに伝えた。代わりに、DNSサーバの設定を変更して、メンテナンス中であることを表示するサーバに切り替えるようCさんに指示した。Dさんは、すぐにA社に連絡し、ファイルへのリンクが改ざんされたと伝えた。その後、A社のWebサイトX及びWebサイトYの担当部署のEさんがセキュリティ専門業者に連絡して、今後の対応について相談することになった。
〔セキュリティ専門業者による調査〕
セキュリティ専門業者の情報処理安全確保支援士(登録セキスペ)であるF氏が、被害の状況を調査した。調査内容と調査結果を表1に示す。

F氏は、DさんとEさんに調査結果を伝えた。次は、その時のF氏、Dさん、Eさんの会話である。
F氏 :脆弱性Kは、改ざんの3週間前に公表されたものです。
Dさん:そうですか。その脆弱性は、認識していませんでした。すぐに確認して、パッチを適用します。仮に、認識していたとしてもパッチ適用は定期メンテナンス日、つまり、来週の月曜日にしていたと思うので、やはり改ざんされていましたね。
F氏 :ダウンロードページのリンク以外に外部のURLに改ざんされているページはありませんでした。しかし、スクリプトを埋め込まれるなど、他の形でページが改ざんされている可能性もあるので確認が必要です。
Dさん:分かりました。ページの改ざんは、実際にはどのように確認すればよいでしょうか。
F氏 :WebサイトXの全ファイルをaして確認すると漏れがなく、効率も良いでしょう。
Dさん:なるほど。分かりました。
F氏 :調査結果は以上です。
Eさん:ありがとうございました。攻撃手法Kによって実際にWebサーバXを改ざんできるかどうかを知りたいので、調査してもらえないでしょうか。また、他に脆弱性がないかについても調査をお願いします。
F氏 :分かりました。
F氏が、まず、WebサイトXに対して、攻撃手法Kによる攻撃を実施したところ、実際にWebサーバXを改ざんできることが確認できた。
次に、他に脆弱性がないか、WebサイトYに対してB社PC-LANからOS及びミドルウェア(以下、プラットフォームという)の診断並びにWebアプリXの診断を実施した。
プラットフォームの診断では、メンテナンスで使っているSSHサービスに対して辞書攻撃が容易に成功することが確認された。F氏がCさんにセキュリティ上の問題がないか確認したところ、“SSHサービスはB社PC-LANからだけアクセスできるように設定しているので問題はないと考えている”とのことであった。F氏によるとB社PC-LAN内に攻撃者が侵入できると、WebサイトYに不正にログインできる。そこで、F氏は、②SSHの認証方式をパスワード認証方式以外に設定するようDさんにアドバイスした。また、この設定をしたとしても、メンテナンスに自分のPCを利用するのはセキュリティ上の問題があるので、新たにメンテナンス専用PCを準備し、それをB社運用チームだけが利用できるようにすることをアドバイスした。次に、WebアプリXを診断したところ、XSSの脆弱性が5件検出された。F氏の調査結果を基に、Dさんは、脆弱性Kに対するパッチ適用、SSHサービスの設定変更、メンテナンス専用PCの準備、XSSが検出されたプログラムの修正及びWebサイトXの復旧を行うようCさんに指示した。Cさんは1週間で対応を完了し、WebサイトXが再稼働した。
〔全社のWebサイトのセキュリティ強化〕
セキュリティインシデントの発生及びF氏の調査結果を受けて、A社の情報システム担当役員であるG取締役は、全社のWebサイトのセキュリティを強化するよう、A社情報システム部長を通じて同部のH課長に指示した。H課長は、WF、プラットフォーム及びWebアプリの脆弱性について調査を開始し、対策を検討することにした。
WF及びプラットフォームの脆弱性については、Webサイトの改ざんなどの被害につながるので、全社のWebサイトについて脆弱性への対応状況を調査した。その結果、対応漏れがあるWebサイトが5サイト見つかった。漏れがあった理由を各Webサイト担当者にヒアリングしたところ、脆弱性が発表されていることを知らなかったとのことであった。
そこで、今後は情報システム部が一括して脆弱性情報を収集し、各Webサイト担当者にその情報を提供することにした。それに先立って、効率的な情報収集ができるよう、各Webサイト担当者には、bを報告させた。また、Webサイトの更改などに伴ってbに変更がある場合は、その都度報告させることにした。
パッチ適用は従来どおり各Webサイト担当者に任せることにしたが、脆弱性情報を提供するだけでは、パッチ適用の遅れによって被害が出ることも考えられるので、パッチ適用期限をWebセキュリティガイドに追加することにした。
Webアプリの脆弱性については、まず、今回検出されたXSSを作り込んだ原因について、B社にヒアリングした。その結果、Webセキュリティガイドの記載が抽象的なので、誤った実装をしてしまったことが分かった。そこで、全ての担当者が正しい実装方法を理解できるように、Webセキュリティガイドを改訂して具体的な実装方法を追加することにした。改訂後のWebセキュリティガイド第2版を図3に示す。

また、Webアプリの診断の実施状況について各Webサイト担当者にヒアリングしたところ、“Webサイトの開発スケジュールが短くて、診断をセキュリティ専門業者に依頼するとリリースに間に合わないので、診断できずにリリースすることがある”とのことであった。そこで、H課長は情報システム部が中心となって、いつでもすぐに診断を実施できるように、A社内にWebアプリを診断できる体制を作ることをG取締役に提案し、採用された。
〔自社による診断の実施検討〕
的確な診断を実施できる体制を作るには、A社内で診断する項目(以下、A社診断項目という)を定め、その項目の診断手順に診断員が習熟する必要があり、H 課長は、診断手順の作成と習熟には、1年は掛かると考えた。それを少しでも短くするために、診断経験があり、登録セキスペでもある部下のQさんと一緒に A社診断項目と診断手順を検討した。
検討の結果、外部で公開されていた診断項目を参考にして、Web アプリに関する A社診断項目を図4のとおり定めた。

診断方法には、自動診断ツールによる診断と手動による診断がある。A社では自動診断ツールとして、自動診断ツール J を使う予定である。自動診断ツールによる診断は効率的だが、ツールによっては診断できない項目もある。そこで、2 人は両方の診断方法を組み合わせることにした。それを踏まえて作成した診断手順書第 1 版を図5に示す。

その後、A社の情報システム部のメンバ3名が、Qさんのトレーニングを受け、診断チームを結成した。しかし、トレーニングを受けただけでは、最初から精度の高い診断結果を安定して出せないかもしれない。そこで、当初はセキュリティ専門業者が診断を実施する際に同時に診断を実施することとし、両者の診断結果を比較・検証して、経験を積むことにした。
〔WebサイトZに対する診断の実施〕
A社のある部署が、新規に構築したショッピング用のWebサイトZをリリースするに当たり、セキュリティ専門業者に診断を依頼した。その際に、診断チームのメンバのLさんにも診断を担当させることにした。WebサイトZの開発は、外部の業者のP社に委託しており、委託時にWebセキュリティガイドの最新版を渡している。WebサイトZの画面遷移図を図6に、画面遷移の仕様を表2に示す。


Lさんは、WebサイトZに対して診断を実施し、結果をとりまとめた。Lさんは、Lさんの診断結果と、セキュリティ専門業者の診断結果とを比較した。すると、両者ともに検出したものが1件、セキュリティ専門業者だけが検出したものが3件あった。WebサイトZの診断結果を表3に示す。


(イ)の脆弱性については、商品購入情報入力画面から、配達希望日を入力するために起動するカレンダ機能で検出された。カレンダ機能を図7に示す。

セキュリティ専門業者が脆弱性を確認するためにカレンダを開き、そのカレンダが表示されているポップアップウィンドウのアドレスバーに入力したURLを図8に、警告ダイアログに“NG”を表示させたレスポンスの該当箇所を図9に示す。


なお、(イ)の脆弱性は、WebサイトZとは異なるドメインのサイトから、図8 の URL にアクセスさせられるような攻撃を受けた場合でも、現在普及しているWebブラウザの多くでは、スクリプトの実行時にエラーが発生し、攻撃が失敗する。しかし、Web ブラウザの種類やバージョンによっては被害が発生するおそれがあるので、セキュリティ専門業者は修正することを提言した。
(ウ)の脆弱性は、有料会員だけが購入できることになっている限定商品を一般会員が購入できてしまうというものであった。セキュリティ専門業者が確認した方法を表 5 に示す。

表3の診断結果から、Qさんは脆弱性を作り込まないようWebセキュリティガイドに項目を追加した。さらに、XSS の脆弱性をよく作り込むパターン、アクセス制御の不備や認可制御の欠落及びdリクエストフォージェリについて、診断手順書を改訂して、診断手順を追加した。改訂された診断手順書第 2 版を図10に示す。

WebサイトZで検出された脆弱性は、リリース前に修正するようA社のWebサイトZの担当者からP社に伝えた。Qさんが、脆弱性が作り込まれた原因をP社に確認したところ、いずれも確認不足であるとのことであった。
〔改善案の検討〕
Qさんは、各工程でのレビューポイントをWebセキュリティガイドに記載することをH課長に提案した。改訂されたWebセキュリティガイド第3版を図11に示す。

しかし、今回のように開発を外部の業者に委託する場合、図11に従って開発されていることを確認するには工夫が必要である。そこで、H課長は、③外部に開発を委託する契約の検収条件に追加すべき記載内容を検討した。
H課長は、その後もWebセキュリティガイドの改善を続けた。迅速なパッチ適用の効果もあり、A社では、今のところWebサイトへの攻撃による被害は起きていない。
設問1:〔セキュリティ専門業者による調査〕について,1〜3に答えよ。
(1)表1中の下線①について、アクセスログに残らないのは、どのような攻撃の場合か。35字以内で述べよ。
模範解答
攻撃に使われる文字列がPOSTデータ内に含まれている場合
解説
解答の論理構成
- 表1‐No.3の調査結果には
“攻撃手法Kに使われる文字列が Web サーバ Xの標準設定では①アクセスログに残らない”
と明記されています。 - 一般的な Web サーバ標準ログ(Common Log Format など)は、リクエストライン(メソッド・URL・HTTP バージョン)とヘッダ部までを記録しますが、POST メソッドのボディ部は記録しません。
- したがって、攻撃者が「特定の文字列」を POST ボディに埋め込んで送信すると、その文字列はログに出力されず、痕跡が残りません。
- 以上より、“アクセスログに残らない”攻撃とは「攻撃文字列が POST データ内に含まれる場合」であると結論付けられます。
誤りやすいポイント
- GET クエリストリングと混同し、URL パラメタに含まれる場合はログに残る点を見落とす。
- SSL/TLS で暗号化されているから残らないと勘違いする(復号後に Web サーバは平文で受け取り、ログ可能です)。
- サーバのログレベル変更や WAF の影響を過度に考慮し、標準設定という前提を忘れる。
FAQ
Q: POST 以外でもログに残らないケースはありますか?
A: 標準設定のままなら POST ボディ以外はほぼ記録されます。ただし、運用者がログ項目を削減している場合などはヘッダ部も残らないことがあります。
A: 標準設定のままなら POST ボディ以外はほぼ記録されます。ただし、運用者がログ項目を削減している場合などはヘッダ部も残らないことがあります。
Q: どうすれば POST データもログに残せますか?
A: Web サーバやリバースプロキシの設定でボディ部をキャプチャするモジュールを導入する、もしくは WAF/IDS で HTTP ボディを解析・記録する方法があります。
A: Web サーバやリバースプロキシの設定でボディ部をキャプチャするモジュールを導入する、もしくは WAF/IDS で HTTP ボディを解析・記録する方法があります。
Q: 脆弱性診断時にログに残らない攻撃を検知する他の手段は?
A: アプリケーション側の監査ログ、DB アクセスログ、OS 監査ログなど多層で記録を取り、相互に突合する方法が有効です。
A: アプリケーション側の監査ログ、DB アクセスログ、OS 監査ログなど多層で記録を取り、相互に突合する方法が有効です。
関連キーワード: HTTPメソッド、POSTデータ、アクセスログ、脆弱性、Webサーバ
設問1:〔セキュリティ専門業者による調査〕について,1〜3に答えよ。
(2)本文中のaに入れる適切な確認方法を、表1の結果を考慮し、20字以内で具体的に述べよ。
模範解答
a:WebサイトYの全ファイルと比較
解説
解答の論理構成
- 調査の目的
- 会話でF氏は“他の形でページが改ざんされている可能性もあるので確認が必要”と述べています。
- 安全な参照元の条件
- 表1 No.5 で“WebサイトY”は“外部からのアクセスはなく、改ざんされた痕跡も見付けられなかった。”と判明。
- さらに本文では“WebサイトXとシステム構成が全く同じWebサイトY”であると明記されています。
- 比較対象の選定理由
- 同一構成かつ無改ざんの“WebサイトY”を基準にすれば、改ざん漏れなく効率的に確認できます。
- 結論
- 以上より、a には“WebサイトYの全ファイルと比較”が最適となります。
誤りやすいポイント
- バックアップファイルとの比較と書くと、バックアップが改ざんを受けていない保証が本文にないため誤答になります。
- 差分ツールで比較とだけ書くと「何と比較するか」が不明確で減点対象になります。
- ハッシュ値確認のみではファイル選択の根拠が示せず不完全です。
FAQ
Q: なぜ“WebサイトY”でなければならないのですか?
A: 表1で改ざんがないと確認され、かつ本文で“WebサイトXとシステム構成が全く同じ”とあるため、信頼できるベースラインになるからです。
A: 表1で改ざんがないと確認され、かつ本文で“WebサイトXとシステム構成が全く同じ”とあるため、信頼できるベースラインになるからです。
Q: 比較方法を具体的に書かなければいけませんか?
A: 設問は「確認方法」を問うため、“全ファイルと比較”のように具体的な作業内容を示す必要があります。
A: 設問は「確認方法」を問うため、“全ファイルと比較”のように具体的な作業内容を示す必要があります。
Q: ハッシュ値を使わないとだめですか?
A: ハッシュ値の使用自体は有効ですが、設問は20字以内で方法を聞いているため、出題の意図は“何と比較するか”を明確にすることです。
A: ハッシュ値の使用自体は有効ですが、設問は20字以内で方法を聞いているため、出題の意図は“何と比較するか”を明確にすることです。
関連キーワード: ファイル改ざん検知、ベースライン比較、ハッシュチェック、ホットスタンバイ、災害対策
設問1:〔セキュリティ専門業者による調査〕について,1〜3に答えよ。
(3)本文中の下線②について、設定すべき認証方式の名称を、10字以内で答えよ。
模範解答
公開鍵認証方式
解説
解答の論理構成
- 下線②の原文は
“F氏は、②SSHの認証方式をパスワード認証方式以外に設定するようDさんにアドバイスした。”
とあります。 - その直前でF氏は「SSHサービスに対して辞書攻撃が容易に成功することが確認された」と述べ、
“B社PC-LAN内に攻撃者が侵入できると、WebサイトYに不正にログインできる”
というリスクを指摘しています。 - 辞書攻撃が成功する原因は、推測しやすい“パスワード認証方式”を採用しているからです。
- SSHで辞書攻撃・ブルートフォース攻撃を回避でき、かつ「パスワード認証方式以外」に該当する代表的な方式は、ユーザが保持する秘密鍵とサーバに登録された公開鍵で認証を行う “公開鍵認証方式” です。
- 以上より、②に設定すべき認証方式は
公開鍵認証方式
となります。
誤りやすいポイント
- 「多要素認証」「ワンタイムパスワード」などを挙げる受験者もいますが、SSHの一般設定で簡潔に切り替えられる方式としては“公開鍵認証方式”が最も妥当です。
- “証明書認証”と書くとTLSサーバ証明書と混同されるおそれがあり減点対象になる場合があります。
- SSH‐2ではキーファイルを使った方式が標準であることを忘れ、旧来のrlogin/rshの“ホストベース認証”と誤記するケースがあります。
FAQ
Q: パスワード認証方式を残しつつ公開鍵を追加すれば良いですか?
A: 攻撃対象を残さないためには、原則として“PasswordAuthentication no”に設定し公開鍵のみに絞る方が安全です。
A: 攻撃対象を残さないためには、原則として“PasswordAuthentication no”に設定し公開鍵のみに絞る方が安全です。
Q: 公開鍵認証方式でも鍵が漏えいしたら同じでは?
A: 漏えいリスクはありますが、鍵長を十分に取り、安全な保管・パスフレーズ設定を行えば辞書攻撃より格段に安全性が高まります。
A: 漏えいリスクはありますが、鍵長を十分に取り、安全な保管・パスフレーズ設定を行えば辞書攻撃より格段に安全性が高まります。
Q: TOTPなどの多要素認証をSSHに組み込む方法はありますか?
A: Yes。OpenSSH と PAM を組み合わせてGoogle Authenticatorなどを導入する例がありますが、本設問は基本設定変更を問うものなので公開鍵認証方式が解答となります。
A: Yes。OpenSSH と PAM を組み合わせてGoogle Authenticatorなどを導入する例がありますが、本設問は基本設定変更を問うものなので公開鍵認証方式が解答となります。
関連キーワード: SSH, 公開鍵認証、辞書攻撃、ブルートフォース、パスワード認証
設問2:
本文中のbに入れる適切な報告内容を、50字以内で具体的に述べよ。
模範解答
b:Webサイトで使用しているOS、ミドルウェア及びWFの名称並びにそれぞれのバージョン情報
解説
解答の論理構成
- 背景把握
問題文には「全社のWebサイトについて脆弱性への対応状況を調査した。その結果、対応漏れがあるWebサイトが5サイト見つかった。」とあります。対応漏れの原因を無くすため、情報システム部が脆弱性情報を一括収集する方針が示されました。 - 報告項目の目的
同じ文章で「効率的な情報収集ができるよう、各Webサイト担当者には、bを報告させた。」と指示されています。外部から入手する脆弱性情報を“効率的”に各サイトへマッチさせるには、サイトごとの利用ソフトウェアとそのバージョンを特定する必要があります。 - 必須要素の抽出
本文中で脆弱性対象として具体的に挙がっているのは「WF」「プラットフォーム(OSやミドルウェア)」です(例:表1「WF-Kに脆弱性Kが存在」との記述)。したがって、報告すべきは
• OS
• ミドルウェア
• WF
これらの「名称」と「バージョン」です。名称だけでは該当する脆弱性か判断できず、バージョンだけでなく種類も必要となるため両方を盛り込みます。 - 解答
よってbには「Webサイトで使用しているOS、ミドルウェア及びWFの名称並びにそれぞれのバージョン情報」と記載するのが妥当です。
誤りやすいポイント
- ハードウェアやIPアドレス等、脆弱性情報収集に直接不要な項目まで列挙してしまう。
- 「アプリ名」「OS名」だけでバージョンを抜かす。バージョンが分からなければ適用要否を判断できません。
- Webアプリ固有の名称(例:WebアプリX)を報告対象に含める。脆弱性データベースは一般的な製品・OSS単位で公開されるため対象外です。
- WF(Webアプリケーションフレームワーク)を失念する。フレームワークの脆弱性も多く報告されるので必須です。
FAQ
Q: データベース製品の名称・バージョンも入れるべきでは?
A: 問題文では主要な脆弱性対象を「OS、ミドルウェア及びWF」としています。DBは一般にミドルウェアに含まれるため、ミドルウェアに記載すれば網羅できます。
A: 問題文では主要な脆弱性対象を「OS、ミドルウェア及びWF」としています。DBは一般にミドルウェアに含まれるため、ミドルウェアに記載すれば網羅できます。
Q: ミドルウェアの範囲はどこまで?
A: Webサーバ、DBサーバ、アプリケーションサーバなどOS上で動作するソフトウェア一式を指します。Webサーバだけに限定すると不足します。
A: Webサーバ、DBサーバ、アプリケーションサーバなどOS上で動作するソフトウェア一式を指します。Webサーバだけに限定すると不足します。
Q: 名前とバージョンを定期的に報告する理由は?
A: バージョンアップや構成変更があった際に速やかに脆弱性情報を突合できるようにするためです。古い情報のままでは適切なパッチ適用期限を設定できません。
A: バージョンアップや構成変更があった際に速やかに脆弱性情報を突合できるようにするためです。古い情報のままでは適切なパッチ適用期限を設定できません。
関連キーワード: 脆弱性情報収集、パッチ管理、ミドルウェア、バージョン管理、フレームワーク
設問3:
図4中のc、本文中、図4中、図5中、表3中及び図10中のd、図4中のe、図4中のfに入れる適切な字句をそれぞれ10字以内で答えよ。
模範解答
c:ディレクトリ
d:クロスサイト
e:HTTP
f:ジャッキング
解説
解答の論理構成
- 【問題文】の図4の箇条書きには、
- “・c トラバーサル”
- “・d リクエストフォージェリ”
- “・e ヘッダインジェクション”
- “・クリック f”
という未確定語が列挙されています。
- 一般的な脆弱性名称との対応を考えると、
- “トラバーサル”と組み合わせる語は “ディレクトリ” が標準表記です(Directory Traversal)。
- “リクエストフォージェリ”に冠する語は “クロスサイト” が定訳で、CSRF(Cross-Site Request Forgery)の和訳でもあります。
- “ヘッダインジェクション”の前に付く典型は “HTTP” です(HTTP Header Injection)。
- “クリック”の後に続く脆弱性語は “ジャッキング” が通例で、クリックジャッキング攻撃を指します。
- さらに、表3でも “(エ)” の脆弱性名が “d リクエストフォージェリ” となっており、ここでも “クロスサイト” を補えば意味が通ります。
- 以上より、
- c:ディレクトリ
- d:クロスサイト
- e:HTTP
- f:ジャッキング
が妥当と判断できます。
誤りやすいポイント
- “ディレクトリトラバーサル”を“パストラバーサル”と混同して別語を入れる。
- “クロスサイトリクエストフォージェリ”を“サイト間”などで訳してしまい正式名称を外す。
- “HTTPヘッダインジェクション”を“レスポンスヘッダインジェクション”と誤記する。
- “クリックジャッキング”を“クリックハイジャック”と書く誤表記。
FAQ
Q: “ディレクトリトラバーサル”と“パストラバーサル”はどちらを使っても良いですか?
A: 試験では和訳として最も一般的な“ディレクトリトラバーサル”を採用することが多いです。
A: 試験では和訳として最も一般的な“ディレクトリトラバーサル”を採用することが多いです。
Q: “クロスサイトリクエストフォージェリ”の略称 CSRF を解答に使えますか?
A: 設問が“字句”を求めている場合、正式な日本語表記“クロスサイト”を記入するのが無難です。
A: 設問が“字句”を求めている場合、正式な日本語表記“クロスサイト”を記入するのが無難です。
Q: “HTTPヘッダインジェクション”はレスポンスとリクエストの両方に関係しますか?
A: 主にレスポンスヘッダを任意操作できる脆弱性ですが、用語としては“HTTPヘッダインジェクション”で統一されています。
A: 主にレスポンスヘッダを任意操作できる脆弱性ですが、用語としては“HTTPヘッダインジェクション”で統一されています。
関連キーワード: Directory Traversal, CSRF, HTTP Header Injection, Clickjacking
設問4:〔WebサイトZに対する診断の実施〕について,1〜4に答えよ。
(1)表中のg、hに入れる適切な数値を答えよ。
模範解答
g:30
h:0
解説
解答の論理構成
-
表4には次の三つのテストケースが掲載されています。
- No.1 keyword に "bag' and '1'='1" を送信 → 画面表示は 該当商品数: g 件
- No.2 keyword に "bag' and '1'='2" を送信 → 画面表示は 該当商品数: h 件
- No.3 keyword に "bag" を送信 → 画面表示は 該当商品数:30件
(いずれもステータスコードは “200”)
-
注記として “診断時にDBには商品が100件登録されていた。” とありますが、通常のキーワード "bag" で取得できた件数は “30件” です。したがって bag という条件に一致する商品は 30 件 と分かります。
-
SQLインジェクションを想定すると、アプリ側のSQLは
sql SELECT ・・・ FROM 商品表 WHERE name LIKE '%%' のように単純連結されている可能性が高いです。-
を "bag' and '1'='1" に置き換えた場合、SQLの WHERE 句は name LIKE '%bag' and '1'='1%'となり、'1'='1' は常に真ですが name LIKE '%bag' という条件は残ります。
よって返されるレコード数は、もとの検索と同じ “30件” です。 -
を "bag' and '1'='2" に置き換えると name LIKE '%bag' and '1'='2%'となり、'1'='2' は常に偽です。AND 条件ですから 全レコードが除外され、結果は 0 件 になります。
-
-
以上より
- g には “30”
- h には “0”
を入れると論理が整合します。
誤りやすいポイント
- “DB に 100 件登録” という注記から g = 100 と決めつける。実際にはキーワードで絞り込みが残ることを見落としているケースが多いです。
- '1'='1' を “常に真だから全件ヒットする” と短絡的に考え、WHERE 句全体が無条件になると誤解する。
- LIKE 句やプレースホルダの有無を意識せずに SQL を想像し、条件の残り/消えを判定し損ねる。
FAQ
Q: 注記に “100件” とあるのに結果が “30件” になるのは不自然では?
A: 100件はテーブル全体の登録数です。検索キーワードの部分一致条件 %bag% が併存しているため、抽出対象はそのうちの 30 件にとどまります。
A: 100件はテーブル全体の登録数です。検索キーワードの部分一致条件 %bag% が併存しているため、抽出対象はそのうちの 30 件にとどまります。
Q: 'bag' and '1'='1' で 30 件しか返らないのは、後半が文字列の一部になっているからでは?
A: そうではありません。前半で閉じた 'bag' が文字列リテラル、and '1'='1' が独立した論理式として評価されます。LIKE 句が残るため 30 件になります。
A: そうではありません。前半で閉じた 'bag' が文字列リテラル、and '1'='1' が独立した論理式として評価されます。LIKE 句が残るため 30 件になります。
Q: 'bag' and '1'='2' で 0 件になるのはなぜ?
A: 同様に name LIKE '%bag' が真でも、'1'='2' が偽なので AND 条件全体が偽となり、結果セットが空になるためです。
A: 同様に name LIKE '%bag' が真でも、'1'='2' が偽なので AND 条件全体が偽となり、結果セットが空になるためです。
関連キーワード: SQLインジェクション、ブラインドSQL, LIKE句、論理式、絞り込み条件
設問4:〔WebサイトZに対する診断の実施〕について,1〜4に答えよ。
(2)図8中及び図9中のiに入れる適切な文字列を解答群の中から選び、記号で答えよ。
ア:"><script>alert('NG');</script>
イ:');alert(NG
ウ:'alert('NG');
エ:<script>alert('NG');</script>
模範解答
i:イ
解説
解答の論理構成
-
図9にはvar returnobj = window.opener.document.getElementById('i');と記載されており、i の値は JavaScript のシングルクォート '...' 内にそのまま埋め込まれます。
-
埋め込まれた位置は HTML ではなく JavaScript 文字列リテラル内なので、タグ (
-
文字列を終了させるには ') と書き、次に実行したいコード alert('NG') を入れ、文を区切るセミコロン ; を付けます。
-
以上を満たす候補は');alert(NGだけです(選択肢イ)。他の選択肢は
- ア・エ:タグが入っているため JavaScript 文字列内では無効
- ウ:冒頭にクォートと閉じ括弧が無く、文字列を終端できない
という理由で目的を達成できません。
-
よって i に入る適切な文字列は イ です。
誤りやすいポイント
- HTML タグを挿入するタイプの XSS と同一視し、
- 文字列リテラルの区切り文字(今回は ')を確認せず、ダブルクォートやタグで閉じられると誤解する。
- alert('NG') の後ろに閉じクォートが不要だと考え、文法エラーになるペイロードを選択する。
FAQ
Q: なぜ alert('NG') の前に ') が必要なのですか?
A: getElementById('i') の ' を閉じて JavaScript の文脈に戻るためです。閉じないと文字列の一部と解釈され、コードは実行されません。
A: getElementById('i') の ' を閉じて JavaScript の文脈に戻るためです。閉じないと文字列の一部と解釈され、コードは実行されません。
Q: タグを使わない XSS もあるのですか?
A: はい。HTML ではなく JavaScript 文字列中に値が埋め込まれるケースでは、タグよりも文字列を終了させてスクリプトを挿入する方が効果的です。
A: はい。HTML ではなく JavaScript 文字列中に値が埋め込まれるケースでは、タグよりも文字列を終了させてスクリプトを挿入する方が効果的です。
Q: alert('NG') の 'NG' をダブルクォートで書いても良いですか?
A: JavaScript 文法上は問題ありませんが、今回の選択肢の中で要件を満たすのはシングルクォート版だけでした。
A: JavaScript 文法上は問題ありませんが、今回の選択肢の中で要件を満たすのはシングルクォート版だけでした。
関連キーワード: XSS, JavaScriptインジェクション、シングルクォート、文字列リテラル、エスケープ処理
設問4:〔WebサイトZに対する診断の実施〕について,1〜4に答えよ。
(3)表5中のjに入れる適切な操作内容を、表2中の画面遷移を指定して40字以内で述べよ。
模範解答
j:(う)の操作を実行するときに、codeの値を限定商品の値に書き替える
解説
解答の論理構成
- 表5は「一般会員アカウント」で限定商品を買えてしまう手順を示しています。
Step2 の説明は「商品一覧画面で j。」と空欄になっています。 - 商品をカートに入れる処理は、表2の(う)と(え)が同じURL「https://www.z-site.com/kounyu」を使い、送信パラメタだけが異なります。
- (う)「POSTデータ:code=0001344」
- (え)「POSTデータ:code=1000021」
- 限定商品は有料会員専用の「限定商品一覧」からしか選べない設計ですが、URLとパラメタを直接操作できれば制約を回避できます。
- よって一般会員が「商品一覧画面」から購入リクエスト(う)を送る際に、code パラメタを限定商品の値「1000021」に書き替えれば、サーバ側が区別できず限定商品がカートに入ります。
- 以上より、j に入る操作内容は「(う)の操作を実行するときに、codeの値を限定商品の値に書き替える」です。
誤りやすいポイント
- (え)の画面遷移そのものを呼び出すと回答してしまう。問題は「商品一覧画面」経由であるため、操作は(う)のリクエスト改変になります。
- URL変更だけを書くと不十分になりがちです。パラメタ code=1000021 への書替えを明示する必要があります。
- 「限定商品一覧画面に遷移する」と誤解するケース。アクセス制御不備の本質はサーバ側の認可チェック不足であり、画面遷移は不要です。
FAQ
Q: なぜ限定商品一覧画面に遷移せずに購入できるのですか?
A: サーバ側の認可ロジックが code パラメタ値だけで商品をカートに入れており、会員種別を再確認していないためです。
A: サーバ側の認可ロジックが code パラメタ値だけで商品をカートに入れており、会員種別を再確認していないためです。
Q: URLの直接入力とパラメタ改ざんはどう違いますか?
A: URL直接入力は画面遷移そのものを指定し直す行為、パラメタ改ざんは本来の画面から送るリクエスト内の値を書き替える行為です。今回は後者です。
A: URL直接入力は画面遷移そのものを指定し直す行為、パラメタ改ざんは本来の画面から送るリクエスト内の値を書き替える行為です。今回は後者です。
Q: この脆弱性を防ぐにはどうするべきでしょう?
A: 購入処理時にサーバ側で会員種別と商品種別を照合し、権限がなければエラーにする認可チェックを実装します。
A: 購入処理時にサーバ側で会員種別と商品種別を照合し、権限がなければエラーにする認可チェックを実装します。
関連キーワード: パラメータ改ざん、アクセス制御、認可チェック、URL操作、セッション管理
設問4:〔WebサイトZに対する診断の実施〕について,1〜4に答えよ。
(4)図10中のkに入れる適切な字句を表5の方法を踏まえて、15字以内で答えよ。また、図10中のlに入れる適切な字句を、表5の方法を踏まえて、20字以内で具体的に述べよ。
模範解答
k:権限が異なる複数の
l:許可されている操作の違い
解説
解答の論理構成
- 図10には
“アクセス制御の不備や認可制御の欠落を確認する場合には、事前に k アカウントを用意し、l を確認する。”
とあり、k と l を埋める必要があります。 - 表5では一般会員で操作した際に
“限定商品を購入できる。”
という想定外の結果が示されており、手順1には
“一般会員アカウントでログイン”
と明記されています。
これは「権限が異なる」アカウント(一般会員/有料会員)を比較して認可の欠落を検証する典型例です。 - したがって k には、テストに用意すべきアカウントの性質として “権限が異なる複数の” が入ります。
- 次に、検証の目的は「有料会員しか操作できない購入手続を一般会員が実行できてしまうか」を確かめることです。
表5の結果が示すのは「許可されている操作」が会員種別によって異なるはずなのに同じになってしまった点です。 - 以上より l には、両アカウント間で比較すべき対象として “許可されている操作の違い” が入ります。
誤りやすいポイント
- 認証テストと混同し、“異なるパスワードの有無” など認可とは無関係な観点を l に書いてしまう。
- “複数のテストユーザ” のように k を一般化し過ぎ、権限差があることを示せていない。
- UI 上に表示されるリンクやボタンの有無だけを比較し、実際にリクエストを送って機能を実行できるかどうかを確認しない。
FAQ
Q: なぜ“権限が異なる複数の” と書く必要があるのですか?
A: 表5で一般会員でも限定商品を購入できたように、アクセス制御の欠落は権限差を持つアカウントを比較して初めて発見できます。そのため、異なる権限を持つテストアカウントが必須です。
A: 表5で一般会員でも限定商品を購入できたように、アクセス制御の欠落は権限差を持つアカウントを比較して初めて発見できます。そのため、異なる権限を持つテストアカウントが必須です。
Q: “許可されている操作の違い” は具体的にどう確認しますか?
A: それぞれのアカウントで同じリクエストを送り、レスポンスや処理結果(例:画面表示、DB登録内容)を比較します。本来禁止されている操作が成功すれば脆弱性ありと判定します。
A: それぞれのアカウントで同じリクエストを送り、レスポンスや処理結果(例:画面表示、DB登録内容)を比較します。本来禁止されている操作が成功すれば脆弱性ありと判定します。
Q: アカウントが1種類しか用意できない場合はどうすればよいですか?
A: テスト環境でロールやフラグを変更し、疑似的に別権限を作成します。最低でも“想定される最上位権限”と“最低権限”の二つを用意してください。
A: テスト環境でロールやフラグを変更し、疑似的に別権限を作成します。最低でも“想定される最上位権限”と“最低権限”の二つを用意してください。
関連キーワード: アクセス制御、認可、権限管理、テストアカウント
設問5:
本文中の下線③について、検収条件に追加すべき記載内容は何か。40字以内で具体的に述べよ。
模範解答
作業の妥当性を確認できる詳細なレビュー記録を委託先が提出していること
解説
解答の論理構成
- 追加すべき内容は、外部委託先が“レビューを実施した事実と結果”を検収時に示すことです。
- 【問題文】では、内製時の管理強化策として図11に
「注意事項:各工程の最後にレビューを行い、作業の妥当性を確認すること」
と明示し、さらに各工程に
「レビューポイント:~がテストされていること、適切な診断が実施されていること」
など“妥当性確認”を求めています。 - しかし、外部委託では「開発されていることを確認するには工夫が必要」と課題を示し、③で“契約の検収条件”に反映させるよう求めています。
- 検収条件にレビュー結果提出を義務付ければ、A社側は成果物と併せてレビュー記録を照査し、図11が意図する“作業の妥当性”を客観的に確認できます。
- 以上から、「作業の妥当性を確認できる詳細なレビュー記録を委託先が提出していること」とするのが適切です。
誤りやすいポイント
- 「テスト結果」や「診断報告書」だけを求めれば十分と勘違いする
→ 図11は全工程でのレビュー実施を要求しており、設計・実装フェーズも対象です。 - 「ソースコード提出」を検収条件に挙げる
→ 妥当性“確認”にはレビューの証跡が不可欠で、コード提出だけでは図11の趣旨を満たしません。 - “レビュー実施の誓約”のような宣言だけで済ませる
→ 客観的証跡がなければ検収時に確認できず、契約条件として不十分です。
FAQ
Q: どの程度の詳細さが“詳細なレビュー記録”に当たりますか?
A: レビュー対象・日時・参加者・指摘事項・是正内容・確認結果など、再現性をもって妥当性を追跡できるレベルが望まれます。
A: レビュー対象・日時・参加者・指摘事項・是正内容・確認結果など、再現性をもって妥当性を追跡できるレベルが望まれます。
Q: レビュー記録のフォーマットはA社指定とすべきですか?
A: 指定すると比較・保管が容易になりますが、最低限“項目を網羅していること”を条件とし、フォーマットは委託先標準でも運用可能です。
A: 指定すると比較・保管が容易になりますが、最低限“項目を網羅していること”を条件とし、フォーマットは委託先標準でも運用可能です。
Q: オフショア開発でも同じ条件を適用できますか?
A: 可能です。言語やタイムゾーンが異なっても、レビュー記録は電子化されているため同様に提出・確認できます。
A: 可能です。言語やタイムゾーンが異なっても、レビュー記録は電子化されているため同様に提出・確認できます。
関連キーワード: レビュー記録、検収条件、アウトソーシング、品質保証、セキュリティ要件
設問6:
診断で見つかった個々の脆弱性はWebセキュリティガイドを改善するためにどのように利用できるか。40字以内で述べよ。
模範解答
脆弱性の作り込み原因を調査して、注意すべきポイントを追加する。
解説
解答の論理構成
- まず、検出された XSS について「Webセキュリティガイドの記載が抽象的なので、誤った実装をしてしまった」と【問題文】に記載されています。
→ 原因分析がガイド改訂に直結した事実を示しています。 - さらに「Qさんは脆弱性を作り込まないよう Webセキュリティガイドに項目を追加した」とあるように、診断で判明した欠陥を即座にガイドへ反映しています。
- この流れは「各工程でのレビューポイントをWebセキュリティガイドに記載する」取り組みにも発展しており、脆弱性発見→原因特定→注意点追加というサイクルが明確です。
- 以上より、診断で見つかった個々の脆弱性は“原因を調査し、注意すべきポイントとしてガイドへ追加する”形で活用されると導けます。
【最終解答】
脆弱性の作り込み原因を調査して、注意すべきポイントを追加する。
脆弱性の作り込み原因を調査して、注意すべきポイントを追加する。
誤りやすいポイント
- 「見付かった脆弱性を一覧に追加するだけ」と誤解し、原因分析の必要性を落とす。
- ガイド改善=テスト工程強化と短絡的に結び付け、要件定義・設計へのフィードバックを忘れる。
- “注意点追加”をパッチ適用手順の追加と読み違え、本質的な開発プロセス改善を外してしまう。
FAQ
Q: 単に脆弱性を修正するだけでは不十分ですか?
A: はい。【問題文】にあるように原因まで掘り下げてガイドへ反映しないと再発防止になりません。
A: はい。【問題文】にあるように原因まで掘り下げてガイドへ反映しないと再発防止になりません。
Q: 診断結果を活用するタイミングはいつですか?
A: 検出直後に原因分析を行い、次版ガイドやレビューポイントへ即時反映する運用が望ましいです。
A: 検出直後に原因分析を行い、次版ガイドやレビューポイントへ即時反映する運用が望ましいです。
Q: 注意すべきポイントの例は何ですか?
A: 「エスケープ処理を施すこと」「プレースホルダで実装すること」など、具体的な実装指針が該当します。
A: 「エスケープ処理を施すこと」「プレースホルダで実装すること」など、具体的な実装指針が該当します。
関連キーワード: 脆弱性診断、原因分析、ガイドライン改訂、再発防止


