クロスサイトスクリプティング(XSS)の種類について – 反射型・格納型・DOM型を図解でわかりやすく解説

セキュリティ

1_クロスサイトスクリプティング(XSS)とは?

クロスサイトスクリプティングとは、スクリプト攻撃の一種になります。

スクリプト攻撃とは?
Webサイトを表示するための言語である「HTML」にスクリプトと呼ばれるプログラムを埋め込むことで、不正な挙動を誘発させる攻撃のことを指します。
※HTMLにスクリプトを埋込むことは、動的なコンテンツ(例:ニュースサイトのトップページ最新記事等が自動で更新される)に必要な技術ですが、スクリプト攻撃はこの性質を悪用したものになります。

クロスサイトスクリプティングについては、下記記事で概要を説明しておりますので、気になる方はこちらもご参照ください。

2_クロスサイトスクリプティングの種類について

クロスサイトスクリプティングについては分析が進んでおり、攻撃の手法により以下の3つに分類されております。

  • 反射型XSS(Reflected XSS)
    ユーザーのブラウザ経由で悪意のあるリクエストデータ(例:URLのパラメータ)がサーバーに送信され、サーバからの応答ページに悪意のあるスクリプトがそのまま埋め込まれ、受け取ったブラウザでスクリプトが実行される攻撃。メールやSNSで細工したリンクを踏ませて発動し、クッキー窃取やページ改ざん、セッション乗っ取りにつながる。
  • 格納型XSS(Stored XSS)
    攻撃者が悪意あるスクリプトを、掲示板のコメント・プロフィールなどのサーバー側に保存させる手口。保存されたスクリプトはそのページを閲覧する全てのユーザーのブラウザで実行されるため被害の範囲が広く、認証情報や個人情報漏洩、ワーム化のリスクが高い。
  • DOM型XSS
    ページのJavaScriptがDOM要素を不適切に扱い、ブラウザ側だけで動的に生成したコンテンツに悪意あるスクリプトが混入して実行される攻撃。サーバー経由の検証を介さないため発見が難しく、クライアントサイドのコードの安全性が重要。
バグ太郎
バグ太郎

ほう?(ほとんど違いがわからんぞ・・・)

C-3PU
C-3PU

クロスサイトスクリプティング攻撃の種類については、実際の攻撃の流れを確認しないとほとんどわからないと思いますので、実際に見ていきましょう。

3_反射型XSSの攻撃の流れ

これは、以前書いたクロスサイトスクリプティングの概要記事の事例がそのままあてはまります。
下記事例では、セッション情報として使用されるCookieを盗み出すことを目的としております。

3-1_スクリプトが埋め込まれたURL送付 ~ Webサーバへのリクエストまで
反射型XSS攻撃の流れステップ①-1。攻撃者がスクリプト入りURLを生成してメールなどで送信し、ユーザーがクリックしてWebサーバへリクエストを送るまでのフロー図
3-2_Webページの返却 ~ Cookieの漏洩
反射型XSSの段階別図。攻撃用URL送信、ユーザーのクリック、サーバのレスポンスに含まれるスクリプトの実行という順序をステップで示す図

4_格納型XSSの攻撃の流れ

下記事例では、掲示板サイトのコメント欄にスクリプトを仕込み、サイトの訪問者に意図しないアラートを表示させてサイトの運営を妨害することを目的としております。

格納型XSSの概念図。攻撃者がコメントや投稿欄に悪意あるスクリプトを保存し、そのページを閲覧する全ユーザーのブラウザでスクリプトが実行される様子を示す図
バグ太郎
バグ太郎

攻撃の流れはなんとなく把握したのですが、反射型と格納型はどこが大きな違いになるのですか?

C-3PU
C-3PU

格納型はスクリプトがサーバに保存され、サイト訪問者に対して実行されてしまうので、影響範囲が広いというのが大きな違いになります。以下に比較表を作成したので見比べてください。

反射型XSS格納型XSS
発生場所サーバのレスポンス生成時サーバ側のデータベースに保存
トリガー攻撃用URLを踏ませる(1回限りが多い)攻撃コードが保存され、そのページを閲覧する全ユーザに影響
持続性一時的(リンクを踏んだ時のみ実行)永続的(削除されるまで繰り返し実行)
被害範囲通常は誘導したユーザのみ保存場所を閲覧する多数のユーザに波及

5_DOM型XSSの攻撃の流れ

バグ太郎
バグ太郎

待ってください・・・そもそもDOMがなんなのか全くわかっていません・・・

C-3PU
C-3PU

失礼しました、DOM(Document Object Model)は、HTMLで書かれたWebページなどをプログラムから扱いやすい「オブジェクトの木構造」として表した仕組みです。HTMLはテキストで書かれた文書そのもので、ブラウザがそのまま表示するだけなら問題ありませんが、プログラム(Javaスクリプトなど)が読み込むことは難しいため、DOMに変換しています。

DOM(Document Object Model)を木構造で表した図。HTML要素がノードとして表現され、JavaScriptがそれを操作する概念を示す図
5-1_スクリプトが埋め込まれたURL送付 ~ Webサーバへのリクエストまで
DOM型XSSの概念図。URLやDOM要素の不適切な扱いによりブラウザ側で悪意あるスクリプトが動的に生成され実行される流れを示す図
5-2_Webページの返却 ~ Cookieの漏洩
WebページのレスポンスとCookie情報の漏洩を示す図。反射型XSSのレスポンスでスクリプトが実行され、ブラウザ保持のCookieが攻撃者に送られる可能性を表現した図
C-3PU
C-3PU

反射型XSSの攻撃の流れに似ていますが、ポイントは③ブラウザからのリクエストには悪意のあるパラメータが送られず④正常なレスポンスとしてサーバは処理する点です。これはサーバ側の対策では防げません。
攻撃は、ブラウザにレスポンスが返ってきたタイミングで、スクリプトが実行され。DOMを利用することで秘密情報(cookie等)が盗まれ、攻撃者のサーバに転送されます。※そもそもリクエストが全くサーバ側に行かないケースも存在する。

コメント

タイトルとURLをコピーしました