【情報処理安全確保支援士試験 令和5年度 春期 午後2 問1 No.2】

情報処理安全確保支援士試験 令和5年度 春期 午後2 問1

【出典:情報処理安全確保支援士試験 令和5年度 春期 午後2 問1(一部、加工あり)】

[フェーズ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:
ア ”
イ ’ and ‘ a’=’ a
ウ ’ and ‘ a’=’ b
エ and 1=0
オ and 1=1

B社「keyword=manual(a):10件」「keyword=manual(b):0件
Zさん「keyword=xyz(a):0件」「keyword=xyz(b):0件
ツールVは、B社の診断では、keyword=manual(a)とkeyword=manual(b)の検索結果を比較してSQLインジェクションを検出できたが、Zさんの診断ではSQLインジェクションを検出できなかった。
 この診断は、SQLインジェクションの検出について、入力したパラメータによってSQL文が不正に実行されるかを確認するものです。
 SQL文としては、例として「SELECT * FROM xxx WHERE keyword=’$keyword’」というもので、「$keyword」に入力した値をセットします。
 表3のB社の診断の1行目はパラメータ「keyword=’manual’:10件」でkeywordが「manual」のデータが10件あるということ、2行目はパラメータ「keyword=’manual”:0件」でkeywordが「manual’」のデータは存在しないか構文エラーとなったということになります。
 keyword=’manual’に続く文字を選択肢のように変えてSQL文を実行した時に、該当するデータが存在するかを確認します。
 アの「keyword=’manual'”」は、問題文の情報からは不明です。
 イの「keyword=’manual’ and ‘ a’=’ a’」は、「’a’=’a’」は常にTrue(真)であることから、「keyword=’manual’」と同等であり、10件該当することになります。
 ウの「keyword=’manual’ and ‘ a’=’ a’」は、「’a’=’b’」は常にFalse(偽)であることから、0件となります。
 エの「keyword=’manual and 1= 0’」は、問題文の情報からは不明です。
 オの「keyword=’manual and 1= 1’」は、問題文の情報からは不明です。

c:(2-3)

XSSについては、入力したスクリプトが二つ先の画面でエスケープ処理されずに出力されていました。XSSの検出には、ツールVにおいて図1中の(c)の②設定が必要でした。
 XSSは、「検出できなかった脆弱性は、アンケート入力1の画面での入力値に起因するクロスサイトスクリプティング(以下、クロスサイトスクリプティングをXSSという)と、」とあるようにアンケート入力1の画面での入力値に起因して発生しています。
 そして、二つ先の画面、つまり、図3からアンケート確認の画面でエスケープ処理されずに出力されていたということです。
 ツールVの機能で、これらの複数の画面に跨って有効となるものを探すと、(2-3)診断対象URLの拡張機能にに「診断対象URLの応答だけでなく、別のURLの応答も判定対象になる」とあり、まさしくこの機能が使えそうです。

下線②について、どのような設定か。設定の内容を、図2中の画面名を用いて60字以内で答えよ。:アンケート入力1からアンケート2に遷移するURLの拡張機能に、アンケート確認のURLを登録する。

XSSの検出には、ツールVにおいて図1中の(c)の②設定が必要でした。
 図1(2-3)の記述「本機能を設定するには、診断対象URLの拡張機能設定画面を開き、拡張機能設定に、判定対象に含めるURLを登録する。」を使用して、具体的にアンケート入力1→アンケート入力2→アンケート確認の画面遷移のURLを登録していくといいでしょう。

下線③について、keywordの初期値をどのような値に設定する必要があるか。初期値が満たすべき条件を、40字以内で具体的に答えよ。:トピック検索結果の画面での検索結果の件数が1以上になる値

そこで、③keywordの初期値としてSQLインジェクションを検出できる”manual”のような値を設定する必要がありました
 Zさんの検索結果の件数を確認すると、全て0件でした。
 検索結果0件については、「SQLインジェクションについては、keywordの値が文字列として扱われる仕様となっており、SQLの構文エラーが発生するような文字列を送ると検索結果が0件で返ってくるようです。」とあるように、SQLの構文エラーが発生した結果と判断できます。

 一方、B社では検索結果が10件となるパラメータ(初期値)をセットした上で、続く文字を入力して検出しています。
 Zさんも同様に、検索結果が1件以上となる初期値を設定する必要がありました。