Streaming-Unterstützung für die Anforderungsverarbeitung
Die Citrix Web App Firewall unterstützt das anforderungsseitige Streaming, um eine signifikante Leistungssteigerung zu erzielen. Anstatt eine Anforderung zu puffern, untersucht die Appliance den eingehenden Datenverkehr auf Sicherheitsverletzungen wie SQL, Cross-Site-Scripting, Feldkonsistenz und Feldformate. Wenn die Appliance die Verarbeitung von Daten für ein Feld abgeschlossen hat, wird die Anforderung an den Back-End-Server weitergeleitet, während die Appliance weitere Felder auswertet. Diese Datenverarbeitung erheblich verbessert die Verarbeitungszeit bei der Bearbeitung von Formularen haben viele Felder.
Hinweis:
Citrix Web App Firewall unterstützt eine maximale Postgröße von 20 MB ohne Streaming. Zur besseren Ressourcennutzung empfiehlt Citrix, das Streaming nur für Nutzlasten mit mehr als 20 MB zu aktivieren. Außerdem muss der Back-End-Server die Chunked Requests akzeptieren, wenn Streaming aktiviert ist.
Obwohl der Streaming-Prozess für die Benutzer transparent ist, sind aufgrund der folgenden Änderungen kleinere Konfigurationsanpassungen erforderlich:
RegEx Pattern Match: RegEx Pattern-Übereinstimmung ist jetzt auf 4K für zusammenhängende Zeichenfolgen-Übereinstimmung beschränkt.
Field Name Match: Die Web App Firewall Lernengine kann nur die ersten 128 Bytes des Namens unterscheiden. Wenn ein Formular mehrere Felder mit Namen hat, die eine identische String-Übereinstimmung für die ersten 128 Bytes haben, unterscheidet sie von der Lernengine nicht. In ähnlicher Weise kann die implementierte Relaxationsregel versehentlich alle diese Felder entspannen.
Die Entfernung von Leerräumen, die prozentuale Dekodierung, die Unicode-Dekodierung und die Zeichensatzkonvertierung werden während der Kanonisierung durchgeführt, um eine Sicherheitsprüfung zu ermöglichen. Die 128-Byte-Grenze gilt für die kanonisierte Darstellung des Feldnamens im UTF-8-Zeichenformat. Die ASCII-Zeichen sind 1 Byte lang, aber die UTF-8-Darstellung der Zeichen in einigen internationalen Sprachen kann zwischen 1 Byte und 4 Byte liegen. Wenn jedes Zeichen in einem Namen 4 Bytes für die Konvertierung in das UTF-8-Format benötigt, können nur die ersten 32 Zeichen im Namen durch die erlernte Regel unterschieden werden.
Überprüfung der Feldkonsistenz: Wenn Sie die Feldkonsistenz aktivieren, werden alle Formulare in der Sitzung basierend auf dem Tag “as_fid” gespeichert, das von der Web App Firewall eingefügt wurde, ohne die “action_url” zu berücksichtigen.
- Obligatorisches Formular-Tagging für die Konsistenz von Formularfeldern: Wenn die Feldkonsistenzprüfung aktiviert ist, muss auch das Formular-Tag aktiviert sein. Der Feldkonsistenzschutz funktioniert möglicherweise nicht, wenn die Formularkennzeichnung deaktiviert ist.
- Konsistenz von sitzungslosen Formularfeldern: Die Web App Firewall führt die Konvertierung von Formularen in “GET” in “POST” nicht mehr durch, wenn der Parameter für die sitzungslose Feldkonsistenz aktiviert ist. Das Formular-Tag ist auch für sitzungslose Feldkonsistenz erforderlich.
- Manipulation von as_fid: Wenn ein Formular gesendet wird, nachdem as_fid manipuliert wurde, löst es eine Feldkonsistenzverletzung aus, auch wenn kein Feld manipuliert wurde. Bei Nicht-Streaming-Anforderungen war dies zulässig, da die Formulare mithilfe der in der Sitzung gespeicherten “action_url” validiert werden können.
Signaturen: Die Signaturen haben nun die folgenden Spezifikationen:
-
Ort: Es ist jetzt zwingend erforderlich, dass für jedes Muster eine Position angegeben werden muss. Alle Muster in der Regel MÜSSEN ein Tag
<Location>
haben. -
Schnelle Übereinstimmung: Alle Signaturregeln müssen ein schnelles Übereinstimmungsmuster aufweisen. Wenn es kein schnelles Übereinstimmungsmuster gibt, wird versucht, ein möglichst ausgewähltes Muster auszuwählen. Fast Match ist eine wörtliche Zeichenfolge,
PCRE
kann jedoch für eine schnelle Übereinstimmung verwendet werden, wenn sie eine verwendbare Literalzeichenfolge enthalten. -
Veraltete Speicherorte: Folgende Speicherorte werden in Signaturregeln nicht mehr unterstützt.
- HTTP_ANY
- HTTP_RAW_COOKIE
- HTTP_RAW_HEADER
- HTTP_RAW_RESP_HEADER
- HTTP_RAW_SET_COOKIE
Cross-Site-Scripting/SQL-Transformation: Rohdaten werden für die Transformation verwendet, da die SQL-Sonderzeichen wie Single Quote (‘), Backslash () und Semikolon (;) und Cross-Site-Scripting-Tags gleich sind und keine Kanonisierung von Daten erfordern. Die Darstellung von Sonderzeichen wie HTML-Entitätskodierung, Prozentkodierung oder ASCII wird für den Transformationsvorgang ausgewertet.
Die Web App Firewall überprüft nicht mehr den Attributnamen und den Wert für den Cross-Site-Skript-Transformationsvorgang. Jetzt werden nur Cross-Site-Scripting-Attributnamen transformiert, wenn das Streaming aktiviert ist.
Verarbeitung von Cross-Site-Scripting-Tags: Im Rahmen der Streaming-Änderungen im NetScaler 10.5.e-Build und höher hat sich die Verarbeitung der Cross-Site-Scripting-Tags geändert. In früheren Versionen wurde das Vorhandensein einer öffnenden (<) oder schließenden (>) Klammer, oder beides (<>) als Cross-Site-Scripting-Verstoß betrachtet. Das Verhalten hat sich ab 10.5.e Build geändert. Wenn nur eine öffnende (<) oder nur eine schließende (>) Klammer vorhanden ist, wird es nicht mehr als Angriff betrachtet. Wenn ein auf eine öffnende (<) eine schließende (>) Klammer folgt, wird ein Cross-Site-Scripting-Angriff gemeldet. Beide Zeichen müssen in der richtigen Reihenfolge vorhanden sein (< gefolgt von >), um als Cross-Site-Scripting-Verletzung erkannt zu werden.
Hinweis:
Änderung im SQL-Verstoßprotokoll Meldung: Als Teil der Streaming-Änderungen in 10.5.e ab, verarbeiten wir nun die Eingabedaten in Blöcken. RegEx Pattern-Matching ist jetzt für zusammenhängende Zeichenfolgen auf 4K beschränkt. Mit dieser Änderung können die SQL-Verstoßprotokollmeldungen andere Informationen im Vergleich zu früheren Builds enthalten. Das Schlüsselwort und das Sonderzeichen in der Eingabe sind durch viele Bytes getrennt. Die Appliance weist bei der Verarbeitung der Daten eine Spur der SQL-Schlüsselwörter und speziellen Zeichenfolgen auf, anstatt den gesamten Eingabewert zu puffern. Zusätzlich zum Feldnamen enthält die Protokollmeldung SQL-Schlüsselwort, SQL-Sonderzeichen oder sowohl das SQL-Schlüsselwort als auch das SQL-Sonderzeichen. Der Rest der Eingabe ist nicht mehr in der Protokollmeldung enthalten, wie im folgenden Beispiel gezeigt:
Beispiel:
Wenn in 10.5 die Web App Firewall die SQL-Verletzung erkennt, kann die gesamte Eingabezeichenfolge in der folgenden Protokollmeldung enthalten sein:
SQL-Schlüsselwortüberprüfung für Feld text=”Wählen Sie einen Namen aus testbed1;\(;\)”.*<blocked>
In 11.0 protokollieren wir nur den Feldnamen, das Schlüsselwort und das Sonderzeichen (falls zutreffend) in der folgenden Protokollmeldung.
SQL-Schlüsselwortüberprüfung für Feld
text="select(;)" <blocked>
fehlgeschlagen Diese Änderung gilt für Anforderungen, die application/x-www-form-urlencodedoder multipart/form-dataoder text/x-gwt-rpc Inhaltstypen enthalten. Protokollmeldungen, die während der Verarbeitung von JSON- oder XML-Nutzlasten generiert werden, sind von dieser Änderung nicht betroffen.
RAW POST Body: Die Sicherheitsprüfungen werden immer auf RAW POST Body durchgeführt.
Formular-ID: Die Web App Firewall hat das Tag “as_fid” eingefügt, bei dem es sich um einen berechneten Hash des Formulars handelt, der für die Benutzersitzung länger eindeutig ist. Es handelt sich um einen identischen Wert für ein bestimmtes Formular, unabhängig vom Benutzer oder der Sitzung.
Zeichensatz: Wenn eine Anforderung keinen Zeichensatz hat, wird bei der Verarbeitung der Anforderung der Standard-Zeichensatz verwendet, der im Anwendungsprofil angegeben ist.
Zähler:
Leistungsindikatoren mit Präfix “se” und “appfwreq” werden hinzugefügt, um die Streaming-Engine und die Anforderungszähler der Streaming-Engine zu verfolgen.
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
: gibt das seltene Ereignis an, das erfolgreich gewesen sein muss, aber aufgrund eines Speicherzuweisungsproblems oder einer anderen Ressourcenauflösung fehlgeschlagen ist.
_tot counters
: Steigende Zähler.
_cur counters
: Zähler, die aktuelle Werte angeben, die sich basierend auf der Nutzung aktueller Transaktionen ändern.
Tipps:
- Die Sicherheitsprüfungen der Web App Firewall müssen wie zuvor funktionieren.
- Für die Abwicklung der Sicherheitskontrollen gibt es keine festgelegte Reihenfolge.
- Die Verarbeitung der Antwortseite wird nicht beeinträchtigt und bleibt unverändert.
- Streaming ist nicht aktiv, wenn clientloses VPN verwendet wird.
Wichtig:
Berechnung der Cookie-Länge: In Release 10.5.e wurde zusätzlich zur Version 11.0 (in Builds vor 65.x) die Web App Firewall die Art der Verarbeitung des Cookie-Headers geändert. Die Appliance hat das Cookie einzeln ausgewertet, und wenn die Länge eines Cookies im Cookie-Header die konfigurierte Länge überschritten hat, wurde die Pufferüberlaufverletzung ausgelöst. Daher können Anforderungen, die in NetScaler 10.5 oder früheren Versionen blockiert wurden, zulässig sein. Die Länge des gesamten Cookie-Headers wird nicht zur Bestimmung der Cookie-Länge berechnet. In einigen Situationen kann die gesamte Cookie-Größe größer als der akzeptierte Wert sein, und der Server reagiert möglicherweise mit “400 Bad Request”.
Hinweis: Die Änderung wurde rückgängig gemacht. Das Verhalten in NetScaler Version 10.5.e auf Version 59.13xx.e und den nachfolgenden Builds ähnelt den Builds ohne Erweiterung von Release 10.5. Der gesamte rohe Cookie-Header wird nun bei der Berechnung der Länge des Cookies berücksichtigt. Umgebende Leerzeichen und Semikolon (;) Zeichen, die die Name-Wert-Paare trennen, werden ebenfalls bei der Bestimmung der Cookie-Länge berücksichtigt.