私たちは日頃からインターネットを通じて、Webアプリケーションやサービスを利用し、その恩恵を受けています。その一方でWebサイトの改ざんや情報漏えいといった事件・事故が後を絶たないという実情もあり、Webサイトの運営者はセキュリティに対する正しい知識を身に付ける必要があります。
本稿では、クロスサイトスクリプティング攻撃について解説し、セキュリティ対策として有効な「WAF(Web Application Firewall)」をご紹介します。
Webサイトを保護し、ユーザーに被害を与えず、会社の信頼を守るためにもクロスサイトスクリプティングの仕組みや対策を理解しましょう。
もっと見る: WAFって何?導入のメリットとは
クロスサイトスクリプティング(XSS)攻撃とは
クロスサイトスクリプティングとは、問い合わせフォームや掲示板など、外部からの入力に応じてページを表示するWebアプリケーションにおいて、HTML生成の実装に問題があることで生じる脆弱性および悪用した攻撃手法のことです。
攻撃者は、スクリプトを含んだリンクを用意するなどの罠を仕掛け、ユーザーがその罠に引っかかてしまうことで、ブラウザ上でスクリプトが実行されてしまいます。
結果としてCookieの値を盗まれて「なりすまし」に悪用されたり、書き換えられた画面から重要情報を入力してしまうなどの被害が生じます。
このように、攻撃者が用意する罠サイトと標的となる(脆弱な)サイトを横断することからクロスサイトスクリプティングと呼ばれており、XSSと省略されることが多くなっています。
クロスサイトスクリプティングの仕組み
よく例示されるCookieの値を窃取するケースをもとにクロスサイトスクリプティングの動きを説明します。
以下にメッセージを入力する投稿フォームがありますが、入力値の検証が行われておらず、HTMLタグやJavascriptの入力があった場合もそのまま実行し、ページを表示するようになっています。
通常のメッセージを入力する分には問題ありませんが、次のような入力を行った場合はどうでしょう。
CookieにセットされたセッションIDが表示されてしまいました。自分自身でこのような入力をすることはありませんが、実際のクロスサイトスクリプティングでは、前述のように攻撃者はユーザーを罠にかけて、盗んだCookieをメールで送信するなどの方法で攻撃を成立させます。
クロスサイトスクリプティングで起こる被害事例
独立行政法人情報処理推進機構(IPA)が、2023年10月19日に公開した資料「ソフトウェア等の脆弱性関連情報に関する届出状況[2023年第3四半期(7月~9月)]」によると、届け出のあった脆弱性のうち、クロスサイトスクリプティング(任意のスクリプト実行)の件数が最も多く、累計でも最も多い割合を占めているとのことです。
過去には、世界中で多く利用されているSNSや動画共有サイトが攻撃の対象となったケースなど、実際にクロスサイトスクリプティングによる被害も数多く報告されています。
被害事例① 大手出版会社のサイト改ざんの事例
2014年1月には、日本の出版大手であるK社の公式サイトが、不正アクセスにより改ざんされるという事件が発生しました。
複数のアプリケーションに存在したクロスサイトスクリプティングの脆弱性が悪用されたとみられ、改ざんされたウェブサイトは、閲覧したユーザーのPCに不正なプログラム(マルウェア)をダウンロードするように書き換えられていました。
不正なプログラムの実行により、PC内の情報を盗まれるなど、ユーザーへの被害や企業としての信頼を損なうなどのリスクが考えられます。
被害事例② AndroidアプリでXSSの被害事例
2020年9月に株式会社ユニクロが提供している Android アプリ「ユニクロアプリ」において、クロスサイトスクリプティングの脆弱性が確認されました。
この脆弱性については、迅速な対策が取られたため幸いにして被害は確認されませんでした。クロスサイトスクリプティングはWebブラウザを経由せずとも、脆弱性のあるアプリを介して攻撃してくることがあります。アプリユーザーには常に最新バージョンへのアップデートを徹底することが重要になります。
被害事例③ EC-CUBEにおける深刻なXSSの被害事例
2021年5月にECサイト構築パッケージとして有名な「EC-CUBE」の4.0系において、クロスサイトスクリプティングの脆弱性(CVE-2021-20717)に関する情報が公開され、話題になりました。
本脆弱性を悪用した攻撃、情報漏えいの被害も確認されており、クロスサイトスクリプティング対策の重要性が示された事例といえます。
EC-CUBE 4.0系: クロスサイトスクリプティング脆弱性について
被害事例④ SaaSサービスでXSSの被害事例
2021年9月に国内ITベンダーが提供するSaaS型のECサイト構築サービスの基幹サーバー2台にクロスサイトスクリプティングの脆弱性を突いた攻撃がありました。
この攻撃による被害内容は、クレジットカード情報を含む個人情報が43万件以上漏えいした可能性があると発表しています。
ITベンダーは一時的に業務を停止し、流出した可能性のある顧客情報の範囲を特定、不正アクセスの分析などを行い、再発防止に努めたとのことです。
クロスサイトスクリプティングの種類
クロスサイトスクリプティングは、反射型XSSと持続型XSS、DOM Based XSSに分けられます。
反射型XSS(Reflected XSS)
攻撃者が仕掛けた罠サイトに攻撃用のスクリプトがあり、ユーザーが罠を踏んでしまうことで標的サイトを介してスクリプトが実行されてしまう手法です。
XSSと聞くと、この手法を思い浮かべる方が多いかもしれません。攻撃者の仕掛けた罠に引っかからなければ被害を受けることはないため、攻撃者にとってはユーザーを罠サイトへ誘導するというステップが必要になります。
格納型XSS(Stored/Persistent XSS)
攻撃用のスクリプトが標的サイトのデータベースなどに埋め込まれてしまうタイプのXSSです。
反射型XSSと異なり、ユーザーを罠サイトへ誘導するというステップが必要なく、ユーザーが標的サイトを閲覧することで攻撃を実行できるため、攻撃者にとってメリットがあり、被害が拡大しやすい手法といえます。
HTML生成の実装に問題があることで生じる点は、反射型XSSと同じです。持続型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生成において特別な意味を持つ記号(メタ文字)の取り扱いに問題があることで生じる脆弱性、攻撃になりますので、特殊記号であるメタ文字をエスケープし、文字そのものとして扱うようにすることが基本です。
「<」「>」「&」「"」を「<」「>」「&」「"」等のように、表示するウェブページの本文やHTMLタグの属性値等の出力要素にエスケープ処理を行い、攻撃者が意図したスクリプトを実行されないよう無害化することが重要となります。
また、入力可能な値や文字数を制限することも対策のひとつです。例えば、電話番号を入力する場合、数字のみに制限することでスクリプトの挿入を抑止することができます。これらを意識したセキュアコーディングがWeb開発者に求められます。
WAFによる対策
WAF(Web Application Firewall)を導入することで、クロスサイトスクリプティング(反射型XSS、持続型XSS)を効率的に検出・防御することができます。
WAFは、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。
Webアプリケーションの脆弱性を悪用する攻撃に対しては、前述の根本的な対策(エスケープ処理)が理想ですが、繰り返されるWebアプリケーションの改良の中で対策漏れが生じてしまうこともあるかもしれません。
Webアプリケーションの安全性を維持するには高いセキュリティ意識と知識、技術が必要となります。また、自社で開発したプログラムではなく、利用しているフレームワークやCMSのプラグインなどに脆弱性が見つかった場合は、自ら対処することは非常に困難であり、開発元からのバージョンアップ版やパッチの提供を待ち、速やかに適用する必要があります。
このようなときに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サイトに偽のリクエストを送信させられてしまうという違いがあります。
- カテゴリ:
- Webセキュリティ
この記事に関する製品のご紹介
ホスト型WAF「SiteGuard Server Edition」
SiteGuard Server Editionは、ウェブサーバーのモジュールとして動作するホスト型WAF製品です。Webサーバー自体にインストールするため、専用ハードウェアが必要ありません。ネットワーク構成を変更せず、できるだけシンプルに導入したいお客様に最適な製品です。
詳細はこちら