JSON-Denial-of-Service-Schutzüberprüfung

Die JSON-Denial-of-Service-Prüfung (DoS) prüft eine eingehende JSON-Anforderung und überprüft, ob Daten vorhanden sind, die den Eigenschaften eines DoS-Angriffs entsprechen. Wenn die Anforderung JSON-Verstöße aufwies, 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, einen Angreifer daran zu hindern, JSON-Anfrage zu senden, um DoS-Angriffe auf Ihre JSON-Anwendungen oder -Website zu starten.

Wenn ein Client eine Anforderung an eine Citrix ADC Appliance sendet, analysiert der JSON-Parser die Anforderungsnutzlast, und wenn eine Verletzung beobachtet wird, erzwingt die Appliance Einschränkungen für die JSON-Struktur. Die Einschränkung erzwingt eine Größenbeschränkung für die JSON-Anforderung. Wenn eine JSON-Verletzung beobachtet wurde, wendet die Appliance eine Aktion an und antwortet mit der JSON-Fehlerseite.

JSON DoS-Regeln

Wenn die Appliance eine JSON-Anforderung empfängt, erzwingt der JSON-DOS-Schutz die Größenbeschränkung für die folgenden DoS-Parameter in der Anforderungs-Nutzlast.

  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 Zeichenfolgenlänge: Maximale Zeichenfolgenlänge im JSON. Diese Prüfung schützt vor Saiten mit großer Länge.
  5. Maximale Objektschlüsselanzahl: Maximale Anzahl der Schlüssel in einem beliebigen JSON-Objekt. Diese Prüfung schützt vor Objekten, die eine große Anzahl von Schlüsseln haben.
  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.

Im Folgenden finden Sie eine Liste der JSON-DoS-Regeln, die während des JSON-Parsens validiert wurden.

  1. JSONMaxContainerDepth. Diese Prüfung kann durch Konfigurieren der JSONMaxContainerDepth Check aktiviert werden und standardmäßig ist die Option OFF.

  2. JSONMaxContainerDepth. Diese Prüfung kann durch die konfigurierbare Option JSONMaxContainerDepthCheck aktiviert/deaktiviert werden und der Standardwert könnte durch die Option JSONMaxContainerDepth geändert werden. Sie können jedoch die Maximalstufen auf einen Wert zwischen 1 und 127 variieren. Standardwert: 5, Minimalwert: 1, Maximalwert: 127

  3. JSONMaxDocumentLength. Diese Prüfung kann durch Konfigurieren der JSONMaxDocumentLength-Prüfung aktiviert werden 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 Bytes festgelegt. Minimalwert: 1, Maximalwert: 2147483647

  5. JSONMaxObjectKeyCount. Die Regel überprüft, ob die JSON-Prüfung für maximale Objektschlüsselanzahl aktiviert oder deaktiviert ist. Mögliche Werte: ON, OFF, Standardwert: OFF

  6. JSONMaxObjectKeyCount. Diese Prüfung kann durch Konfigurieren der JSONMaxObjectKeyCount-Prüfung aktiviert werden. Die Prüfung schützt vor Objekten, die eine große Anzahl von Schlüsseln haben, und der Standardwert ist auf 1000 Byte festgelegt. Minimalwert: 0, Maximalwert: 2147483647

  7. JSONMaxObjectKeyLength. Diese Prüfung kann durch Konfigurieren der JSONMaxObjectKeyLength-Prüfung aktiviert werden. Die Regel überprüft, ob die Prüfung der maximalen JSON-Objekt-Schlüssellänge aktiviert oder deaktiviert ist. Standardmäßig ist es ausgeschaltet.

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

  9. JSONMaxArrayLength. Die Regel überprüft, ob die maximale JSON-Array-Längenüberprüfung ON oder OFF ist. Standardmäßig ist es deaktiviert.

  10. JSONMaxArrayLength. Der Check schützt vor Arrays mit großen Längen. Standardmäßig ist der Wert auf 10000 festgelegt. Minimalwert: 1, Maximalwert: 2147483647

  11. JSONMaxStringLength. Diese Prüfung kann durch Konfigurieren der JSONMaxStringLength Prüfung aktiviert werden. Die Prüfung überprüft, ob die maximale JSON-Stringlänge ON oder OFF ist. Standardmäßig ist es deaktiviert.

  12. JSONMaxStringLength. Der Check schützt vor großen Saiten. Standardmäßig ist es auf 1000000 eingestellt. Minimalwert: 1, Maximalwert: 2147483647

Konfigurieren der JSON-DoS-Schutzprüfung

