令和4年度 春期 情報処理安全確保支援士試験 午後II 問1 Web脆弱性の原因究明とアジャイル開発におけるセキュリティ管理の導入
テクノロジセキュリティ技術
学習ガイド
子会社化したSaaS企業のWebサイト群を対象に、セキュリティ診断で検出された脆弱性の原因究明と開発プロセスの改善を検討する問題です。XSS、CSRF、クリックジャッキング、SSRFといった代表的な脆弱性への対策や、短周期のアジャイル開発に専門診断を定着させる運用が問われます。まずは診断結果のリクエスト内容や画面重畳の図から攻撃の成立条件を整理し、開発プロセスの図と対話文からリリース計画に診断を組み込む現実的な見直し案を読み解きます。
この記事で押さえる論点
- ライブラリ管理の不備によるXSSの発生原因とダウンロード運用上の再発防止策を述べられる
- CSRF対策においてトークンを利用者IDやセッション情報とひも付ける必要性を説明できる
- クリックジャッキング攻撃の画面重畳の仕組みとHTTPレスポンスヘッダによる対策を説明できる
- 外部連携機能におけるSSRFの攻撃手順とリクエスト検証や固定値化による防御策を述べられる
- アジャイル開発の短いリリース周期に専門技術者による脆弱性診断を組み込む方法を説明できる
出題情報
- 出題
- 2022(R4)春 情報処理安全確保支援士 午後II 問1
- 配点
- 100点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
アジャイル開発を行っている企業が増えている中,短期間でリリースすることを優先した結果,システムの脆弱性対応が後回しになっているケースも見られる。本問では,Webサイトのセキュリティを題材として,Webサイトにおける脆弱性対策の理解力,開発プロセスの変化に応じたセキュリティへの対応方法を検討する能力を問う。
問1では,Webサイトのセキュリティを題材に,脆ぜい弱性に関する知識,開発プロセスについて出題した。全体として正答率は平均的であった。
問題本文
問1 Webサイトのセキュリティに関する次の記述を読んで,設問1〜6に答えよ。
A社は,従業員1,500名の中堅システム開発会社である。A社では,セキュリティ品質の高いWebサイトを開発するために,表1に示すWebセキュリティ管理基準を定めて運用している。

図の説明テキスト
表1 Web セキュリティ管理基準(抜粋)
項番ごとの管理策と概要が示されている。
項番1 セキュリティ要件レビュー
項番2 ツールによるソースコードレビュー
項番3 プロジェクトメンバによるソースコードレビュー
項番4 ツールによる脆弱性診断
項番5 専門技術者による脆弱性診断
注1)脆弱性診断サービスを提供しているD社に委託している。
〔A社によるB社の子会社化〕
B社は,従業員200名の新興のITサービス会社であり,各種SaaSを提供している。アジャイル開発の能力が高く,機能の追加や性能の改善を頻繁に行っている。B社とA社とは協業関係にあったが,両社の経営陣は,双方の強みを生かせると判断し,A社によるB社の子会社化について合意した。
B社のクラウド環境には,コーポレートサイト(以下,サイトBという),及びB社が提供中の三つのSaaSそれぞれのWebサイト(以下,サイトX,サイトY,サイトZという)がある。それらの概要を表2に示す。

図の説明テキスト
表2 B社のWebサイトの概要
サイト名及びURL、概要、システム構成が示されている。
・サイトB:CMSを導入し運用。
・サイトX:会社・組織向けコミュニケーションサービス。キャンペーン応募が行える。
・サイトY:個人向けブログサイト。A社のニューストピックを表示できる。
・サイトZ:ソフトウェア開発企業向けWebサービス。外部Webサイトと連携予定。
システム構成はいずれもIaaS上のWebサーバなどで構成されている。またサイトX, Y, ZにはDBサーバがある。
子会社化に当たって,B社のWebサイトのセキュリティ水準を確認することになり,A社の品質管理部でセキュリティ技術を担当しているRさんが対応することになった。
〔B社のWebサイトのセキュリティ水準の確認〕
Rさんは,サイトB,サイトX,サイトY及びサイトZに対する脆弱性診断をD社に依頼した。診断の結果,検出された脆弱性を表3に示す。

