情報処理安全確保支援士試験 令和4年度 春期 午後2 問1
【出典:情報処理安全確保支援士試験 令和4年度 春期 午後2 問1(一部、加工あり)】
問1 Webサイトのセキュリティに関する次の記述を読んで、設問1〜6に答えよ。
A社は、従業員1,500名の中堅システム開発会社である。A社では、セキュリティ品質の高いWebサイトを開発するために、表1に示すWebセキュリティ管理基準を定めて運用している。
[A社によるB社の子会社化]
B社は、従業員200名の新興のITサービス会社であり、各種SaaSを提供している。アジャイル開発の能力が高く、機能の追加や性能の改善を頻繁に行っている。B社とA社とは協業関係にあったが、両者の経営陣は、双方の強みを生かせると判断し、A社によるB社の子会社化について合意した。
B社のクラウド環境には、コーポレートサイト(以下、サイトBという)、及びB社が提供中の三つのSaaSそれぞれのWebサイト(以下、サイトX、サイトY、サイトZという)がある。それらの概要を表2に示す。
子会社化に当たって、B社のWebサイトのセキュリティ水準を確認することになり、A社の品質管理部でセキュリティ技術を担当しているRさんが対応することになった。
[B社のWebサイトのセキュリティ水準の確認]
Rさんは、サイトB、サイトX、サイトY及びサイトZに対する脆弱性診断をD社に依頼した。診断の結果、検出された脆弱性を表3に示す。
[サイトBのXSS脆弱性]
D社は、サイトBに①診断用リクエストを送ることで、XSS脆弱性があることを確認した。このリクエストは、ライブラリMを使ってプログラムCが処理する。ライブラリMのコードを図1に示す。
ライブラリMは、SEOのためのライブラリである。
B社では、開発部のメンバそれぞれが、開発時に利用可能なライブラリを収集している。使用するライブラリは、マルウェアが含まれていない、既知の脆弱性が修正された、安全性が確認できているライブラリを公開しているWebサイトから、ファイルサーバにダウンロードし、利用している。ファイルサーバは、開発部のメンバであればアクセス可能である。
今回使われていたライブラリMは、既知のXSS脆弱性の対策をしていないバージョンであった。その結果、ライブラリMを使っているサイトB、サイトX、サイトY及びサイトZにおいて、同じXSS脆弱性が検出された。
これを受けて、B社における②再発防止策について検討した。
下線①における診断用リクエストの構成要素を、解答群の中から選び、記号で答えよ。:ア
ア リクエストライン:GET /confirm?”><img src=1 onerror=alert(1)><“
イ リクエストライン:GET /confirm?><img src=1 onerror=alert(1)><“
ウ リクエストライン:POST /confirm
リクエストボディ:”><img src=1 onerror=alert(1)><“
エ リクエストライン:POST /confirm
リクエストボディ:><img src=1 onerror=alert(1)><“
「D社は、サイトBに①診断用リクエストを送ることで、XSS脆弱性があることを確認した。」
表3(検出された脆弱性(抜粋))から、サイトBにはクロスサイトスクリプティング(XSS)脆弱性が検出されました。
XSSは、Webページに不正なスクリプトを埋め込まれてしまう攻撃です。
診断用リクエストは、「このリクエストは、ライブラリMを使ってプログラムCが処理する。」「ライブラリMは、SEOのためのライブラリである。」とあります。
SEO(Search Engine Optimization:検索エンジン最適化)は、Webサイトを最適化して、Googleなど検索エンジンの上位に表示されるようにするものです。
図1(ライブラリMのコード)を再掲します。
まず、out.printlnは、Javaの関数で、「”」(ダブルクォーテーション)で囲んだ部分を出力するものです。
そして、SEO対策のmetaタグを「<meta property=”og:url”」とあるようにOGP(Open Graph Protocol)で定義しています。
OGPは、Webページの要約などを表示する箇所に指定する情報を定義でき、URLや画像(og:image)を指定することができます。
なお、「\」はエスケープシーケンスで、「”」(ダブルクォーテーション)などのプログラム的に意味がある文字を単に文字列として表現するものです。
図1の注記にしたがって、選択肢アの診断用リクエストを当てはめていきます。
- serverName:リクエストのURLのホスト名(www.b-sha.co.jp)
- scriptName:URLのパス名(confirm)
- queryString:URLのクエリ文字列以降の値がURLデコードされて格納(”><img src=1 onerror=alert(1)><“)
これによって、ライブラリMのout.printlnでは、「<meta property=”og:url” content=”https://www.b-sha.co.jp/confirm?”><img src=1 onerror=alert(1)><“”>」となり、metaタグ、imageタグと「<“”>」が出力されることになります。
これはJavaスクリプトが実行できてしまうことになり、XSS脆弱性があるということを示します。
選択肢イの場合は、「<meta property=”og:url” content=”https://www.b-sha.co.jp/confirm?><img src=1 onerror=alert(1)><“”>」となり、contentが「”」(ダブルクォーテーション)で閉じられていないため構文エラーになります。
選択肢ウ、エでは、リクエストボディにimgタグを送信していますが、図1のライブラリMのコードではリクエストボディの処理は含まれていません。
したがって、XSS脆弱性の診断用リクエストとしては、選択肢アが適切です。
下線②について、考えられる再発防止策を、35字以内で述べよ:ダウンロードするライブラリに既知の脆弱性がないかを確認する。/特定のWebサイトからの入手をルール化し、明文化する。
「これを受けて、B社における②再発防止策について検討した。」
開発で使用するライブラリについて、何が課題であったかを確認します。
「B社では、開発部のメンバそれぞれが、開発時に利用可能なライブラリを収集している。使用するライブラリは、マルウェアが含まれていない、既知の脆弱性が修正された、安全性が確認できているライブラリを公開しているWebサイトから、ファイルサーバにダウンロードし、利用している。ファイルサーバは、開発部のメンバであればアクセス可能である。
今回使われていたライブラリMは、既知のXSS脆弱性の対策をしていないバージョンであった。その結果、ライブラリMを使っているサイトB、サイトX、サイトY及びサイトZにおいて、同じXSS脆弱性が検出された。」
上記の記述からは、「マルウェアが含まれていない、既知の脆弱性が修正された、安全性が確認できているライブラリを公開しているWebサイト」とあり一見すると問題ないように思えますが、結果的には既知のXSS脆弱性の対策をしていないバージョンでした。
このように他の組織が運営しているWebサイトがどこまで信用できるかは定かではないため、当該ライブラリに既知の脆弱性がないかを自身で確認すべきです。
もう一点、信用できる組織(例えば、Apache Software Foundaton)が保障しているような特定のWebサイトが公開しているライブラリを使用するなど、入手ルールの明文化を行うことが挙げられます。