Listas de exclusión del firewall de aplicaciones web

El Firewall de aplicaciones web (WAF) de Azure Application Gateway proporciona protección a las aplicaciones web. En este artículo se describe la configuración de las listas de exclusión del firewall de aplicaciones web. Esta configuración se encuentra en la directiva WAF asociada a su instancia de Application Gateway. Para más información sobre las directivas WAF, consulte Azure Web Application Firewall en Azure Application Gateway y Creación de directivas de Web Application Firewall para Application Gateway.

A veces, WAF puede bloquear una solicitud que quiere permitir en su aplicación. Las listas de exclusión del WAF le permiten omitir determinados atributos de solicitud de una evaluación del WAF. El resto de la solicitud se evaluará normalmente.

Por ejemplo, Active Directory inserta tokens que se usan para la autenticación. Cuando se utilizan en una encabezado de solicitud, estos tokens pueden contener caracteres especiales que podrían desencadenar la detección de un falso positivo con las reglas de WAF. Al agregar el encabezado a una lista de exclusión, puede configurar las reglas de WAF para que omitan el encabezado, pero las reglas seguirán evaluando el resto de la solicitud.

Puede configurar que se apliquen exclusiones cuando se evalúen reglas de WAF específicas o que se apliquen globalmente a la evaluación de todas las reglas de WAF. Las reglas de exclusión se aplican a toda la aplicación web.

Identificación de los atributos de solicitud que se van a excluir

Al configurar una exclusión de WAF, debe especificar los atributos de la solicitud que se deben excluir de la evaluación de WAF. Puede configurar una exclusión de WAF para los siguientes atributos de solicitud:

  • Encabezados de solicitud
  • Cookies de solicitud
  • Se puede agregar el nombre de atributo de la solicitud (args) como un elemento de exclusión, por ejemplo:
    • Nombre del campo de formulario
    • Entidad JSON
    • Argumentos de cadena de consulta de URL

Puede especificar una coincidencia exacta con un atributo de cadena de consulta, una cookie, el cuerpo o el encabezado de una solicitud. También puede especificar coincidencias parciales. Use los operadores siguientes para configurar la exclusión:

  • Equals (es igual a): este operador se usa para una coincidencia exacta. Por ejemplo, para seleccionar el encabezado denominado bearerToken, utilice el operador de igualdad con el selector definido como bearerToken.
  • Starts with (empieza por): este operador coincide con todos los campos que comienzan por el valor del selector especificado.
  • Ends with (termina en): este operador coincide con todos los campos de solicitud que terminan con el valor del selector especificado.
  • Contains (contiene): este operador coincide con todos los campos de solicitud que contienen el valor del selector especificado.
  • Equals any (es igual a cualquiera): este operador coincide con todos los campos de solicitud. * será el valor del selector. Por ejemplo, usaría este operador si no conociera los valores exactos de una variable de coincidencia determinada, pero quiere asegurarse de que el tráfico de solicitud todavía se excluye de la evaluación de reglas.

Al procesar exclusiones, el motor de WAF realiza una coincidencia entre mayúsculas y minúsculas basada en la siguiente tabla. Además, las expresiones regulares no están permitidas como selectores y los cuerpos de solicitud XML no son compatibles.

Elemento del cuerpo de la solicitud CRS 3.1 y versiones anteriores CRS 3.2 y versiones posteriores
Encabezado* No distingue mayúsculas de minúsculas No distingue mayúsculas de minúsculas
Cookie* No distingue mayúsculas de minúsculas Distinguir mayúsculas de minúsculas
Cadena de consulta* No distingue mayúsculas de minúsculas Distinguir mayúsculas de minúsculas
Cuerpo codificado de URL No distingue mayúsculas de minúsculas Distinguir mayúsculas de minúsculas
Cuerpo JSON No distingue mayúsculas de minúsculas Distinguir mayúsculas de minúsculas
Cuerpo XML No compatible No compatible
Cuerpo de varias partes No distingue mayúsculas de minúsculas Distinguir mayúsculas de minúsculas

*En función de la aplicación, los nombres y los valores de los encabezados, las cookies y los argumentos de consulta pueden distinguir mayúsculas de minúsculas o no distinguirlas.

Nota

Para obtener más información y ayuda para solucionar problemas, vea Solución de problemas de WAF.

