Comprobación de protección de denegación de servicio JSON

La comprobación de denegación de servicio (DoS) JSON examina una solicitud JSON entrante y valida si hay algún dato que coincida con las funciones de un ataque DoS. Si la solicitud tenía infracciones JSON, el dispositivo bloquea la solicitud, registra los datos, envía una alerta SNMP y también muestra una página de error JSON. El propósito de la comprobación JSON DoS 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 Citrix ADC, el analizador JSON analiza la carga útil de la solicitud y, si se observa una infracción, el dispositivo aplica 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 JSON, el dispositivo aplica una acción y responde con la página de error JSON.

Reglas JSON DoS

Cuando el dispositivo recibe una solicitud JSON, la protección JSON DOS impone el límite de tamaño en los siguientes parámetros DoS en la carga útil de la solicitud.

  1. profundidad máxima: anidamiento máximo (profundidad) del documento JSON. Esta comprobación protege contra documentos que tienen una profundidad excesiva de jerarquía.
  2. longitud máxima del documento: longitud máxima del documento JSON.
  3. longitud máxima de la matriz: longitud máxima de la matriz en cualquiera de los objetos JSON. Esta comprobación protege contra matrices de grandes longitudes.
  4. longitud máxima de cadena: longitud máxima de cadena en el JSON. Esta comprobación protege contra cadenas de gran longitud.
  5. número máximo de claves de objeto: número máximo de claves en el cualquiera de los objetos JSON. Esta comprobación protege contra objetos que tienen un gran número de claves.
  6. 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 presenta una lista de reglas JSON DoS validadas durante el análisis JSON.

  1. JSONMaxContainerDepth. Esta comprobación se puede habilitar configurando la comprobación JSONMaxContainerDepth y, por defecto, la opción es OFF.

  2. JSONMaxContainerDepth. Esta comprobación se puede activar/desactivar mediante la opción configurable JSONMaxContainerDepthCheck y el valor predeterminado podría cambiarse por 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

  3. JSONMaxDocumentLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxDocumentLength y la opción predeterminada es OFF.

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

  5. JSONMaxObjectKeyCount. La regla se valida si la comprobación de conteo máximo de claves de objeto JSON está activada o desactivada. Valores posibles: ON, OFF, Valor predeterminado: OFF

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

  7. JSONMaxObjectKeyLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxObjectKeyLength. La regla se valida si la comprobación de longitud máxima de clave de objeto JSON está activada o desactivada. Por defecto está desactivado.

  8. JSONMaxObjectKeyLength. La comprobación protege contra objetos que tienen una longitud de clave grande. Valor predeterminado: 128. Valor mínimo: 1, Valor máximo: 2147483647

  9. JSONMaxArrayLength. La regla valida si la comprobación de longitud máxima de matriz JSON está ON u OFF. Por defecto está desactivado.

  10. JSONMaxArrayLength. La comprobación protege contra matrices que tienen grandes longitudes. De forma predeterminada, el valor se establece en 10000. Valor mínimo: 1, Valor máximo: 2147483647

  11. JSONMaxStringLength. Esta comprobación se puede habilitar configurando la comprobación JSONMaxStringLength. La comprobación valida si la longitud máxima de cadena JSON está ON u OFF. Por defecto está desactivado.

  12. JSONMaxStringLength. La comprobación protege contra cadenas de gran longitud. De forma predeterminada, se establece en 1000000. Valor mínimo: 1, Valor máximo: 2147483647

Configurar la comprobación de protección JSON DoS

Para configurar la protección JSON DoS, debe completar los siguientes pasos:

  1. Agregue el perfil de firewall de la aplicación para JSON.
  2. Establecer el perfil de firewall de la aplicación para la configuración JSON DoS.
  3. Configure las variables JSON DoS vinculando el perfil del firewall de la aplicación.

Agregar perfil de firewall de aplicaciones para la protección JSON DoS

Primero debe crear un perfil que especifique cómo el firewall de la aplicación debe proteger su contenido web JSON del ataque JSON DoS. En el símbolo del sistema, escriba:

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

Nota:

Al establecer 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 JSON DoS

