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

Bart Lenaerts-Bergmans - 11月 8, 2023

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

クロスサイトスクリプティング(XSS)は、正当なWebサイト内に攻撃者が悪意のあるコードを挿入するコードインジェクション攻撃です。その後にコードは、ユーザーのウェブブラウザ内で感染したスクリプトとして起動し、攻撃者は機密情報を盗んだり、ユーザーになりすましたりすることができるようになります。

ユーザーが自分のコンテンツを投稿できるWebフォーラム、掲示板、ブログ、およびその他のWebサイトは、XSS攻撃の影響を最も受けやすくなります。入力がWebアプリケーションによって確認、検証、およびエンコードされない限り、コードに含まれる悪意のあるスクリプトは、他のユーザーのブラウザにより自動的に実行されます。このスクリプトは、ブラウザによって保持され、そのサイトで使用されているユーザーのクッキー、セッショントークン、または代替の機密情報にアクセスできます。これらのスクリプトは、より高度な攻撃で感染したWebページのコンテンツを書き換えることも可能です。

XSSなどのファイルレス攻撃やスクリプトベースの攻撃は、その回避機能により近年増加しています。これらの攻撃は、従来のウイルス対策(AV)ソリューションとファイアウォールを簡単に回避できるため、比較的簡単に実行できます。組織は、Webサイトの訪問者を保護し、組織への評判の低下リスクを軽減するために、全体的なサイバーセキュリティ戦略の一部としてXSSの検出と防止を含める必要があります。

クロスサイトスクリプティングはどのように機能しますか?

XSS攻撃の仕組みは、展開される攻撃の種類によって異なる点に注意することが重要です。とはいえ、ほとんどの攻撃は同じプロセスに従います。

  1. 攻撃者が、悪意のあるコードをWebページに挿入する場所と方法を特定します。これを可能にするには、Webサイトで、ユーザーがコメント、投稿、または連絡先フィールドを介してページにコンテンツを追加できるようにする必要があります。攻撃者が定義されたターゲットを持っている場合、フィッシングスプーフィング手法などのソーシャルエンジニアリング戦術を使用して、ユーザーに問題のサイトへのアクセスを促します。それ以外の場合、コードはすべてのユーザーが検出できるように残されます。
  2. 被害者が、挿入されたコードを含むWebサイトにアクセスします。被害者のデバイスは、感染したスクリプトを信頼できるサイトからのソースコードの一部と見なすため、感染したスクリプトを受け入れて実行します。コードが表示されず、ほとんどのインターネットユーザーがJavaScriptなどの一般的なプログラミング言語を理解していないことを考えると、平均的なユーザーがXSS攻撃を検出することは困難です。

2024年版クラウドストライクグローバル脅威レポート

クラウドストライクのCounter Adversary Operationsチームによる最前線の調査に基づき、クラウドストライク2024年版グローバル脅威レポートではサイバー脅威の状況全体にわたる注目すべきテーマ、トレンド、イベントを取り上げています。

今すぐダウンロード

XSS攻撃の種類と例

クロスサイトスクリプティング攻撃には、主に次の3種類があります。

1. 反射型または非持続型XSS

悪意のあるスクリプトは、アクティブなHTTPリクエストの一部として実行され、Webサーバーからユーザーに「反射」されます。

最も単純な種類のクロスサイトスクリプティングであるリフレクションXSS攻撃は、WebアプリケーションがHTTPリクエストからデータを受信し、データを検証またはエンコードせずにすぐに応答するときに発生します。

反射型XSSの例を次に示します。

https://insecure-website.com/status?message=All+is+great.
Status: All is great.

アプリケーションはデータを一切処理しないため、攻撃者は他のユーザーに対して以下のようなスクリプトベースの攻撃を簡単に開始できます。

https://insecure-website.com/status?message=<script>/*+Malicious+code+here...+*/</script>
<p>Status: <script>/* Malicious code here... */</script></p>

