クロスサイトスクリプティング(XSS)【情報処理安全確保支援士講座】

情報処理安全確保支援士 XSS

今回は、情報処理安全確保支援士の試験で問われるクロスサイトスクリプティングについて解説します。

アカリ
アカリ
クロスサイトスクリプティングって、難しい名前だけどどんな攻撃なんだろう?
トモル
トモル
文字通りサイトを横断(クロス)して仕掛ける攻撃だよ

この記事のまとめ

  1. XSSの概要
  2. XSSによる脆弱性
  3. XSSの対策

クロスサイトスクリプティング

情報処理安全確保支援士 XSS

クロスサイトスクリプティング(XSS:Cross-site Scripting)は、ユーザの入力を処理するためにWeb上で動くJavaScriptの脆弱性を突いた攻撃で、ユーザのPC上で不正なスクリプトを実行します。具体的な内容は下記の通りです。

XSSの攻撃例
  • 個人情報の漏えい
  • クライアントPC上のファイル破壊
  • バックドアを仕掛けられ他の攻撃の足掛かりになる

クロスサイトスクリプティングの脆弱性

クロスサイトスクリプティングの脆弱性は、CWE(Common Weakness Enumeration)により3つに分類されています。

反射型XSS(非持続的)

反射型XSSは、ユーザからのリクエストに含まれるスクリプトに相当する文字列を、レスポンスとしてWebページ内に実行可能なスクリプトとして出力してしまう形式の脆弱性です。

スクリプトがリクエストの送信者に帰るため、反射型と呼ばれます。

格納型XSS(持続的)

格納型XSSは、ユーザからのリクエストに含まれるスクリプトに相当する文字列を、Webアプリケーションの内部に永続的に保存し、当該文字列をWebページに実行可能なスクリプトとして出力する形式の脆弱性です。

この脆弱性があるWebサイトをユーザが閲覧するたびに実行されることから格納型と呼ばれます。

DOM-based XSS

DOM-based XSSは、Webページに含まれる正規のスクリプトにより動的にWebページを操作した結果、意図しないスクリプトをWebページに出力する形式の脆弱性です。

キュー
キュー
JavaScriptでページを書き換えることをDOM操作って言うで
📝【出題履歴】平成30年度春期 午後Ⅱ問1 DOM-based XSSに関する出題

【問題文】

脆弱性2:検索ページで使用されるスクリプトにDOM-based XSSが存在する。攻撃者が”#”から始まるフラグメント識別子に攻撃コードを記述できる。
検知方法1:攻撃コードとして,スクリプトに相当する文字列を含めたリクエストをサーバに送信したときに,その文字列がレスポンス中にスクリプトとして出力されるかどうかで判別する方法。

  • ①検知方法1では脆弱性2を検知できない。
  • WAFでも脆弱性2を検知できない。②Rポータルへのアクセスを繰り返すことなく,脆弱性2の有無を分析する方法がある。

【設問】

設問1
(1) 本文中の下線①について,サーバからのレスポンスの内容を見て脆弱性を判断するツールを用いた場合,脆弱性2を検知できないのはなぜか。その理由を35字以内で具体的に述べよ。
(2) 本文中の下線②について,脆弱性の原理を踏まえ,攻撃者が分析する方法を40字以内で述べよ。

出題:平成30年度春期 午後Ⅱ問1

XSS脆弱性有無の確認方法

以降は反射型XSSを前提に解説します。

名前・住所・電話番号などを入力するフォームにXSSの脆弱性がある場合とない場合の挙動の違いを確認しましょう。

標準仕様として、下記のように入力内容がそのまま確認画面に表示されるフォームにて、アラート文を入れる例を考えます。

情報処理安全確保支援士 XSS フォーム

脆弱性対策がされているフォーム

情報処理安全確保支援士 XSS 脆弱性対策済

入力した文字列は、そのまま文字列として処理され画面に表示されます。

もしくは、不正な文字列と判断され、別の文字に置き換えて表示されます。

