ADC

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 Citrix ADC 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.

  1. maximale Tiefe: Maximale Verschachtelung (Tiefe) des JSON-Dokuments. Diese Prüfung schützt vor Dokumenten mit übermäßiger Hierarchietiefe.
  2. maximale Dokumentlänge: Maximale Dokumentlänge des JSON-Dokuments.
  3. 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.
  4. maximale Stringlänge: Maximale Stringlänge im JSON. Diese Prüfung schützt vor Saiten mit großer Länge.
  5. 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.
  6. 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.

  1. JSONMaxContainerDepth. Diese Prüfung kann aktiviert werden, indem die JsonMaxContainerDepth-Prüfung konfiguriert wird und standardmäßig ist die Option OFF.

  2. 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

  3. JSONMaxDocumentLength. Diese Prüfung kann aktiviert werden, indem die JsonMaxDocumentLength-Prüfung konfiguriert wird und die Standardoption ist OFF.

  4. 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

  5. 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

  6. 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

  7. 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.

  8. JSONMaxObjectKeyLength. Der Scheck schützt vor Objekten mit großer Schlüssellänge. Standardwert: 128. Mindestwert: 1, Maximalwert: 2147483647

  9. JSONMaxArrayLength. Die Regel überprüft, ob die Prüfung der maximalen JSON-Array-Länge EIN oder AUS ist. Standardmäßig ist es ausgeschaltet.

  10. 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

  11. 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.

  12. 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:

  1. Anwendungs-Firewall-Profil für JSON hinzufügen.
  2. Legen Sie das Anwendungs-Firewall-Profil für JSON-DoS-Einstellungen
  3. 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 Citrix ADC 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 des JSON-DoS-Schutzes mit Citrix GUI

Gehen Sie wie folgt vor, um die JSON-DoS-Schutzeinstellungen festzulegen.

  1. Navigieren Sie im Navigationsbereich zu Sicherheit > Profile.
  2. Klicken Sie auf der Seite Profile auf Hinzufügen.
  3. Klicken Sie auf der Profilseite der Citrix Web App Firewallunter Erweiterte Einstellungen auf Sicherheitsprüfungen.
  4. Gehen Sie im Abschnitt Sicherheitsüberprüfungen zu den JSON-Denial-of-Service-Einstellungen.
  5. Klicken Sie neben dem Kontrollkästchen auf das Symbol der ausführbaren
  6. Klicken Sie auf Aktionseinstellungen, um die Seite JSON-Denial-of-Service-Einstellungen aufzurufen.
  7. Wählen Sie die JSON-DoS-Aktion aus.
  8. Klicken Sie auf OK.
  9. Klicken Sie auf der Seite Citrix Web App Firewall Profile unter Erweiterte Einstellungen auf Ausnahmeregeln.
  10. Wählen Sie im Abschnitt Entspannungsregeln die JSON-Denial-of-Service-Einstellungen aus und klicken Sie auf Bearbeiten.
  11. Legen Sie in der Application Firewall JSON Denial of Service Check die JSON-DoS-Validierungswerte fest.
  12. Klicken Sie auf OK.

    JSON-DoS-Entspannungsregeln

  13. Klicken Sie auf der Citrix Web App Firewall Profilseite unter ErweiterteEinstellungen auf Profileinstellungen**.
  14. Gehen Sie im Abschnitt Profileinstellungen zum Unterabschnitt JSON-Fehlereinstellungen, um die JSON-DoS-Fehlerseite festzulegen.

    JSON-DoS-Entspannungsregeln

  15. Legen Sie auf der Seite “Objekt importieren” der JSON-Fehlerseite die folgenden Parameter fest:

    1. Importieren aus. Importieren Sie die Fehlerseite als Text, Datei oder URL.
    2. 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.
    3. Text. Geben Sie den Inhalt der JSON-Datei ein.
    4. Klicken Sie auf Weiter.
    5. Datei. Geben Sie den Dateinamen ein.
    6. Inhalt der Datei. Fügen Sie den Inhalt der Fehlerdatei hinzu.
    7. Klicken Sie auf OK.

    JSON-DoS-Importfehlerseite

  16. Klicken Sie auf OK.
  17. Klicken Sie auf Fertig.
JSON-Denial-of-Service-Schutzprüfung