反射型 XSS とは? | | ITPro Today: IT ニュース、ハウツー、トレンド、ケース スタディ、キャリアのヒントなど

反射型 XSS 攻撃は、攻撃者が悪意のあるスクリプトを Web サイトに挿入するために使用する最も一般的な手法の 1 つです。 そこから、攻撃者は機密データを盗んだり、Web サイトを改ざんしたり、影響を受けるユーザーのキーストロークをキャプチャしたりする可能性さえあります。

幸いなことに、反射型 XSS 攻撃は比較的簡単に防ぐことができます。 この概要では、反射型 XSS 攻撃のしくみ、このタイプの XSS 攻撃を検出する方法、および開発した Web サイトやアプリが反射型 XSS の犠牲になるリスクを軽減するためのベスト プラクティスについて説明します。

反射型 XSS とは?

反映されたクロスサイト スクリプティング、または XSSは、悪意のあるアクターが特別な形式のリンクを介して悪意のあるスクリプトをユーザーのコンピューターに展開する攻撃の一種です。

反射型 XSS 攻撃を開始するには、攻撃者はまず次のようなリンクを作成します。

http://example.com/index.php?malicious_code

ユーザーがリンクをクリックすると、コードが最初に検出されない場合、ブラウザは URL に埋め込まれた悪意のあるコードを実行します。

このタイプの XSS 攻撃は、悪意のあるコードがサードパーティの Web サイト (上記の例では example.com) から「反射」されるため、反射型攻撃と呼ばれます。 攻撃者は実際に Web サイトを侵害する必要はありません。 悪意のあるコードを含む URL を作成するだけです。

関連している: クロスサイト スクリプティング攻撃: Web サイトを保護する方法

反射型 XSS 攻撃は、悪意のあるコードを Web サイトに永続的に保存する必要がないため、非永続的攻撃と呼ばれることもあります。 代わりに、コードは URL に埋め込まれます。

反映された XSS: 実際の例

上記の反映された XSS の例は、過度に単純化されています。 現実の世界では、明らかに悪意のある URL に遭遇することはありません。 http://example.com/index.php?malicious_code (または、実行したとしても、ブラウザが実際にコードを実行する可能性は非常に低くなります)。

代わりに、実際の反射型 XSS 攻撃は、悪意のあるコードをブラウザーに挿入するためのより洗練された手段に依存しています。 たとえば、現実世界の Google DevSite に対する反映された XSS 攻撃 攻撃者の実行を許可 JavaScript ドメインに基づいて URL に悪意のあるコードを挿入することによって http://cloud.google.comhttp://developers.google.com. この攻撃は、サーバー側アプリケーションがデータ入力を検証する方法の欠陥によって可能になりました。

同様の反射型 XSS 脆弱性は、 amazon.com ウェブサイトの一部で報告されています. この欠陥により、研究者はサイト訪問者を外部 URL にリダイレクトし、Cookie を盗むことができました。

これらは、現実の世界で機能している反射型 XSS 攻撃のほんの一例です。 Google と Amazon は、大小を問わず、XSS に対して脆弱なソフトウェアを展開している他のどの企業よりも無罪です。 それどころか、XSS 攻撃は蔓延しており、Google や Amazon のようにサイバーセキュリティを真剣に考えている企業が反射型 XSS の被害に遭う可能性があるのであれば、誰もが被害を受ける可能性があります。

反映された XSS と永続的な XSS およびその他の XSS 攻撃

Reflected XSS は、XSS 攻撃の 1 つのタイプにすぎません。 その他の一般的な XSS 攻撃手法には、次のものがあります。

  • 保存された、または永続的な XSS 攻撃、サイト内の脆弱性を悪用して、悪意のあるスクリプトが Web サイトに直接挿入されます。 反射型 XSS とは異なり、このタイプの攻撃では、攻撃者が悪意のあるコードをサイトにアップロードする方法を見つける必要があります。
  • DOM ベースの攻撃DOM データを操作して悪意のあるコードを実行します。 DOM ベースの攻撃は、攻撃を開始するために悪意のある URL ではなく、DOM 情報の変更に依存しているため、反映された XSS とは異なります。