脆弱性対策がされていないフォーム

情報処理安全確保支援士 XSS 脆弱性未対策

入力されたアラート文がそのまま表示されます。

XSSの脆弱性があるサイトでは、入力データの確認が正確に行われていないため、悪意のあるスクリプトを入力すればクライアント環境にてさまざまな処理が実行されてしまいます。

トモル
トモル
入力フォームに任意のスクリプトを入れられるなら、いろいろと悪用できそうだね・・・

クロスサイトスクリプティングの流れ

情報処理安全確保支援士 XSSの流れ

具体的なクロスサイトスクリプティングの流れを確認しておきましょう。

STEPLIST
  1. 攻撃者が入力フォームなどにスクリプト付のリンクを含む内容を入力してWebサイトに罠を仕掛ける
  2. 訪問者が該当するWebサイトに訪問する
  3. リンクをクリックしてスクリプトが実行されると、悪意のあるサイトに遷移して不正なスクリプトが実行される
  4. マルウェア感染やファイル破壊などの被害が起きる

クロスサイトスクリプティングの対策

反射型XSSおよび格納型XSSは、下記の方法で対策できます。

反射型XSSおよび格納型XSS
  • HTTPレスポンスヘッダのContent-Typeフィールドに文字コードを指定する
  • タグの属性値をダブルクォートで囲む
  • タグの属性値に含まれるメタキャラクタのエスケープ処理を行う

HTTPレスポンスヘッダのContent-Typeフィールドに文字コードを指定する

HTTPレスポンスヘッダのContent-Typeフィールドには、UTF-8などの文字コードを指定できます。文字コードを省略した場合はブラウザが独自に文字コードを推定して表示処理を行います。

キュー
キュー
攻撃者はこの挙動を悪用してスクリプトのタグとなるような文字列を埋め込むんや

例えば、UTF-7だと「」を「+AD4-」と表現できます。したがって、UTF-7が指定されていたり文字コードが明示されていないと、攻撃者はUTF-7にエンコードされたスクリプトを混入可能です。

逆に、文字コードを指定すればこのような挙動を悪用した攻撃を防げます。

タグの属性値をダブルクォートで囲む

タグの属性値をダブルクォートで囲むことで、属性値を一連の文字列として扱えます。逆に、ダブルクォートで囲われていないと属性値にスペースが含まれただけで問題が発生するリスクがあります。

タグの属性値に含まれるメタキャラクタのエスケープ処理を行う

タグの属性値に含まれるメタキャラクタ(「」「&」など)のエスケープ処理を行うことでも、入力データを無効化できます。

キュー
キュー
メタキャラクタのエスケープ処理を行うことを、サニタイジング(無害化)っても言うで

エスケープ処理の例を確認しておきましょう。

エスケープ処理の例
  • & → &
  • < → &lt;
  • > → &gt;
  • " → &quot;
  • ' → &#39;

HTTPレスポンスヘッダによるXSS対策

Webサーバ側で下記のようなレスポンスヘッダを返すことで、XSSによる攻撃を防いだり制限したりが可能です。

レスポンスヘッダ 挙動
X-XSS-Protection 反射型XSSを検知したときに、ページの読み込みを停止する
Content-Security-Policy スクリプトの読み込みを許可するドメインをポリシとして指定することで、悪意のあるスクリプトの読み込みを防ぐ
📝【出題履歴】令和3年度秋期 午後Ⅱ問1 Content-Security-Policyに関する出題

【問題文】

二つ目の対策は,”Content-Security-Policy:script-src’self’;”というヘッダフィールドを,HTTPレスポンスのヘッダに追加することによって,Webブラウザに対して②指定したスクリプトファイルの実行だけを許可するというものである。この対策は一つ目の対策に比べて短期間で実行可能であるが,Dシステムが用いている正規のスクリプトが意図したとおりに動作するように,③実行が制限されてしまうスクリプトの有無を確認し,もしあれば,該当箇所の呼び出し方法を変更する必要がある。

【設問】