図の説明テキスト
表3 検出された脆弱性(抜粋)
各サイトの脆弱性名が記載されている。
・サイトB:XSS脆弱性
・サイトX:XSS脆弱性、CSRF脆弱性、クリックジャッキング脆弱性
・サイトY:XSS脆弱性、SSRF脆弱性
・サイトZ:XSS脆弱性、SSRF脆弱性
〔サイトBのXSS脆弱性〕
D社は,サイトBに①診断用リクエストを送ることで,XSS脆弱性があることを確認した。このリクエストは,ライブラリMを使ってプログラムCが処理する。ライブラリMのコードを図1に示す。

図の説明テキスト
図1 ライブラリMのコード
out.printlnでmetaタグのog:urlプロパティを出力しているコード。serverName, scriptName, queryStringの変数が結合されて出力されている。
注記には、serverNameはリクエストのURLのホスト名、scriptNameはURLのパス名、queryStringはURLのクエリ文字列以降の値がURLデコードされて格納されているとある。
ライブラリMは,SEOのためのライブラリである。
B社では,開発部のメンバそれぞれが,開発時に利用可能なライブラリを収集している。使用するライブラリは,マルウェアが含まれていない,既知の脆弱性が修正された,安全性が確認できているライブラリを公開しているWebサイトから,ファイルサーバにダウンロードし,利用している。ファイルサーバは,開発部のメンバであればアクセス可能である。
今回使われていたライブラリMは,既知のXSS脆弱性の対策をしていないバージョンであった。その結果,ライブラリMを使っているサイトB,サイトX,サイトY及びサイトZにおいて,同じXSS脆弱性が検出された。
これを受けて,B社における②再発防止策について検討した。
〔サイトXのCSRF脆弱性〕
サイトXは,セッションIDをJSESSIONIDというcookieに格納している。D社は,サイトXのキャンペーン応募ページでCSRF脆弱性を検出した。
CSRF脆弱性を確認した手順は,次のとおりであった。
(1) 診断用利用者(以下,利用者Aという)の利用者IDでサイトXにログインし,キャンペーン応募ページで送信されるリクエストの内容をツールを使って確認した。リクエストの内容を図2に示す。

図の説明テキスト
図2 リクエストの内容
POST /campaign の HTTP リクエストのテキスト。Host、Cookie (JSESSIONIDを含む)、およびリクエストボディに csrftoken のパラメータが含まれている。
リクエストの内容を確認後,csrftokenをCSRF対策用のパラメータと考え,リクエスト中のcsrftokenの値を削除して送信した場合と1文字変更して送信した場合を試したところ,どちらもエラーになった。
(2) 利用者Aとは別の診断用利用者(以下,利用者Bという)の利用者IDでサイトXにログインし,キャンペーン応募ページで送信されるリクエスト中のcsrftokenの値に,図2のcsrftokenの値を設定して送信したところ,利用者Bとして処理された。
この結果から,csrftoken と a 又は b とをひも付けるという対策ができていないことが分かった。
〔サイトXのクリックジャッキング脆弱性〕
サイトXでは,クリックジャッキングによって,利用者が気付かずに利用者情報の公開範囲を変更させられてしまう脆弱性が検出された。攻撃者が図3の画面を用いてクリックジャッキングを行う場合を仮定してみる。このとき,クリックイベントは,利用者から見て手前にある画面上で発生するものとする。

図の説明テキスト
図3 攻撃者が用いる画面
画面α(利用者情報の公開範囲設定、同一組織内が選択され、更新ボタンがある)と、画面β(「ここをクリックして」「次にここをクリック」というテキストがある)が並んでいる。
攻撃者は,画面 c を利用者から見て d に e 状態で罠(わな)サイトに公開し,サイトXの画面 f を利用者から見て g に h 状態で重ねて表示する。この状態のサイトにアクセスした利用者は,意図せず利用者情報の公開範囲を変更させられてしまう可能性がある。
クリックジャッキング脆弱性の対策には,レスポンスヘッダに i を含める方法と j を含める方法がある。後者は標準化されている。
〔サイトYのSSRF脆弱性〕
サイトYでは,例えば,図4のリクエストを受け取ると,A社のニューストピックを取得し,表示するようになっている。

