クロスサイトスクリプティング攻撃とは、サーバーやアプリケーションのコードにある脆弱性を悪用して発生する、ウェブアプリケーションやウェブサーバーへの攻撃です。XSSの脆弱性はセキュリティチームや開発チームが見つけにくく、攻撃の影響も、その後の情報漏えいがかなり進行するまで把握しにくいため、特に危険です。XSS攻撃を防ぐには、攻撃がどのようなものか、そして自社のシステムが攻撃を受ける可能性があるかをチームが理解する必要があります。
クロスサイトスクリプティングはどのように行われるのか?
クロスサイトスクリプティング攻撃は、脅威アクターが悪意のあるコード、つまりスクリプトをウェブアプリケーションのページコードに挿入すると発生します。これは通常、頻繁に変更される、またはユーザーが直接操作できる動的なウェブページで起こります(ユーザーが検索語を入力できる検索バーなど)。
ウェブページの元のコードは信頼できるものとして扱われます。通常、ユーザーがウェブページにアクセスすると、ブラウザーは指示どおりにページを読み込みます。しかし、脅威アクターがウェブページに新しいコードを追加すると、意図されたとおりに読み込まれなくなる可能性があります。それでもユーザーもブラウザーも、そのことに気づきません。新しい悪意のあるコードは、Cookieや認証情報など、そのウェブアプリケーションからデータを盗むように設計されています。

