クロスサイト・スクリプティングは、Web アプリケーションの脆弱性を悪用した攻撃手法の1つで、Web サイト等に悪意あるスクリプトを埋め込んでユーザーのブラウザで不正なスクリプトを実行させる攻撃手法です。
クロスサイト・スクリプティングは3種類ありますが、この記事では「反射 (リフレクト)型」について説明しています。
クロスサイト・スクリプティングは、英語で「Cross Site Scripting」で、「XSS」と略して表記されています。
▼ 以下、説明に利用する登場人物など
- Web サイトに訪問するユーザーの Web ブラウザ
- 攻撃者が、脆弱性のある Web サイトへ誘導するための攻撃者(ないし第三者)の Web ページ
- 脆弱性のある Web サイト (これがあることによって XSS が成立する)
クロスサイトスクリプティングの例
攻撃手順を順に追っていきましょう。
1.攻撃者が罠を仕込む
あるサイト (ここでは例としてとあるサイトの掲示板とする) に攻撃者が、悪意あるスクリプトを仕込んだリンクを掲示板に仕込む。
※ここでは、書き込み者の名前がリンクとなっていて、そのリンクに悪意あるスクリプトと脆弱性のある Web サイトへのリンクが含まれています。
711 セブンイレブンで売上No.1のスイーツ 20XX/0X/05(月) 15:21 ID:6C/Yix セブンイレブンに新作のスイーツが置いてあったよ。
※他に、不正なスクリプトが含まれたリンクをメール本文に記載し、そのメールで送りつけるという方法もあります。
2.訪問者が罠にかかる
あるサイトの掲示板に訪問したユーザーが、攻撃者が仕掛けたリンクをクリックする。
※ユーザーが「セブンイレブンで売上No.1のスイーツ」というリンクをクリックする。
711 セブンイレブンで売上No.1のスイーツ 20XX/0X/05(月) 15:21 ID:6C/Yix セブンイレブンに新作のスイーツが置いてあったよ。
リンクをクリックすることで、リンク内に仕込まれた悪意あるスクリプトも一緒に脆弱性のある Web サイトへ転送される

3.脆弱性のある Web サイトが Web ページを返す
脆弱性のあるサイトは、悪意あるスクリプトを実行したうえで Web ページユーザーへ返す。
ユーザーのブラウザ上でスクリプトが実行される。

攻撃者の罠にまんまとひっかかってしまう

4.ユーザーが被害を受ける
脆弱性のあるサイトからの応答結果により、ユーザーのブラウザ上に偽情報が表示されたり、ブラウザに保存されている Cookie を窃取されたりします。
クロスサイトスクリプティングの対策は?
特殊文字を無害な文字へ置換する
脆弱性のある Web サイトが Web ページを出力する際に、特殊文字を無害な文字へ置換し出力することがクロスサイトスクリプティング対策になります。
その結果、無害化された Web ページがユーザーのブラウザ上に表示される。
▼ 特殊文字の変換については、以下の表にまとめたのでご覧ください。
特殊文字 (置換前) | 特殊文字 (置換後) |
& | & |
< | < |
> | > |
“ | " |
‘ | ' |
特殊文字を無害な文字へ置換することを「サニタイジング」という。
サニタイジング (sanitizing) は、もともと「消毒する」といった意味を持ちます。
Cookie発行時に「HttpOnly属性」を指定する
サイトが Cookie を発行する際、「HttpOnly 属性」を指定する。
Cookie (クッキー) とは Web サイト訪問者が入力した情報などを「Web サイトが訪問者のブラウザ(ユーザPCのストレージ)にテキストデータで保存しておく仕組み」のこと。 一度訪問した Web サイトに再訪問した際、前回入力した内容が自動で表示され、入力する手間が省けたり、買い物かごに入れていた商品が Cookie に情報として保存されているため、再訪問時にすぐに確認できたりするメリットがある。 一方で、これらの情報が漏えいするリスクがある。
「HttpOnly 属性」を指定していない場合、スクリプトから Cookie にアクセスできるが、Cookie 発行時に HttpOnly 属性を指定しておくとスクリプトから Cookie にアクセスできなくなります。
おさらい
クロスサイトスクリプティング (XSS) とは、リンクなどに悪意あるスクリプトを攻撃者が事前に仕込んでおき、ユーザーを利用して脆弱性のある Web サイトへスクリプトごと転送させ、ユーザーのブラウザ上でスクリプトを実行させるサイバー攻撃のこと。
具体的な被害の中には、悪意あるサイトへ誘導し個人情報を窃取されたり、マルウェアに感染させられたりするなどがあります。
クロスサイトスクリプティングを英語で書くと
Cross Site Scripting (XSS)
「CSS」としないのは、Cascading Style Sheets と紛らわしいからというのが理由のようです。
最後に
この記事では 「反射型」のクロスサイト・スクリプティングと呼ばれるクロスサイト・スクリプティング攻撃について説明しました。
クロスサイトスクリプティング攻撃は、他にも「格納 (ストア) 型」と「DOM 型」があります。
「格納 (ストア) 型」は、Webサイトのデータベース等に悪意あるスクリプトを保存しておくので、ユーザーがアクセスする度に実行されます (持続型)
「DOMベース型」は、クライアント側の JavaScript の脆弱性を利用します。サーバーを経由せずにクライアントのブラウザ側 のみで実行されます。
情報処理安全確保支援士試験で出題された
クロスサイトスクリプティングは、平成29年 秋期 情報処理安全確保支援士 午後Ⅰ 問2 で出題されました。
※ 問題冊子はこちら
https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000fqpm-att/2017h29a_sc_pm1_qs.pdf
平成29年度 秋期 情報処理安全確保支援士試験 午後Ⅰ
※ 解答はこちら
https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000fqpm-att/2017h29a_sc_pm1_ans.pdf
平成29年度 秋期 情報処理安全確保支援士試験 午後Ⅰ 解答例