Citrix ADC

リクエスト処理のストリーミングサポート

Citrix Web App Firewallは、要求側のストリーミングをサポートし、パフォーマンスを大幅に向上させます。アプライアンスは、要求をバッファリングする代わりに、SQL、クロスサイトスクリプティング、フィールドの一貫性、フィールド形式などのセキュリティ違反について着信トラフィックを調べます。アプライアンスがフィールドのデータの処理を完了すると、要求はバックエンドサーバーに転送され、アプライアンスは他のフィールドの評価を続行します。このデータ処理により、多くのフィールドを持つフォームを処理する処理時間が大幅に短縮されます。

注:

Citrix Web App Firewall は、ストリーミングなしで最大ポストサイズ20MBをサポートします。リソースの使用率を高めるには、20 MBを超えるペイロードに対してのみストリーミングを有効にCitrix。また、ストリーミングが有効になっている場合、バックエンドサーバーはチャンクされた要求を受け入れる必要があります。

ストリーミングプロセスはユーザーに対して透過的ですが、以下の変更により、若干の構成調整が必要になります。

正規表現パターンマッチ: 正規表現パターンマッチは、連続する文字列マッチで 4K に制限されるようになりました。

フィールド名の一致: Web App Firewall 学習エンジンでは、名前の最初の 128 バイトしか区別できません。フォームに、最初の 128 バイトで同一の文字列に一致する名前のフィールドが複数ある場合、学習エンジンはそれらを区別しません。同様に、展開された緩和ルールは、そのようなフィールドをすべて誤って緩和する可能性があります。

空白の除去、パーセントデコード、ユニコードデコード、および文字セット変換は、正規化中に行われ、セキュリティー検査を提供します。128 バイトの制限は、UTF-8 文字形式でのフィールド名の正規化表現に適用されます。ASCII 文字の長さは 1 バイトですが、一部の国際言語の文字の UTF-8 表現は 1 バイトから 4 バイトの範囲です。名前内の各文字が UTF-8 形式に変換するのに4バイトかかる場合、学習したルールによって名前の最初の 32 文字だけが区別されます。

フィールド整合性チェック: フィールド整合性を有効にすると、セッション内のすべてのフォームは、「action_url」を考慮せずに、Web App Firewall によって挿入された「as_fid」タグに基づいて保存されます。

  • フォームフィールドの一貫性のための必須フォームタグ付け: フィールドの一貫性チェックが有効になっている場合、フォームタグも有効にする必要があります。フォームのタグ付けがオフになっていると、フィールドの一貫性保護が機能しないことがあります。
  • セッションレスフォームフィールドの一貫性: セッションレスフィールドの一貫性パラメータが有効になっている場合、Web App Firewall は、フォームの「GET」から「POST」への変換を実行しなくなりました。フォームタグは、セッションレスフィールドの一貫性にも必要です。
  • as_fidの改ざん: as_fidを改ざんした後にフォームが送信されると、フィールドが改ざんされていなくてもフィールドの一貫性違反が発生します。非ストリーミング要求では、セッションに格納された「action_url” を使用してフォームを検証できるため、これは許可されました。

署名: 署名の仕様は次のとおりです。

  • 場所: 各パターンに場所を指定する必要があることは必須要件になりました。ルール内のすべてのパターンには<Location> タグが必要です。

  • 高速マッチ: すべてのシグニチャルールに高速マッチパターンが必要です。高速一致パターンがない場合は、可能であれば選択が試みられます。高速一致はリテラル文字列ですが、使用可能なリテラル文字列が含まれている場合、一部の PCRE は高速一致に使用できます。

  • 非推奨のロケーション: 署名ルールで次のロケーションがサポートされなくなりました。

    • HTTP_ANY
    • HTTP_RAW_COOKIE
    • HTTP_RAW_HEADER
    • HTTP_RAW_RESP_HEADER
    • HTTP_RAW_SET_COOKIE

XSS/SQL Transform: 単一引用符(’)、バックスラッシュ()、セミコロン(;)などのSQL特殊文字、クロスサイトスクリプティングタグは同じであり、データの正規化を必要としないため、生のデータが変換に使用されます。HTML エンティティエンコーディング、パーセントエンコーディング、ASCII などの特殊文字の表現は、変換操作に対して評価されます。

Web App Firewall は、クロスサイトスクリプティング変換操作の属性名と値の両方を検査しなくなりました。ストリーミング時にクロスサイトスクリプティング属性名のみが変換されるようになりました。

