【出典:情報処理安全確保支援士試験 令和5年度 春期 午後2 問1】
https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05h_sc_pm2_qs.pdf
[フェーズ3:ZさんとB社での診断の実施と結果比較]
ZさんとB社は、サイトMに対して診断を実施した。サイトMの画面遷移を図2に示す。
Zさんは、Zさんの診断結果とB社の診断結果とを比較した。その結果、Zさんは脆弱性の一部を検出できていないことが分かった。検出できなかった脆弱性は、アンケート入力1の画面での入力値に起因するクロスサイトスクリプティング(以下、クロスサイトスクリプティングをXSSという)と、トピック検索の画面での入力値に起因するSQLインジェクションであった。サイトMのアンケート入力1からの画面遷移を図3に示す。
トピック検索の画面で検索条件として入力した値の処理に関する診断で、ツールVが送ったパラメータと検索結果の件数を表3に示す。なお、トピック検索の画面で検索条件として入力した値は、パラメータkeywordに格納される。
ツールVは、B社の診断では、keyword=manual(a)とkeyword=manual(b)の検索結果を比較して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社グループの診断手順案を作成した。
設問②
a=イ b=ウ
aにはSQLインジェクションを検出できるようなパラメータが入る
bには検索がヒットしないSQL文となることが想定できる
SQLインジェクションをしっていれば、’ and ‘ a’=’ aであることが導ける。
ヒットしない検索式は、’ and ‘ a’=’ bとなる
c=2-3
XSSについては、入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。XSSの検出には、ツールVにおいて図1中の(c)の②設定が必要でした
入力した画面、その先の画面という複数のURLを検査するために必要な機能の設定は、2-3の診断対象URLの拡張機能の設定機能であることがわかる
③アンケート入力1からアンケート入力2に遷移するURLにアンケート確認URLを登録すること
XSSについては、入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。XSSの検出には、ツールVにおいて図1中の(c)の②設定が必要でした
該当するのはこの遷移画面の情報です。
アンケート入力1から2つ先の画面はアンケート確認画面なので、拡張機能に設定を行う必要があります
④トピック検索結果画面の結果が1以上になる値
③keywordの初期値としてSQLインジェクションを検出できる”manual”のような値を設定する必要がありました。
SQLの構文エラーが発生するような文字列は0が返ってくるため、1以上が検索可能な文字列を設定する必要があります。