Solicitud de atributos por claves y valores

Al configurar una exclusión, debe determinar si quiere excluir la clave o el valor de la evaluación de WAF.

Por ejemplo, supongamos que las solicitudes incluyen este encabezado:

My-Header: 1=1

El valor del encabezado (1=1) podría detectarse como un ataque por parte de WAF. Sin embargo, si sabe que se trata de un valor legítimo para su escenario, puede configurar una exclusión para el valor del encabezado. Para ello, se usa la variable de coincidencia RequestHeaderValues, el operador contains y el selector (My-Header). Esta configuración detiene la evaluación de todos los valores del encabezado My-Header.

Nota

Los atributos de solicitud por clave y valores solo están disponibles en CRS 3.2 o versiones posteriores y Bot Manager 1.0 o versiones posteriores.

Los atributos de solicitud por nombres funcionan de la misma manera que los atributos de solicitud por valores, y se incluyen por compatibilidad con CRS 3.1 y versiones anteriores. Se recomienda usar atributos de solicitud por valores en lugar de atributos por nombres. Por ejemplo, use RequestHeaderValues en lugar de RequestHeaderNames.

Por el contrario, si el WAF detecta el nombre del encabezado (My-Header) como un ataque, podría configurar una exclusión para la clave del encabezado mediante el atributo de solicitud RequestHeaderKeys. El atributo RequestHeaderKeys solo está disponible en CRS 3.2 o versiones posteriores y Bot Manager 1.0 o versiones posteriores.

Ejemplos de atributos de solicitud

En la tabla siguiente se muestran algunos ejemplos de cómo podría estructurar la exclusión de una variable de coincidencia determinada.

Atributo que se va a excluir matchVariable selectorMatchOperator Selector de ejemplo Solicitud de ejemplo ¿Qué se excluye?
Cadena de consulta RequestArgKeys Equals /etc/passwd URI: http://localhost:8080/?/etc/passwd=test /etc/passwd
Cadena de consulta RequestArgKeys EqualsAny N/D URI: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd y .htaccess
Cadena de consulta RequestArgNames Equals text URI: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadena de consulta RequestArgNames EqualsAny N/D URI: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd y .cshrc
Cadena de consulta RequestArgValues Equals text URI: http://localhost:8080/?text=/etc/passwd /etc/passwd
Cadena de consulta RequestArgValues EqualsAny N/D URI: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd y .cshrc
Cuerpo de la solicitud RequestArgKeys Contains sleep Cuerpo de la solicitud: {"sleep(5)": "test"} sleep(5)
Cuerpo de la solicitud RequestArgKeys EqualsAny N/D Cuerpo de la solicitud: {".zshrc": "value", "sleep(5)":"value2"} .zshrc y sleep(5)
Cuerpo de la solicitud RequestArgNames Equals test Cuerpo de la solicitud: {"test": ".zshrc"} .zshrc
Cuerpo de la solicitud RequestArgNames EqualsAny N/D Cuerpo de la solicitud: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc y sleep(5)
Cuerpo de la solicitud RequestArgValues Equals test Cuerpo de la solicitud: {"test": ".zshrc"} .zshrc
Cuerpo de la solicitud RequestArgValues EqualsAny N/D Cuerpo de la solicitud: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc y sleep(5)
Encabezado RequestHeaderKeys Equals X-Scanner Encabezado: {"X-Scanner": "test"} X-scanner
Encabezado RequestHeaderKeys EqualsAny N/D Encabezado: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner y x-ratproxy-loop
Encabezado RequestHeaderNames Equals head1 Encabezado: {"head1": "X-Scanner"} X-scanner
Encabezado RequestHeaderNames EqualsAny N/D Encabezado: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 y (hydra)
Encabezado RequestHeaderValues Equals head1 Encabezado: {"head1": "X-Scanner"} X-scanner
Encabezado RequestHeaderValues EqualsAny N/D Encabezado: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 y (hydra)
Cookie RequestCookieKeys Contains /etc/passwd Encabezado: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Cookie RequestCookieKeys EqualsAny N/D Encabezado: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest y .htaccess
Cookie RequestCookieNames Equals arg1 Encabezado: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieNames EqualsAny N/D Encabezado: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd y .cshrc
Cookie RequestCookieValues Equals arg1 Encabezado: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieValues EqualsAny N/D Encabezado: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd y .cshrc

