クロスサイトスクリプティング(XSS)とは | 対策と被害事例

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
security_1111

「クロスサイトスクリプティング」(略称、XSS)とはどのような脆弱性をご存じですか?

Webサイトを運営しているならサイトにこの脆弱性がないかチェックしておくことは必要です。もし、サイトでお客様の情報を取り扱っているのなら重要はより高くなります。

クロスサイトスクリプティングは、サイバー攻撃の中でも有名な手法ですので、被害に遭わないための対策を事前に取り組むことを推奨します。

ここでは、クロスサイトスクリプティング(XSS)とは何か? どのような被害事例があるのか、対策方法などについて説明いたします。

目次

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

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

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

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

1-1. 仕組み

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

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

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

security_312

1-2. 歴史

クロスサイトスクリプティングの攻撃は、WebブラウザのNetscapeがJavaScriptに対応した1996年頃から行われていました。しかし、世界に公表されたのは2000年のことです。米国のCERTが正式に発表しました。

CERTの発表を受け、国内外でクロスサイトスクリプティングに対する注意喚起が行われるようになりました。

security_286 出典:Malicious HTML Tags Embedded in Client Web Requests

2. クロスサイトスクリプティング(XSS)の種類

クロスサイトスクリプティングは、ユーザーがWebサイトにアクセスした際に、動的に表示されるページの脆弱性を利用した攻撃です。
攻撃者は、動的ページでHTMLやJavascriptを利用している部分に悪意のある不正コードを埋め込みます。 実は、攻撃手法は1つだけではありません。

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

この3種類に分けられます。この3種類の攻撃手法について説明していきます。

2-1. Reflected XSS(反射型XSS)

Reflected XSSは、HTTPリクエスト中に含まれる攻撃コードがWebページ上で動作するタイプです。代表的な攻撃パターンとしては、検索フォームなど、Getリクエストのパラメータに含まれるscriptタグがWebページ上で動作するものがあります。
特定のクエリに対してのみ動作するタイプなので、攻撃者は何らかの手段を用いて標的を特定のURLに誘導する必要があります。
ここでの「特定のURL」とは、アクセスすることで脆弱なページにPOSTリクエストを自動的に送信するページのURLを指します。

2-2. Stored/Persistent XSS(蓄積型/持続型XSS)

Stored/Persistent XSSは、HTTPリクエスト中に攻撃コードの記述があるかどうかに関係なく、あるWebページ上で持続的に動作するタイプです。
例としては、掲示板などの投稿中に含まれるscriptタグがそのまま動作するものがあります。その掲示板上では攻撃者が投稿したコードが動作しているため、攻撃者は標的がそのページにアクセスするのを待てばよいだけです。
そのため、Reflected XSS(反射型XSS)に比べると攻撃成功のハードルは低いと言えます。 ただし、標的がWebページにアクセスしてくれないと目的を達成することはできないため、標的を対象のWebページに誘導する必要があります。

2-3. DOM Based XSS

DOM Based XSSは、Webページに記述されている正規のscriptタグにより、動的にWebページを操作した結果、意図しないスクリプトをWebページに出力してしまうタイプです。
Webページに含まれる正規のスクリプトにより、動的にWebページを操作した結果、意図しないスクリプトをウェブページに出力してしまうタイプである。
2013年後半辺りから急増しており、上述で紹介したTwitterへの攻撃はこのDOM Basedの脆弱性を狙った攻撃でした。 Webブラウザなどのユーザー側で実行される正規のスクリプト操作を利用した不正スクリプトが実行は、webページ出力処理(DOM操作)に問題があるために可能となる脆弱性と言えます。

DOMとは

DOM(Document Object Model)は、HTMLドキュメントやXMLドキュメントをアプリケーションから操作するためのAPIである。W3Cが標準化しており、様々なプログラミング言語やライブラリがDOMをサポートしている。
出典:IPAテクニカルウォッチ「DOM Based XSS」に関するレポート~JavaScriptでHTMLを操作するアプリは要注意!~

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

3-1. HTMLテキストの入力を許可しない場合

3-1-1. Webページに出力する全ての要素に対して、エスケープ処理を施す

Webページを構成する要素として、Webページの本文やHTMLタグの属性値等に相当する全ての出力要素にエスケープ処理を行います。

