クロスサイトスクリプティングとは | 仕組みと攻撃手法

security_2510

Webアプリケーションに不正なスクリプトを実行させる攻撃手法ひとつに、クロスサイトスクリプティングがあります。

クロスサイトスクリプティング(Cross Site Scripting:XSS)は、動的処理を実行するWebアプリケーションや、Webページの脆弱性を悪用し、個人情報などを不正に取得します。

ここでは、クロスサイトスクリプティング(XSS)とは何か? 仕組みや攻撃手法について解説いたします。

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

クロスサイトスクリプティング(略称、XSS)とは、ブラウザ上においてサイト管理者の意図しないHTML(スクリプトも含む)を組み込まれる攻撃手法です。

Webサイトの動的なHTMLやJavaScriptに、悪意のあるHTML(スクリプト)を埋め込み、閲覧者が入力した情報を意図しない別のサイトに送信することが可能です。攻撃者は、Webサイトの脆弱性を利用し不正なコードの文字列を挿入します。

Webサイトの一部に不正なコードを挿入するのですが、管理者はWebサイトが改ざんされることに気づきにくく、閲覧したユーザーが影響を受ける可能性は高くなります。

クロスサイトスクリプティングの仕組み

クロスサイトスクリプティングの本質的な問題は、外部からWebサイトにHTML(スクリプト)を挿入できてしまうことです。
この脆弱性を利用して行われる攻撃は、ユーザーの入力に対して動的にHTMLページを生成するアプリケーションが対象になります。※静的なページでは、問題は発生しません。

《図解》

クロスサイトスクリプティングの攻撃フロー
  • (1)ユーザが悪意あるWebサイトを閲覧
  • (2)出力されるWebページに悪意あるスクリプトが埋め込まれている
  • (3)まだそのスクリプトは効果を発揮せずに標的Webサイトへ転送
  • (4)標的Webサイトの「スクリプトを排除しない欠陥」を介して、スクリプトが効果を発揮する形でブラウザへ戻ってくる
  • (5)スクリプトがブラウザで実行され、クッキー情報の漏洩、ファイルの破壊といった被害が発生する

クロスサイトスクリプティングの攻撃手法

クロスサイトスクリプティングは、ユーザーがWebサイトにアクセスした際に、動的に表示されるページの脆弱性を利用した攻撃です。

攻撃者は、動的ページでHTMLやJavascriptを利用している部分に悪意のある不正コードを埋め込みます。

攻撃手法は3つのタイプにわけられます。

  • Reflected XSS(反射型XSS)
  • Stored/Persistent XSS(蓄積型/持続型XSS)
  • DOM Based XSS

ここからは、上記3つの攻撃手法について説明していきます。

Reflected XSS(反射型XSS)

Reflected XSSは、HTTPリクエスト中に含まれる攻撃コードがWebページ上で動作するタイプです。代表的な攻撃パターンとしては、検索フォームなど、Getリクエストのパラメータに含まれるscriptタグがWebページ上で動作するものがあります。

特定のクエリに対してのみ動作するタイプなので、攻撃者は何らかの手段を用いて標的を特定のURLに誘導する必要があります。

ここでの「特定のURL」とは、アクセスすることで脆弱なページにPOSTリクエストを自動的に送信するページのURLを指します。

Stored/Persistent XSS(蓄積型/持続型XSS)

Stored/Persistent XSSは、HTTPリクエスト中に攻撃コードの記述があるかどうかに関係なく、あるWebページ上で持続的に動作するタイプです。

例として、掲示板などの投稿中に含まれるscriptタグがそのまま動作するものがあります。その掲示板上では攻撃者が投稿したコードが動作しているため、攻撃者は標的がそのページにアクセスするのを待てばよいだけです。

そのため、Reflected XSS(反射型XSS)に比べると攻撃成功のハードルは低いと言えます。ただし、標的がWebページにアクセスしてくれないと目的を達成することはできないため、標的を対象のWebページに誘導する必要があります。

DOM Based XSS

DOM Based XSSは、Webページに記述されている正規のscriptタグにより、動的にWebページを操作した結果、意図しないスクリプトをWebページに出力してしまうタイプです。

Webページに含まれる正規のスクリプトにより、動的にWebページを操作した結果、意図しないスクリプトをウェブページに出力してしまうタイプです。

2013年後半から急増しています。Webブラウザなどユーザー側で実行される正規のスクリプト操作を利用した不正スクリプトの実行は、webページ出力処理(DOM操作)に問題があるために可能となる脆弱性と言えます。

DOMとは
DOM(Document Object Model)は、HTMLドキュメントやXMLドキュメントをアプリケーションから操作するためのAPIである。W3Cが標準化しており、様々なプログラミング言語やライブラリがDOMをサポートしている。

出典:IPAテクニカルウォッチ「DOM Based XSS」に関するレポート~JavaScriptでHTMLを操作するアプリは要注意!~

関連記事

クロスサイトスクリプティングの被害内容と事例

2018.01.29

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

2016.03.16
security_2510