設問2
(2) 本文中の下線②について,実行が許可されているのはどのようなスクリプトファイルか。40字以内で述べよ。
(3) 本文中の下線③について,実行が制限されてしまうのはどのようなスクリプトファイルか。30字以内で述べよ。また,変更後の呼び出し方法を50字以内で具体的に述べよ。

出題:令和3年度秋期 午後Ⅱ問1

HttpOnly属性でCookieの漏えい対策

発行するCookieにHttpOnly属性を設定しておくと、Cookieの適用範囲をHTTP/HTTPS通信に限定できます。したがって、ブラウザなどで実行されたスクリプトが”document.cookie”を用いてアクセスすることを禁止できます。

結果的に、XSSによるCookieの盗難防止が可能です。

Attention!!
HttpOnly属性に対応していないブラウザがあることと、TRACEメソッドによってCookieが取得される点は注意が必要です。

HttpOnly属性に対応していないブラウザとして、古いブラウザが挙げられます。また、WebサーバでTRACEメソッドが有効かつXSSの脆弱性があると、クロスサイトトレーシング(XST)と呼ばれる攻撃でCookie情報が取得される可能性があります。

キュー
キュー
ただし、一般的なブラウザはTRACEメソットをXMLHttpRequestオブジェクトからの発行は禁止されてるから、XSTによる問題が発生する可能性は低いで

DOM-based XSSの対策

DOM-based XSSは、”Create Element”や、”CreateTextNode”など、DOM操作用のメソッドやプロパティを用いてWebページを構築する必要があります。

仕様上、”documentWrite”や”innerHTML”などのメソッドやプロパティが必要な場合は、文脈に応じてエスケープ処理を組み込みます。

また、DOM-Based XSSの脆弱性は独自開発されたWebページに限らず、jQueryをはじめとしたJavaScriptライブラリの古いバージョンにも存在します。

したがって、JavaScriptのバージョンを最新にする点も重要です。

スポンサーリンク

クロスサイトスクリプティング・例題

実際に例題を解いて問題に慣れていきましょう。

クロスサイトスクリプティングによる攻撃を防止する対策はどれか。(H.27秋/問12)

ア:WebサーバにSNMPエージェントを常駐稼働させ,Webサーバの負荷状態を監視する。
イ:WebサーバのOSのセキュリティパッチについて,常に最新のものを適用する。
ウ:Webサイトへのデータ入力について,許容範囲を超えた大きさのデータの書込みを禁止する。
エ:Webサイトへの入力データを表示するときに,HTMLで特別な意味をもつ文字のエスケープ処理を行う。

(ログイン後回答すると、ここに前回の正誤情報が表示されます)

問の正解を表示

問の解説を表示

クロスサイトスクリプティング(XSS)は、Webサイトやサービスの脆弱性を悪用して、悪意のあるスクリプトを混入させ、意図せぬ操作を実行させたり、別のサイトを横断してユーザーのクッキーや個人情報を盗んだりする攻撃です。

クロスサイトスクリプティングの脆弱性は、ユーザーからの入力データ内に含まれる引用符(‘や”)やHTMLタグを、無効化(サニタイジング)せず、そのまま表示してしまう脆弱性により生じます。

クロスサイトスクリプティングを防ぐためにはWebページの出力時にHTMLの特殊文字を置き換える処理を実施する必要があります。

したがって「エ」が正解です。

クロスサイトスクリプティング・まとめ

この記事のまとめ

  1. XSSの概要
  2. XSSによる脆弱性
  3. XSSの対策

クロスサイトスクリプティングは、特に午後(科目B)試験で問われる内容です。具体的な攻撃の流れだけでなく、対策方法も押さえておきましょう。

次回はSQLインジェクションについて学習します。


本気で支援士を狙うなら・・・
支援士ゼミがおすすめです!
  • ベテラン講師による手厚いサポート
  • モチベーションを保てるセキュリティコラムが満載!
  • マンツーマン形式で個別相談もできる!

スポンサーリンク