Debe configurar el perfil para una o más acciones JSON DoS y objeto de error JSON DoS que se definan en el perfil de firewall de la aplicación. En el símbolo del sistema, 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 - Generar estadísticas para esta comprobación de seguridad. Ninguno: inhabilite todas las acciones para esta comprobación de seguridad.

Nota:

Para habilitar una o más acciones, escriba “set appfw profile -jsondosAction” seguido de las acciones que se van a habilitar.

Ejemplo

set appfw profile profile1 -JSONDoSAction block log stat

Configurar variables DoS vinculando el perfil de firewall de la aplicación

Para proporcionar protección JSON DoS, debe vincular el perfil del firewall de la aplicación con la configuración de JSON DoS. En el símbolo del sistema, 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 JSON DoS serán aplicables solo si el tipo de perfil está seleccionado como JSON. Además, las firmas de campos SQL, XSS, Formato de campo y Formulario se aplican en los parámetros de consulta en casos de perfil JSON.

Importar página de error JSON

Si una solicitud entrante tenía un ataque DoS y cuando se bloquea la solicitud, el dispositivo muestra un mensaje de error. Para hacer esto, debe importar la página de error JSON. En el símbolo del sistema, escriba:

import appfw jsonerrorpage <src> <name> [-comment <string>] [-overwrite]

Donde:

src. URL (protocolo, host, ruta y nombre) para la ubicación en la que almacenar el objeto de error JSON importado.

Nota:

Se produce un error en la importación si el objeto que se va a importar está en un servidor HTTPS que requiere autenticación de certificado de cliente para el acceso. Este es un argumento obligatorio. Longitud máxima: 2047.

Nombre. Nombre que se va a asignar al objeto de error JSON en Citrix ADC. Este es 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. Sobrescribir cualquier objeto de error JSON existente del 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

Ejemplo de cargas útiles, mensajes de registro y contadores:

Infracción 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

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)

Violación 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

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)

Violació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

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)

Violación 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

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)

Violació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

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

Violación JSONMaxStringLength

JSONMaxStringLength: 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

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

Configurar la protección JSON DoS mediante la GUI de Citrix

Siga el procedimiento siguiente para establecer la configuración de protección JSON DoS.

  1. En el panel de navegación, vaya a Seguridad > Perfiles.
  2. En la página Perfiles, haga clic en Agregar.
  3. En la página Perfil de Citrix Web App Firewall, haga clic en Comprobaciones de seguridad en Configuración avanzada.
  4. En la sección Comprobaciones de seguridad, vaya a Configuración de denegación de servicio JSON.
  5. Haga clic en el icono ejecutable situado cerca de la casilla de verificación.

    Comprobaciones de seguridad JSON DoS

  6. Haga clic en Configuración de acción para acceder a la página Configuración de denegación de servicio JSON.
  7. Seleccione la acción JSON DoS.
  8. Haga clic en Aceptar.

    Configuración de acción JSON DoS

  9. En la página Perfil de Citrix Web App Firewall, haga clic en Reglas de relajación en Configuración avanzada.
  10. En la sección Reglas de relajación, seleccione Configuración de denegación de servicio JSON y haga clic en Modificar.

    Reglas de relajación JSON DoS

  11. En Application Firewall JSON Denial of Service Check establezca los valores de validación de JSON DoS.
  12. Haga clic en Aceptar.

    Reglas de relajación JSON DoS

  13. En la página Perfil de Citrix Web App Firewall, haga clic en Configuración de perfil en Configuración avanzada.
  14. En la sección Configuración del perfil, vaya a la subsección Configuración de error JSON para establecer la página de error JSON DoS.

    Reglas de relajación JSON DoS

  15. En la página de error JSON Página Importar objeto, establezca los siguientes parámetros:

    1. Importar desde. Importe la página de error como texto, archivo o URL.
    2. dirección URL URL para redirigir al usuario a la página de error. 1 archivo. Seleccione un archivo para importar como archivo de error JSON DoS.
    3. Texto. Introduzca el contenido del archivo JSON.
    4. Haga clic en Continuar.
    5. Archivo. Introduzca el nombre del archivo.
    6. Contenido del archivo. Agregue el contenido del archivo de error.
    7. Haga clic en Aceptar.

    Página de error de importación de JSON DoS

  16. Haga clic en Aceptar.
  17. Haga clic en Done.

Comprobación de protección de denegación de servicio JSON