反射型 XSS 攻撃が人気の理由

反射型 XSS 攻撃は XSS 攻撃の 1 つのタイプにすぎませんが、反射型 XSS は、いくつかの理由から、攻撃者にとって特に一般的な攻撃方法です。

1 つは、このタイプの XSS 攻撃が比較的実行しやすいことです。 攻撃者は、格納された XSS 攻撃の場合のように、Web サイトまたはアプリ内の脆弱性を見つける必要はありません。 また、DOM ベースの攻撃のように、脆弱性を見つけるためにサイトの複雑な DOM 構造を評価する必要もありません。 代わりに、攻撃者は単に悪意のある URL を作成し、それらをホストする場所 (ソーシャル メディア サイトや電子メールなど) を見つける必要があります。

攻撃者の観点から見た反射型 XSS のもう 1 つの利点は、悪意のあるリンクに攻撃者が関連付けた Web サイトがユーザーの信頼するサイトである場合、悪意のあるコードの実行に関してブラウザーが提示する警告をユーザーが受け入れる可能性があることです。 つまり、ユーザーはスクリプトが安全だと思うサイトに関連付けられていると信じているため、信頼できないサイトのリンクをクリックする場合よりも、セキュリティ警告を無視する可能性が高くなります。 これが、攻撃者の間で XSS 攻撃が非常に人気がある理由の 1 つです。

最後に、反射型 XSS 攻撃は検出が困難な場合があります。これは、攻撃者が悪意のあるコードを難読化して、ブラウザーやファイアウォールによるブロックを困難にする可能性があるためです。 ほとんどの反射 XSS 攻撃は、次のような単純な URL を使用しません。 http://example.com/index.php?malicious_code. 代わりに、悪意のあるコマンドを 16 進数形式でエンコードするか、非常に長いデータ文字列に埋め込んで、XSS 検出エンジンを回避する可能性があります。

反射型 XSS 攻撃の結果

反射型 XSS 攻撃 (および一般的な XSS 攻撃) は、次のようなさまざまなセキュリティ上の問題を引き起こす可能性があります。

  • ウェブサイトのリダイレクト: 攻撃者は、データを盗んだり、ユーザーのデバイスを侵害したりするように設計された他のソフトウェアをホストする悪意のある Web サイトにユーザーをリダイレクトする可能性があります。
  • 中断: 悪意のあるスクリプトは、ブラウザーをクラッシュさせたり、Web サイトのパフォーマンスに悪影響を与えたり、ユーザーに影響を与える他の種類の混乱を引き起こしたりする可能性があります。
  • 盗まれたクッキー: ほとんどの XSS 攻撃は、攻撃者にユーザーの Cookie へのアクセスを与えます。これを使用して、ユーザーであるかのように Web セッションに接続できます。 このようにして、攻撃者は Web サイトやアプリ内に保存されているユーザー データを盗んだり、変更したりすることさえできます。
  • キーロギング: XSS 攻撃は、ユーザーのキーストロークを記録して攻撃者に送信するキーロギング ソフトウェアの展開に使用される可能性があります。 攻撃者はキーストロークを読み取ることで、パスワードやメッセージなど、ユーザーがデバイスに入力したデータにアクセスできます。

XSS 攻撃の直接的な影響は主にユーザーにありますが、XSS 攻撃は企業にとっても有害である可能性があることに注意してください。 XSS 攻撃に関連する Web サイトやアプリを展開している企業は、評判に傷がつく可能性があります。

反射型 XSS 攻撃を防止するためのベスト プラクティス

