ADC

CSRF フォームのタグ付けチェック

クロスサイトリクエストフォージェリ (CSRF) フォームのタグ付けチェックは、保護された Web サイトからユーザーに送信された各 Web フォームに一意で予測不可能な FormID をタグ付けし、ユーザーから返された Web フォームを調べて、指定された FormID が正しいことを確認します。このチェックは、クロスサイトリクエストフォージェリ攻撃から保護します。このチェックは、データの有無にかかわらず、Web フォームを含む HTML リクエストにのみ適用されます。XML 要求には適用されません。

CSRF フォームタグチェックは、攻撃者が独自の Web フォームを使用して、保護された Web サイトにデータを含む大量のフォーム応答を送信することを防ぎます。このチェックでは、Web フォームを詳細に分析する他の特定のセキュリティチェックと比較して、CPU の処理能力は比較的少なくて済みます。そのため、保護対象のWebサイトやWeb App Firewall自体のパフォーマンスを著しく低下させることなく、大量の攻撃を処理できます。

CSRF フォームタグチェックを有効にする前に、次の点に注意する必要があります。

  • フォームのタグ付けを有効にする必要があります。CSRF チェックはフォームのタグ付けに依存し、それなしでは機能しません。
  • そのプロファイルで保護されているフォームを含むすべてのWebページで、NetScaler統合キャッシュ機能を無効にする必要があります。統合キャッシュ機能と CSRF フォームのタグ付けには互換性がありません。
  • リファラーチェックを有効にすることを検討する必要があります。リファラーチェックは開始 URL チェックの一部ですが、クロスサイトリクエストの偽造を防ぐのであって、開始 URL の違反を防ぐことはできません。また、リファラーチェックは CSRF フォームのタグ付けチェックよりも CPU への負荷が少なくなります。リクエストがリファラーチェックに違反した場合、そのリクエストはすぐにブロックされるため、CSRF フォームタグチェックは呼び出されません。
  • CSRF フォームのタグ付けチェックは、フォームオリジン URL とフォームアクション URL で異なるドメインを使用する Web フォームでは機能しません。たとえば、example.com と example.org は異なるドメインであるため、CSRFフォームのタグ付けでは、フォームオリジン URL がhttp://www.example.comでフォームアクション URL がhttp://www.example.org/form.pl の Web フォームを保護できません。

ウィザードまたは GUI を使用する場合は、「CSRF フォームのタグ付けチェックの変更」ダイアログボックスの「一般」タブで、ブロック、ログ、学習、および統計アクションを有効または無効にできます。

コマンドラインインターフェイスを使用する場合は、次のコマンドを入力して CSRF フォームタグチェックを設定できます。

  • set appfw profile <name> -CSRFtagAction [**block**] [**log**] [**learn**] [**stats**] [**none**]

CSRF フォームタグチェックの緩和を指定するには、GUI を使用する必要があります。「CSRF フォームのタグ付けチェックの変更」ダイアログ・ボックスの「チェック」タブで、「追加」をクリックして「CSRF フォームのタグ付けチェックの緩和」ダイアログ・ボックスを開くか、既存のリラクゼーションを選択して「開く」をクリックして「CSRF フォームのタグ付けチェックの変更」ダイアログ・ボックスを開きます。どちらのダイアログボックスにも、リラクゼーションを構成するための同じオプションが表示されます。

NetScaler Web App Firewallのセッション制限を0以下に設定するとアラートが生成されます。このような設定は、Web App Firewallセッションが正常に機能することを必要とする高度な保護チェック機能に影響するためです。

CSRF フォームのタグ付けチェック緩和の例を以下に示します。

:次の式は、フォームオリジン URL ロールとフォームアクション URL ロールの両方で使用できる URL 表現です。

  • 新しいクエリを除いて、 http://www.example.com/search.pl? クエリの後に任意の文字列で始まり、その文字列を含む URL を選択します。

     ^http://www[.]example[.]com/search[.]pl?[^?]*$
     <!--NeedCopy-->
    
  • http://www.example-español.comで始まり、大文字と小文字、数字、ASCII以外の特殊文字、およびパス内の選択した記号で構成されるパスとファイル名を含むURLを選択してください。ñ文字やその他の特殊文字は、UTF-8文字セットの各特殊文字に割り当てられた16進コードを含むエンコードされたUTF-8文字列として表現されます。

    ^http://www[.]example-espa\xC3\xB1ol[.]com/(([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])
([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])\*/)\*([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])*[.](asp|htp|php|s?html?)$
<!--NeedCopy-->
  • 「/search.cgi?」という文字列を含むすべての URL を選択してください:
    ^[^?<>]\*/search[.]cgi?[^?<>]\*$
<!--NeedCopy-->

重要

正規表現は強力です。PCRE形式の正規表現に詳しくない場合は、作成した正規表現を再確認してください。例外として追加する URL を正確に定義していることを確認し、それ以外は何も定義しないでください。ワイルドカード、特にドットとアスタリスク (.*) メタ文字とワイルドカードの組み合わせを不注意に使用すると、ブロックするつもりのない Web コンテンツへのアクセスをブロックしたり、チェックでブロックされたはずの攻撃を許可したりするなど、望ましくない結果が生じる可能性があります。

ヒント

URL アクションの「開始 URL」で「EnableValidate」リファラーヘッダーが有効になっている場合は、リファラーヘッダーの URL も必ず StartURL に追加してください。

NetScalerがappfw_session_limitに達し、CSRFチェックが有効になると、ウェブアプリケーションがフリーズします。

Web アプリケーションがフリーズしないようにするには、次のコマンドを使用してセッションタイムアウトを減らし、セッション制限を増やします。

From CLI: > set appfw settings –sessiontimeout 300 From shell: root@ns# nsapimgr_wr.sh -s appfw_session_limit=200000

appfw_session_limit に達したときに SNMP アラームをログに記録して生成すると、問題のトラブルシューティングとデバッグに役立ちます。

CSRF フォームのタグ付けチェック

この記事の概要