クロスサイトスクリプティング(XSS)とは?仕組みと対策方法を解説

 2020.04.21  EGセキュアソリューションズ

私たちは日頃からインターネットを通じて、Webアプリケーションやサービスを利用し、その恩恵を受けています。その一方でWebサイトの改ざんや情報漏えいといった事件・事故が後を絶たないという実情もあり、Webサイトの運営者はセキュリティに対する正しい知識が身に付ける必要があります。

本稿では、クロスサイトスクリプティング攻撃について解説し、セキュリティ対策として有効な「WAF(Web Application Firewall)」をご紹介します。Webサイトを保護し、ユーザーに被害を与えず、会社の信頼を守るためにもクロスサイトスクリプティングの仕組みや対策を理解しましょう。

もっと見る: WAFって何?導入のメリットとは

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

クロスサイトスクリプティングとは、問い合わせフォームや掲示板など、外部からの入力に応じてページを表示するWebアプリケーションにおいて、HTML生成の実装に問題があることで生じる脆弱性および悪用した攻撃手法のことです。

攻撃者は、スクリプトを含んだリンクを用意するなどの罠を仕掛け、ユーザーがその罠に引っかかてしまうことで、クライアント上でスクリプトが実行されてしまい、結果としてCookieの値を盗まれて「なりすまし」に悪用されたり、書き換えられた画面から重要情報を入力してしまうなどの被害が生じます。

クロスサイトスクリプティング

このように、攻撃者が用意する罠サイトと標的となる(脆弱な)サイトを横断することからクロスサイトスクリプティングと呼ばれており、XSSと省略されることが多くなっています。

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

よく例示されるCookieの値を窃取するケースをもとにクロスサイトスクリプティングの動きを説明します。

以下にメッセージを入力する投稿フォームがありますが、入力値の検証が行われておらず、HTMLタグやJavascriptの入力があった場合もそのまま実行し、ページを表示するようになっています。

xss-01-1

通常のメッセージを入力する分には問題ありませんが、次のような入力を行った場合はどうでしょう。

xss-02-1

CookieにセットされたセッションIDが表示されてしまいました。自分自身でこのような入力をすることはありませんので、実際のクロスサイトスクリプティングでは、前述のように攻撃者はユーザーを罠にかけて、盗んだCookieをメールで送信するなどの方法で攻撃を成立させます。

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

独立行政法人情報処理推進機構(IPA)が、2021年4月22日に公開した資料「ソフトウェア等の脆弱性関連情報に関する届出状況[2021年第1四半期(1月~3月)]」によると、届け出のあった脆弱性のうち、クロスサイトスクリプティング(任意のスクリプト実行)の件数が最も多く、累計でも最も多い割合を占めているとのことです。過去には、世界中で多く利用されているSNSや動画共有サイトが攻撃の対象となったケースなど、実際にクロスサイトスクリプティングによる被害も数多く報告されています。

被害事例① 動画共有サイトでのXSS被害事例

2010年7月、世界規模の動画共有サイトで、クロスサイトスクリプティングの脆弱性を悪用した不正アクセスがありました。攻撃者により、コンテンツのコメント欄に悪意のあるスクリプトが埋め込まれ、該当のコメント欄を閲覧した利用者のブラウザ上に、不正なポップアップが表示されるなどの被害が生じました。

被害事例② SNS上での強制書き込みの事例

動画共有サイトでの被害事例に続き、2010年9月には、世界中で広く利用されているSNSにおいて、クロスサイトスクリプティングの脆弱性を突いた攻撃がありました。不正なJavaScriptが埋め込まれた投稿を閲覧することで、ユーザーが意図せずに同様の投稿を拡散してしまうこととなり、SNSの特性上、爆発的に被害を広げ、被害ユーザーは数十万人にものぼりました。

被害事例③ 大手出版会社のサイト改ざんの事例

