Citrix ADC

Vérification de la protection par déni de service JSON

La vérification par déni de service (DoS) JSON examine une demande JSON entrante et valide si des données correspondent aux caractéristiques d’une attaque DoS. Si la demande comportait des violations JSON, l’appliance bloque la demande, consigne les données, envoie une alerte SNMP et affiche également une page d’erreur JSON. Le but de la vérification de déni de service JSON est d’empêcher un attaquant d’envoyer une demande JSON pour lancer des attaques de déni de service sur vos applications JSON ou votre site Web.

Lorsqu’un client envoie une demande à une appliance Citrix ADC, l’analyseur JSON analyse la charge utile de la demande et si une violation est observée, l’appliance applique des contraintes sur la structure JSON. La contrainte impose une limite de taille à la demande JSON. Par conséquent, si une violation JSON a été observée, l’appliance applique une action et répond par la page d’erreur JSON.

注册les JSON DoS

Lorsque l’appliance reçoit une demande JSON, la protection DOS JSON impose une limite de taille sur les paramètres DoS suivants dans la charge utile de la demande.

  1. profondeur maximale : imbrication maximale (profondeur) du document JSON. Cette vérification protège contre les documents dont la hiérarchie est trop approfondie.
  2. longueur maximale du document : longueur maximale du document JSON.
  3. longueur maximale du tableau : longueur maximale du tableau dans l’un des objets JSON. Cette vérification protège contre les réseaux ayant de grandes longueurs.
  4. longueur maximale de la chaîne : longueur maximale de la chaîne dans le JSON. Ce chèque protège contre les cordes de grande longueur.
  5. nombre maximum de clés d’objet : nombre maximum de clés dans l’un des objets JSON. Cette vérification protège contre les objets comportant un grand nombre de clés.
  6. longueur maximale de la clé de l’objet : longueur maximale de la clé dans l’un des objets JSON. Cette vérification protège contre les objets dotés de grandes clés.

Voici une liste des règles de déni de service JSON validées lors de l’analyse JSON.

  1. JSONMaxContainerDepth. Cette vérification peut être activée en configurant la vérification JSONMaxContainerDepth et, par défaut, l’option est DÉSACTIVÉE.

  2. JSONMaxContainerDepth. Cette vérification peut être activée/désactivée par l’option configurable JSONMaxContainerDepthCheck et la valeur par défaut peut être modifiée par l’option JSONMaxContainerDepth. Toutefois, vous pouvez modifier les niveaux maximum jusqu’à une valeur comprise entre 1 et 127. Valeur par défaut : 5, Valeur minimale : 1, Valeur maximale : 127

  3. JSONMaxDocumentLength. Cette vérification peut être activée en configurant la vérification JSONMaxDocumentLength et l’option par défaut est OFF.

  4. JSONMaxDocumentLength. Cette vérification peut être activée en configurant la vérification JSONMaxDocumentLength et la longueur par défaut est définie sur 20000000 octets. Valeur minimale : 1, valeur maximale : 2147483647

  5. JSONMaxObjectKeyCount. La règle valide si la vérification du nombre maximum de clés d’objet JSON est activée ou désactivée. Valeurs possibles : ON, OFF, Valeur par défaut : OFF

  6. JSONMaxObjectKeyCount. Cette vérification peut être activée en configurant la vérification JSONMaxObjectKeyCount. La vérification protège contre les objets qui ont un grand nombre de clés et la valeur par défaut est définie sur 1000 octets. Valeur minimale : 0, valeur maximale : 2147483647

  7. JSONMaxObjectKeyLength. Cette vérification peut être activée en configurant la vérification JSONMaxObjectKeyLength. La règle valide si la vérification de la longueur maximale de la clé d’objet JSON est activée ou désactivée. Par défaut, il est désactivé.

  8. JSONMaxObjectKeyLength. La vérification protège contre les objets ayant une grande longueur de clé. Valeur par défaut : 128. Valeur minimale : 1, valeur maximale : 2147483647

  9. JSONMaxArrayLength。La règle valide si la vérification de la longueur maximale du tableau JSON est activée ou désactivée. Par défaut, il est désactivé.

  10. JSONMaxArrayLength。La验证门生靠les baies de grandes longueurs. Par défaut, la valeur est définie sur 10000. Valeur minimale : 1, valeur maximale : 2147483647

  11. JSONMaxStringLength. Cette vérification peut être activée en configurant la vérification JSONMaxStringLength. La vérification valide si la longueur maximale de la chaîne JSON est ON ou OFF. Par défaut, il est désactivé.

  12. JSONMaxStringLength. Le carreau protège contre les cordes de grande longueur. Par défaut, il est défini sur 1000000. Valeur minimale : 1, valeur maximale : 2147483647