エスケープ処理とは、HTMLやプログラミング言語を別の文字列に置き換えることです。
例えば、HTMLはタグの記述に「< 」「>」という記号を用いるとき、このままではブラウザは「タグ」として認識します。

そこで、「<」「>」という特殊な表記法に置き換えることで、「< 」「>」を文字列として認識させることができる。
このような置き換えをエスケープ処理といいます。

エスケープ文字 エスケープ処理
& &amp;
< &gt;
> &gt;
&quot;
&#39;

脆弱性防止の観点からエスケープ処理が必須となるのは、下記項目のような文字列等です。

  • 外部からWebアプリケーションに渡される「入力値」の文字列
  • データベースやファイルから読み込んだ文字列
  • その他、何らかの文字列を演算によって生成した文字列

しかし、上述した条件にあてはまるかで判断するのではなく、テキストとして出力されるすべてに対してエスケープ処理を施すことが重要です。

なお、対象となる出力処理はHTTPレスポンスへの出力に限りません。JavaScriptのdocument.writeメソッドやinnerHTMLプロパティ等を使用して動的にWebページの内容を変更する場合も、上記と同様の処理が必要です。

3-1-2. URLの出力は、「http://」や「https://」で始まるURLのみを許可

URLには、「http://」や「https://」から始まるものだけでなく、JavaScriptを実行できる「javascript:」の記述で始まるものもあります。

Webページに出力するリンク先や画像のURLが、外部からの入力に依存する形で動的に生成される場合、そのURLにスクリプトが含まれていると、クロスサイトスクリプティング攻撃が可能となる場合があります。

たとえば、利用者から入力されたリンク先のURLを「<a href=”リンク先のURL”>」の形式でウェブページに出力するウェブアプリケーションは、リンク先のURLに「javascript:」等から始まる文字列を指定された場合に、スクリプトを埋め込まれてしまう可能性があります。

スクリプトが注入されないように、URLには「http://」や「https://」から始まる文字列のみを出力する「ホワイトリスト方式」で実装してください。

3-1-3. <script>~</script>要素の内容を動的に生成しない

Webページに出力する<script>…</script>要素の内容が、外部からの入力に依存する形で動的に生成される場合、任意のスクリプトが埋め込まれてしまう可能性があります。

危険なスクリプトだけを排除する方法も考えられますが、危険なスクリプトであることを確実に判断することは難しいため、<script>…</script>要素の内容を動的に生成する仕様は、避けることをお勧めします。

3-1-4. CSSを任意のサイトから取り込めるようにしない

CSSには、expression関数等を利用してスクリプトを記述することができます。そのためサイトに置かれたCSSを取り込めるような仕様にしておくと、生成するWebページにスクリプトが注入されてしまう可能性があります。

CSSの内容を都度チェックし、危険なスクリプトを排除する方法も考えられますが、手間もかかりますし確実に排除することは難しいため、CSSを外部から指定可能な仕様は、避けましょう。

3-2. HTMLテキストの入力を許可する場合

3-2-1. 入力されたHTMLから構文解析木を作成し、スクリプトを含まない必要な要素のみを抽出する

入力されたHTMLテキストに対して構文解析を行い、「ホワイトリスト方式」で許可する要素のみを抽出します。ただし、これには複雑なコーディングが要求され、処理に負荷がかかるといった影響もあるため、実装には十分な検討が必要です。

3-3. 全てのウェブアプリケーションに共通の対策

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

HTTPのレスポンスヘッダのContent-Typeフィールドには、「Content-Type:text/html;charset=UTF-8」のように、文字コード(charset)を指定できます。

この指定を省略した場合、ブラウザは、文字コードを独自の方法で推定して、推定した文字コードにしたがって画面表示を処理します。

たとえば、一部のブラウザにおいては、HTMLテキストの冒頭部分等に特定の文字列が含まれていると、必ず特定の文字コードとして処理されています。

Content-Typeフィールドで文字コードの指定を省略した場合、攻撃者が、この挙動を悪用して、故意に特定の文字コードをブラウザに選択させるような文字列を埋め込んだ上、その文字コードで解釈した場合にスクリプトのタグとなるような文字列を埋め込む可能性があります。

そのため、Content-Typeの出力時にcharsetを省略することなく、必ず指定しましょう。

