クロスサイトスクリプト(XSS)の理解 - スクリプトの注入だけ

クロスサイトスクリプティング(XSS)は、最も人気のWebアプリケーション脆弱性の1つであり、一貫して]に表示されています。 OWASPトップテン。 そのコアでは、XSSは、攻撃者が他のユーザーによって閲覧されたWebページに悪意のあるクライアント側スクリプトを注入することができます。 注入されたスクリプトは、被害者のブラウザのコンテキストで実行され、データ盗難(クッキー、セッショントークン)、セッショントークンを有効化し、それらがファイアウォールを識別する方法を3つにすることができます。 ファイアウォールは、または、それらが、どのようにして、または、または、XSSSを識別するのかを把握する必要があります。

  • [保存された(永続的)XSS[[ - 悪意のあるスクリプトは、ターゲットサーバ(例えば、データベース、コメントフィールド、またはフォーラムポスト)に保存されます。 影響を受けたページにアクセスするすべてのユーザーは、ペイロードを実行します。
  • [ 参照(非永続的) XSS[ - 注入されたスクリプトは、通常、作成されたURLまたはフォーム送信を介して、Webサーバーをオフに反映されます。 ペイロードは保存されません。 被害者が悪意のあるリンクをクリックしたときにのみ実行されます。
  • [DOM ベースの XSS – 脆弱性は、ブラウザのクライアント側コードに完全に存在します。攻撃ペイロードはサーバーに送信されません。代わりに、DOM 環境を変更し、そこから実行します。これらの攻撃は、サーバー側の防御に見えない可能性があります。

各タイプは、セキュリティ制御に固有の課題を提示します。ファイアウォール - 特にWebアプリケーションファイアウォール(WAF) - 反射防止と保存されたXSSに対して強力な保護を提供することができますが、DOMベースのXSSは、追加のクライアント側対策を要求します。

現代のWebセキュリティでファイアウォールとは?

もともと、ファイアウォールは、IPアドレス、ポート、プロトコルに基づいてトラフィックをフィルタリングしたネットワークレベルのデバイスでした。 今日、用語は、さまざまなセキュリティシステムを渡します。

  • [Network Firewalls] – レイヤー3–4(IP、TCP/UDP)で動作します。 それらは、既知の悪意のあるIPをブロックしたり、ポートを制限したりすることができますが、アプリケーション層のデータを少し調べることができます。
  • []Webアプリケーションファイアウォール(WAFs)[ – レイヤー7 デバイスは、HTTP/HTTPSトラフィックを検査し、要求コンテンツを分析(ヘッダー、ボディ、URLパラメータ)して悪意のあるパターンを分析するように設計されています。 WAFsは、XSSに対する主要なファイアウォールツールです。
  • []クラウドベースのファイアウォール(WAF-as-a-Serviceを含む)[ - AWS WAF、Cloudflare WAF、Azure Application Gatewayを含む。 拡張性、低レイテンシを提供し、多くの場合、CDNと統合します。

すべてのファイアウォールはルールのセットで動作しますが、アプリケーションウェアファイアウォール(WAF)のみがXSSを偽りなく対応できます。さらに、デビルはルール設計と検出方法論です。

防火壁(WAF)の検出とブロックXSS

署名に基づく検出

ほとんどの WAF は、既知の XSS ペイロードにマッチする事前定義されたシグニチャで、例えば ] や 、 、またはエンコードされたバリアントを格納するパターンなど、 特定のリクエストをブロックします。 ファイアウォールは、ペイロードが署名をトリガーするリクエストをブロックします。 署名データベースは、ベンダーが新しい攻撃ベクトルをカバーすることで定期的に更新されます。

しかし、シグネチャベースの検出は、単純な難読化によって回避することができます。異なるエンコーディング、分割キーワード、またはジャンク文字を注入する。攻撃者は、ブラウザの残りの機能中に署名と一致しないまで、ペイロードを頻繁にミュートします。

異常・ヒューリスティック・ベースの検出

高度なWAFは、機械学習や統計モデルを使用して異常なパターンを検出します。各エンドポイントとフラグの偏差に対する有効な要求の典型的な構造を学びます。例えば、通常はHTMLタグを含む数値パラメータが急に含まれています。ヒューリスティックルールは、既知の署名を欠くゼロデイXSSベクトルをキャッチすることができますが、偽陽性を危険にすることができます。

レート制限と行動分析

WAFsモニターリクエスト速度の一部。攻撃者は、迅速な成功で多くのペイロードをプロービングすることは一時的にブロックされることがあります。これは直接XSSを検出しない一方で、自動スキャンを遅くし、攻撃者が遅くなり、手動テストを阻止する可能性があります。

防火壁面のコンクリート保護機構

  • []入力検証とフィルタリング[ - WAFは、すべてのパラメータ、クッキー、ヘッダーを検査します。 危険な文字()を暗号化またはブロックして、アプリケーションサーバーに到達する前に、識別します。
  • []出力エンコードアウェアネス[ - モダンWAFは、ユーザーが応答で終わる場所を関連付けることができます(例えば、スクリプトタグ内とHTML属性内)、コンテキスト固有のルールを適用します。 このレベルの知能はまれていますが、F5やImpervaなどの大手ベンダーはそれを提供します。
  • [仮想パッチ] - サーバー側XSS脆弱性が発見されたがすぐに修正できないとき、WAFは仮想パッチを作成することができます:アプリケーションコードを変更することなく悪用パスをブロックするカスタムルール。
  • [)正規化を要求する - WAFは、署名をチェックする前に、複数のエンコーディング(URL-エンコード、Unicode、double-encode)のレイヤーをデコードすることが多い、基本的な難読化を阻止する。

XSSに対するファイアウォールの制限 - どこに失敗するか

WAFを迂回する

攻撃者を定期的に判断するバイパス。 一般的なテクニックには、次のものが含まれます。

  • 代替 JavaScript のイベントを、古典的な []/ [ の外側に使用して、 ]] と ] 。
  • SVG、[、[]、またはスクリプトを実行できる他のHTML要素をレバレッジします。
  • WAFとブラウザ間での不一致を明示する文字セット(例:UTF‐7は、過去にASCIIのみフィルタを迂回した)。
  • 複数のリクエストパラメータをクリアしたり、HTTP チャンクされた転送エンコーディングを使用して、検査エンジンの過去のコンテンツをスムーグルしたりできます。

DOM-ベースのXSS - ほとんどのファイアウォールに見えない

DOM ベースの XSS は、サーバーに触れることはありません。脆弱なクライアント・サイド JavaScript は、 からデータを読み、 ] 、またはローカルストレージを読み込み、 DOM に安全でないと書きます。サーバー・サイド・ファイアウォールは正当なリクエストのみを閲覧します。悪意のある実行は、ブラウザで完全に行われます。防衛は、クライアント側セキュリティ対策(CSP)や、堅牢なクライアント・サイド・サイタイズ・ライブラリなどが必要です。

暗号化されたトラフィック(HTTPS)の課題

現代のWAFはTLSを解読してプレーンテキストを調べることができますが、これはレイテンシを追加し、適切な証明書管理が必要です。 一部の小規模な展開では、高トラフィックエンドポイントの検査をスキップし、盲目スポットを残します。

最高の練習: 層付き防衛の一環としてファイアウォール

WAFに単独でリーシングすることは危険です。最も効果的なXSS予防戦略は、防衛の4ラインを組み合わせます。

1. 安全な開発及びサーバー サイドの衛生

ユーザが指定したデータはすべて、HTMLレスポンスに差し込む前に検証、サニタイズ、エスケープする必要があります。OWASPはJavaエンコーダプロジェクトを提供し、さまざまなコンテキスト(HTMLボディ、属性、URL、JavaScript、CSS)で出力エンコーディングのガイダンスを行います。ファイアウォールはアプリケーションレイヤーで弱い入力処理を修正することはできません。

2. コンテンツセキュリティポリシー(CSP)

CSPは、スクリプトのソースが許可されているブラウザとインラインスクリプトが許可されているかどうかを指示するブラウザレベルのセキュリティメカニズムです。厳密なCSPは、すべてのブロックをすることができますが、最も永続的なDOMベースのXSS。 WAFは、応答ヘッダーを注入または変更することによってCSPを強制するのに役立ちますが、CSP自体はWAFが置き換えることができない防御層です。

3. 規則的なパッチおよび更新

ファイアウォールルールベースは、新しいXSSの変種が出現するにつれて更新されなければなりません。 同様に、サーバーソフトウェア(Webサーバー、アプリケーションフレームワーク)は、XSSの脆弱性の根本的な原因を排除するためにパッチを当てるべきです。 仮想パッチングは時間を購入しますが、コードを修正するための代替ではありません。

4. 安全教育と試験

開発者やセキュリティエンジニアは、WFを超えてXSSがどのように機能するかを理解する必要があります。定期的な浸透テスト(手動テストを含む)とコードレビューは、WAFが見逃したバイパスパターンを明らかにします。 OWASP ZAPやBurb Suiteなどのツールは、ファイアウォールログを補完することができます。

XSS保護のための適切なファイアウォールを選択する

すべてのファイアウォールが等しいわけではありません。WAFを選択する際には、以下の点を検討してください。

  • [検出の整形[] - 署名と行動のどちらのヒューリスティック? 自動偽陽性調整をサポートしているか?
  • ]仮想パッチ[の消去] - 新しく発見されたCVEをブロックするためにカスタムルールを簡単に追加できますか?
  • [性能の影響] - リクエストごとに>5ミリ秒のレイテンシを追加するWAFは、高トラフィックサイトには適さない場合があります。
  • []管理された対セルフホスト – クラウドWAF(Cloudflare、AWS WAF)は、多くの場合、運用オーバーヘッドを下げ、ルールセットを自動的に更新します。 オンプレミスWAF(F5、インペラ)は、より詳細な制御を要求しますが、専用のエンジニアが必要です。

実世界例: 2022年 Twilio XSS 事件

2022年、Twilio SendGridのメールダッシュボードに格納されたXSS脆弱性は、攻撃者が内部ユーザーから資格情報を引き出す偽のログインプロンプトを注入することを可能にします。ペイロードは、SendGridのWAF署名を廃止するのに難読化されました。 違反は、攻撃者カスタムがペイロードをカスタムする時に、さらに大きな企業がXSSに当たる可能性があることを実証し、WAFはディープJavaScriptのコンテキスト検査を欠きます。 ポストサイド分析は、CSPと強力な組み合わせが必要であるという強いネットワークが必要です。

コンテンツ

ファイアウォール - 特にWebアプリケーションファイアウォール - は、クロスサイトスクリプティング攻撃に対する防衛策の必須コンポーネントです。 彼らは、よく知られているXSSペイロードを自動的にフィルタリングし、パッチを当てないコードの高速仮想パッチを提供できます。 しかし、彼らは銀製の弾丸ではありません。 攻撃者は、署名ベースのルールを迂回し、DOM-ベースのXSSを大部分的に回避するための創造的な方法を見つけ続け、サーバー側検査を強制的に。 最も弾力のあるアプローチは、セキュリティ対策を定期的に行うだけでなく、セキュリティ対策を効果的に行うことができる。