図の説明テキスト
図4 A社のニューストピックを取得するリクエスト
GET /news?topic=https://www.a-sha.co.jp/news/20220417.html というリクエストラインが示されている。topicパラメータにURLが指定されている。
この処理にSSRF脆弱性があった。D社は,③図4のリクエスト中の値を変更してサイトYに送り,サイトYのDBサーバのメンテナンス用のWebインタフェースにアクセスできることを確認した。
〔サイトZのSSRF脆弱性〕
サイトZでは,最近,新機能が開発された。新機能の一つである,旅行会社P社の宿泊サイト(以下,P社宿泊サイトという)との連携機能でSSRF脆弱性が検出された。その機能は,駅名を入力すると,その駅周辺のホテルの割引クーポンなどの“お得情報”を表示できるというものである。利用者が,P社宿泊サイトに登録されている駅名の一つ,“東京”を入力したときの流れを図5に,登録されていない架空の駅名である“abc”を入力したときの流れを図6に,D社の専門技術者V氏がSSRF脆弱性を検出した手順を表4に示す。

図の説明テキスト
図5 登録されている駅名である“東京”を入力したときの流れ
利用者、サイトZ、P社宿泊サイトの間の通信を示すシーケンス図とデータの表。駅名がURLエンコードされてリクエストされる。

図の説明テキスト
図6 登録されていない駅名である“abc”を入力したときの流れ
利用者、サイトZ、P社宿泊サイトの間の通信を示すシーケンス図と表。登録されていない駅名の場合、P社宿泊サイトから 301 MOVED PERMANENTLY のレスポンスが返される。

図の説明テキスト
表4 SSRF脆弱性を検出した手順
順序1から4の手順が記載されている。
順序3: P社宿泊サイトは,Locationヘッダに空欄 k のURLを含めたレスポンスをサイトZに返す。
順序4: サイトZは,受け取ったレスポンスを基に,空欄 k にリクエストを送る。
表4の手順によって,V氏は,Authorizationヘッダの値を受け取ることができた。P社の協力の下,この値を用いることで,本来許可なしではアクセスできないP社宿泊サイトや同じAuthorizationヘッダの値を利用するP社保有のサーバへのアクセスが可能になることを確認した。
D社からは,P社宿泊サイトからのレスポンスに含まれるURLが想定されたものかを調べて想定外の値の場合はそのURLにはアクセスしないようにするという,SSRF脆弱性への対策が提案された。加えて,④別の対策も実施することが望ましいとのことであった。
Rさんは,D社の脆弱性診断で検出された脆弱性について,B社の開発部のE課長に報告した。その後,B社の開発部によって対策が実施され,D社による再度の脆弱性診断で問題が修正されたことが確認された。
〔開発プロセスの見直し〕
B社のWebサイトのセキュリティ水準について,Rさんは,開発プロセスの観点からも調査を進めた。
B社では,顧客に機能の追加要望や性能の改善要望をヒアリングしながら,開発部内で目標を設定し,アジャイル開発を行っている。また,社外の研修などでセキュアプログラミングの知識を習得し,その知識を生かしてWebサイトを開発している。
B社の開発プロセスの概要を図7に示す。