2014年1月には、日本の出版大手であるK社の公式サイトが、不正アクセスにより改ざんされるという事件が発生しました。複数のアプリケーションに存在したクロスサイトスクリプティングの脆弱性が悪用されたとみられ、改ざんされたウェブサイトは、閲覧したユーザーのPCに不正なプログラム(マルウェア)をダウンロードするように書き換えられていました。不正なプログラムの実行により、PC内の情報を盗まれるなど、ユーザーへの被害や企業としての信頼を損なうなどのリスクが考えられます。

被害事例④ EC-CUBEにおける深刻なXSSの被害事例

最近の事例として、2021年5月にECサイト構築パッケージとして有名な「EC-CUBE」の4.0系において、クロスサイトスクリプティングの脆弱性(CVE-2021-20717)に関する情報が公開され、話題になりました。本脆弱性を悪用した攻撃、情報漏洩の被害も確認されており、クロスサイトスクリプティング対策の重要性が示された事例といえます。

EC-CUBE 4.0系: クロスサイトスクリプティング脆弱性について

クロスサイトスクリプティングの種類

クロスサイトスクリプティングは、反射型XSSと持続型XSS、DOM Based XSSに分けられます。

反射型XSS

攻撃者が仕掛けた罠サイトに攻撃用のスクリプトがあり、ユーザーが罠を踏んでしまうことで標的サイトを介してスクリプトが実行されてしまう手法です。XSSと聞くと、この手法を思い浮かべる方が多いかもしれません。攻撃者の仕掛けた罠に引っかからなければ被害を受けることはないため、攻撃者にとってはユーザーを罠サイトへ誘導するというステップが必要になります。

持続型XSS

攻撃用のスクリプトが標的サイトのデータベースなどに埋め込まれてしまうタイプのXSSです。反射型XSSと異なり、ユーザーを罠サイトへ誘導するというステップが必要なく、ユーザーが標的サイトを閲覧することで攻撃を実行できるため、攻撃者にとってメリットがあり、被害が拡大しやすい手法といえます。HTML生成の実装に問題があることで生じる点は、反射型XSSと同じです。蓄積型XSSとも呼ばれます。

ECサイトなどの管理画面に持続型XSSの脆弱性が存在する場合、攻撃者によってXSSの悪用を狙った購入や投稿処理が行われ、管理者が管理画面にアクセスした際にスクリプトを実行してしまう可能性があります。結果として、攻撃者の用意したサーバーへの情報送信や他の不正プログラム(WebShell)などの設置が行われることとなり、被害が拡大していきます。

DOM Based XSS

反射型XSSや持続型XSSが標的サイトであるサーバー側のWebアプリケーションの脆弱性であるのに対し、DOM Based XSSはブラウザのプラグインやアプリなど、JavaScriptによりクライアント側で表示処理する箇所に問題がある場合のXSSです。サーバーを経由せずにXSSが発生します。

クロスサイトスクリプティングは、よく知られている脆弱性ですが、反射型XSSの印象が強いためか対策が軽視されることがあります。実際には、ソフトウェアやプラグイン等の脆弱性として発見される件数が多い傾向にあり、持続型XSSのように被害が拡大しやすいケースもありますので、注意が必要な脆弱性であることやWebサイトの運営者には対策が求められるということを意識しましょう。

クロスサイトスクリプティングの対策

それでは、クロスサイトスクリプティングに対して、どのような対策を行えば良いのでしょうか。

ユーザーとしての対策

クロスサイトスクリプティングの対策として、クライアントのセキュリティを高める事は非常に重要です。当たり前のことに思えますが、OSやブラウザを含むアプリケーションを常に最新化することやウイルス対策ソフトを導入することは、様々な脆弱性に対して有効な対策となります。最近のウイルス対策ソフトには、不正なスクリプトを検出する機能や不正なサイトへのアクセスをブロックする機能などもあり、効果が期待できます。また、多くのクロスサイトスクリプティングは、外部からの不正なスクリプトを実行する事で発動するため、Webサイトやメールの不審なリンクをクリックしないよう、常に心掛けることが大切です。

Web開発者としての対策

