リクエスト処理のストリーミングサポート
Citrix Web App Firewallは、要求側のストリーミングをサポートし、パフォーマンスを大幅に向上させます。アプライアンスは、要求をバッファリングする代わりに、SQL、クロスサイトスクリプティング、フィールドの一貫性、フィールド形式などのセキュリティ違反について着信トラフィックを調べます。アプライアンスがフィールドのデータの処理を完了すると、要求はバックエンドサーバーに転送され、アプライアンスは他のフィールドの評価を続行します。このデータ処理により、多くのフィールドを持つフォームを処理する処理時間が大幅に短縮されます。
注:
Citrix Web App Firewall は、ストリーミングなしで最大ポストサイズ20MBをサポートします。リソースの使用率を高めるには、20 MBを超えるペイロードに対してのみストリーミングを有効にすることをお勧めします。また、ストリーミングが有効になっている場合、バックエンドサーバーはチャンクされた要求を受け入れる必要があります。
ストリーミングプロセスはユーザーに対して透過的ですが、以下の変更により、若干の構成調整が必要になります。
正規表現パターンマッチ:正規表現パターンマッチは、連続する文字列マッチで 4K に制限されるようになりました。
フィールド名の一致:Web App Firewall学習エンジンは、名前の最初の128バイトしか区別できません。フォームに、最初の128バイトと同じ文字列が一致する名前のフィールドが複数ある場合、学習エンジンはそれらを区別しません。同様に、展開された緩和ルールは、そのようなフィールドをすべて誤って緩和する可能性があります。
空白の削除、パーセントデコード、Unicodeデコード、および文字セット変換は、セキュリティチェック検査を提供するために正規化中に実行されます。128バイトの制限は、UTF-8文字形式でのフィールド名の正規化された表現に適用されます。ASCII 文字の長さは 1 バイトですが、一部の国際言語の文字の UTF-8 表現は 1 バイトから 4 バイトの範囲です。名前内の各文字が UTF-8 形式に変換するのに4バイトかかる場合、学習したルールによって名前の最初の 32 文字だけが区別されます。
フィールド整合性チェック:フィールド整合性を有効にすると、セッション内のすべてのフォームは、「action_url」を考慮せずに、Web App Firewall によって挿入された「as_fid」タグに基づいて保存されます。
- フォームフィールドの一貫性のための必須フォームタグ付け:フィールドの一貫性チェックが有効になっている場合、フォームタグも有効にする必要があります。フォームのタグ付けがオフになっていると、フィールドの一貫性保護が機能しないことがあります。
- セッションレスフォームフィールドの整合性:セッションレスフィールドの整合性パラメーターが有効になっている場合、Web AppFirewallはフォームの「GET」から「POST」への変換を実行しなくなりました。フォームタグは、セッションレスフィールドの一貫性にも必要です。
- as_fidの改ざん:as_fidを改ざんした後にフォームが送信されると、フィールドが改ざんされていなくてもフィールドの一貫性違反が発生します。非ストリーミング要求では、セッションに格納された「action_url」を使用してフォームを検証できるため、これは許可されました。
署名:署名の仕様は次のとおりです。
場所:各パターンに場所を指定する必要があることは必須要件になりました。ルール内のすべてのパターンには
タグが必要です。高速マッチ:すべてのシグニチャルールに高速マッチパターンが必要です。高速一致パターンがない場合は、可能であれば選択が試みられます。高速一致はリテラル文字列ですが、使用可能な文字列が含まれている場合は、
PCRE
を使用して高速一致を行うことができます。非推奨のロケーション:署名ルールで次のロケーションがサポートされなくなりました。
- HTTP_ANY
- HTTP_RAW_COOKIE
- HTTP_RAW_HEADER
- HTTP_RAW_RESP_HEADER
- HTTP_RAW_SET_COOKIE
クロスサイトscripting/SQL 変換:一重引用符( ‘)、円記号()、セミコロンなどのSQL特殊文字のため、生データが変換に使用されます (;)), クロスサイトスクリプティングタグは同じであり、データの正規化を必要としません。HTML エンティティエンコーディング、パーセントエンコーディング、ASCII などの特殊文字の表現は、変換操作に対して評価されます。
Web App Firewall は、クロスサイトスクリプティング変換操作の属性名と値の両方を検査しなくなりました。ストリーミング時にクロスサイトスクリプティング属性名のみが変換されるようになりました。
クロスサイトスクリプティングタグの処理:NetScaler 10.5.eビルド以降でのストリーミングの変更の一環として、クロスサイトスクリプティングタグの処理が変更されました。以前のリリースでは、いずれかの開き角かっこ( < )、または角かっこを閉じる (>), または開き括弧と閉じ括弧の両方( < >) クロスサイトスクリプティング違反としてフラグが立てられました。この動作は、10.5.eビルド以降で変更されました。開き括弧文字(<)のみ、または閉じ括弧文字(>)のみが存在することは、もはや攻撃とはみなされません。これは、開かっこ(<) is followed by a close bracket character (>)、クロスサイトスクリプティング攻撃にフラグが付けられる場合です。両方の文字が正しい順序で存在する必要があります( < に続く >) クロスサイトスクリプティング違反をトリガーします。
注:
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;\(;\)”.*
11.0 では、次のログメッセージにフィールド名、キーワード、特殊文字(該当する場合)のみを記録します。
フィールド
text="select(;)"
の 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 セキュリティチェックは、以前と同じように機能する必要があります。
- セキュリティー検査の処理には順序が設定されていません。
- 応答側の処理は影響を受けず、変更されません。
- クライアントレスVPNが使用されている場合、ストリーミングは使用されません。
重要:
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 ヘッダー全体が考慮されるようになりました。クッキーの長さの決定には、スペースと、名前と値のペアを区切るセミコロン (;) 文字も含まれます。