図の説明テキスト
図7 B社の開発プロセスの概要
開発フェーズと改良フェーズに分かれている。改良フェーズは2週間周期でのリリースが基本だが、半年に1回、1か月の休止期間を設けている。
Rさんは,B社のWebサイトのセキュリティ水準を十分なものにするためには,A社のようなWebセキュリティ管理基準をB社に導入する必要があると考えた。次は,B社の開発プロセスについてのRさんとE課長の会話である。
Rさん:B社でも表1のとおりに実施できますか。
E課長:開発フェーズにおいてはできると思います。しかし,改良リリースの周期は2週間程度です。専門技術者による脆弱性診断には,その周期の大半を費やしてしまうので,省略できないでしょうか。
Rさん:⑤ソースコードレビューやツールによる脆弱性診断では発見できないが,専門技術者による脆弱性診断では発見できる脆弱性が多くあります。専門技術者による脆弱性診断を改良リリースにおいて毎回実施できない場合でも,当該診断が長期間行われないことを避けるために,⑥時期を決めて実施することや,⑦開発プロセスを見直すことを検討してみてください。
E課長:分かりました。そのほかに,アジャイル開発に合った脆弱性対策はないでしょうか。
Rさん:Webサイトの実装に必要となる一般的な機能や定型コードを,ライブラリとしてあらかじめ用意したフレームワークには,⑧脆弱性対策が組み込まれていて,それがデフォルトで有効になっているものもあるので,利用を検討してみてください。
その後,B社は,セキュリティを考慮したアジャイル開発を行うことになった。
設問と解答・解説
設問1
〔サイトBのXSS脆弱性〕について,(1),(2)に答えよ。
本文中の下線①における診断用リクエストの構成要素を,解答群の中から選び,記号で答えよ。
模範解答
選択肢ア: リクエストライン:GET /confirm?"><"
解説
正解の根拠
図1「ライブラリMのコード」では、出力されるHTMLの <meta> タグが以下のように組み立てられます。out.println("<meta property=\"og:url\" content=\"https://"+serverName+"/"+scriptName+"?"+queryString+"\">");
ここで、注記にあるように queryString にはURLのクエリ文字列以降の値が格納されます。
選択肢アのリクエストライン GET /confirm?"><img src=1 onerror=alert(1)><" を送信した場合、クエリ文字列以降の値である "><img src=1 onerror=alert(1)><" がそのまま queryString に入ります。
これが結合されると、出力は以下のようになります。<meta property="og:url" content="https://serverName/confirm?"><img src=1 onerror=alert(1)><"">
このように、"> によって <meta> タグが強制的に閉じられ、その直後に悪意のある <img src=1 onerror=alert(1)> タグが展開されるため、XSS脆弱性が発現します。
各選択肢の解説
- ア: 上記の通り、既存のタグを適切に閉じてスクリプトを実行できる構成になっているため正解です。
- イ: リクエスト中のタグ閉じが
>のみであり、<meta ... property="..." content="...?>となり、属性値のダブルクォーテーションが閉じられないため、後続のタグが正しく解釈されません。 - ウ, エ: これらは
POSTメソッドのリクエストボディに攻撃コードが含まれています。ライブラリMの処理ではクエリ文字列 (queryString) を対象としているため、リクエストボディの内容は出力に反映されません。
本文中の下線②について,考えられる再発防止策を,35字以内で述べよ。
模範解答
ダウンロードするライブラリに既知の脆弱性がないかを確認する。
特定のWebサイトからの入手をルール化し,明文化する。
採点基準
- 3点: ダウンロードするライブラリに既知の脆弱性がないかを確認すること、または特定のWebサイトからの入手をルール化し明文化することが記述されている。
- 1点: ライブラリの安全性確認や入手ルールの策定に言及しているが、記述が不十分または曖昧である。
- 0点: 未解答、または全く無関係な内容である。
- 3点: 具体的な対策として、簡潔かつ論理的な文章で構成されている。
- 1点: 文章の構造に不自然な点があるが、意味は読み取れる。
- 0点: 文章として意味をなしていない。
解説
解説
本文では、ライブラリの利用について「開発部のメンバそれぞれが,開発時に利用可能なライブラリを収集している」「使用するライブラリは,マルウェアが含まれていない,既知の脆弱性が修正された,安全性が確認できているライブラリを公開しているWebサイトから,ファイルサーバにダウンロードし,利用している」と記述されています。
しかし実際には、「今回使われていたライブラリMは,既知のXSS脆弱性の対策をしていないバージョンであった」ため、複数のWebサイトで同じXSS脆弱性が検出されてしまいました。
この原因を踏まえると、再発防止策としては、ダウンロード時にライブラリの脆弱性を確認することや、安全性が確認できるWebサイトからの入手を組織として徹底することが考えられます。
したがって、再発防止策としては以下のいずれかを記述します(どちらか一方で満点となります)。
- ダウンロードするライブラリに既知の脆弱性がないかを確認する。
- 特定のWebサイトからの入手をルール化し,明文化する。
高得点のポイント
- 「ダウンロードするライブラリに既知の脆弱性がないかを確認する」こと、または「特定のWebサイトからの入手をルール化し,明文化する」ことのいずれか一方を記述します。
- 本文で示された問題の背景を踏まえ、35字以内で簡潔かつ具体的にまとめましょう。
模範解答
利用者ID,セッションオブジェクト
採点基準
- 22点: 「利用者ID」と「セッションオブジェクト」を順不同で一つずつ答えている。
- 11点: 「利用者ID」又は「セッションオブジェクト」のどちらか一方だけを答えている(同じ正解を二つ答えている場合を含む)。
- 0点: 「利用者ID」と「セッションオブジェクト」のどちらも答えていない(同じ誤答を二つ答えている場合を含む)。
解説
正解の根拠
CSRF攻撃を防ぐためのトークン(csrftoken)は、正規の利用者が送信したリクエストであることをサーバ側で検証するために使用します。
本問のシステムではトークン自体は発行されているものの、それがどの利用者のものかが検証されていません。悪意のある利用者が自身の正規トークンを用いて別の利用者に意図しないリクエストを実行させる攻撃を防ぐには、サーバ側で管理している利用者IDまたはセッションオブジェクトとトークンをひも付けて検証する必要があります。
したがって、空欄 a,b には「利用者ID」と「セッションオブジェクト」が入ります(順不同)。
順不同で「利用者ID」と「セッションオブジェクト」の両方を答えていれば満点、どちらか一方のみを答えている場合(同じ正解を二つ書いた場合を含む)は半分、正解を一つも答えていない場合(同じ誤答を二つ書いた場合を含む)は0点となります。
設問3
〔サイトXのクリックジャッキング脆弱性〕について,(1),(2)に答えよ。
本文中の c に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢イ: β
解説
正解の根拠
クリックジャッキング攻撃では、利用者を騙すためのコンテンツを配置した罠画面を公開し、その手前に標的サイトの画面を透明にして重ねます。問題文より、画面βは攻撃者が用意した罠の画面であるため、罠サイトに公開する画面 c は「画面β」となります。
各選択肢の解説
- ア (α): 標的となるサイトXの画面であり、罠サイトに直接公開する画面ではないため誤りです。
- イ (β): 攻撃者が用意した罠画面であり、利用者を誘導するために罠サイトに公開するため正解です。
本文中の d に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢ア: 奥
解説
正解の根拠
クリックジャッキング攻撃では、利用者に罠画面を見せつつ、クリックイベントを手前の標的画面で発生させます。問題文よりクリックイベントは手前の画面で発生するため、見せかけの指示を配置する罠画面(画面β)は利用者から見て「奥」に配置します。したがって、d は「奥」です。
各選択肢の解説
- ア (奥): 罠画面βを配置すべき位置であり、手前に透明な標的画面を重ねることで攻撃が成立するため正解です。
- イ (手前): 手前に配置するとクリックイベントが罠画面で発生し、標的サイトを操作させられないため誤りです。
本文中の e に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢ア: 可視の
解説
正解の根拠
クリックジャッキング攻撃では、利用者に罠のボタンやリンクをクリックするよう誘導する必要があります。そのため、奥に配置した罠画面(画面β)は利用者から見える状態にしておく必要があります。したがって、e に入る画面βの状態は「可視の」となります。
各選択肢の解説
- ア (可視の): 利用者に罠のコンテンツを視認させてクリック操作を促すため正解です。
- イ (透明な): 罠画面を透明にすると利用者が操作対象を見ることができず、クリックを誘導できないため誤りです。
本文中の f に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢ア: α
解説
正解の根拠
クリックジャッキング攻撃では、利用者が意図しない操作を標的サイト上で実行させます。問題文より、サイトXの画面は「画面α」と定義されているため、利用者に不正な操作(更新ボタンの押下など)を行わせる対象として重ねて表示する画面 f は「画面α」です。
各選択肢の解説
- ア (α): 攻撃の標的となるサイトXの画面であり、罠画面の上に重ねて表示するため正解です。
- イ (β): 攻撃者が用意した罠画面であり、重ねて表示される標的側の画面ではないため誤りです。
本文中の g に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢イ: 手前
解説
正解の根拠
問題文に「クリックイベントは,利用者から見て手前にある画面上で発生するものとする」とあります。利用者のクリックによって標的サイトX(画面α)のボタンを押下させるには、画面αを利用者から見て「手前」に重ねて表示する必要があります。したがって、g は「手前」です。
各選択肢の解説
- ア (奥): 奥に配置するとクリックイベントが画面αで発生せず、標的サイトを操作させられないため誤りです。
- イ (手前): クリックイベントを発生させて標的サイトを意図せず操作させるための配置であるため正解です。
本文中の h に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢イ: 透明な
解説
正解の根拠
手前に配置した標的サイトX(画面α)が見えたままでは、利用者は罠に気づいてクリックしてくれません。利用者に奥の罠画面βを見せながら、実際には手前の画面αをクリックさせるためには、画面αを「透明な」状態にして重ねる必要があります。したがって、h は「透明な」です。
各選択肢の解説
- ア (可視の): 手前の画面αが見えてしまうと利用者に意図が露見し、奥の罠画面も見えなくなるため誤りです。
- イ (透明な): 奥の罠画面を透かして見せつつ、手前の画面αをクリックさせるために不可欠な設定であるため正解です。
本文中の i に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢エ: X-Frame-Options
解説
正解の根拠
クリックジャッキングの防止策として、Webページが <iframe> などのフレーム内に読み込まれることを制限するHTTPレスポンスヘッダを利用します。
従来から広く使われている独自の仕様が X-Frame-Options です。一方で、これに代わる機能として標準化されたものが Content-Security-Policy (CSP) の frame-ancestors ディレクティブです。
問題文には「後者は標準化されている」とあるため、空欄iに入るのは標準化される前のヘッダである X-Frame-Options となります。
各選択肢の解説
- ア: ファイルのダウンロード時の振る舞いを指定するヘッダであり、誤りです。
- イ: 標準化されている方(空欄j)に入るヘッダであり、iの箇所としては誤りです。
- ウ: MIMEスニッフィングを防止するヘッダであり、誤りです。
- エ: 正解です。
本文中の j に入れる適切な字句を,解答群の中から選び,記号で答えよ。
模範解答
選択肢イ: Content-Security-Policy
解説
正解の根拠
クリックジャッキングの防止策として、Webページが <iframe> などのフレーム内に読み込まれることを制限するHTTPレスポンスヘッダを利用します。
従来から広く使われている独自の仕様が X-Frame-Options(空欄i)です。一方で、これに代わる機能として標準化されたものが Content-Security-Policy (CSP) の frame-ancestors ディレクティブです。
問題文には「後者は標準化されている」とあるため、空欄jに入るのは標準化されているヘッダである Content-Security-Policy となり、イ が正解です。
各選択肢の解説
- ア: ファイルのダウンロード時の振る舞いを指定するヘッダ(Content-Disposition)であり、誤りです。
- イ: 正解です。
- ウ: MIMEスニッフィングを防止するヘッダ(X-Content-Type-Options)であり、誤りです。
- エ: 標準化される前の独自ヘッダ(X-Frame-Options、空欄i)であり、jの箇所としては誤りです。
設問3(2)は,正答率が低かった。クリックジャッキングの対策に使うレスポンスヘッダについては,標準化の動向を含めて正しく理解しておいてほしい。
設問4
本文中の下線③について,図4のリクエスト中のどの値をどのような値に変更したか。45字以内で具体的に述べよ。
模範解答
topicの値をhttps://db-y.b-sha.co.jp/に変更した。
採点基準
- 3点: 変更対象のパラメータ(topic)と、変更後のURL(https://db-y.b-sha.co.jp/)が正確に記述されている。
- 1点: 変更後のURLは合っているが、パラメータ名が不明確であるなど部分的な記述にとどまっている。
- 0点: 無関係または誤った記述である。
- 3点: どの値をどのような値に変更したか、因果関係が明確な文章で記述されている。
- 1点: 文章としてやや不自然であるが、意図は伝わる。
- 0点: 文章として意味をなしていない。
解説
正解の根拠
サイトYのSSRF脆弱性は、外部から与えられたURLに対してサーバがリクエストを送信してしまう問題です。
図4のリクエストにおいて、topic パラメータには https://www.a-sha.co.jp/news/20220417.html というURLが指定されています。攻撃者はこの値を改ざんし、サイトYの内部ネットワークにあるDBサーバにアクセスを試みました。
表2の注1より、サイトYのDBサーバのメンテナンス用WebインタフェースのURLは https://db-y.b-sha.co.jp/ であることが記載されています。したがって、topic の値をこのURLに変更することでSSRF攻撃を成立させています。
高得点のポイント
- 変更対象となるパラメータが「
topicの値」であること。 - 変更後の値として、表2から読み取れる正確なURL(
https://db-y.b-sha.co.jp/)が指定されていること。
設問5
〔サイトZのSSRF脆弱性〕について,(1),(2)に答えよ。
表4中の k に入れる適切な字句を,15字以内で答えよ。
模範解答
V氏が用意したサイト
採点基準
- 3点: 「V氏が用意したサイト」または同義の内容が正確に記述されている。
- 1点: 方向性は合っているが、表現が曖昧である。
- 0点: 無関係または誤った記述である。
- 3点: 字数制限内で名詞句として簡潔にまとめられている。
- 1点: 冗長な表現が含まれるが、意図は読み取れる。
- 0点: 解答として成立していない。
解説
正解の根拠
表4および図6の流れを追うと、攻撃の手順が理解できます。
手順1で、V氏は Host ヘッダの値を「V氏が用意したサイトのFQDN」に変更してリクエストを送信しています。
手順2でサイトZはP社宿泊サイトへリクエストを送りますが、このとき図6の注2にあるように「サイトZは,(1)のHostヘッダの値を,returnURL中のホスト名として指定する」処理を行います。つまり、returnURL にはV氏が用意したサイトのURLが組み込まれます。
手順3で、P社宿泊サイトは登録されていない駅名が入力されたため、returnURL で指定された先へリダイレクト(301)させようとし、Location ヘッダにそのURLを含めます。
したがって、空欄kに含まれるのは V氏が用意したサイト のURLとなります。
高得点のポイント
- 表4の記述に基づいて、「V氏が用意したサイト」というキーワードを過不足なく抜き出せていること。
本文中の下線④について,別の対策とは何か。B社で実施することが望ましい対策を,25字以内で述べよ。
模範解答
returnURLの値を固定値にする。
採点基準
- 3点: returnURLの値を固定値(静的)にするなどの根本的対策が正確に記述されている。
- 1点: 対策の意図は伝わるが、具体性に欠ける表現である。
- 0点: 無関係または誤った対策である。
- 3点: 要求された文字数内で、対策の内容が論理的に記述されている。
- 1点: 日本語としてやや不自然だが、意味は通じる。
- 0点: 文章として意味をなしていない。
解説
正解の根拠
設問5(1)で判明したように、今回のSSRF脆弱性の根本的な原因は、サイトZが外部(クライアント)から送信された Host ヘッダの値を信用し、それを基にP社宿泊サイトへ送る returnURL を動的に組み立てている点にあります。
これを防ぐためには、外部から操作可能な入力値を利用せず、サイトZ側であらかじめ決めたエラーページのURLを returnURL として固定的に設定する対策が有効です。
高得点のポイント
- SSRFの原因となっている
returnURLの動的生成を廃止し、値を固定化(ハードコード等)する旨が含まれていること。
設問5(2)は,正答率が低かった。脆弱性対策のために必要な実装は,システムによって異なる場合がある。システムごとに最適な方法を検討できるようにしておいてほしい。
設問6
〔開発プロセスの見直し〕について,(1)〜(4)に答えよ。
本文中の下線⑤について,該当する脆弱性を二つ挙げ,それぞれ15字以内で答えよ。(1つ目)
模範解答
一部のセッション管理の脆弱性
認可・アクセス制御の脆弱性
採点基準
- 3点: 「一部のセッション管理の脆弱性」または「認可・アクセス制御の脆弱性」のいずれか一方が正確に挙げられている。
- 1点: いずれかの脆弱性について言及しているが、記述が不正確である。
- 0点: 無関係または誤った脆弱性である。
- 3点: 字数制限内で名詞句として簡潔に記述されている。
- 1点: 不要な語句が含まれるが意図は通じる。
- 0点: 解答として成立していない。
(2つ目)
模範解答
一部のセッション管理の脆弱性
認可・アクセス制御の脆弱性
採点基準
- 3点: 1つ目の欄と異なるもう一方の脆弱性(1つ目が「一部のセッション管理の脆弱性」なら「認可・アクセス制御の脆弱性」、1つ目が「認可・アクセス制御の脆弱性」なら「一部のセッション管理の脆弱性」)が正確に挙げられている。
- 1点: 1つ目の欄と異なるもう一方の脆弱性について言及しているが、記述が不正確である。
- 0点: 1つ目の欄と同じ内容を答えている、無関係または誤った脆弱性である。
- 3点: 字数制限内で名詞句として簡潔に記述されている(1つ目の欄と異なる内容である場合に限る)。
- 1点: 不要な語句が含まれるが意図は通じる(1つ目の欄と異なる内容である場合に限る)。
- 0点: 解答として成立していない。1つ目の欄と同じ内容を答えている場合もこの段階とする。
本文中の下線⑥について,専門技術者による脆弱性診断が長期間行われないことを避けるためには,どのような時期に実施すればよいか。改良リリースの実施に影響を与えないことを前提に,20字以内で答えよ。
模範解答
改良フェーズにおける1か月の休止期間
採点基準
- 3点: 「改良フェーズにおける1か月の休止期間」を活用する旨が正確に記述されている。
- 1点: 休止期間に触れているが、指定が曖昧である。
- 0点: 無関係または誤った時期を記述している。
- 3点: 字数制限内で名詞句または簡潔な文としてまとまっている。
- 1点: 冗長な表現が含まれるが、意図は読み取れる。
- 0点: 解答として成立していない。
解説
正解の根拠
図7「B社の開発プロセスの概要」の注記2に、「改良フェーズにおいて、半年に1回、1か月の休止期間を設けている。その間,開発部のメンバは,... Webサイトの点検などを実施している」とあります。
専門技術者による脆弱性診断は期間が「10日間くらいが目安」(表1)であり、通常の2週間周期の改良リリース中に実施することは困難です。しかし、この1か月の休止期間であれば、リリースのスケジュールに影響を与えることなく10日間の診断を実施することが可能です。
高得点のポイント
- 図7で提示されている「改良フェーズにおける1か月の休止期間」という時期を的確に指定していること。
本文中の下線⑦について,専門技術者による脆弱性診断が長期間行われないことを避けるためには,開発プロセスをどのように見直せばよいか。アジャイル開発の継続を前提に,40字以内で述べよ。
模範解答
専門技術者による脆弱性診断が必要なときは,改良リリースを次回に持ち越す。
半年に一度,改良リリースの期間を長くする。
定期的に,期間の長い改良リリースを設ける。
採点基準
- 3点: リリースの持ち越しや、期間の延長など、アジャイル開発に適応させたプロセス変更が具体的に記述されている。
- 1点: プロセスの変更に言及しているが、具体性に欠ける。
- 0点: 無関係または誤った内容である。
- 3点: 論理的な文章で、40字以内の要求を満たしている。
- 1点: 文章としてやや不自然だが、意味は通じる。
- 0点: 文章として意味をなしていない。
解説
正解の根拠
アジャイル開発では短いサイクル(B社の場合は2週間周期)でリリースを繰り返しますが、専門技術者による脆弱性診断には約10日間の期間が必要です(表1)。
設問6(3)の休止期間だけでは、システムの大規模な変更時などに適切なタイミングで診断を受けられないリスクがあります。そこで、アジャイル開発を継続しつつ専門技術者による診断を組み込むためには、診断が必要なスプリント(回)の改良リリース期間を意図的に長く設定するか、あるいは診断完了を待つためにそのサイクルのリリースを次回に持ち越すといったプロセスの柔軟な見直しが必要です。
高得点のポイント
- 診断に要する日数を考慮し、「リリース期間を長くする」または「リリースを次回に持ち越す」などの具体的な開発プロセスの調整方法が記述されていること。
本文中の下線⑧について,CSRF脆弱性の場合では,どのような処理を行う機能が考えられるか。その処理を,55字以内で具体的に述べよ。
模範解答
CSRF対策用トークンの発行,HTMLへの埋め込み,必要なひも付け,及びこれを検証する処理
採点基準
- 3点: CSRFトークンの発行、埋め込み、ひも付け、検証の一連の処理が網羅的に記述されている。
- 1点: CSRFトークンには言及しているが、一連の処理の一部しか記述されていない。
- 0点: 無関係または誤った機能の記述である。
- 3点: 一連の処理が論理的かつ自然な文章で接続されている。
- 1点: 言葉足らずや不自然な接続があるが、意図は読み取れる。
- 0点: 文章として成立していない。
解説
正解の根拠
Webアプリケーションフレームワークには、開発者が意識せずともデフォルトでセキュリティ対策が有効になる機能(セキュアデフォルト)が備わっていることが多くあります。
CSRF脆弱性への対策の場合、サーバ側で推測困難な トークンを発行 し、それをクライアントに送信する HTML(フォーム)へ自動的に埋め込み、セッション情報との ひも付け を行い、フォーム送信時にその トークンを検証する という一連の定型的な処理が必要です。多くのフレームワークでは、この一連のトークン処理機構がデフォルトで組み込まれています。
高得点のポイント
- トークンの「発行(生成)」、「HTMLへの埋め込み」、「セッション等とのひも付け」、「検証」という一連の処理の流れが網羅されていること。
- 55字以内で処理内容が具体的に説明されていること。
設問6(1)は,正答率が低かった。脆弱性の種類によって,検出に有効な手段が異なる。それぞれの脆弱性について,どのような検出手段が有効かを理解しておいてほしい。設問6(4)は,正答率が低かった。ソフトウェア開発に使われているフレームワークにどのような脆弱性対策が組み込まれているかを知っておいてほしい。