3-4. 管理者別に見るクロスサイトスクリプティングの対策

3-4-1. ユーザー側

  • 最新のブラウザにアップデートする
  • 電子メール内やWeb上の不審なURLを安易にクリックしない
  • ブラウザのセキュリティ設定により、スクリプトの実行を無効化する
  • ウイルス対策製品により、不正スクリプトを検出し、実行をブロックする
  • セキュリティ対策製品の機能により、不正サイトへのアクセスをブロックする

3-4-2. Web管理者側

  • 根本的な解決のためには、Webサーバ側で脆弱性に対処することが必要であり、脆弱性を作りこまれないよう、Webアプリケーション作成時から対策を意識することが必要です
  • WebサーバやWebアプリケーションのミドルウェアを常に最新の状態にする
  • 脆弱性が作りこまれないようWebアプリケーションの処理を精査する
  • WAF(Web Application Firewall)、XSSフィルタなどのセキュリティ対策製品を導入する

3-4-3. IT管理者側

  • エンドポイントへ総合的なセキュリティソフトを導入し、常に最新の状態にする
  • ゲートウェイ上で不正サイトへの誘導を目的とした攻撃メールの受信をブロックする
  • ネットワーク内部から外部不正サイトへのアクセスをブロックする

4. クロスサイトスクリプティングによる被害

4-1. セッションハイジャック

セッションハイジャックとは、Webアプリケーションなどでユーザーを識別する情報、セッションID(IDやパスワード情報など)のCookie情報をネットワーク上で盗聴されたり、規則性から類推されることで、攻撃者が利用者になりすます攻撃手法のことです。

Cookie情報とは、 Webサイト側がユーザーのアカウント情報や個人情報をブラウザに保持させるものです。ログインページを例とすると、一度ログインすれば再度ログインする際に、ログインページをスキップすることができます。

主な被害内容

  • 不正な送金、利用者が意図しない商品購入、利用者が意図しない退会処理等
  • 各種設定の不正な変更(管理者画面、パスワード等)、掲示板への不適切な書き込み等
  • 非公開の個人情報を不正閲覧、Webメールを不正閲覧、コミュニティ会員専用の掲示板を不正閲覧等

4-2. ページの改ざん

Webサイト改ざんとは、Webサイト内のコンテンツやシステムが、攻撃者によって意図しない状態に変更されてしまうことです。

Webサイトの改ざんは、Webサービスに影響をもたらすだけでなく、ユーザーに被害を与えることになります。Webサイトを改ざんすることで、マルウェアをダウンロードするサイトへ一般の利用者を誘導することができます。

security_20マルウェアとは?ウイルスとの違い感染対策について
パソコンやネットワークには、さまざまな脅威があります。たとえば悪意あるクラッカーによる、プロトコルやOSの脆弱性を突いた攻撃や、ユーザー側のうっかりミスで発生...

主な被害内容

  • Webサービスの停止、及び、復旧作業(ECサイトや集客できているサイトが被害に遭えば、その期間の損害は図りしれない)
  • 訪問者のパソコンにマルウェアをダウンロードさせ、個人情報やカード情報を盗む
  • 訪問者のパソコンにマルウェアをダウンロードさせ、パソコンを乗っ取る

4-3. フィッシング

フィッシングとは、正当なメールやWebサイトを装い、個人情報、暗証番号等を取得する行為のことです。

Webサイト自体をフィッシングサイトに改ざんする。または、Webサイトを改ざんし、訪問すると自動的にフィッシングサイトに転送する攻撃手法です。

主な被害内容

  • Webサイトの一部を改ざんし、あらかじめ用意した本物そっくりの偽サイトにユーザーを誘導させ、クレジットカード番号や口座番号などを入力するよう促し、入力された情報を盗み取ります。
  • 電子メールのリンクからフィッシングサイトに誘導し、そこで個人情報を入力させる

5. クロスサイトスクリプティングの被害事例

5-1. YouTubeの実例

2010年7月、動画共有サイトの米YouTubeを狙ったXSS攻撃が発生しました。

被害としては、下図のような「ニュース速報:ジャスティン・ビーバーが交通事故で死亡」といったデマのポップアップが表示されたり、他のWebサイトにリダイレクト、コメントが表示されないなどの被害が発生しました。

security_287

