PR

令和5年度秋期 情報処理安全確保支援士試験 午後 問1 徹底解説

R5秋期SC PM1解説 アイキャッチ セキュリティ
記事内に広告が含まれています。
スポンサーリンク

この記事では,令和5年度 秋期 情報処理安全確保支援士試験 午後問題 問1の解説(独自の見解)を行います.
情報処理安全確保支援士試験に向けて勉強されている方の参考になれば幸いです.

本記事における出典:令和5年度 秋期 情報処理安全確保支援士試験 午後 問1
IPA(問題冊子・解答例・採点講評)のリンク
本記事内の解答例については,全てIPA公式からの引用になります.

スポンサーリンク
スポンサーリンク

設問1 この攻撃で使われた脆弱性

 本問は,XSS(クロスサイトスクリプティング)に関する知識問題でした.各小問を見ていきましょう.

(1) XSS脆弱性の種類

XSS脆弱性の種類を解答群の中から選び,記号で答えよ.

ア DOM Based XSS    イ 格納型XSS    ウ 反射型XSS

解答例

イ(格納型XSS)

解説

ここで,XSSの種類とそれぞれの特徴について確認します.

反射型XSS:ユーザの入力値が応答としてサーバ経由で即座に返される際に発生し得るXSSです.
主に,検索フォームやURLパラメータ等の入力値をそのままHTMLに埋め込むことで発生します.
攻撃スクリプトを含むURLをクリックすることで,不正なスクリプトが実行されます.
上記の原理から分かるように,永続性はありません

格納型XSS:攻撃スクリプトがサーバに保存させることで,他のユーザに対して永続的に影響を及ぼすタイプのXSSです.掲示板やコメント(レビュー),プロフィールなどをデータベースに保存するシステムで発生し得ます.

DOM Based XSS:クライアントサイド(ブラウザ側)で動作するXSSです.主に,ユーザー入力をJavaScriptが直接処理し,不適切な処理を行うことで発生します.こちらも反射型XSS同様に,永続性はありません

ここで,問題冊子4ページ下部に注目してみましょう.

図3のHTMLを確認したNさんは,会員Aによって15件のレビューが投稿されていること,及びページVには長いスクリプトが埋め込まれていることに気付いた.

上記のような記述があります.また,3ページ上部に「ある日,会員から,無地Tシャツのレビューページ(以下,ページVという)に16件表示されるはずのレビューが2件しか表示されないという問合せが寄せられた.」という記述があります.

 これらの記述より,今回のケースでは攻撃スクリプトがサーバ(データベース)に保存されており,永続性のある攻撃だと判断できます.従って,正解はイ(格納型XSS)となります.

令和5年度秋期試験では,選択式の問題でしたが,丁度1年後に実施された令和6年度秋期試験の問3では,「格納」と記述させる問題が出題されていました.
より難易度を上げた形で,過去問類似問題の出題が確認されました.

(2) WebアプリQにおける対策

WebアプリQにおける対策を,30字以内で答えよ.

解答例

レビュータイトルを出力する前にエスケープ処理を施す.(26字)

解説

IPAのドキュメント「安全なウェブサイトの作り方」からの出題になります.

「安全なウェブサイトの作り方 – 1.5 クロスサイト・スクリプティング」では,HTMLテキストの入力を許可しない場合の対策として,以下の方法が紹介されています.

ウェブページを構成する要素として、ウェブページの本文やHTMLタグの属性値等に相当する全ての出力要素にエスケープ処理を行います。

安全なウェブサイトの作り方 – 1.5 クロスサイト・スクリプティング | 情報セキュリティ | IPA 独立行政法人 情報処理推進機構

上記の内容を骨子として,今回の問題に条件や字数等を合わせると,「レビュータイトルを出力する前にエスケープ処理を施す.」という解答を導くことができます.

図3 ページVのHTML を分析すると,<div class=”review-title”> </div>の間に不審なスクリプトが埋め込まれており,攻撃者はレビュータイトルの入力欄に攻撃スクリプトを入力し,それをレビューとして投稿したものと推測できます.

スポンサーリンク

設問2 入力文字数制限を超えるスクリプトが実行されるようにした方法

図3について,入力文字数制限を超える長さのスクリプトが実行されるようにした方法を,50字以内で答えよ.

解答例

HTMLがコメントアウトされ一つのスクリプトになるような投稿を複数回に分けて行った.(39字)

解説

 2ページ図1 WebアプリQの主な機能 の 「5.商品レビュー機能」には,次のような記述があります.

レビュータイトルとレビュー詳細の欄は自由記述が可能であり,それぞれ50字と300字の入力文字数制限を設けている.

 投稿1回あたりの文字数制限はありますが,同一人物によるレビューの連続投稿等については,特に制限が無いようです.
従って,攻撃者はまず「一度に全部のスクリプトを投稿できないなら,複数回に分けて投稿すればいいじゃん!」と考えるわけです.

しかし,このままでは(攻撃者にとって)ある不都合が発生してしまいます.それは,【スクリプト】〔HTML〕【スクリプト】〔HTML〕【スクリプト】〔HTML〕… のように攻撃用のスクリプト(パーツ)がHTMLにサンドイッチされてしまい,全体として攻撃用のスクリプトが完成せず,攻撃が成立しないというものです.

