クロスサイトスクリプティングは、Web アプリケーションの脆弱性を悪用した攻撃方法の1つ。
クロスサイトは「Web サイトを横断する」ことを意味します。
スクリプティングは「悪意あるスクリプト(ミニプログラム)」のことを指します。
クロスサイトスクリプティングは3種類ありますが、この記事では「リフレクト型」について説明しています。
クロスサイトスクリプティングは、英語で「Cross Site Scripting」で、「XSS」と略して表記されています。
▼ 登場人物など
- Web サイトに訪問する訪問者の Web ブラウザ
- 攻撃者が、脆弱性のある Web サイトへ誘導するための攻撃者(ないし第三者)の Web ページ
- 脆弱性のある Web サイト
この記事を最後まで読むと「クロスサイトスクリプティングの攻撃方法・仕組み」「クロスサイトスクリプティング攻撃への対策」が分かるようになります。
クロスサイトスクリプティングの例
攻撃手順を順に追っていきましょう。
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 にアクセスできなくなる。
クロスサイトスクリプティングとは
おさらい
リンクなどに悪意あるスクリプトを攻撃者が事前に仕込んでおき、訪問者を利用して脆弱性のある Web サイトへスクリプトごと転送させ、訪問者のブラウザ上でスクリプトを実行させるサイバー攻撃のこと。
具体的な被害の中には、悪意あるサイトへ誘導し個人情報を窃取されたり、マルウェアに感染させられたりするなどがあります。
クロスサイトスクリプティングを英語で書くと
Cross Site Scripting (XSS)
「CSS」としないのは、Cascading Style Sheets と紛らわしいからというのが理由のようです。
なお、この記事では 反射型クロスサイトスクリプティング (リフレクト・クロスサイトスクリプティング) と呼ばれるクロスサイトスクリプティング攻撃について説明しています。
クロスサイトスクリプティング攻撃は、他にも「ストア型」と「DOM 型」があります。
ちなみにこれら2つは、クロスサイト(Web サイトを横断)していません。
情報処理安全確保支援士試験で出題された
クロスサイトスクリプティングは、平成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年度 秋期 情報処理安全確保支援士試験 午後Ⅰ 解答例
クロスサイトスクリプティングについてもっと詳しく知りたい方は、この Youtube 動画 か、IPA の「安全なウェブサイトの作り方 – 1.5 クロスサイト・スクリプティング」をご参照ください。