クロスサイトスクリプティング攻撃は、検出が難しいため危険です。脆弱性はコード内に存在するため、そのページがどのプログラミング言語で書かれているかを知らなければ、セキュリティチームはそれを見つけられません。XSS攻撃の兆候を見つけるには、アプリケーションスキャンソフトウェアを使う必要があることも多いでしょう。手作業で見つけるにはあまりにも多くの作業が必要であり、特に担当者がその言語を知らなければ、見落とす可能性もあります。
ウェブアプリケーションがXSS攻撃の被害を受けた場合、保存型、反射型、またはドキュメントオブジェクトモデル(DOM)ベースの攻撃である可能性があります。XSS攻撃には、認証情報の窃取や企業の評判低下など、セキュリティ上およびビジネス上のさまざまなリスクがあります。脆弱性の有無を確認するには、ウェブアプリをテストし、攻撃の明らかな兆候に注意するとともに、ソフトウェアソリューションを使ってコードやアプリの脆弱性を探す必要があります。
クロスサイトスクリプティング攻撃の代表的な3種類
クロスサイトスクリプティング攻撃で最も一般的なものは、保存型XSS、反射型XSS、DOMベースXSSの3種類です。これらは、ウェブアプリケーションのサーバー側とクライアント側のどちらに影響するかが異なります。
保存型XSS
保存型XSS攻撃では、悪意のあるスクリプトがウェブアプリケーションの実際のコードに書き込まれ、クライアント側とサーバー側の両方に影響します。管理者や自動化されたセキュリティソリューションによって駆除されるまで、そのサーバーやアプリケーションのコード内に永続的に残ります。悪意のあるコードが常にアプリケーション内に存在するため、保存型XSSは一貫して深刻なXSS攻撃です。
例えば、脅威アクターが金融サービス企業のウェブサーバー上で、ユーザーが金融データを入力するページに悪意のあるスクリプトを書き込んだとします。この場合、脅威アクターは誰かがそのページを使うたびにデータを盗めます。悪意のあるコードはウェブサーバーに書き込まれているため、ウェブアプリケーションが使われるすべてのケースに影響します。金融サービスのウェブページにあるコードは正規のものに見えるため、ユーザーは悪意のあるコードだと気づかず、発覚するまで使い続けてしまいます。
反射型XSS
反射型XSSは、攻撃者がURLやリクエストパラメーターに悪意のあるコードを挿入し、ウェブサーバーからのレスポンスにそのコードが反映されることから、この名前が付いています。反射型XSSは、アプリケーションのバックエンドやサーバーコードに長期間保存されることはありません。攻撃は、URLやリクエストパラメーターなど、ユーザーの入力の範囲内で実行されます。攻撃者がセッションCookieやユーザーの認証情報を盗むために使った場合、反射型XSSは深刻な被害につながる可能性があります。
反射型XSSの例として、脅威アクターがソフトウェアエンジニアによる、人気のエンジニアリングアプリケーションにアクセスするためのリクエストパラメーターを傍受するケースが挙げられます。脅威アクターはURLをわずかに変更するため、ユーザーは本来アクセスするはずだった正規のページではなく、脆弱性のあるウェブページに誘導されます。そこから脅威アクターは、ページに入力された情報を盗むなど、エンジニアの業務を侵害するさまざまな行為を実行できます。
DOMベースXSS
DOMベースXSS攻撃では、攻撃者がユーザーのブラウザーのドキュメントオブジェクトモデル(DOM)を操作します。ウェブアプリケーション自体の実際のコードはサーバー側で変化しませんが、ユーザー側では悪意のある形で実行されます。変更はドキュメントオブジェクトモデル内のクライアント側で発生し、ウェブサーバーに一切触れない可能性があるため、DOMベースXSSは特に検出が困難です。
例えば、攻撃者がURLの一部を盗み、動的なコード実行を可能にするJavaScript関数で使用すると、ウェブアプリのクライアント側コードを操作できます。攻撃者が顧客関係管理(CRM)製品のメインページを操作しても、ページの実際のHTTPレスポンスは変わりませんが、クライアント向けのコードは変化します。脅威アクターはURLフラグメントを使って攻撃を仕掛けられます。
XSS攻撃に関連する5つの主なリスク
クロスサイトスクリプティング攻撃は、正規のウェブページの動作を装うため、見つけるのが非常に困難です。また、脅威アクターによるウェブアプリの認証情報やセッションCookieの窃取を可能にし、通常の業務プロセスに支障をきたしたり、ビジネスの評判を損なったりする可能性もあります。
XSS攻撃は検出が難しい
XSS攻撃は、完全に正規のウェブアプリケーションのプロセスを操作するため、検出が困難です。また、XSS攻撃には、一般的にJavaScriptなど特定の種類のコードが使われます。セキュリティ管理者や開発管理者でさえ、攻撃に使われたプログラミング言語を知らなければ、攻撃が発生したことに気づけたとしても、対処方法が分からない可能性があります。
攻撃者は認証情報を盗める
XSSの最悪のシナリオの1つでは、ユーザーがハッキングされたことに気づいていないウェブページに認証情報を入力すると、脅威アクターがそれを盗めます。まず、脅威アクターはユーザーがサービスやアプリケーションにログインするウェブページを侵害します。次に、ユーザーが入力したコードを盗むために正常にログインし、それを使って、できれば気づかれないように自分自身がアプリにログインします。
そのアカウントが高い権限を持つアカウントであれば、危険性はさらに高まります。攻撃者は、認証情報を1組盗んだ後、権限を昇格させ、より機密性の高いデータにアクセスする可能性があります。
攻撃者はセッションCookieを乗っ取れる
攻撃者は、XSSに対して脆弱なウェブサイトにスクリプトを挿入し、ファイルを使ってセッションCookieの情報を盗めます。ユーザーに不審な兆候を気づかせずにセッションデータを盗むようスクリプトを設定すれば、攻撃が発生したことをユーザーに知らせることさえありません。
セッションCookieを盗まれると、ウェブページのセッションを再現できるため、そのアプリケーションの機密データにアクセスしたり、ウェブアプリを変更したりできる可能性があります。この攻撃は認証情報の窃取攻撃に似ており、Cookieにログイン情報が保存されている場合は、同様の事態につながる可能性があります。
XSS攻撃は時間がかかり、苛立たしい
XSS攻撃によってページがダウンしたり、誤ったウィンドウにリダイレクトされたりすると、自社のIT部門だけでなく、そのページを使う必要がある他のすべてのユーザーにとっても頭痛の種になります。これは、業務運営に不可欠で、従業員が頻繁にアクセスするウェブアプリケーションでは特に深刻です。ページが長時間機能しなければ、苛立ちや業務の中断にとどまらず、組織の重要なプロセスに対する脅威にもなります。
攻撃に成功するとビジネスが損なわれる可能性がある
ウェブページが停止した場合や、脅威アクターがページの内容を偽装した場合、ビジネスへの被害は深刻なものになり得ます。ウェブアプリケーションが異常な動作をすると、そのアプリケーションだけでなく、運営する組織の評判も損なわれます。攻撃者が特権アカウントにアクセスできれば、機密性の高い顧客データまで侵害される可能性があります。内容の偽装は比較的まれな攻撃ですが、非常に高いスキルを持つ脅威アクターであれば不可能ではありません。
ウェブアプリケーションへの攻撃がより広範なビジネスネットワークに及ぼす影響が気になる場合は、ネットワークセキュリティについて詳しくお読みください。
XSS攻撃に対する脆弱性を確認する方法
攻撃を受けたことをすぐに把握するのは困難ですが、セキュリティチームやITチームがクロスサイトスクリプティングについて学ぶために取れる対策はあります。自社のウェブサーバーやアプリケーションがXSSに対して脆弱かどうかを判断するには、テストを実施し、より分かりやすい兆候を監視し、セキュリティの脆弱性を継続的に評価します。
テストを実施するか、ペンテスターを雇う
セキュリティやITの経験豊富な担当者がいる場合は、ウェブサーバーやウェブアプリケーションの自社コードをテストできます。OWASPなど、専門的なセキュリティ団体のガイドラインに従うことは、XSSからシステムを守るためのよい出発点です。
ペネトレーションテスターを雇うことも有効です。ペンテスターは、システムに侵入して脆弱性を明らかにする目的で専門的に契約されます。ウェブアプリケーションとコードの脆弱性に焦点を当てて依頼すれば、ウェブページがXSSに対して脆弱かどうかを把握しやすくなります。
詳しくは動的アプリケーションセキュリティテストについてお読みください。ウェブアプリケーションの脆弱性を発見するのに役立つツールです。
明らかな攻撃の兆候に注意する
多くのXSS攻撃は明らかになりませんが、攻撃が発生していることを示す、より目立つ兆候には注意してください。ウェブページが不適切にリダイレクトされたり、認証済みと思われるユーザーが特権ウェブアプリ内で突然おかしな変更を加え始めたりした場合は、ウェブページのコードを詳しく調べる合図です。明らかな攻撃は少ないものの、兆候がある場合は注意深く確認しましょう。
定期的に脆弱性をスキャンする
インフラ全体で頻繁に脆弱性スキャンを実施します。ただし、XSSの脆弱性を見つけるには、特にウェブアプリケーションをスキャンしてください。脆弱性スキャンツールはパターンを考慮して、セキュリティチームが手作業で見つける時間のない問題を特定します。一部の脆弱性スキャンツールは、一般的な脅威のシグネチャや兆候を保有するデータベースやライブラリから情報を取得し、自社のシステムやアプリでそれらを見つけるのにも役立ちます。
詳しくは、最適なウェブおよびアプリケーション脆弱性スキャナーのおすすめと、スキャナーを選ぶ際に考慮すべき基準をご覧ください。
クロスサイトスクリプティングは防げるのか?
企業がクロスサイトスクリプティングを防ぐことは可能ですが、そのためにはセキュリティチームとウェブアプリケーション開発チームが、優れたセキュリティ慣行に真剣に取り組む必要があります。具体的には、次の対策が必要です。
- アプリケーションコードを定期的に確認する:開発ライフサイクル全体を通してコードを分析し、脆弱性がないか確認します。
- 出力をエンコードし、入力を検証する:ウェブアプリに書き込むデータをエンコードし、ユーザーが入力したコードをサニタイズしてからブラウザーに送信します。
- 高度なセキュリティツールを使う:ウェブアプリケーションセキュリティソフトウェアは、ウェブアプリを保護するために設計されており、XSSの防止に特に役立ちます。
- 優れたDevOpsプラクティスを教える:すべてのウェブ開発者がXSS攻撃と、その影響を抑えるための強固で安全なコードの作成方法を知っておく必要があります。
詳しくはXSS攻撃の防止についてお読みください。実際の攻撃例や、ビジネスに役立つツールも紹介しています。
よくある質問(FAQ)
現実世界におけるXSSの例とは?
2018年、British Airwaysが攻撃を受けました。攻撃したハッカー集団は、JavaScriptライブラリのXSS脆弱性を悪用しました。ハッカーはBritish Airwaysのドメイン名になりすまそうとするサーバーに顧客データを送信しました。攻撃が発覚する前に、ハッカーは35万件を超える取引からクレジットカードデータを抜き取りました。これは、XSS攻撃の検出にどれほど時間がかかる可能性があるかを示すよい例です。
ハッカーはXSSで何ができるのか?
攻撃者はXSSを使ってデータやCookieを盗めますが、被害の小さい目的に使うこともあります。攻撃者はクロスサイトスクリプティングを使って競合サイトのパフォーマンスを低下させたり、正規のページに不適切なコンテンツを追加したりできます。ただし、評判への被害は依然として深刻です。
XSS攻撃の根本原因とは?
クロスサイトスクリプティング攻撃は、ウェブアプリケーションへのリクエストの内容が適切に検証されていないために発生します。ウェブコードがXSSに対して脆弱かどうかを判断するのは困難ですが、ユーザーのリクエストをウェブブラウザーに送信する前にすべての入力を検証するなど、開発チームやセキュリティチームがこうしたセキュリティ上の隙を減らす方法はあります。
要点:クロスサイトスクリプティングはデータ、アプリケーション、企業の評判を危険にさらす
クロスサイトスクリプティング攻撃はウェブアプリケーションやサーバーを危険にさらし、自社が脆弱であることすら把握していない可能性があるセキュリティチームやウェブ開発チームに課題をもたらします。しかし、人間がコードの脆弱性を見つけ、侵害を発見する能力には限界がある一方で、脆弱性スキャナーやアプリケーションセキュリティテストツールなどの自動化されたセキュリティソリューションを使えば、その助けになります。
ウェブアプリケーションのコードをテストし、安全な開発パイプラインを構築して、開発プロセス中に脆弱性が発生しにくくする必要があります。XSSの脆弱性や攻撃を防ぐのは大変に思えるかもしれませんが、コードを適切に管理し、自動化されたセキュリティソリューションに投資することで、長期的にウェブアプリケーションを保護できます。
ウェブアプリだけでなく、他のアプリケーションのセキュリティについても詳しく知りたい場合は、さまざまなアプリケーションセキュリティについてお読みください。クラウドアプリ、モバイルアプリ、データアプリ、エンタープライズアプリのセキュリティなどを取り上げています。