そこで,「(攻撃者にとって)邪魔なHTMLを消してしまえば良いじゃないか!」と考えたわけです.実際に,図3のHTMLを見てみると,【スクリプト】/*〔HTML〕*/【スクリプト】/*〔HTML〕*/【スクリプト】*/〔HTML〕… のようにHTMLがコメントアウトされた痕跡があります.(下線は,攻撃者が操作(投稿)できる範囲を示しています.)

 以上の内容を簡潔にまとめると,「HTMLがコメントアウトされ一つのスクリプトになるような投稿を複数回に分けて行った.」という解答になります.

スポンサーリンク

設問3 図4のスクリプトについて

(1) 図4の6~20行目の処理(60字以内で解答)

攻撃者が仕掛けたスクリプトを読み解いて答えるタイプの問題です.

解答例

XHRのレスポンスから取得したトークンとともに,アイコン画像としてセッションIDをアップロードする.(51字)

解説

各行の処理について,補足します.

7行目:xhr.response から受信したデータを page に格納する.
8行目:page の中から id="token" の要素を取得し,その値を token 変数に格納する.
9行目:新しく XMLHttpRequest オブジェクト (xhr2) を作成する.
10行目:url2 にアップロード先のURLを設定する.
11行目:xhr2 を使って POST メソッドで url2 へリクエストを開く.
12行目:ファイルやテキストデータをフォーム形式で送信するためのオブジェクト (form) を作成する.
13行目:現在の document.cookie の値を取得し,cookie 変数に格納する.
14行目:ファイル名 (fname) を "a.png" に設定する.
15行目:MIMEタイプ (ftype) を "image/png" に設定する.
16行目:document.cookie の値をファイルの内容として,新しい File オブジェクト (file) を作成する.
17行目:form に "uploadfile" というキーで file を追加する.
18行目:form に "token" というキーで token の値を追加する.
19行目:xhr2 を使って form を url2 に送信する.

ここで,2ページ 図1の「2.ログイン機能」と「6.会員プロフィール機能」を見てみましょう.

会員IDとパスワードで会員を認証する.ログインした会員には,セッションIDをcookieとして払い出す.
(中略)
“プロフィールページのURL”にアクセスして払い出されたトークン2)パラメータのトークンが,”プロフィールページのURL”にアクセスして払い出されたものと一致したときは,アップロードが成功する.

という記述があります.この説明から,本命(攻撃者が本当に入手したい値)はセッションIDであることが推測できます.
そして,アイコン画像のアップロードには,トークン(問題文に明記はされていませんが,CSRFトークンだと思われます)の一致が必要という仕様になっています.

 これを踏まえると,スクリプト処理のうち,特にポイントとなるのは8行目,13~19行目の処理になります.攻撃者が成立させたい処理を踏まえながら,簡潔にまとめると「XHRのレスポンスから取得したトークンとともに,アイコン画像としてセッションIDをアップロードする.」という解答になります.

(2) 攻撃者が情報を取得する方法(50字以内で解答)

解答例

会員のアイコン画像をダウンロードして,そこからセッションIDの文字列を取り出す.(41字)

解説

ファイルアップロード処理の過程では,画像ファイルを装っていますが,実際のファイルの中身はテキストデータ(セッションID)です.
従って,a.pngファイルをダウンロードし,テキストエディタなどで開くとセッションIDを入手できるという算段です.

(3) 攻撃者が(2)で取得した情報を使ってできること(40字以内)

解答例

ページVにアクセスした会員になりすまして,WebアプリQの機能を使う.(36字)

解説

 セッションを用いた認証管理方式では,セッションIDという識別子を用いて認証済みのユーザ(クライアント)を識別・管理しています.
従って,認証済みユーザのセッションIDを入手することは,当該ユーザになりすました不正ログインに成功したことと等価であると言えます.

スポンサーリンク

設問4 Webブラウザの仕組み

仮に,攻撃者が用意したドメインのサイトに図4と同じスクリプトを含むHTMLを準備し,そのサイトにWebアプリQのログイン済み会員がアクセスしたとしても,Webブラウザの仕組みによって攻撃は成功しない.この仕組みを,40字以内で答えよ.

解答例

スクリプトから別ドメインのURLに対してcookieが送られない仕組み(36字)

解説

 解答の鍵となるのは,問題文にある「攻撃者が用意したドメインのサイト」という文言です.正規のサイト(WebアプリQ)と攻撃者が用意したサイトでは,当然ドメインが異なります

Webブラウザには,異なるオリジン間でのデータアクセスを制限するセキュリティ機構が実装されています.これを同一オリジンポリシーSame-Origin PolicySOP)と呼びます.同一オリジンポリシーを本問の内容に即して,より詳細に記述すると「スクリプトから別ドメインのURLに対してcookieが送られない仕組み」という解答になります.

オリジンは,スキーム(プロトコル),ホスト(ドメイン名 or IPアドレス),ポート番号の3要素により決定づけられます.

例えば,以下のURLはそれぞれ異なるオリジンになります.

  • https://example.com/page1.html
  • http://example.com/page2.html (プロトコル違い)
  • https://sub.example.com/page3.html (サブドメイン違い
  • https://example.com:8080/page4.html (ポート違い)

Webアプリケーションでフロントエンドとバックエンド(APIサーバ)を切り分ける場合など,クロスオリジン通信を許可する必要がある場合は,CORSCross-Origin Resource Sharing)のAccess-Control-Allow-Originヘッダーを適切に設定します.

スポンサーリンク
スポンサーリンク
セキュリティ
シェアする
しばをフォローする
タイトルとURLをコピーしました