反射型 XSS 攻撃を防ぐ最善の方法は、アプリケーションを最初から安全に設計することです。 特に、開発者は次のことを行う必要があります。

  • ユーザー入力を検証します。 アプリケーションが受け入れるデータ (URL 経由を含む) はすべて検証する必要があり、リクエスト内の異常なデータはブロックする必要があります。
  • エンコード出力: 出力エンコーディング (出力データを実行できない形式で表現することを意味します) は、ブラウザー側で自動的にロードして実行する動作を防止するため、XSS 攻撃が成功するリスクを軽減できます。
  • ユーザー提供データの使用を制限する: 一般に、少なくともセキュリティの観点からは、ウェブサイトやアプリがユーザー提供のデータを処理する量が少ないほど優れています。 必要な場合を除き、ユーザーにデータを入力する機会を与えないでください。入力されたデータは、必要な目的にのみ使用するようにしてください。 解析するためだけに解析しないでください。
  • ファイアウォールで異常なトラフィックをブロックします。 最新の Web アプリケーション ファイアウォール (WAF) ツールは、リクエストの内容を検査することで、XSS 攻撃に関連する一部のリクエストを検出してブロックできます。 この手法ですべての種類の攻撃を防ぐことはできませんが、XSS 侵害が成功するリスクを軽減します。

これらの手法を超えて、開発者と管理者はエンド ユーザーに安全なブラウザーを実行するように勧めることができます。 最新の Web ブラウザーには、ほとんどの種類の反射型 XSS 攻撃を検出するように設計されたフィルターが含まれています (ただし、WAF ベースの検出と同様に、Web ブラウザーが試行されたすべての XSS 攻撃を検出するという保証はありません)。日付は、ユーザー デバイスで XSS 攻撃が成功するリスクを軽減するのに役立ちます。 もちろん、ユーザーが実行するブラウザーを常に制御できるわけではないため、ブラウザー レベルで XSS をブロックしようとしても、反射型 XSS 攻撃を防ぐための主要な手段にはなりません。

反映された XSS のテスト

ユーザーが提供したデータを適切にフィルター処理して検証するコードを作成することが XSS から保護するための最初のステップですが、開発者は、アプリケーションを自動的にスキャンして XSS リスクを検出するツールを利用することもできます。

無料の XSS スキャナーは、 GitHub およびオープン ソース ソフトウェアをホストするその他の Web サイト。 さらに、さまざまなベンダーが、アプリケーションのソース コードやバイナリをスキャンして XSS リスクを検出できるサイバーセキュリティ ツールを販売しています。

反映された XSS をテストするもう 1 つの方法は、アプリケーションまたは Web サイト内に存在するすべての入力ベクトルのインベントリを作成することです。 つまり、開発者は、ユーザーが提供するデータを受け入れることができる Web サイトのすべての部分を決定できます。 次に、悪意のある入力をシミュレートするように設計されたデータをベクターにフィードできます。 入力が受け入れられると、潜在的な XSS 脆弱性があることがわかります。

結論

実行が容易で、検出が難しいという事実から、反射型 XSS 攻撃は、今日 Web サイトやアプリが直面する最も一般的なタイプの XSS 攻撃の 1 つです。

すべての種類の反射型 XSS リスクに対する保護を保証する簡単な方法はありませんが、反射型 XSS 攻撃が成功する可能性を最小限に抑えることができるいくつかのベスト プラクティスがあります。 入力データを適切に検証してフィルタリングすることが最も重要なステップですが、出力のエンコーディングと、ネットワークおよびブラウザー内での防御も、反映された XSS を停止するのに役立ちます。

著者について

Christopher Tozzi は、クラウド コンピューティング、アプリケーション開発、オープン ソース ソフトウェア、仮想化、コンテナーなどの専門知識を持つテクノロジ アナリストです。 彼はまた、ニューヨーク州アルバニー地域の主要な大学で講義を行っています。 彼の著書「楽しみと利益のために: フリーでオープンソースのソフトウェア革命の歴史」は MIT Press から出版されました。

Leave a Comment

Your email address will not be published. Required fields are marked *