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 NetScaler, 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.
Règles 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.
- profondeur maximale : imbrication maximale (profondeur) du document JSON. Cette vérification protège contre les documents dont la hiérarchie est trop approfondie.
- longueur maximale du document : longueur maximale du document JSON.
- 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.
- 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.
- 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.
- 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.
-
JSONMaxContainerDepth. Cette vérification peut être activée en configurant la vérification JSONMaxContainerDepth et, par défaut, l’option est DÉSACTIVÉE.
-
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
-
JSONMaxDocumentLength. Cette vérification peut être activée en configurant la vérification JSONMaxDocumentLength et l’option par défaut est OFF.
-
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
-
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
-
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
-
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é.
-
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
-
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é.
-
JSONMaxArrayLength. La vérification protège contre les baies de grandes longueurs. Par défaut, la valeur est définie sur 10000. Valeur minimale : 1, valeur maximale : 2147483647
-
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é.
-
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 :
- Ajoutez un profil de pare-feu d’application pour JSON.
- Définissez le profil de pare-feu d’application pour les paramètres DoS JSON.
- 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 <name> -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 <name> -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 <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>]]
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 <src> <name> [-comment <string>] [-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.
Nom. Nom à attribuer à l’objet d’erreur JSON sur NetScaler. 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
<!--NeedCopy-->
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 <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-->
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)
<!--NeedCopy-->
JSONMaxContainerDepth Violation
JSONMaxContainerDepth: 3 Payload: {“a”: {”b”: {“c”: {“d”: { ”e” : “f” }}}}}
Message du journal :
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-->
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)
<!--NeedCopy-->
JSONMaxObjectKeyCount Violation
JSONMaxObjectKeyCount: 4
Payload: {“a”: ”A”, “b”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Message du journal :
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-->
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)
<!--NeedCopy-->
JSONMaxObjectKeyLength Violation
JSONMaxObjectKeyLength: 10 Payload: {“a”: ”A”, “b1234567890”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Message du journal :
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-->
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)
<!--NeedCopy-->
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 <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-->
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))
<!--NeedCopy-->
JSONMaxStringLength Violation
JSONMaxStringLength: 10
Payload: {“a”: ”A”, “c”:”CcCcCcCcCcCcCcCcCc”,”e”:[“E”,”e”]}
Message du journal :
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-->
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
<!--NeedCopy-->
Configuration de la protection DoS JSON à l’aide de l’interface graphique
Suivez la procédure ci-dessous pour définir les paramètres de protection JSON DoS.
- Dans le volet de navigation, accédez à Sécurité > Profils.
- Dans la page Profils, cliquez sur Ajouter.
- Sur la page de profil de NetScaler Web App Firewall, cliquez sur Contrôles de sécurité sous Paramètres avancés.
- Dans la section Vérifications de sécurité, accédez aux paramètres de déni de service JSON.
- Cliquez sur l’icône exécutable à côté de la case à cocher.
- Cliquez sur Paramètres d’action pour accéder à la page Paramètres de déni de service JSON.
- Sélectionnez l’action DoS JSON.
- Cliquez sur OK.
- Sur la page de profil de NetScaler Web App Firewall, cliquez sur Règles de relaxation sous Paramètres avancés.
- Dans la section Règles de relaxation, sélectionnez Paramètres de déni de service JSON et cliquez sur Modifier.
- Dans la vérification du déni de service JSON du pare-feu d’application, définissez les valeurs de validation de déni de service JSON.
-
Cliquez sur OK.
- Dans la page Profil de NetScaler Web App Firewall, cliquez sur Paramètres du profil sous Paramètres avancés.
-
Dans la section Paramètres du profil, accédez à la sous-section Paramètres d’erreur JSON pour définir la page d’erreur de déni de service JSON.
-
Dans la page d’erreur JSON Importer un objet, définissez les paramètres suivants :
- Importer depuis. Importez la page d’erreur sous forme de texte, de fichier ou d’URL.
- 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.
- Texte. Entrez le contenu du fichier JSON.
- Cliquez sur Continuer.
- Dossier. Entrez le nom du fichier.
- Contenu du fichier. Ajoutez le contenu du fichier d’erreur.
- Cliquez sur OK.
- Cliquez sur OK.
- Cliquez sur Terminé.