JSON-Denial-of-Service-Schutzprüfung
Die JSON-Denial-of-Service (DoS) -Prüfung untersucht eine eingehende JSON-Anforderung und prüft, ob Daten vorhanden sind, die den Merkmalen eines DoS-Angriffs entsprechen. Wenn die Anforderung JSON-Verstöße hatte, blockiert die Appliance die Anforderung, protokolliert die Daten, sendet eine SNMP-Warnung und zeigt auch eine JSON-Fehlerseite an. Der Zweck der JSON-DoS-Prüfung besteht darin, zu verhindern, dass ein Angreifer eine JSON-Anfrage sendet, um DoS-Angriffe auf Ihre JSON-Anwendungen oder Ihre Website zu starten.
Wenn ein Client eine Anforderung an eine NetScaler Appliance sendet, analysiert der JSON-Parser die Anforderungsnutzlast. Wenn eine Verletzung beobachtet wird, setzt die Appliance Einschränkungen für die JSON-Struktur durch. Die Einschränkung erzwingt eine Größenbeschränkung für die JSON-Anforderung. Wenn eine JSON-Verletzung festgestellt wurde, führt die Appliance daher eine Aktion aus und antwortet mit der JSON-Fehlerseite.
JSON-DoS-Regeln
Wenn die Appliance eine JSON-Anforderung erhält, erzwingt der JSON-DOS-Schutz die Größenbeschränkung für die folgenden DoS-Parameter in der Anforderungsnutzlast.
- maximale Tiefe: Maximale Verschachtelung (Tiefe) des JSON-Dokuments. Diese Prüfung schützt vor Dokumenten mit übermäßiger Hierarchietiefe.
- maximale Dokumentlänge: Maximale Dokumentlänge des JSON-Dokuments.
- maximale Array-Länge: Maximale Array-Länge in einem beliebigen JSON-Objekt. Diese Prüfung schützt vor Arrays mit großen Längen.
- maximale Stringlänge: Maximale Stringlänge im JSON. Diese Prüfung schützt vor Saiten mit großer Länge.
- maximum object key count: Maximale Anzahl von Schlüsseln in einem beliebigen JSON-Objekt. Diese Prüfung schützt vor Objekten mit einer großen Anzahl von Schlüsseln.
- maximale Objektschlüssellänge: Maximale Schlüssellänge in einem beliebigen JSON-Objekt. Diese Prüfung schützt vor Objekten mit großen Schlüsseln.
Es folgt eine Liste von JSON-DoS-Regeln, die während des JSON-Parsens validiert wurden.
-
JSONMaxContainerDepth. Diese Prüfung kann aktiviert werden, indem die JsonMaxContainerDepth-Prüfung konfiguriert wird und standardmäßig ist die Option OFF.
-
JSONMaxContainerDepth. Diese Prüfung kann durch die konfigurierbare Option jsonMaxContainerDepthCheck aktiviert/deaktiviert werden und der Standardwert kann mit der Option jsonMaxContainerDepth geändert werden. Sie können die Höchstwerte jedoch auf einen Wert zwischen 1 und 127 variieren. Standardwert: 5, Mindestwert: 1, Maximalwert: 127
-
JSONMaxDocumentLength. Diese Prüfung kann aktiviert werden, indem die JsonMaxDocumentLength-Prüfung konfiguriert wird und die Standardoption ist OFF.
-
JSONMaxDocumentLength. Diese Prüfung kann durch Konfigurieren der JsonMaxDocumentLength-Prüfung aktiviert werden, und die Standardlänge ist auf 20000000 Byte festgelegt. Mindestwert: 1, Maximalwert: 2147483647
-
JSONMaxObjectKeyCount. Die Regel überprüft, ob die Überprüfung der maximalen JSON-Objektschlüsselanzahl ein- oder ausgeschaltet ist. Mögliche Werte: ON, OFF, Standardwert: OFF
-
JSONMaxObjectKeyCount. Diese Prüfung kann aktiviert werden, indem die JsonMaxObjectKeyCount-Prüfung konfiguriert wird. Die Prüfung schützt vor Objekten mit einer großen Anzahl von Schlüsseln, und der Standardwert ist auf 1000 Byte festgelegt. Mindestwert: 0, Maximalwert: 2147483647
-
JSONMaxObjectKeyLength. Diese Prüfung kann durch Konfigurieren der JsonMaxObjectKeyLength-Prüfung aktiviert werden. Die Regel überprüft, ob die Überprüfung der maximalen JSON-Objektschlüssellänge ein- oder ausgeschaltet ist. Standardmäßig ist es ausgeschaltet.
-
JSONMaxObjectKeyLength. Der Scheck schützt vor Objekten mit großer Schlüssellänge. Standardwert: 128. Mindestwert: 1, Maximalwert: 2147483647
-
JSONMaxArrayLength. Die Regel überprüft, ob die Prüfung der maximalen JSON-Array-Länge EIN oder AUS ist. Standardmäßig ist es ausgeschaltet.
-
JSONMaxArrayLength. Die Prüfung schützt vor Arrays mit großen Längen. Standardmäßig ist der Wert auf 10000 festgelegt. Mindestwert: 1, Maximalwert: 2147483647
-
JSONMaxStringLength. Diese Prüfung kann durch Konfigurieren der JsonMaxStringLength-Prüfung aktiviert werden. Die Prüfung prüft, ob die maximale JSON-Stringlänge EIN oder AUS ist. Standardmäßig ist es ausgeschaltet.
-
JSONMaxStringLength. Der Scheck schützt vor Saiten mit großer Länge. Standardmäßig ist es auf 1000000 eingestellt. Mindestwert: 1, Maximalwert: 2147483647
Konfigurieren der JSON-DoS-Schutzprüfung
Um den JSON-DoS-Schutz zu konfigurieren, müssen Sie die folgenden Schritte ausführen:
- Anwendungs-Firewall-Profil für JSON hinzufügen.
- Legen Sie das Anwendungs-Firewall-Profil für JSON-DoS-Einstellungen
- Konfigurieren Sie JSON-DoS-Variablen, indem Sie das Anwendungsfirewall-Profil binden
Anwendungs-Firewall-Profil für JSON-DoS-Schutz hinzufügen
Sie müssen zuerst ein Profil erstellen, das angibt, wie die Anwendungsfirewall Ihre JSON-Webinhalte vor JSON-DoS-Angriffen schützen muss. Geben Sie in der Befehlszeile Folgendes ein:
add appfw profile <name> -type (HTML | XML | JSON)
Hinweis:
Wenn Sie den Profiltyp auf JSON festlegen, sind andere Prüfungen wie HTML oder XML nicht anwendbar.
Beispiel
add appfw profile profile1 –type JSON
Festlegen des Anwendungs-Firewall-Profils für JSON-DoS-Schutz
Sie müssen das Profil für eine oder mehrere JSON-DoS-Aktionen und das JSON-DoS-Fehlerobjekt konfigurieren, die im Anwendungs-Firewall-Profil festgelegt werden sollen. Geben Sie in der Befehlszeile Folgendes ein:
set appfw profile <name> -JSONDoSAction [block] | [log] | [stats] | [none]
Blockieren — Blockieren Sie Verbindungen, die gegen diese Sicherheitsüberprüfung verstoßen. Log - Protokollieren Sie Verstöße gegen diese Sicherheitsprüfung. Statistiken - Generieren Sie Statistiken für diese Sicherheitsüberprüfung. Keine — Deaktiviert alle Aktionen für diese Sicherheitsüberprüfung.
Hinweis:
Um eine oder mehrere Aktionen zu aktivieren, geben Sie “set appfw profile -jsondosAction” ein, gefolgt von den zu aktivierenden Aktionen.
Beispiel
set appfw profile profile1 -JSONDoSAction block log stat
Konfigurieren von DoS-Variablen durch Bindung des Anwendungs-Firewall-
Um JSON-DoS-Schutz bereitzustellen, müssen Sie das Anwendungs-Firewall-Profil mit den JSON-DoS-Einstellungen binden. Geben Sie in der Befehlszeile Folgendes ein:
bind appfw profile <name> -JSONDoSURL <expression> [-JSONMaxContainerDepthCheck ( ON | OFF ) [-JSONMaxContainerDepth <positive_integer>]] [-JSONMaxDocumentLengthCheck ( ON | OFF ) [-JSONMaxDocumentLength <positive_integer>]] [-JSONMaxObjectKeyCountCheck ( ON | OFF ) [-SONMaxObjectKeyCount <positive_integer>]] [-JSONMaxObjectKeyLengthCheck ( ON | OFF ) [-JSONMaxObjectKeyLength <positive_integer>]] [-JSONMaxArrayLengthCheck ( ON | OFF ) [-JSONMaxArrayLength <positive_integer>]] [-JSONMaxStringLengthCheck ( ON | OFF ) [-JSONMaxStringLength <positive_integer>]]
Beispiel
bind appfw profile profile1 -JSONDoSURL “.*” -JSONMaxContainerDepthCheck ON
Hinweis:
Die JSON-DoS-Prüfungen sind nur anwendbar, wenn der Profiltyp als JSON ausgewählt ist. Außerdem werden SQL, Cross-Site Scripting, Feldformat und Formularfeldsignaturen bei JSON-Profilen auf Abfrageparameter angewendet.
JSON-Fehlerseite importieren
Wenn eine eingehende Anforderung einen DoS-Angriff hatte und Sie die Anforderung blockieren, zeigt die Appliance eine Fehlermeldung an. Um dies zu tun, müssen Sie die JSON-Fehlerseite importieren. Geben Sie in der Befehlszeile Folgendes ein:
import appfw jsonerrorpage <src> <name> [-comment <string>] [-overwrite]
Hierbei gilt:
src. URL (Protokoll, Host, Pfad und Name) für den Speicherort, an dem das importierte JSON-Fehlerobjekt gespeichert werden soll.
Hinweis:
Der Import schlägt fehl, wenn sich das zu importierende Objekt auf einem HTTPS-Server befindet, für den Zugriff eine Clientzertifikatauthentifizierung erforderlich ist Dies ist ein obligatorisches Argument. Maximale Länge: 2047
Name. Name, der dem JSON-Fehlerobjekt auf dem NetScaler zugewiesen werden soll. Dies ist ein obligatorisches Argument. Maximale Länge: 31 Kommentar. Kommentare, um Informationen über das JSON-Fehlerobjekt beizubehalten. Maximale Länge: 255 überschreiben. Überschreiben Sie jedes vorhandene JSON-Fehlerobjekt mit demselben Namen.
Beispielkonfiguration
Add appfw prof profjson –type JSON
Bind appfw prof profjson –JSONDoSURL “.*” -JSONMaxDocumentLengthCheck ON -JSONMaxDocumentLength 30 -JSONMaxContainerDepthCheck ON -JSONMaxContainerDepth 3 JSONMaxObjectKeyCountCheck ON -JSONMaxObjectKeyCount 4 -JSONMaxObjectKeyLengthCheck ON -JSONMaxObjectKeyLength 10 -JSONMaxArrayLengthCheck ON -JSONMaxArrayLength 5 -JSONMaxStringLengthCheck ON -JSONMaxStringLength 30
<!--NeedCopy-->
Beispiel für Nutzlasten, Protokollmeldungen und Zähler:
JSONMaxDocumentLength Violation
JSONMaxDocumentLength: 30 Payload: {“a”:”A”,”b”:”B”,”c”:”C”,”d”:”D”,”e”:”E”}
Protokollmeldung:
Document Length exceeds 20000000 May 29 20:23:32 <local0.info> 10.217.31.243 05/29/2019:20:23:32 GMT 0-PPE-0 : default APPFW APPFW_JSON_DOS_MAX_DOCUMENT_LENGTH 136 0 : 10.217.32.134 114-PPE0 - profjson http://10.217.30.120/forms/login.html Document exceeds maximum document length (30). cn1=30467 cn2=115 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
1 0 6 as_viol_json_dos
2 0 3 as_viol_json_dos_max_document_length
3 0 6 as_log_json_dos
4 0 3 as_log_json_dos_max_document_length
5 0 6 as_viol_json_dos_profile appfw__(profile1)
6 0 3 as_viol_json_dos_max_document_length_profile appfw__(profile1)
7 0 6 as_log_json_dos_profile appfw__(profile1)
8 0 3 as_log_json_dos_max_document_length_profile appfw__(profile1)
<!--NeedCopy-->
JSONMaxContainerDepth Violation
JSONMaxContainerDepth: 3 Payload: {“a”: {”b”: {“c”: {“d”: { ”e” : “f” }}}}}
Protokollmeldung:
May 29 19:33:59 <local0.info> 10.217.31.243 05/29/2019:19:33:59 GMT 0-PPE-1 : default APPFW APPFW_JSON_DOS_MAX_CONTAINER_DEPTH 4626 0 : 10.217.31.247 22-PPE1 – profjson http://10.217.30.120/forms/login.html Document at offset (15) exceeds maximum container depth (3). cn1=30466 cn2=113 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
36 20999 7 1 0 as_viol_json_dos
37 0 6 1 0 as_viol_json_dos_max_container_depth
38 0 7 1 0 as_log_json_dos
39 0 6 1 0 as_log_json_dos_max_container_depth
40 0 7 1 0 as_viol_json_dos_profile appfw__(profile1)
41 0 6 1 0 as_viol_json_dos_max_container_depth_profile appfw__(profile1)
42 0 7 1 0 as_log_json_dos_profile appfw__(profile1)
43 0 6 1 0 as_log_json_dos_max_container_depth_profile appfw__(profile1)
<!--NeedCopy-->
JSONMaxObjectKeyCount Violation
JSONMaxObjectKeyCount: 4
Payload: {“a”: ”A”, “b”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Protokollmeldung:
May 30 19:42:41 <local0.info> 10.217.31.243 05/30/2019:19:42:41 GMT 0-PPE-1 : default APPFW APPFW_JSON_DOS_MAX_OBJECT_KEY_COUNT 457 0 : 10.217.32.134 219-PPE1 - profjson http://10.217.30.120/forms/login.html Object at offset (41) that exceeds maximum key count (4). cn1=30468 cn2=118 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
94 119105 15 1 0 as_viol_json_dos
95 0 4 1 0 as_viol_json_dos_max_object_key_count
96 0 15 1 0 as_log_json_dos
97 0 4 1 0 as_log_json_dos_max_object_key_count
98 0 15 1 0 as_viol_json_dos_profile appfw__(profile1)
99 0 4 1 0 as_viol_json_dos_max_object_key_count_profile appfw__(profile1)
100 0 15 1 0 as_log_json_dos_profile appfw__(profile1)
101 0 4 1 0 as_log_json_dos_max_object_key_count_profile appfw__(profile1)
<!--NeedCopy-->
JSONMaxObjectKeyLength Violation
JSONMaxObjectKeyLength: 10 Payload: {“a”: ”A”, “b1234567890”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Protokollmeldung:
May 31 20:26:10 <local0.info> 10.217.31.243 05/31/2019:20:26:10 GMT 0-PPE-1 : default APPFW APPFW_JSON_DOS_MAX_OBJECT_KEY_LENGTH 102 0 : 10.217.32.134 89-PPE1 - profjson http://10.217.30.120/forms/login.html Object key(b1234567890) at offset (12) exceeds maximum key length (10). cn1=30469 cn2=118 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
242172 6 1 0 as_viol_json_dos
0 1 1 0 as_viol_json_dos_max_object_key_length
10 0 5 1 0 as_log_json_dos
11 0 1 1 0 as_log_json_dos_max_object_key_length
12 0 6 1 0 as_viol_json_dos_profile appfw__(profile1)
13 0 1 1 0 as_viol_json_dos_max_object_key_length_profile appfw__(profile1)
14 0 5 1 0 as_log_json_dos_profile appfw__(profile1)
15 0 1 1 0 as_log_json_dos_max_object_key_length_profile appfw__(profile1)
<!--NeedCopy-->
JSONMaxArrayLength Violation
JSONMaxArrayLength: 5 Payload: {“a”: ”A”, “c”:[”d”,”e”,”f”,”g”,”h”,”i”],”e”:[“E”,”e”]}
Protokollmeldung:
May 29 20:58:39 <local0.info> 10.217.31.243 05/29/2019:20:58:39 GMT 0-PPE-1 : default APPFW APPFW_JSON_DOS_MAX_ARRAY_LENGTH 4650 0 : 10.217.32.134 153-PPE1 -profjson http://10.217.30.120/forms/login.html Array at offset (37) that exceeds maximum array length (5). cn1=30469 cn2=120 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
36 182293 10 1 0 as_viol_json_dos
37 0 1 1 0 as_viol_json_dos_max_array_length
38 0 10 1 0 as_log_json_dos 39 0 1 1 0 as_log_json_dos_max_array_length
40 0 10 1 0 as_viol_json_dos_profile appfw__(profile1)
41 0 1 1 0 as_viol_json_dos_max_array_length_profile appfw__(profile1)
42 0 10 1 0 as_log_json_dos_profile appfw__(profile1)
43 0 1 1 0 as_log_json_dos_max_array_length_profile appfw__(profile1))
<!--NeedCopy-->
JSONMaxStringLength Violation
JSONMaxStringLength: 10
Payload: {“a”: ”A”, “c”:”CcCcCcCcCcCcCcCcCc”,”e”:[“E”,”e”]}
Protokollmeldung:
May 29 20:05:02 <local0.info> 10.217.31.243 05/29/2019:20:05:02 GMT 0-PPE-0 : default APPFW APPFW_JSON_DOS_MAX_STRING_LENGTH 134 0 : 10.217.32.134 80-PPE0 - profjson http://10.217.30.120/forms/login.html String(CcCcCcCcCcCcCc) at offset (27) that exceeds maximum string length (10). n1=30470 cn2=122 cs1=profjson cs2=PPE0 cs4=ALERT cs5=2019 act=blocked
<!--NeedCopy-->
Zähler:
44 91079 3 1 0 as_viol_json_dos
45 0 1 1 0 as_viol_json_dos_max_string_length
46 0 3 1 0 as_log_json_dos
47 0 1 1 0 as_log_json_dos_max_string_length
48 0 3 1 0 as_viol_json_dos_profile appfw__(profile1)
49 0 1 1 0 as_viol_json_dos_max_string_length_profile appfw__(profile1)
50 0 3 1 0 as_log_json_dos_profile appfw__(profile1)
51 0 1 1 0 as_log_json_dos_max_string_length_profile appfw__(profile1
<!--NeedCopy-->
Konfigurieren Sie den JSON-DoS-Schutz mithilfe der GUI
Gehen Sie wie folgt vor, um die JSON-DoS-Schutzeinstellungen festzulegen.
- Navigieren Sie im Navigationsbereich zu Sicherheit > Profile.
- Klicken Sie auf der Seite Profile auf Hinzufügen.
- Klicken Sie auf der NetScaler Web App Firewall-Profilseiteunter Erweiterte Einstellungen auf Sicherheitsprüfungen.
- Gehen Sie im Abschnitt Sicherheitsüberprüfungen zu den JSON-Denial-of-Service-Einstellungen.
- Klicken Sie neben dem Kontrollkästchen auf das Symbol der ausführbaren
- Klicken Sie auf Aktionseinstellungen, um die Seite JSON-Denial-of-Service-Einstellungen aufzurufen.
- Wählen Sie die JSON-DoS-Aktion aus.
- Klicken Sie auf OK.
- Klicken Sie auf der Seite NetScaler Web App Firewall Profile unter Erweiterte Einstellungen auf Ausnahmeregeln.
- Wählen Sie im Abschnitt Entspannungsregeln die JSON-Denial-of-Service-Einstellungen aus und klicken Sie auf Bearbeiten.
- Legen Sie in der Application Firewall JSON Denial of Service Check die JSON-DoS-Validierungswerte fest.
-
Klicken Sie auf OK.
- Klicken Sie auf der NetScaler Web App Firewall Profilseite unter ErweiterteEinstellungen auf Profileinstellungen**.
-
Gehen Sie im Abschnitt Profileinstellungen zum Unterabschnitt JSON-Fehlereinstellungen, um die JSON-DoS-Fehlerseite festzulegen.
-
Legen Sie auf der Seite “Objekt importieren” der JSON-Fehlerseite die folgenden Parameter fest:
- Importieren aus. Importieren Sie die Fehlerseite als Text, Datei oder URL.
- URL. URL, um den Benutzer auf die Fehlerseite umzuleiten. 1 Datei. Wählen Sie eine Datei aus, die als JSON-DoS-Fehlerdatei importiert werden soll.
- Text. Geben Sie den Inhalt der JSON-Datei ein.
- Klicken Sie auf Weiter.
- Datei. Geben Sie den Dateinamen ein.
- Inhalt der Datei. Fügen Sie den Inhalt der Fehlerdatei hinzu.
- Klicken Sie auf OK.
- Klicken Sie auf OK.
- Klicken Sie auf Fertig.