Firewall de aplicaciones web con las listas de exclusión de Azure Front Door

A veces, Azure Web Application Firewall en Azure Front Door podría bloquear una solicitud legítima. Como parte del proceso de ajuste del Firewall de aplicaciones web (WAF), puede configurarlo para que permita la solicitud de la aplicación. Las listas de exclusión del WAF le permiten omitir atributos de solicitud concretos de una evaluación del WAF. El resto de la solicitud se evaluará normalmente.

Por ejemplo, Microsoft Entra ID proporciona tokens que se usan para la autenticación. Cuando estos tokens se utilizan en un encabezado de solicitud, pueden contener caracteres especiales que podrían desencadenar la detección de un falso positivo por parte de una o varias reglas de WAF. Puede agregar el encabezado a una lista de exclusión, lo cual indicará al WAF que omita el encabezado. El WAF seguirá inspeccionando el resto de la solicitud en busca de contenido sospechoso.

Ámbitos de exclusión

Puede crear exclusiones en los siguientes ámbitos:

  • Conjunto de reglas: estas exclusiones se aplican a todas las reglas de un conjunto de reglas.
  • Grupo de reglas: estas exclusiones se aplican a todas las reglas de una categoría en particular dentro de un conjunto de reglas. Por ejemplo, puede configurar una exclusión que se aplique a todas las reglas de inyección de SQL.
  • Regla: estas exclusiones se aplican a una única regla.

Selectores de exclusión

Los selectores de exclusión identifican las partes de las solicitudes a las que se aplica la exclusión. El WAF omitirá las detecciones que encuentre en las partes especificadas de la solicitud. Puede especificar varios selectores de exclusión en una única exclusión.

Cada selector de exclusión especifica una variable de coincidencia, un operador y un selector.

Variables de coincidencia

Puede agregar los siguientes atributos de solicitud a una exclusión:

  • Nombre del encabezado de la solicitud
  • Nombre de la cookie de la solicitud
  • Nombre de los argumentos de la cadena de consulta
  • Nombre de los argumentos POST del cuerpo de la solicitud
  • Nombre de los argumentos JSON del cuerpo de la solicitud (compatible con DRS 2.0 o posterior)

Los valores de los campos que se usan no se evalúan con las reglas de WAF, pero sí se evalúan sus nombres. Las listas de exclusión deshabilitan la inspección del valor del campo. Sin embargo, los nombres de campo se siguen evaluando. Para más información, consulte Exclusión de otros atributos de solicitud.

Operadores

Puede especificar una coincidencia exacta con un atributo de cadena de consulta, una cookie, el cuerpo o el encabezado de una solicitud. Si lo desea, también puede especificar coincidencias parciales. Los operadores siguientes son los criterios de coincidencia admitidos:

  • Igual a: coincide con todos los campos de solicitud que coinciden exactamente con el valor del selector especificado. Por ejemplo, para seleccionar un encabezado denominado bearerToken, use el operador Equals con el selector establecido como bearerToken.
  • Empieza por: coincide con todos los campos de solicitud que comienzan por el valor del selector especificado.
  • Termina por: coincide con todos los campos de solicitud que terminan por el valor del selector especificado.
  • Contiene: coincide con todos los campos de solicitud que contienen el valor del selector especificado.
  • Es igual a cualquiera: coincide con todos los campos de solicitud. Cuando se usa el operador Equals any, el valor del selector se establece automáticamente en *. Por ejemplo, puede usar el operador Equals any para configurar una exclusión que se aplique a todos los encabezados de solicitud.

Distinción entre mayúsculas y minúsculas

Los nombres de encabezado y cookies no distinguen mayúsculas de minúsculas. Las cadenas de consulta, los argumentos POST y los argumentos JSON distinguen mayúsculas de minúsculas.

Inspección del contenido del cuerpo

Algunas de las reglas administradas evalúan la carga sin procesar del cuerpo de la solicitud, antes de analizarla en argumentos POST o JSON. Por eso, en algunas situaciones podría ver entradas de registro con un valor matchVariableName de InitialBodyContents o DecodedInitialBodyContents.

Por ejemplo, supongamos que crea una exclusión con una variable de coincidencia de Request body POST args y un selector para que identifique y omita los argumentos POST denominados FOO. Ya no ve entradas de registro con un valor matchVariableName de PostParamValue:FOO. Sin embargo, si un argumento POST denominado FOO contiene texto que desencadena una regla, el registro podría mostrar la detección en el contenido inicial del cuerpo. Actualmente no se pueden crear exclusiones para el contenido inicial del cuerpo.

Definición de reglas de exclusión basadas en registros de Azure Web Application Firewall

Puede usar los registros para ver los detalles de una solicitud bloqueada, incluidas las partes de la solicitud que desencadenaron la regla. Para obtener más información, consulte el artículo Supervisión y registro de Azure Web Application Firewall.

A veces, una regla de WAF específica genera detecciones de falsos positivos a partir de los valores incluidos en un encabezado de solicitud, cookie, argumento POST, argumento de cadena de consulta o campo JSON en un cuerpo de la solicitud. Si se producen estas detecciones de falsos positivos, puede configurar la regla para que excluya la parte pertinente de la solicitud durante la evaluación.

En la siguiente tabla se muestran los valores de ejemplo de los registros de WAF y los selectores de exclusión correspondientes que podría crear.

matchVariableName de registros de WAF Exclusión de reglas en el portal
CookieValue:SOME_NAME El nombre de la cookie de solicitud es igual a SOME_NAME
HeaderValue:SOME_NAME El nombre del encabezado de solicitud es igual a SOME_NAME
PostParamValue:SOME_NAME El nombre de los argumentos POST del cuerpo de la solicitud es igual a SOME_NAME
QueryParamValue:SOME_NAME El nombre de los argumentos de la cadena de consulta es igual a SOME_NAME
JsonValue:SOME_NAME El nombre de los argumentos JSON del cuerpo de la solicitud es igual a SOME_NAME

Exclusiones para cuerpos de solicitud JSON

Desde la versión 2.0 de DRS, el WAF inspecciona los cuerpos de solicitud JSON. Por ejemplo, considere este cuerpo de solicitud JSON:

{
  "posts": [
    {
      "id": 1,
      "comment": ""
    },
    {
      "id": 2,
      "comment": "\"1=1\""
    }
  ]
}

La solicitud incluye una secuencia de caracteres de comentario de SQL, que el WAF detecta como un posible ataque por inyección de código SQL.

Si determina que la solicitud es legítima, puede crear una exclusión con una variable de coincidencia Request body JSON args name, un operador Equals y un selector posts.comment.

Exclusión de otros atributos de solicitud

Si la entrada del registro del WAF muestra un valor matchVariableName que no está en la tabla anterior, no puede crear una exclusión. Por ejemplo, actualmente no se pueden crear exclusiones para nombres de cookies, nombres de encabezado, nombres de parámetros POST o nombres de parámetros de consulta.

En su lugar, considere la posibilidad de realizar una de las siguientes acciones:

  • Deshabilite las reglas que muestran falsos positivos.
  • Cree una regla personalizada que permita explícitamente esas solicitudes. Las solicitudes omiten cualquier inspección del WAF.

En concreto, cuando el valor matchVariableName es CookieName, HeaderName, PostParamName, o QueryParamName, significa que el nombre del campo, no su valor, ha desencadenado la regla. La exclusión de reglas no admite estos valores matchVariableName en este momento.

Pasos siguientes