Zum Konfigurieren des JSON-DoS-Schutzes müssen Sie die folgenden Schritte ausführen:

  1. Fügen Sie ein Anwendungs-Firewall-Profil für JSON hinzu.
  2. Legen Sie das Anwendungs-Firewall-Profil für JSON DoS-Einstellungen fest.
  3. Konfigurieren Sie JSON DoS-Variablen, indem Sie das Firewallprofil der Anwendung binden.

Hinzufügen eines Anwendungs-Firewall-Profils für JSON DoS-Schutz

Sie müssen zunächst ein Profil erstellen, das angibt, wie die Anwendungsfirewall Ihre JSON-Webinhalte vor JSON-DoS-Angriff schützen muss. Geben Sie an der Eingabeaufforderung Folgendes ein:

add appfw profile <name> -type (HTML | XML | JSON)

Hinweis:

Wenn Sie den Profiltyp als JSON festlegen, sind andere Prüfungen wie HTML oder XML nicht anwendbar.

Beispiel

add appfw profile profile1 –type JSON

Festlegen des Anwendungsfirewall Profils für den JSON DoS-Schutz

Sie müssen das Profil für eine oder mehrere JSON DoS-Aktionen und das JSON DoS-Fehlerobjekt konfigurieren, die im Firewallprofil der Anwendung festgelegt werden sollen. Geben Sie an der Eingabeaufforderung Folgendes ein:

set appfw profile <name> -JSONDoSAction [block] | [log] | [stats] | [none]

Block - Blockieren von Verbindungen, die gegen diese Sicherheitsprüfung verstoßen. Log - Protokollieren Sie Verstöße gegen diese Sicherheitsprüfung. Stats - Generieren Sie Statistiken für diese Sicherheitsprüfung. None - Deaktivieren Sie alle Aktionen für diese Sicherheitsprüfung.

Hinweis:

Um eine oder mehrere Aktionen zu aktivieren, geben Sie set appfw profile -jsondosAction gefolgt von den zu aktivierenden Aktionen ein.

Beispiel

set appfw profile profile1 -JSONDoSAction block log stat

Konfigurieren von DoS-Variablen durch Binden des Anwendungs-Firewall-Profils

Um JSON DoS-Schutz zu bieten, müssen Sie das Firewallprofil der Anwendung mit JSON DoS-Einstellungen verbinden. Geben Sie an der Eingabeaufforderung 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 die SQL-, XSS-, Feldformat- und Formularfeldsignaturen in Fällen von JSON-Profil 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. Dazu müssen Sie die JSON-Fehlerseite importieren. Geben Sie an der Eingabeaufforderung 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, der Clientzertifikatauthentifizierung für den Zugriff erfordert. 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. Alle 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

Beispielnutzlasten, Protokollnachrichten und Leistungsindikatoren:

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

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)

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

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)

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

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)

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

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)

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

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

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

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

Konfigurieren des JSON-DoS-Schutzes mit der Citrix GUI

Gehen Sie folgendermaßen 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 Seite Citrix Web App Firewall profilunter Erweiterte Einstellungen auf Sicherheitsprüfungen .
  4. Wechseln Sie im Abschnitt Sicherheitsprüfungen zu JSON Denial of Service-Einstellungen .
  5. Klicken Sie auf das Symbol für die ausführbare Datei neben dem Kontrollkästchen.

    JSON DoS-Sicherheitsprüfungen

  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.

    JSON DoS-Aktionseinstellungen

  9. Klicken Sie auf der Seite Citrix Web App Firewall Profil unter Erweiterte Einstellungen auf Relaxationsregeln.
  10. Wählen Sie im Abschnitt Relaxationsregeln die Option JSON-Denial-of-Service-Einstellungen aus, und klicken Sie auf Bearbeiten .

    JSON DoS-Relaxationsregeln

  11. Legen Sie in der Application Firewall JSON Denial of Service Check die JSON DoS-Validierungswerte fest.
  12. Klicken Sie auf OK.

    JSON DoS-Relaxationsregeln

  13. Klicken Sie auf der Seite Citrix Web App Firewall Profilunter Erweiterte Einstellungenauf Profileinstellungen.
  14. Gehen Sie im Abschnitt Profileinstellungen zum Abschnitt JSON-Fehlereinstellungen, um die JSON-DoS-Fehlerseite festzulegen.

    JSON DoS-Relaxationsregeln

  15. Legen Sie auf der Seite JSON-Fehlerseite Importobjekt die folgenden Parameter fest:

    1. Importieren von. 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. Akte. Geben Sie den Dateinamen ein.
    6. Dateiinhalt. 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-Schutzüberprüfung