XSSタグの処理: NetScaler 10.5.eビルド以降のストリーミング変更の一環として、クロスサイトスクリプティングタグの処理が変更されました。以前のリリースでは、開かっこ (<), or close bracket (>) または開かっこ (<>) の両方が存在する場合は、クロスサイトスクリプティング違反のフラグが付けられました。この動作は、10.5.eビルド以降で変更されました。開き括弧文字(<)のみ、または閉じ括弧文字(>)のみが存在することは、もはや攻撃とはみなされません。これは、開かっこ(<) is followed by a close bracket character (>)、クロスサイトスクリプティング攻撃にフラグが付けられる場合です。< followed by >クロスサイトスクリプティング違反をトリガーするには、両方の文字が正しい順序()で存在する必要があります。

注:

SQL 違反ログの変更メッセージ: 10.5.e ビルド以降のストリーミング変更の一環として、入力データをブロックで処理するようになりました。RegEx パターンマッチングは、連続した文字列マッチングで 4K に制限されるようになりました。この変更により、SQL 違反ログメッセージには、以前のビルドとは異なる情報が含まれる場合があります。入力内のキーワードと特殊文字は、多くのバイトで区切られています。アプライアンスは、データの処理時に、入力値全体をバッファリングするのではなく、SQLキーワードと特殊文字列を追跡します。ログメッセージには、フィールド名に加えて、SQL キーワード、SQL 特殊文字、または SQL キーワードと SQL 特殊文字の両方が含まれます。次の例に示すように、残りの入力はログメッセージに含まれなくなります。

例:

10.5 では、Web App Firewall が SQL 違反を検出すると、入力文字列全体が次のログメッセージに含まれることがあります。

フィールドの SQL キーワードチェックに失敗しました text=”select a name from testbed1;\(;\)”.*<blocked>

11.0 では、次のログメッセージにフィールド名、キーワード、特殊文字(該当する場合)のみを記録します。

フィールドtext="select(;)" <blocked> の SQL キーワードチェックに失敗しました この変更は、 アプリケーション/x-www-form-urlencoded、 マルチパート/フォームデータ、またはテキスト/x-gwt-rpc コンテンツタイプを含むリクエストに適用されます。JSON または XML ペイロードの処理中に生成されるログメッセージは、この変更の影響を受けません。

RAW POSTボディ: セキュリティチェック検査は、常にRAW POSTボディで行われます。

フォーム ID: Web App Firewall が挿入した「as_fid」タグは、フォームの計算されたハッシュで、ユーザーセッションで一意の長くなります。これは、ユーザーまたはセッションに関係なく、特定のフォームに対して同じ値です。

Charset: リクエストに文字セットがない場合、リクエストの処理時にアプリケーションプロファイルに指定されたデフォルトの文字セットが使用されます。

カウンタ:

ストリーミングエンジンおよびストリーミングエンジン要求カウンタを追跡するために、プレフィックス「se_」と「appfwreq_」のカウンタが追加されます。

nsconsmg -d statswt0 -g se_err_

nsconsmg -d statswt0 -g se_tot_

nsconsmg -d statswt0 -g se_cur_

nsconsmg -d statswt0 -g appfwreq_err_

nsconsmg -d statswt0 -g appfwreq_tot_

nsconsmg -d statswt0 -g appfwreq_cur_

_err counters:成功したが、メモリ割り当ての問題またはその他のリソースのクランチが原因で失敗したまれなイベントを示します。

_tot counters: 増えつづけるカウンタ。

_cur counters: 現在のトランザクションの使用状況に応じて変化し続ける現在の値を示すカウンタ。

ヒント:

  • Web App Firewall セキュリティチェックは、以前と同じように機能する必要があります。
  • セキュリティー検査の処理には順序が設定されていません。
  • 応答側の処理は影響を受けず、変更されません。
  • CVPN が使用されている場合、ストリーミングは行われません。

重要:

Cookie の長さの計算: リリース 10.5.e では、11.0 リリース (65.x より前のビルド) に加えて、Cookie ヘッダーを処理するWeb App Firewall の方法が変更されました。アプライアンスは Cookie を個別に評価し、Cookie ヘッダー内の Cookie の長さが設定された長さを超えた場合、バッファオーバーフロー違反がトリガーされました。その結果、NetScaler 10.5以前のリリースでブロックされたリクエストが許可される可能性があります。cookie ヘッダー全体の長さは、cookie の長さを決定するために計算されません。場合によっては、クッキーの合計サイズが受け入れられた値よりも大きくなり、サーバーが「400 Bad Request」で応答することがあります。

注: 変更は元に戻されました。NetScalerバージョン10.5.eからバージョン59.13xx.eおよびそれ以降のビルドでの動作は、リリース10.5の非拡張ビルドに似ています。クッキーの長さを計算する際に、生の Cookie ヘッダー全体が考慮されるようになりました。クッキーの長さの決定には、スペースと、名前と値のペアを区切るセミコロン (;) 文字も含まれます。

リクエスト処理のストリーミングサポート