Configurer le contrôle de protection JSON DoS

Pour configurer la protection DoS JSON, vous devez effectuer les étapes suivantes :

  1. Ajoutez un profil de pare-feu d’application pour JSON.
  2. Définissez le profil de pare-feu d’application pour les paramètres DoS JSON.
  3. Configurez les variables DoS JSON en liant le profil de pare-feu d’application.

Ajouter un profil de pare-feu d’application pour la protection JSON DoS

Vous devez d’abord créer un profil qui spécifie comment le pare-feu d’application doit protéger votre contenu Web JSON contre les attaques DoS JSON. À l’invite de commandes, tapez :

add appfw profile -type (HTML | XML | JSON)

Remarque:

Lorsque vous définissez le type de profil sur JSON, les autres vérifications telles que HTML ou XML ne s’appliquent pas.

Exemple

add appfw profile profile1 –type JSON

Définition du profil de pare-feu d’application pour la protection JSON DoS

Vous devez configurer le profil pour une ou plusieurs actions de déni de service JSON et objet d’erreur de déni de service JSON à définir sur le profil de pare-feu d’application. À l’invite de commandes, tapez :

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

Bloquer : bloquez les connexions qui ne respectent pas ce contrôle de sécurité. Journal - Consigner les violations de cette vérification de sécurité. Stats - Générez des statistiques pour cette vérification de sécurité. Aucun : désactivez toutes les actions pour ce contrôle de sécurité.

Remarque:

Pour activer une ou plusieurs actions, tapez « set appfw profile -JsondosAction » suivi des actions à activer.

Exemple

set appfw profile profile1 -JSONDoSAction block log stat

Configurer les variables DoS en liant le profil de pare-feu d’application

Pour fournir une protection DoS JSON, vous devez lier le profil de pare-feu d’application aux paramètres de déni de service JSON. À l’invite de commandes, tapez :

bind appfw profile -JSONDoSURL [-JSONMaxContainerDepthCheck ( ON | OFF ) [-JSONMaxContainerDepth ]] [-JSONMaxDocumentLengthCheck ( ON | OFF ) [-JSONMaxDocumentLength ]] [-JSONMaxObjectKeyCountCheck ( ON | OFF ) [-SONMaxObjectKeyCount ]] [-JSONMaxObjectKeyLengthCheck ( ON | OFF ) [-JSONMaxObjectKeyLength ]] [-JSONMaxArrayLengthCheck ( ON | OFF ) [-JSONMaxArrayLength ]] [-JSONMaxStringLengthCheck ( ON | OFF ) [-JSONMaxStringLength ]]

Exemple

bind appfw profile profile1 -JSONDoSURL “.*” -JSONMaxContainerDepthCheck ON

Remarque:

Les vérifications de déni de service JSON ne seront applicables que si le type de profil est sélectionné en tant que JSON. En outre, le SQL, les scripts intersites, le format de champ et les signatures de champ de formulaire sont appliqués aux paramètres de requête dans les cas de profil JSON.

Page d’erreur Importation JSON

Si une demande entrante a subi une attaque DoS et que vous bloquez la demande, l’appliance affiche un message d’erreur. Pour ce faire, vous devez importer la page d’erreur JSON. À l’invite de commandes, tapez :

import appfw jsonerrorpage [-comment ] [-overwrite]

Où,

src. URL (protocole, hôte, chemin et nom) de l’emplacement où stocker l’objet d’erreur JSON importé.