原因は、YouTubeのコメントシステムに存在するXSSの脆弱性が悪用されたことによるものでした。

YouTubeが利用しているコメントアプリケーションの出力データの暗号化処理に問題があり、cookie情報の不正取得や悪意あるJavaScriptコードを仕込むことが可能であったとみられている。攻撃は、Googleにより2時間ほどで対処されたと報じられています。

5-2. Twitterの実例

2010年9月21日、Twitterの公式クライアント・アプリケーション「TweetDeck」が何者かに攻撃された。

ユーザーのアカウントが遠隔的にハイジャックされ、訳の分からないリツイートを大量に投稿したりといった被害が発生しました。

security_289

XSSが原因で、JavaScriptコードがプレーンテキストとして投稿され、その投稿がユーザーのブラウザで実行可能な状態となっていた。セキュリティ会社のKaspersky Labは、最大で50万人に影響が出た可能性があると発表しています。

この攻撃は、オーストラリアに住む17歳の少年が実行したもので、コンピュータを乗っ取ったり、情報を盗もうとすものではなく、セキュリティホールを利用して何ができるのか見てみようという好奇心により発生したものでした。

5-3. 株式会社KADOKAWAの実例

2014年1月、株式会社KADOKAWAのオフィシャルサイトが改ざんされていることが判明しました。改ざんされていた可能性のある期間は「2014年1月7日00時49分~2014年1月8日13時07分」の間とみられています。

Webサイト改ざんが行われていた期間中に、脆弱性を修正していないWindows環境で閲覧した場合、PCにマルウェアが組み込まれ、個人情報が盗まれる状態だったとして謝罪しています。

security_151

まとめ

今回紹介した内容は、クロスサイトスクリプティングという脆弱性のほんの一部の情報を抜粋してご紹介したにすぎません。

被害に遭った、企業のWebサイトは多くあります。このような被害に遭わないため、大切なお客様を被害に遭わせないためにもセキュリティ対策は重要です。

Webサイトで多くの集客を得ている、これから集客を考えている方はセキュリティ対策にしっかり取り組みましょう。

参考文献・サイト

安全なウェブサイトの作り方 改訂第7版(IPA 独立行政法人 情報処理推進機構)
http://www.ipa.go.jp/files/000017316.pdf
IPAテクニカルウォッチ「DOM Based XSS」に関するレポート(IPA 独立行政法人 情報処理推進機構)
https://www.ipa.go.jp/files/000024729.pdf
クロスサイトスクリプティング(IPA 独立行政法人 情報処理推進機構)
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a01_02.html
クロスサイトスクリプティング(XSS)とは(トレンドマイクロ)
http://www.trendmicro.co.jp/jp/security-intelligence/threat-solution/xss/
フィッシングとは(フィッシング対策協議会)
https://www.antiphishing.jp/consumer/abt_phishing.html
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

今、注意すべき攻撃手口はこれ!【2016年最新セキュリティ脅威レポート】 特別プレゼント

・「セキュリティ診断」で何がわかるの?
どんな危険が見つかっているの?
どんな被害が発生しているの?

もし、あした「情報漏えい事故」であなたの会社がニュースになったら?
攻撃者は、自動攻撃ツールを使って24時間365日、攻撃できるスキマを狙っています。
セキュリティ事故は、いつ起きてもおかしくありません。

【2016年最新セキュリティ脅威レポート】では、弊社が実際に疑似攻撃(ペネトレーションテスト)をおこない、検証した結果から、2016年注意すべき脆弱性・実際に多かった不備などをお伝えします。

「今、どんな被害が起きているのか?」
最新のセキュリティ脅威を知って、事故を未然に防ぎませんか?
ぜひダウンロードして、今後のセキュリティ対策にお役立てください。


【2016年最新セキュリティ脅威レポート】目次
1. おもなWebアプリケーション診断項目
2. ペネトレーションテスト内容とは?
-2015年度ペネトレーションテスト初回診断時総合評価の結果一覧
-脅威レベル深刻度別・脆弱性の該当比率一覧
3. 2015年度に多く検出された脆弱性とは?
4. ペネトレーションテストで発見した、新らなる脅威とは?
-最近また増えた、ウイルス感染配布サイト
-パケット改ざんプログラムによる被害

セキュリティレポートをダウンロードする >