
クロスサイトスクリプティング(XSS)は、国内外で近年多く報告されているサイバー攻撃のひとつです。
クロスサイトスクリプティングは、専門的な知識があれば比較的簡単に実行できてしまう攻撃であり、Webサイト運営者は対策が必須です。本記事では、クロスサイトスクリプティング(XSS)の概要と被害事例、対策などについて解説いたします。
クロスサイトスクリプティング(XSS)攻撃とは?
クロスサイトスクリプティング(XSS)とは、ターゲットとしたWebサイトの脆弱性を悪用して罠を仕掛け、攻撃者が悪質なサイトへ誘導(サイトをクロス)するスクリプトを実行し、サイトに訪れるユーザーの個人情報などを詐取したり、マルウェア感染させたりするサイバー攻撃のことです。標的サイトから別サイトへ誘導することから、この名称が付けられています。
クロスサイトスクリプティング(XSS)攻撃の流れ
以下はクロスサイトスクリプティング(XSS)攻撃の代表例を図に整理しました。
- 攻撃者CがXSSに対して脆弱性のあるA社を発見し、A社に興味を持ちそうなユーザーのいる掲示板サイトBに罠を仕掛ける(例:スクリプト付リンクを貼る)。
- ユーザーが掲示板サイトBを閲覧する。
- 掲示板サイトB内でスクリプト実行
- ユーザーはスクリプト情報を持ったままA社のページに移動(クロスサイト)する。
- スクリプトの効果により「A社のサイトとして」表示された偽サイトにジャンプする。
- 騙されたユーザーが情報を入力した結果、スクリプトが悪さをする
- 攻撃者Cの手により、ユーザーに対して様々な被害が発生(マルウェア感染・攻撃者Cへの情報漏洩など)。
クロスサイトスクリプティング(XSS)攻撃が起こる原因
クロスサイトスクリプティングの根本的な原因は、文字通り攻撃者が不正なスクリプトを挿入することができる環境を与えてしまうことにあります。つまり、クロスサイトスクリプティングに対して脆弱性を持つ動的サイトの放置です。
スクリプト文章にはエンドユーザー側が保有する個人情報を、標的サイトとは別のサイトに送信するように設定されており、これが直接的な被害を生み出します。
クロスサイトスクリプティング(XSS)攻撃の種類
クロスサイトスクリプティング(XSS)攻撃には、3つの種類があります。ここでは、種類ごとに見ていきましょう。
反射型XSS(non-persistent/Reflected XSS)
リクエストした者(被害者)にスクリプトが返ってくるため、「反射型XSS」と呼ばれています。攻撃者は偽メールや偽サイトに不正なスクリプトを含んだリンクを用意し、ユーザーを脆弱性のあるWebサイトに誘導(リクエストさせる)します。このときに、ユーザーのブラウザで不正なスクリプトを実行させることで、情報の詐取やマルウェア感染などを行います。
格納型/蓄積型/持続型XSS(Stored/Persistent XSS)
格納型XSSでは、攻撃者はあらかじめWebアプリケーションに直接スクリプトを格納しておきます。こうしておくことで、該当のページをユーザーが閲覧するたびに、不正なスクリプトが実行されます。該当のページにアクセスするだけで攻撃可能なため、反射型XSSとは異なり罠を仕掛けたWebサイトの用意や、スクリプトを含む不正リンクをメール送信したりする必要はありません。
DOM Based XSS
DOM(Document Object Model)は、HTMLやXMLを取り扱うためのAPIやデータ構造を定義したものを指します。JavaScriptのコードの脆弱性を悪用した攻撃で、サーバー側ではなく、クライアントのWebブラウザ上で攻撃用の不正なスクリプトが実行されます。また、DOM Based XSSの場合では、静的なHTMLの場合でもJavaScriptが利用されていれば攻撃対象となりえます。
クロスサイトスクリプティング(XSS)攻撃による被害の影響
クロスサイトスクリプティング(XSS)による攻撃は、標的サイトのエンドユーザーが被害を受けることで発生します。スクリプトの内容によって被害内容が異なる点が特徴で、代表的な被害例は下記の通りです。
cookie情報を利用した不正アクセス(セッションハイジャック)
セッションハイジャックとは、Webサイト上のIDやCookieを攻撃者がなんらかの方法で不正に入手し、セッションを乗っ取るサイバー攻撃のことです。セッションハイジャックを実行されてしまった場合、サーバー内への侵入や機密情報の搾取のほか不正出金、クレジットカードの不正利用など広範囲にわたって被害が及ぶ可能性があります。
個人情報の流出
クロスサイトスクリプティング(XSS)攻撃は、個人情報の流出につながるケースも多く報告されています。住所や名前、クレジットカード情報などの個人情報が搾取された後、ダークウェブサイトなどで情報リストとして売買されてしまうことも、近年では多く見られます。攻撃者はこの情報リストを購入して、パスワードリスト攻撃の標的としたり、情報漏えいを理由に金銭要求の脅迫を行うなど、さまざまな二次被害につながることがあるため、特に注意しなければなりません。
HTMLタグを使った入力フォームによる情報収集
ブラウザ上で動作するJavaScriptを用いることで、ターゲットであるWebページの内容を改ざんすることができます。たとえば、ユーザーが入力するお問い合わせフォームなどの送信先を攻撃者が別のURLに書き換えてしまえば、ユーザーの入力内容がすべて閲覧できてしまいます。
偽サイトを使ったフィッシング詐欺
フィッシング詐欺は、実際に存在する企業やサービスの正規メールやWebサイトを装った偽サイトにユーザーを誘導し、個人情報やパスワードなどの情報を入力させる手法です。フィッシング詐欺にもクロスサイトスクリプティング(XSS)攻撃が用いられるケースも報告されています。ユーザーが改ざんされたWebサイトにアクセスしてしまい、不正なスクリプトが実行されると、本物とそっくりな偽サイトに転送されてしまい、そこでユーザーはさまざまな情報を偽サイトに入力してしまう可能性があります。
クロスサイトスクリプティング(XSS)攻撃による被害事例
クロスサイトスクリプティング(XSS)による攻撃で最も警戒すべきポイントは、いつ自身の提供するサービスが悪事に利用されるかわからない点です。過去「YouTube」や「Twitter」も同様の被害に遭っており、危険な事案だと指摘されています。
Youtube不正アクセス事件
動画共有サイトの米YouTubeを狙った攻撃が発生し、ショッキングなデマが流れたり、コメントが表示されなくなるなどの影響が広がりました。この攻撃ではYouTubeのコメントシステムに存在するクロスサイトスクリプティング(XSS)の脆弱性が悪用されました。
この影響でコメントが表示されなくなったり、画面に著名人に関するデマやゴシップがポップアップ表示されるなどの被害が広がりました。ほかにも不正なポップアップが出たり、悪趣味なwebサイトにリダイレクトされるケースが相次いだといわれています。
Twitterワーム拡散事件
2010年、攻撃者がTwitterの公式クライアント・アプリケーション「TweetDeck」の脆弱性を悪用して、大量にリツイートさせる事件が発生しました。ユーザーのアカウントが遠隔操作でハイジャックされ、大量の意味不明なリツイートを投稿するという混乱状況に陥りました。本事例では、最大で50万人が影響を受けたといわれています。
クロスサイトスクリプティング(XSS)攻撃の対策
クロスサイトスクリプティング(XSS)は、その脆弱性を利用されることにより発生します。サービスの提供者とユーザーの双方がセキュリティ対策を実施することが大切です。
ユーザー側に求められる対策
最新のブラウザにアップデートする
クロスサイトスクリプティング(XSS)攻撃を防ぐには、使用しているWebブラウザやアプリを最新バージョンにしておくことが重要です。バージョンが古いとクロスサイトスクリプティング(XSS)攻撃に限らず、何らかの脆弱性を抱えていることがあるため、更新があった場合は都度アップデートをしておきましょう。
スクリプトの実行設定を無効化する
ユーザーの大半は、Webサイトをブラウザで閲覧・利用しています。つまり、Webブラウザのセキュリティ設定を見直してスクリプトの実行を無効化すれば、ブラウザ経由による攻撃を防ぐことが可能です。
社内でWebブラウザの設定を変更する場合は、システムの使用に問題がないかどうか確認をしてから行いましょう。
セキュリティソフトを導入し、不正なスクリプトをブロックする
個人ユーザー向けのウィルス対策ソフトにもクロスサイトスクリプティング(XSS)攻撃対策ができる機能が搭載されているので、なるべく利用するようにしましょう。ウィルス対策ソフトには、不正なスクリプトを検出してくれる機能や、正規のサイトを装った不正サイトへのアクセスをブロックする機能などがあります。
企業のIT管理者に求められる対策
WAFを設置する
WAF(Web Application Firewal)とは、Webアプリの通信を監視する専用のセキュリティシステムのことです。WAFはWebアプリへの不審なアクセスや、データの流出を検知すると通信をブロックしてくれます。また、ユーザーのリクエスト内容をチェックすることができるため、クロスサイトスクリプティング(XSS)攻撃による被害防止にも役立ちます。
以下のリンクでは、主要なWAF製品の一括資料請求ができますので、ぜひセキュリティ対策にお役立てください。
不正なサイトへの誘導と思われるメールをブロックする
クロスサイトスクリプティング(XSS)攻撃による手口には、正規メールを装った偽メールから、スクリプトが組み込まれたURLをクリックすることで実行されるケースがあります。そのため、いかに不審なメールをブロックできるかが肝要です。
メールプロバイダによっては、「迷惑メール」フィルタによってある程度精査されますが、偽メールの手口は日々巧妙化しています。定期的に既存の設定を見直し、新しい手口に対しても対策を施す必要があるでしょう。
ネットワーク内部から不正サイトへのアクセスをブロックする
上記のメールブロックと一緒に行っておくことをおすすめするのが、不正サイトに対するアクセス制限です。社内からの被害を出さないようにするためには、社内ユーザーのネット使用ルールも管理・運用していく必要があります。
WEB制作者・管理者側に求められる対策
サニタイジング(エスケープ)処理をする
サニタイジング(エスケープ)処理とは、「<」や「“」といった区切りやタグなどの意味を持つ文字を、意味を持たない文字列に置き換え無害化する(サニタイジング)ことを指します。サニタイジング(エスケープ)処理をすることで、スクリプトが制作側の意図に反した挙動をしてしまうことを防ぐことができます。
ただし、サニタイジング(エスケープ)処理は悪意のあるスクリプトを無害化しているだけであり、スクリプトの流入自体は防ぐことができません。有害なスクリプトの流入を阻止するには、WAFの導入必要となります。
バリデーション処理(入力値の制限)
バリデーション処理(入力値の制限)とは、特定の文字以外の入力を受け付けない設定のことです。たとえば、生年月日の入力フォームでは特定の範囲の数値しか受け付けないようにすることで、スクリプトが入り込むことはできなくなります。
また、任意の文字入力が必要な場合は、入力文字数に制限を設けることで長いコードの入力が困難になり、攻撃実行の危険性をある程度は抑えることができるでしょう。バリデーション処理を行う場合は、JavaScriptを使ってブラウザ側で入力値の制限を行うと、ユーザー側がJavaScriptをオフにして不正スクリプトの入力ができてしまいます。必ずサーバ側でバリデーション処理を実施してください。
出力時はhttp・httpsから始まるURLのみ許可する
URLに「JavaScriptスキーム」や「dataスキーム」などが含まれている場合でも、クロスサイトスクリプティング(XSS)攻撃のリスクは生じてしまいます。入力するリンク先のURLは「http」または「https」から始まるもののみを許可することで、想定外の処理が実行されるリスクを防止できます。
クロスサイトスクリプティングの脆弱性は、開発者側がソースコードを確認することで、チェックすることも可能です。
脆弱性を作りこまないように開発するために、IPAが公開している、「安全なウェブサイトの作り方」や「IPA ISEC セキュア・プログラミング講座」を参考にした上、必要な安全対策を実施し、開発を委託する場合にも、自社で開発する場合と同様に、上記の対策を実施することをおすすめします。
参考安全なウェブサイトの作り方
参考IPA ISEC セキュア・プログラミング講座
よくある質問
利用しているCMSにクロスサイトスクリプティングの脆弱性があった場合、どのような対策を行えばよいですか?
大抵の場合は、CMSの開発元から提供される最新版やパッチの適用が根本的かつ有効な対策となります。また、WAF(Web Application Firewall)の導入もクロスサイトスクリプティングの対策として有効でしょう。
WAFを導入すれば、クロスサイトスクリプティングを防ぐことはできますか?
通常、WAF製品にはクロスサイトスクリプティングに対する機能が実装されています。また、WAFの導入はSQLインジェクションなどのWebアプリケーションの脆弱性を悪用したさまざまなサイバー攻撃対策として有効です。
クロスサイトリクエストフォージェリ(CSRF)との違いは?
クロスサイトスクリプティング(XSS)に似ているものとして、「クロスサイトリクエストフォージェリ(CSRF)」というものがあります。ふたつともサイバー攻撃の一種ですが、攻撃の内容が少し違います。
- クロスサイトスクリプティング(XSS):SNSなどの動的なWebサイトにある入力フォームの脆弱性を狙う攻撃
- クロスサイトリクエストフォージェリ(CSRF):セッション管理における脆弱性を狙う攻撃
セッションは「セッションID」とも呼ばれ、サーバーやアプリケーションがユーザーを識別するために付与する情報のことです。攻撃者はこのセッション管理に脆弱性があるWebサイトを悪用して、ログイン状態のユーザーをターゲットにします。
罠を仕掛けたWebサイトにユーザーを誘導して、攻撃用のリクエストURLをクリックさせます。これにより、脆弱性のあるWebサイトに対する改ざんや書き込み、不正操作などをユーザーになりすまして行うことができてしまいます。
攻撃者がユーザーを不正サイトへ誘導し、個人情報の詐取などができる点では同じなので分かりづらいですが、違いは以下のとおりです。
クロスサイトスクリプティング(XSS) | クロスサイトリクエストフォージェリ(CSRF) | |
---|---|---|
不正な処理の実行場所 | Webブラウザ | Webアプリサーバー |
不正な処理の実行可能範囲 | JavaScriptで実行可能であれば、基本的には自由 | Webアプリで定義された処理に限る |
不正な処理の実行前提条件 | なし | ユーザーがターゲットのWebアプリにログイン済みであること |
SQLインジェクションとの違いは?
SQLインジェクションは、リレーショナルデータベースで利用される言語「SQL」に、不正なプログラムを挿入するサイバー攻撃のことを指します。不正なコードの断片をSQLに挿入して、発動させることで直接データベースを攻撃するアタック攻撃の一種です。
SQLインジェクションのターゲットにされやすいサイトは、大量のデータを保有していてSQLで制御が必要な、ショッピングサイトやポータルサイト、決済サイトなどが当てはまるでしょう。
まとめ
クロスサイトスクリプティングが非常に危険なサイバー攻撃であることは、過去の大規模な不正アクセス事件からも明らかです。個人情報の収集を目的とした攻撃者により実行されると、甚大な被害を及ぼすこととなるでしょう。
根本的な対策は設計時のスクリプトから見直す必要があるため非常に難しい問題ですが、サイト制作者はしっかりと情報を調査した上での作り込みが必要です。さらにその他のサイバー攻撃と同じように、サイトユーザー側はしっかりとエンドポイントのセキュリティソフトを導入しておくなど、基本的なセキュリティ対策は行なっておくことが重要です。
クロスサイトスクリプティング(XSS)攻撃は、スクリプトを利用したサイバー攻撃です。
使用されるスクリプトには様々なものがありますが、なかでも「JavaScript」及び「HTMLタグ」は頻出と言える言語。とくに汎用性の高いJavaScriptを用いた攻撃は、著しい被害を及ぼす傾向にあるため、警戒が必要だと言えます。