Remarque:

L’importation échoue si l’objet à importer se trouve sur un serveur HTTPS qui nécessite une authentification par certificat client pour y accéder. Il s’agit d’un argument obligatoire. Longueur maximale : 2047.

笔名。以前一个attribuer l 'objet误差JSON苏尔Citrix ADC. Il s’agit d’un argument obligatoire. Longueur maximale : 31 commentaires. Tout commentaire destiné à conserver les informations relatives à l’objet d’erreur JSON. Longueur maximale : 255 écrasements. Remplacez tout objet d’erreur JSON existant du même nom.

Exemple de configuration

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 

Exemples de charges utiles, de messages de journal et de compteurs :

JSONMaxDocumentLength Violation

JSONMaxDocumentLength: 30 Payload: {“a”:”A”,”b”:”B”,”c”:”C”,”d”:”D”,”e”:”E”}

Message du journal :

Document Length exceeds 20000000 May 29 20:23:32  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 

Compteurs :

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” }}}}}

Message du journal :

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

Compteurs :

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” }

Message du journal :

May 30 19:42:41  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 

Compteurs :

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” }

Message du journal :

May 31 20:26:10  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 

Compteurs :

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) 

Violation JSONMaxArrayLength

JSONMaxArrayLength: 5 Payload: {“a”: ”A”, “c”:[”d”,”e”,”f”,”g”,”h”,”i”],”e”:[“E”,”e”]}

Message du journal :

May 29 20:58:39  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 

Compteurs :

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”]}

Message du journal :

May 29 20:05:02  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 

Compteurs :

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 

Configurer la protection DoS JSON à l’aide de Citrix interface graphique

Suivez la procédure ci-dessous pour définir les paramètres de protection JSON DoS.

  1. Dans le volet de navigation, accédez àSécurité>Profils.
  2. Sur la pageProfils, cliquez surAjouter.
  3. Sur la pageProfil Citrix Web App Firewall, cliquez surContrôles de sécurité sous Paramètres avancés.
  4. Dans la sectionVérifications de sécurité, accédez aux paramètresde déni de service JSON.
  5. Cliquez sur l’icône exécutable à côté de la case à cocher.

    Contrôles de sécurité JSON DoS

  6. Cliquez surParamètres d’actionpour accéder à la pageParamètres de déni de service JSON.
  7. Sélectionnez l’action DoS JSON.
  8. Cliquez surOK.

    Paramètres d'action JSON DoS

  9. Dans la pageProfil de Citrix Web App Firewall, cliquez sur注册les de relaxationsousParamètres avancés.
  10. Dans la section注册les de relaxation, sélectionnez Paramètresde déni de service JSONet cliquez surModifier.

    注册les de relaxation JSON DoS

  11. Dans lavérification du déni de service JSON du pare-feu d’application, définissez les valeurs de validation de déni de service JSON.
  12. Cliquez surOK.

    注册les de relaxation JSON DoS

  13. Dans la pageProfil de Citrix Web App Firewall, cliquez surParamètres du profilsousParamètres avancés.
  14. Dans la sectionParamètres du profil, accédez à la sous-sectionParamètres d’erreur JSONpour définir la paged’erreur de déni de service JSON.

    注册les de relaxation JSON DoS

  15. Dans lapage d’erreur JSON Importer un objet, définissez les paramètres suivants :

    1. Importer depuis. Importez la page d’erreur sous forme de texte, de fichier ou d’URL.
    2. URL. URL pour rediriger l’utilisateur vers la page d’erreur. 1 fichier. Sélectionnez un fichier à importer en tant que fichier d’erreur JSON DoS.
    3. Texte. Entrez le contenu du fichier JSON.
    4. Cliquez sur Continuer.
    5. Dossier. Entrez le nom du fichier.
    6. Contenu du fichier. Ajoutez le contenu du fichier d’erreur.
    7. Cliquez surOK.

    Page d'erreur d'importation JSON DoS

  16. Cliquez surOK.
  17. Cliquez surTerminé.
Vérification de la protection par déni de service JSON