クロスサイトスクリプティングは、HTML生成において特別な意味を持つ記号(メタ文字)の取り扱いに問題があることで生じる脆弱性、攻撃になりますので、特殊記号であるメタ文字をエスケープし、文字そのものとして扱うようにすることが基本です。「<」「>」「&」「"」を「&lt;」「&gt;」「&amp;」「&quot;」等のように、表示するウェブページの本文やHTMLタグの属性値等の出力要素にエスケープ処理を行い、攻撃者が意図したスクリプトを実行されないよう無害化することが重要となり、これらを意識したセキュアコーディングがWeb開発者に求められます。

WAFによる対策

WAF(Web Application Firewall)を導入することで、クロスサイトスクリプティング(反射型XSS、持続型XSS)を効率的に検出・防御することができます。WAFは、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。

WAF(Web Application Firewall)

Webアプリケーションの脆弱性を悪用する攻撃に対しては、前述の根本的な対策(エスケープ処理)が理想ですが、繰り返されるWebアプリケーションの改良の中で対策漏れが生じてしまうこともあるかもしれません。Webアプリケーションの安全性を維持するには高いセキュリティ意識と知識、技術が必要となります。また、自社で開発したプログラムではなく、利用しているフレームワークやCMSのプラグインなどに脆弱性が見つかった場合は、自ら対処することは非常に困難であり、開発元からのバージョンアップ版やパッチの提供を待ち、速やかに適用する必要があります。このようなときにWAFが導入されていると、攻撃を受けた際の影響を低減することができ、セーフティネットとして大きな役割を果たします。

WAFの詳細情報を見る <https://siteguard.jp-secure.com/waf>

クロスサイトスクリプティングについてよくある質問

質問① クロスサイトスクリプティングを受けた場合、どのような被害がありますか?

回答① クロスサイトスクリプティングの主な被害例として、Cookieと呼ばれるデータからセッション情報が盗まれるセッションハイジャック、偽サイトに誘導され個人情報を窃取されるフィッシング、改ざん被害などが挙げられます。情報漏洩など、大きな被害が生じる可能性の高い持続型の攻撃もあるため、注意が必要です。

質問② クロスサイトスクリプティングは、なぜXSSと略されるのですか?

回答② クロスサイトスクリプティング(Cross Site Scripting)は「CSS」または「XSS」と略されます。CSSは、HTML文書の見栄えを整えるスタイルシート言語のCSS(Cascading Style Sheets)と混同するため、区別して「XSS」と表記することが一般的になっています。

質問③ 利用しているCMSにクロスサイトスクリプティングの脆弱性があることがわかりました。どのような対策を行えばよいでしょうか?

回答③ 多くの場合、CMSの開発元から提供されるバージョンアップ版やパッチの適用が根本的且つ有効な対策となります。また、WAF(Web Application Firewall)の導入もクロスサイトスクリプティングの対策として有効です。

質問④ WAFを導入することで、クロスサイトスクリプティングを防ぐことはできますか?

回答④ WAF製品には、通常クロスサイトスクリプティングに対応する機能が実装されています。WAFの導入は、SQLインジェクションやクロスサイトスクリプティングなど、Webアプリケーションの脆弱性を悪用した様々な攻撃への対策に有効です。

質問⑤ クロスサイトスクリプティングとクロスサイトリクエストフォージェリの違い何ですか?

回答⑤ どちらの攻撃手法も攻撃者が用意した罠サイトを経由して攻撃するという点は同じですが、罠サイトにユーザーがアクセスすることで、最終的にブラウザ上で不正なスクリプトを実行させられてしまうクロスサイトスクリプティングに対し、クロスサイトリクエストフォージェリは、ユーザーがWebサイトへログイン状態であることを狙い、罠サイトを経由してターゲットのWebサイトに偽のリクエストを送信させられてしまうという違いがあります。

CTA

RECENT POST「Webセキュリティ」の最新記事

Webセキュリティ
WAFとセキュリティプラグインでWordPressの安全性を高めよう
Webセキュリティ
クロスサイトリクエストフォージェリ(CSRF)とは?被害や対策についても解説
Webセキュリティ
クロスサイトスクリプティング(XSS)
Webセキュリティ
企業のホームページ担当者必見!セキュリティ対策の具体例紹介
クロスサイトスクリプティング(XSS)とは?仕組みと対策方法を解説