Nota:

Si crea una exclusión mediante el selectorMatchOperator EqualsAny, todo lo que coloque en el campo selector se convertirá en "*" mediante el back-end cuando se cree la exclusión.

Ámbitos de exclusión

Se puede configurar la aplicación de exclusiones a un conjunto específico de reglas de WAF, a conjuntos de reglas o a todas las reglas de forma global.

Sugerencia

Se recomienda que las exclusiones sean lo más específicas posibles, para evitar dejar espacio por accidente para que los atacantes exploten el sistema. Cuando necesite agregar una regla de exclusión, use exclusiones por regla siempre que sea posible.

Exclusiones por regla

Puede configurar la exclusión de una regla específica, un grupo de reglas o un conjunto de reglas. Debe especificar la regla o las reglas a las que se aplica la exclusión. También debe especificar el atributo de solicitud que se debe excluir de la evaluación de WAF. Para excluir un grupo completo de reglas, proporcione solo el parámetro ruleGroupName; el parámetro rules solo es útil cuando se quiere limitar la exclusión a reglas específicas de un grupo.

Las exclusiones por regla están disponibles cuando se usa el conjunto de reglas de OWASP (CRS), versión 3.2 o posterior, o bien el conjunto de reglas de Bot Manager versión 1.0 o posterior.

Ejemplo

Supongamos que quiere que WAF omita el valor del encabezado de solicitud User-Agent. El encabezado de solicitud User-Agent contiene una cadena de características que permite a los nodos del mismo nivel del protocolo de red identificar el tipo de aplicación, el sistema operativo, el fabricante de software o la versión de software del agente de usuario de software que realiza la solicitud. Para obtener más información, consulte User-Agent.

Puede haber varias razones para deshabilitar la evaluación de este encabezado. Podría haber una cadena que WAF detecta y considera malintencionada. Por ejemplo, el encabezado User-Agent podría incluir el ataque por inyección de código SQL clásico x=x en una cadena. En algunos casos podría ser tráfico legítimo, por lo que tal vez deba excluir este encabezado de la evaluación del WAF.

Puede usar los métodos siguientes para excluir el encabezado User-Agent de la evaluación por todas las reglas de inyección de SQL:

Para configurar una exclusión por regla mediante el Azure Portal, siga estos pasos:

  1. Vaya a la directiva WAF y seleccione Reglas administradas.

  2. Seleccione Agregar exclusiones.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. En Se aplica a, seleccione el conjunto de reglas CRS al que se aplicará la exclusión, como OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Seleccione Agregar reglas y elija las reglas a las que quiere aplicar exclusiones.

  5. Configure la variable de coincidencia, el operador y el selector. Después, seleccione Guardar.

Puede configurar varias exclusiones.

También puede excluir el encabezado User-Agent de la evaluación solo mediante la regla 942270:

Siga los pasos descritos en el ejemplo anterior y seleccione la regla 942270 en el paso 4.

Exclusiones globales

Puede configurar una exclusión para que se aplique a todas las reglas de WAF.

Ejemplo

Suponga que quiere excluir el valor del parámetro user que se pasa en la solicitud a través de la dirección URL. Por ejemplo, digamos que es habitual en su entorno que el argumento de cadena de consulta user contenga una cadena que WAF considera contenido malintencionado y, por tanto, la bloquea. Puede excluir todos los argumentos de cadena de consulta en los que el nombre comience por la palabra user, para que WAF no evalúe el valor del campo.

En el ejemplo siguiente se muestra cómo se puede excluir el argumento de cadena de consulta user de la evaluación:

Para configurar una exclusión global mediante Azure Portal, siga estos pasos:

  1. Vaya a la directiva WAF y seleccione Reglas administradas.

  2. Seleccione Agregar exclusiones.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. En Se aplica a, seleccione Global.

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Configure la variable de coincidencia, el operador y el selector. Después, seleccione Guardar.

Puede configurar varias exclusiones.

Por tanto, si WAF examina la dirección URL http://www.contoso.com/?user%3c%3e=joe, no evaluará la cadena joe, pero sí el nombre de parámetro user%3c%3e.

Pasos siguientes