この記事では,令和6年度 秋期 情報処理安全確保支援士試験 午後問題 問3を解説します!
各解説につきましては,独自の見解です.正確性を保証するものではありませんので,ご了承ください.
情報処理安全確保支援士試験に向けて勉強されている方の参考になれば幸いです.
本記事における出典:令和6年度 秋期 情報処理安全確保支援士試験 午後 問3
IPA(問題冊子・解答例・採点講評)のリンク
本記事内の解答例については,全てIPA公式からの引用になります.
設問1 本文中の a ~ e に入れる行番号・字句
空欄 a~e は,問題冊子24ページの下部にあります.また,同ページの表2を併せて参照する必要があります.
(前略)
Gさん:表2の a 行目が b 脆弱性を狙った攻撃だと思いますが,そういった攻撃であれば偽フォームの表示が可能です。さらに b 脆弱性が c 型であれば,1回の攻撃で多数の利用者に対して偽フォームの表示が可能です。
Rさん:それとは,別に表2の d 行目は e 脆弱性を狙った攻撃の痕跡だと思うが,仮にその脆弱性が存在した場合に,偽フォームの表示は可能なのか。
Gさん:WebアプリPが,DBサーバに…(後略)
解答例
a:5
b:クロスサイトスクリプティング
c:格納
d:2
e:SQLインジェクション
解説
まず,空欄a~cについて,Gさんの発言内容からだけでも「クロスサイトスクリプティング(以下:XSSとします.)ではないか?」と予測することができます.
Gさんの発言の中でキーとなるのは,「偽フォームの表示が可能です。」という部分です.これは,攻撃によってサイトが改ざんされる可能性を示唆しており,脆弱性としてはSQLインジェクションやXSSが候補に挙がります.また,その後の「 c 型であれば,1回の攻撃で多数の利用者に対して偽フォームの表示が可能」という文章から,空欄bに当てはまるのはクロスサイトスクリプティングであることがほぼ確定します.
ここで,表2の5行目を見てみると,クエリパラメータに<script>タグを含むリクエストURIに対し,成功を示すHTTPステータスコード200が返されていることから,5行目がXSS脆弱性を狙った攻撃であると断定できます.
続いて,XSSの主なタイプですが,以下の3つを抑えておきましょう.
この3つのタイプのうち,1回の攻撃で多数の利用者に対して偽フォームを表示させ得る(持続性がある)のは,格納型XSSになります.従って,空欄cに当てはまるのは格納となります.
ちなみに,この問題は令和5年度秋期 情報処理安全確保支援士試験 午後 問1からのほぼ再出題です.比較的直近の試験回から,ほぼそのままの再出題という珍しいケースでした.
続いて,空欄d及びeを見ていきます.
キーとなるのは,直後のGさんの発言「WebアプリPが,DBサーバに格納している情報を基にWebページを動的に生成していれば…」という部分.
DB(データベース)絡みで改ざんと言えば,答えはSQLインジェクション.それに該当する部分は,表2の2行目にあります.
クエリパラメータにSQLを含むリクエストURIに対し,同じくコード200が返されています.
設問2 〔偽フォーム表示の原因の調査と対策〕
全体的にWebプログラミングに関する知識が要求される大問です.
(1) 下線①について,書換え後の画面全体を図示
下線①は,問題冊子25ページにあります.
(前略) ① 配送先・支払方法選択画面でファイルKが読み込まれており,HTMLの一部が書き換えられていた。
元の配送先・支払方法選択画面は問題冊子23ページの図1,ファイルKと配送先・支払方法選択画面のHTMLソースは,問題冊子26ページにあります.
解答例
解答例は,IPAの公式ホームページ(IPA(問題冊子・解答例・採点講評)のリンク)からご確認ください.
解説
Webプログラミングに関する高い知識が要求される問題ですが,ヒントもあります.
まず,注目したいのが問題冊子23ページ下部にある以下の文章です.
〔利用者からの問合せ〕
(前略)クレジットカード情報を入力する画面が2回表示される,(中略)支払方法が勝手にクレジットカード決済になってしまう(後略)
明らかに不自然な仕様であることから,これはHTMLの書き換え(改ざん)によって引き起こされている事象であると判断できます.
つまり,書き換え後の配送先・支払方法選択画面には,クレジットカード情報入力欄が表示されていると推測できます.
では,整形後のファイルKを見てみましょう.
let elem = document.querySelector("#shopping-form > div > div > div.order_payment > div.radio");という部分で,元のフォームのラジオボタンがある領域を取得します.
そして,
element.innerHTML='以降のコードで取得したラジオボタンがある領域を,攻撃者が用意したクレジットカード情報入力フォームに差し替えられたというものです.
(2) 下線②について,パラメータ名とその値
下線②も同じく,問題冊子25ページにあります.
(前略) ② 配送先・支払方法選択画面から支払手続き画面への画面遷移の処理で利用しているパラメータの値が変更され,支払方法がクレジットカード決済に固定されていた。
解答例
パラメータ名:order[Payment]
値:1
解説
まず,図1の/shoppingページの画面と図3のHTMLソースを見てみると,配送先・支払方法選択は以下のラジオボタンで実装されていることが分かります.
<input type="radio" id="Payment_1 name="order[Payment]" required data-trigger="change" value="1"
checked />
<label for="Payment_1"><span>クレジットカード決済</span></label>
<input type="radio" id="Payment_2 name="order[Payment]" required data-trigger="change" value="2"
checked />
<label for="Payment_2"><span>銀行振込</span></label>それを踏まえた上で,図2 「整形後のファイルK」を見てみると,
<input type="hidden" name="order[Payment]" value="1" />という隠しフィールドが用意されていることが分かります.この箇所こそが,まさに「配送先・支払方法選択画面から支払手続き画面への画面遷移の処理で利用しているパラメータの値が変更され,支払方法がクレジットカード決済に固定されていた」部分なのです.
従って,パラメータ名はorder[Payment],値は1であることが分かります.
(3) 図2について,4~15行目の処理内容
ソースコードは,問題冊子26ページの図2をご確認ください.
解答例
addEventListennerメソッドで配送先・支払方法選択画面のform要素にイベントリスナーを登録し,submit時にクレジットカード情報をクエリパラメータとしてi-sha.comに送信する。
解説
4行目let form = document.getElementById('shopping-form');
→ DOM から <form id="shopping-form"> を取得して form 変数に格納
5行目form.addEventListener('submit', function() {
→ フォーム送信時(submit イベント)に実行される無名関数(イベントハンドラ)を登録
7行目〜11行目
ページ上に挿入された(改ざんで追加された)入力欄の各要素から値を読み取る.読み取る項目は カード番号・有効期限(月)・有効期限(年)・名義・セキュリティコード
12行目
→ 取得したカード情報をクエリパラメータとして連結し、攻撃者の受信用 URL を生成
14行目req.send();
→ 実際にリクエストを発行し、カード情報を攻撃者サイトへ送信
解答の肝となる処理を抜粋し,特に重要な部分を黄色のマーカーで示しました.
設問3 〔クレジットカード情報の漏えいの調査と対策〕
知識問題と読解問題の融合問題です.
(1) 下線③について,情報を取得する方法
下線③は,問題冊子28ページにあります.要点を抜粋して掲載します.
③ 攻撃者のWebサーバでWebアプリケーションプログラムを用意していなくても,攻撃者は利用者の入力した情報を取得する方法があります。
解答例
WebサーバのアクセスログのリクエストURIから情報を取得する。
解説
図2 「整形後のファイルK」からは,利用者が入力した情報をURIのクエリパラメータに格納し,GETメソッドで攻撃者のサーバに送信していることが分かります.
赤マーカー部分が解答の肝です.
POSTメソッドであれば,リクエストボディを取り出して保存するWebプログラムが必要になりますが,今回はGETメソッドのクエリパラメータですので,Webサーバのアクセスログから取り出すだけで,特にプログラム等は必要ありません.
題意やhttpsで送出していることを踏まえると,「通信を盗聴する」といった類の解答は不適当です.本問においては,HTTPS 前提(TLS)なので,基本的に盗聴者がネットワーク上でパス/クエリの中身を覗き見ることはできません.
(2) 本文中の f に入れる適切な字句
空欄fは,問題冊子28ページにあります.
(前略)攻撃者のWebサーバにクレジットカード情報を送信する直前までの操作をした利用者を被害候補として特定するために,その期間のアプリケーションログから f を抽出したいと思います。
解答例
配送先・支払方法選択画面にアクセスしたアカウント名
解説
本件では,配送先・支払方法選択画面が何者かによって改ざんされていました.
従って,Rさんの主張する「攻撃者のWebサーバに情報を送信してしまった利用者は漏れなく特定したいが,送信していない利用者はできるだけ含めたくない。」という要件を充足するためには,
ログから配送先・支払方法選択画面にアクセスしたアカウント名を抽出する必要があります.

