Comprobación de protección de denegación de servicio JSON
La comprobación de denegación de servicio (DoS) de JSON examina una solicitud JSON entrante y valida si hay datos que coincidan con las características de un ataque DoS. Si la solicitud tenía infracciones de JSON, el dispositivo bloquea la solicitud, registra los datos, envía una alerta SNMP y también muestra una página de error de JSON. El propósito de la comprobación DoS de JSON es evitar que un atacante envíe una solicitud JSON para lanzar ataques DoS en sus aplicaciones JSON o sitio web.
Cuando un cliente envía una solicitud a un dispositivo NetScaler ADC, el analizador JSON analiza la carga útil de la solicitud y, si se observa una infracción, el dispositivo impone restricciones en la estructura JSON. La restricción impone un límite de tamaño en la solicitud JSON. Como resultado, si se observó alguna infracción de JSON, el dispositivo aplica una acción y responde con la página de error de JSON.
Reglas DoS JSON
Cuando el dispositivo recibe una solicitud JSON, la protección JSON DOS impone un límite de tamaño en los siguientes parámetros DoS en la carga útil de la solicitud.
- profundidad máxima: anidamiento máximo (profundidad) del documento JSON. Esta comprobación protege contra documentos que tienen una profundidad de jerarquía excesiva.
- longitud máxima del documento: longitud máxima del documento JSON.
- longitud máxima de la matriz: longitud máxima de la matriz en cualquiera de los objetos JSON. Esta comprobación protege contra las matrices que tienen longitudes grandes.
- longitud máxima de cadena: longitud máxima de cadena en el JSON. Esta comprobación protege contra las cuerdas que tienen una longitud grande.
- recuento máximo de claves de objetos: recuento máximo de claves en cualquiera de los objetos JSON. Esta comprobación protege contra objetos que tienen un gran número de teclas.
- longitud máxima de clave de objeto: longitud máxima de clave en cualquiera de los objetos JSON. Esta comprobación protege contra objetos que tienen teclas grandes.
A continuación se muestra una lista de reglas DoS de JSON validadas durante el análisis JSON.
-
Profundidad máxima del contenedor JSON. Esta verificación se puede habilitar configurando la verificación JSONMaxContainerDepth y, de forma predeterminada, la opción está desactivada.
-
Profundidad máxima del contenedor JSON. Esta comprobación se puede habilitar/inhabilitar mediante la opción configurable jsonMaxContainerDepthCheck y el valor predeterminado se puede cambiar mediante la opción jsonMaxContainerDepth. Sin embargo, puede variar los niveles máximos a un valor comprendido entre 1 y 127. Valor predeterminado: 5, Valor mínimo: 1, Valor máximo: 127
-
JSONMaxDocumentLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxDocumentLength y la opción predeterminada es OFF.
-
JSONMaxDocumentLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxDocumentLength y la longitud predeterminada se establece en 20000000 bytes. Valor mínimo: 1, Valor máximo: 2147483647
-
JSONMaxObjectKeyCount. La regla valida si la comprobación de recuento máximo de claves de objetos JSON está activada o desactivada. Valores posibles: ON, OFF, Valor por defecto: OFF
-
JSONMaxObjectKeyCount. Esta comprobación se puede habilitar configurando la comprobación JSONMaxObjectKeyCount. La comprobación protege contra objetos que tienen un gran número de claves y el valor predeterminado se establece en 1000 bytes. Valor mínimo: 0, Valor máximo: 2147483647
-
JSONMaxObjectKeyLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxObjectKeyLength. La regla valida si la verificación de longitud máxima de clave de objeto JSON está activada o desactivada. De forma predeterminada, está DESACTIVADO.
-
JSONMaxObjectKeyLength. La marca protege contra objetos que tienen una longitud de clave grande. Valor por defecto: 128. Valor mínimo: 1, Valor máximo: 2147483647
-
JSONMaxArrayLength. La regla valida si la comprobación de longitud máxima de matriz JSON está ACTIVADA o DESACTIVADA. De forma predeterminada, está desactivada.
-
JSONMaxArrayLength. La comprobación protege contra matrices que tienen longitudes grandes. De forma predeterminada, el valor se establece en 10000. Valor mínimo: 1, Valor máximo: 2147483647
-
Longitud máxima de la cadena JSON. Esta comprobación se puede habilitar configurando la comprobación JSONMaxStringLength. La comprobación valida si la longitud máxima de cadena JSON está ACTIVADA o DESACTIVADA. De forma predeterminada, está desactivada.
-
Longitud máxima de la cadena JSON. El cheque protege contra cuerdas de gran longitud. De forma predeterminada, se establece en 1000000. Valor mínimo: 1, Valor máximo: 2147483647
Configurar la comprobación de la protección DoS
Para configurar la protección DoS de JSON, debe completar los siguientes pasos:
- Agregue el perfil de firewall de aplicaciones para JSON.
- Establece el perfil de firewall de aplicaciones para la configuración de DoS
- Configure variables DoS de JSON vinculando el perfil de firewall de aplicaciones.
Agregar perfil de firewall de aplicaciones para la protección contra DoS
Primero debe crear un perfil que especifique cómo el firewall de la aplicación debe proteger el contenido web JSON del ataque DoS de JSON. En la línea de comandos, escriba:
add appfw profile <name> -type (HTML | XML | JSON)
Nota:
Cuando establece el tipo de perfil como JSON, no se aplicarán otras comprobaciones, como HTML o XML.
Ejemplo
add appfw profile profile1 –type JSON
Establecer el perfil de firewall de aplicaciones para la protección DoS
Debe configurar el perfil para que se establezcan una o más acciones DoS JSON y un objeto de error DoS JSON en el perfil del firewall de la aplicación. En la línea de comandos, escriba:
set appfw profile <name> -JSONDoSAction [block] | [log] | [stats] | [none]
Bloquear: bloquea las conexiones que infrinjan esta comprobación de seguridad. Registro: Registrar infracciones de esta comprobación de seguridad. Estadísticas: genera estadísticas para esta comprobación de seguridad. Ninguno: inhabilite todas las acciones de esta comprobación de seguridad.
Nota:
Para habilitar una o más acciones, escriba “set appfw profile -jsondosAction” seguido de las acciones que se habilitarán.
Ejemplo
set appfw profile profile1 -JSONDoSAction block log stat
Configurar variables DoS vinculando el perfil de firewall de aplicaciones
Para proporcionar protección DoS de JSON, debe vincular el perfil de firewall de aplicaciones con la configuración de DoS de JSON. En la línea de comandos, escriba:
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>]]
Ejemplo
bind appfw profile profile1 -JSONDoSURL “.*” -JSONMaxContainerDepthCheck ON
Nota:
Las comprobaciones DoS de JSON solo se aplicarán si el tipo de perfil se selecciona como JSON. Además, las firmas de campo SQL, scripting de sitios, formato de campo y formulario se aplican en los parámetros de consulta en los casos de perfil JSON.
Importar página de error JSON
Si una solicitud entrante tuvo un ataque DoS y cuando bloquea la solicitud, el dispositivo muestra un mensaje de error. Para ello, debe importar la página de error de JSON. En la línea de comandos, escriba:
import appfw jsonerrorpage <src> <name> [-comment <string>] [-overwrite]
Donde:
src. URL (protocolo, host, ruta y nombre) de la ubicación en la que se almacena el objeto de error JSON importado.
Nota:
La importación falla si el objeto que se va a importar está en un servidor HTTPS que requiere autenticación de certificado de cliente para el acceso. Se trata de un argumento obligatorio. Longitud máxima: 2047.
Nombre. Nombre que se va a asignar al objeto de error JSON en NetScaler ADC. Se trata de un argumento obligatorio. Longitud máxima: 31 Comentario. Cualquier comentario para conservar la información sobre el objeto de error JSON. Longitud máxima: 255 Sobrescritura. Sobrescriba cualquier objeto de error JSON existente con el mismo nombre.
Configuración de ejemplo
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-->
Cargas útiles, mensajes de registro y contadores de ejemplo:
Infracción de JSONMaxDocumentLength
JSONMaxDocumentLength: 30 Carga útil: {“a”:”A”,”b”:”B”,”c”:”C”,”d”:”D”,”e”:”E”}
Mensaje de registro:
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-->
Contadores:
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-->
Infracción de JSONMaxContainerDepth
JSONMaxContainerDepth: 3 Carga útil: {“a”: {”b”: {“c”: {“d”: { ”e” : “f” }}}}}
Mensaje de registro:
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-->
Contadores:
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-->
Infracción de JSONMaxObjectKeyCount
JSONmaxObjectKeyCount: 4
Carga útil: {“a”: ”A”, “b”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Mensaje de registro:
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-->
Contadores:
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-->
Infracción de JSONMaxObjectKeyLength
JSONMaxObjectKeyLength: 10 Carga útil: {“a”: ”A”, “b1234567890”: “B”, “c”:“C”, “d” :“D”, ”e” : “E” }
Mensaje de registro:
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-->
Contadores:
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-->
Infracción JSONMaxArrayLength
JSONMaxArrayLength: 5 Carga útil: {“a”: ”A”, “c”:[”d”,”e”,”f”,”g”,”h”,”i”],”e”:[“E”,”e”]}
Mensaje de registro:
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-->
Contadores:
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-->
Infracción de longitud de cadena máxima de JSON
Longitud máxima de la cadena JSON: 10
Carga útil: {“a”: ”A”, “c”:”CcCcCcCcCcCcCcCcCc”,”e”:[“E”,”e”]}
Mensaje de registro:
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-->
Contadores:
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-->
Configurar la protección DoS de JSON mediante Citrix GUI
Siga el procedimiento a continuación para establecer la configuración de protección DoS de JSON.
- En el panel de navegación, vaya a Seguridad > Perfiles.
- En la página Perfiles, haga clic en Agregar.
- En la página de perfil del Firewall de Aplicaciones Web de Citrix, haga clic en Comprobaciones de seguridad en Configuración avanzada.
- En la sección Comprobaciones de seguridad, vaya a Configuración de denegación de servicio de JSON.
- Haga clic en el icono ejecutable cerca de la casilla de verificación.
- Haga clic en Configuración de acción para acceder a la página Configuración de denegación de servicio JSON.
- Seleccione la acción DoS de JSON.
- Haga clic en Aceptar.
- En la página Perfil de Citrix Web App Firewall, haga clic en Reglas de relajación en Configuración avanzada.
- En la sección Reglas de relajación, seleccione Configuración de denegación de servicio JSON y haga clic en Modificar.
- En la comprobación de denegación de servicio JSON de Application Firewall, establezca los valores de validación de DoS
-
Haga clic en Aceptar.
- En la página Perfil de Citrix Web App Firewall, haga clic en Configuración de perfil en Configuración avanzada.
-
En la sección Configuración del perfil, vaya a la subsección Configuración de errores de JSON para establecer la página de error DoS de JSON.
-
En la página Objeto Importar página de error JSON, defina los siguientes parámetros:
- Importar desde. Importe la página de error como texto, archivo o URL.
- URL. URL para redirigir al usuario a la página de error. 1 archivo. Seleccione un archivo para importarlo como archivo de error DoS de JSON.
- Texto. Introduzca el contenido del archivo JSON.
- Haga clic en Continuar.
- Expediente. Introduzca el nombre del archivo.
- Contenido del archivo. Agregue el contenido del archivo de errores.
- Haga clic en Aceptar.
- Haga clic en Aceptar.
- Haga clic en Listo.