リフレクション攻撃では、挿入されたスクリプトは、悪意のあるリンクを介してエラーメッセージ、検索結果、または同様のアクションとして表示されます。クリックすると、このリンクがスクリプトを実行し、挿入されたコードが脆弱なサイトに移動し、ユーザーのブラウザに「反射」されるようになります。ブラウザは、サイトを信頼できるソースと見なすため、コードを実行します。スクリプトは、そのセッションでユーザーが使用できるアクションを実行したり、セッション中にユーザーが送信したデータをキャプチャしたりできます。

2.ストアドまたは持続型XSS

悪意のあるスクリプトは、訪問者ログ、Webフォーラム、コメントフィールドなどのWebアプリケーションのデータベースに永続的に保存されます。

ストアドXSS攻撃は、持続型XSS攻撃とも呼ばれ、Webアプリケーションが後続のHTTP応答で信頼できないソースまたは検証されていないソースからのデータを共有すると発生します。ストアドクロスサイトスクリプト攻撃では、挿入されたスクリプトは、データベース、掲示板の投稿、コメント、その他の場所などのターゲットサーバーに永続的に保存されます。例えば、

<p>Hi, this is my comment!</p>

送信されたデータをサイトが処理しない場合、攻撃者は他のユーザーに感染する悪意のあるスクリプトを含むコンテンツを簡単に入力できます。被害者は、保存された情報を要求することで、サーバーから悪意のあるスクリプトを取得することになります。

<p><script>/* Malicious code here... */</script></p>

3. ドキュメントオブジェクトモデルまたはDOMベースXSS

セキュリティの脆弱性は、クライアント側のコード、つまりサーバー側のコードではなくブラウザで実行されるコードに存在します。

DOM XSSは、比較的まれなクロスサイトスクリプト型の攻撃です。サーバー側のコードを標的とする他の2種類の攻撃とは異なり、DOM XSS攻撃は、クライアント側のコードまたはブラウザで実行されるコードのセキュリティの脆弱性を悪用します。この種の攻撃は、Webアプリケーションが信頼できないソースからのJavaScriptデータを安全でない方法で処理するときに発生します。DOM XSS攻撃は、Javaがすべてのブラウザが理解できる唯一の言語であるため、常にJavaScriptで発生します。

次の例では、アプリケーションがJavaScriptを使用して入力フィールドから値を読み取ります。次に、これらの値をHTMLの要素内に書き込みます。

var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;

攻撃者が入力フィールドの値を制御すると、スクリプトをトリガーする悪意のあるコードを非常に簡単に挿入できます。

You searched for: <img src=1 onerror='/* Bad stuff here... */'>

追加のXSS分類方法

これら3つの攻撃タイプはそれぞれ異なりますが、排他的ではないことに注意してください。各カテゴリーには多少の重複があり、攻撃者は1回の攻撃で2つの攻撃タイプの要素を使用できます。
このため、サイバーセキュリティコミュニティは、コードが悪用される場所(サーバーまたはクライアント)に基づいてXSS攻撃を参照します。攻撃をサーバーXSSまたはクライアントXSSと呼ぶ場合があります。

詳細情報

組織内のシステムとアプリケーションの脆弱性をすばやく監視する方法をご覧ください。視聴する:脆弱性管理のためのFalcon Spotlightの使用

さまざまなクロスサイトスクリプティングアプローチ

XSS攻撃は、HTTPリクエストからの入力がHTML出力に侵入する可能性のある任意の場所で発生する可能性があります。以下は、攻撃者がXSS攻撃で利用する可能性のある一般的な戦術のリストです。

  • <script>タグを利用して、悪意のあるJavaScriptコードを参照、挿入、または埋め込みます。
  • onloadonerrorなど、JavaScriptイベント属性を異なるタグ内で利用します。
  • <body>タグ内のXSSペイロードを、JavaScriptイベント属性を使用して配信します。
  • セキュアでない<img><link><div><table><td>または<object>タグを利用して、悪意のあるスクリプトを参照します。
  • <iframe>タグを利用して、既存のページ内にWebページを埋め込みます。

XSSの影響は?

XSS攻撃は、被害者に重大な問題を引き起こす可能性があります。極端な場合、XSS攻撃者はユーザーのクッキーを利用してその人物になりすますことができます。このコードは、ファイルやデータを盗んだり、デバイスにマルウェアをインストールしたりすることもできます。

