リクエスト処理のストリーミングサポート
NetScaler Web App Firewallはリクエストサイドストリーミングをサポートし、パフォーマンスを大幅に向上させます。アプライアンスは、要求をバッファリングする代わりに、SQL、クロスサイトスクリプティング、フィールドの一貫性、フィールド形式などのセキュリティ違反について着信トラフィックを検査します。アプライアンスがフィールドのデータの処理を完了すると、要求はバックエンドサーバに転送され、アプライアンスは他のフィールドを引き続き評価します。このデータ処理により、多くのフィールドを持つフォームを処理する際の処理時間が大幅に短縮されます。
20MBを超えるペイロードコンテンツのストリーミングを有効にすることをお勧めします。また、ストリーミングが有効な場合、バックエンドサーバーはチャンクされた要求を受け入れる必要があります。
注:
Post Body Limit アクションは常にブロックに設定され、ストリーミングモードと非ストリーミングモードの両方に適用できます。受信トラフィックが20MBを超える場合は、
PostBodyLimit
を予想値に構成することをお勧めします。
ストリーミングプロセスはユーザーには透過的ですが、次の変更により、設定を少し調整する必要があります。
RegEx パターンマッチ: RegEx パターンマッチは、連続する文字列マッチで 4K に制限されるようになりました。
フィールド名の一致: Web App Firewall 学習エンジンは、名前の最初の 128 バイトのみを区別できます。フォームに、最初の 128 バイトで同じ文字列が一致する名前のフィールドが複数ある場合、学習エンジンはそれらを区別しません。同様に、展開された緩和ルールによって、このようなすべてのフィールドが誤って緩和される可能性があります。
ホワイトスペースの除去、パーセントデコード、Unicode デコード、および文字セット変換は、セキュリティー検査のために正規化の間に行われます。128 バイトの制限は、UTF-8 文字フォーマットでのフィールド名の正規表現に適用されます。ASCII 文字の長さは 1 バイトですが、一部の国際言語では、文字の UTF-8 表現は 1 バイトから 4 バイトに及ぶ場合があります。名前の各文字が UTF-8 形式に変換するのに 4 バイトかかる場合、学習したルールでは名前の最初の 32 文字だけが区別されます。
フィールドの一貫性チェック: フィールドの一貫性を有効にすると、セッション内のすべてのフォームが Web App Firewall によって挿入された「as_fid」タグに基づいて、「action_url」を考慮せずに保存されます。
- フォームフィールドの一貫性のための必須フォームのタグ付け: フィールドの一貫性チェックが有効な場合、フォームタグも有効にする必要があります。フォームのタグ付けがオフになっていると、フィールドの一貫性保護が機能しないことがあります。
- セッションレスフォームフィールドの一貫性: セッションレスフィールドの一貫性パラメーターが有効になっている場合、Web App Firewall はフォームの「GET」から「POST」への変換を実行しなくなりました。フォームタグは、セッションレスフィールドの一貫性にも必要です。
- as_fid の改ざん: as_fid を改ざんした後にフォームが送信されると、改ざんされたフィールドがなくてもフィールドの一貫性違反が発生します。非ストリーミングリクエストでは、セッションに格納されている「action_url」を使用してフォームを検証できるため、これが許可されていました。
Signatures: シグニチャは次の仕様になりました。
-
場所: 各パターンに場所を指定することが必須要件になりました。
<Location>
ルール内のすべてのパターンにはタグを付ける必要があります 。 -
高速一致: すべてのシグニチャルールに高速一致パターンが必要です。ファストマッチパターンがない場合は、可能ならばファーストマッチパターンを選択しようとします。高速一致はリテラル文字列ですが、使用可能なリテラル文字列が含まれている場合は、
PCRE
高速一致に使用できます。 -
非推奨の場所: 次の場所はシグニチャルールでサポートされなくなりました。
- HTTP_ANY
- HTTP_RAW_COOKIE
- HTTP_RAW_HEADER
- HTTP_RAW_RESP_HEADER
- HTTP_RAW_SET_COOKIE
クロスサイトスクリプティング/SQL 変換: 一重引用符 (‘)、バックスラッシュ ()、セミコロン (;)) などの SQL 特殊文字とクロスサイトスクリプティングタグは同じで、データの正規化を必要としないため、未加工データが変換に使用されます。HTML エンティティエンコーディング、パーセントエンコーディング、ASCII などの特殊文字の表現は、変換操作で評価されます。
Web App Firewall は、クロスサイトスクリプティング変換操作の属性名と値の両方を検査しなくなりました。ストリーミングが有効な場合、クロスサイトスクリプティング属性名のみが変換されるようになりました。
クロスサイトスクリプティングタグの処理: NetScaler 10.5.eビルド以降のストリーミング変更の一環として、クロスサイトスクリプティングタグの処理が変更されました。以前のリリースでは、開き括弧 (<), or close bracket (>)、または開き括弧と閉じ括弧 (<>) の両方が存在する場合、クロスサイトスクリプティング違反としてフラグが立てられていました。10.5.e ビルド以降では動作が変更されました。開き括弧文字 (<), or only the close bracket character (>) のみが存在しても、攻撃とは見なされなくなりました。これは、開き括弧文字 (<) is followed by a close bracket character (>) で、クロスサイトスクリプティング攻撃のフラグが立てられる場合です。< followed by >クロスサイトスクリプティング違反をトリガするには、両方の文字が正しい順序 () で存在する必要があります。
注:
SQL違反ログの変更メッセージ: Citrix ADCリリース10.5.e以降のストリーミング変更の一環として、入力データをブロック単位で処理するようになりました。RegEx パターンマッチングは、連続した文字列マッチングで 4K に制限されるようになりました。この変更により、SQL 違反ログメッセージには、以前のビルドとは異なる情報が含まれる場合があります。入力内のキーワードと特殊文字は数バイトで区切られます。アプライアンスは、入力値全体をバッファリングするのではなく、データを処理するときに SQL キーワードと特殊文字列を追跡します。ログメッセージには、フィールド名に加えて SQL キーワード、SQL 特殊文字、または SQL キーワードと SQL 特殊文字の両方が含まれます。次の例に示すように、残りの入力はログメッセージに含まれなくなります。
例:
10.5 では、Web App Firewall が SQL 違反を検出すると、入力文字列全体が次のログメッセージに含まれることがあります。
フィールド text=\ “の SQL キーワードチェックに失敗しました testbed1\;\\ (\;\\)\」から名前を選択してください。\ *\<blocked>
11.0 では、フィールド名、キーワード、特殊文字 (該当する場合) のみを次のログメッセージに記録します。
フィールド
text="select(;)" <blocked>
の SQL キーワードチェックに失敗しました この変更は、 application/x-www-form-urlencoded、 マルチパート/フォームデータ、または text/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 のセキュリティチェックは、以前と同様に機能する必要があります。
- セキュリティー検査の処理の順序は決まっていません。
- レスポンス側の処理は影響を受けず、変更されることはありません。
- クライアントレス VPN が使用されている場合、ストリーミングは実行されません。
重要:
Cookieの長さの計算: Citrix ADCリリース11.0(65.xより前のビルド)に加えて、リリース10.5.eでは、Web App Firewall Cookieヘッダー処理方法が変更されました。アプライアンスは Cookie を個別に評価し、Cookie ヘッダー内の Cookie の長さが設定された長さを超えると、バッファオーバーフロー違反がトリガーされました。 その結果、NetScaler 10.5以前のリリースでブロックされた要求が許可されることがあります。Cookie ヘッダー全体の長さは、Cookie の長さを決定するために計算されません。場合によっては、Cookie の合計サイズが許容値よりも大きくなり、サーバーが「400 Bad Request」で応答することがあります。
注: 変更は元に戻されました。NetScalerバージョン10.5.eからバージョン59.13xxe.e以降のビルドでの動作は、リリース10.5の非拡張ビルドと同様です。Cookieの長さを計算するときに、生の Cookie ヘッダー全体が考慮されるようになりました。Cookie の長さの決定には、前後のスペースと名前と値のペアを区切るセミコロン (;) 文字も含まれます。