サーバー側では、XSS攻撃はホスト組織の評判を傷つける可能性があります。例えば、企業サイトのコンテンツを変更することで、攻撃者は会社の商慣行や活動に関する誤った情報を広めることができます。攻撃者は、Webサイトのコンテンツを操作して、訪問者に誤った指示や方向を提示することもできます。緊急時にハッカーが政府のWebサイトやリソースを乗っ取り、最終的に、危機の際にどこにどのように進むべきかについて人々に誤った指導を与える可能性がある場合、この方法で侵害されることは特に危険です。

残念ながら、特にユーザーにコンピュータープログラミングの知識がない場合、XSSの欠陥を特定することは困難になります。熟練した開発者でさえ、信頼できるサイトからのコードをチェックすることはめったにありません。一度挿入されると、ストアドXSS攻撃のためにアプリケーションから悪意のあるコードを削除することは非常に困難になることが多くなります。

専門家からのヒント

このビデオでは、クラウドストライクが、複数の検出機能を使用してスクリプトベースの攻撃を防ぐFalconについて説明します。視聴する:Falconがスクリプトベースの攻撃を防ぐ方法

XSS防御

組織がXSS攻撃に対して脆弱でないことを確認することは重要です。スクリプトベースの攻撃やその他のファイルレス攻撃は、ウイルス対策ソフトウェアやファイアウォールなどの新旧のセキュリティツールによる検出を回避できるため、近年増加しています。

セキュアなWebサイトを維持するために、組織のWebチームは、サイバーセキュリティチームや信頼できるサイバーセキュリティパートナーと部門横断的に連携して、企業サイトに対するXSS攻撃のリスク評価を支援する必要があります。

クライアント側とサーバー側で安全でセキュアなWebサイトを管理するには、通常、サイトの脆弱性を継続的に監視するための脆弱性管理ソリューションが必要です。そのための優れた方法は、Web開発者やそれ以外のWebチームの人たちと協力して、Webサイトを開発および保守する際のベストセキュリティプラクティスを提供する、サイバーセキュリティチームのメンバーである、SecOpsチャンピオンを確保することです。セキュリティチャンピオンは、WebサイトをXSS攻撃に対して無防備にする恐れのある重大な弱点や脆弱性に関するインサイトを提供することもできます。

さらに、サイバーセキュリティチームと協力して、セキュアで安全なWeb環境を作成するために、次のプラクティスを検討する必要があります。

  • 悪用される可能性が高い特定の領域で手動の侵入テストを実行します。
  • 会社のWebサイトやその他のリソース(フォーラム、ブログ、メンバーグループなど)にコンテンツを送信するユーザーの機能を制限します。
  • ユーザー入力を許可する場合は、厳格なパラメーターを使用して到着時にすべてのコンテンツをフィルタリングします。出力段階でデータをエンコードします。
  • HTMLまたはJavaScriptコードを含むべきでない応答に、悪意のあるコードが挿入されるのを防ぎます。
  • ITチームや、開発者、コンピュータープログラマー、コンピューターエンジニアに対し、継続的なサイバーセキュリティトレーニングと開発の機会を提供して、XSSのリスクを認識し、設計によって適切に対処できるようにします。

詳細情報

セキュリティコラボレーションのギャップを効果的に埋めるため、即時の可視性とスキャナーのオーバーヘッドゼロを備えた最新のクラウドネイティブの脆弱性管理(VM)について学びます。見る:CrowdStrike Falcon® Spotlight

GET TO KNOW THE AUTHOR

バートは、クラウドストライクの脅威インテリジェンスのシニアプロダクトマーケティングマネージャーであり、脅威の監視、検知、インテリジェンスにおいて20年を超える経験を持っています。ベルギーの金融機関でネットワークセキュリティ運用アナリストとしてキャリアをスタートさせた後、米国東海岸に移り、3Com/Tippingpoint、RSA Security、Symantec、McAfee、Venafi、FireEye-Mandiantなどの複数のサイバーセキュリティ企業に入社し、製品管理と製品マーケティングの両方の役割を果たしました。