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:
Vaya a la directiva WAF y seleccione Reglas administradas.
Seleccione Agregar exclusiones.
En Se aplica a, seleccione el conjunto de reglas CRS al que se aplicará la exclusión, como OWASP_3.2.
Seleccione Agregar reglas y elija las reglas a las que quiere aplicar exclusiones.
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:
Vaya a la directiva WAF y seleccione Reglas administradas.
Seleccione Agregar exclusiones.
En Se aplica a, seleccione Global.
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
- Después de configurar el WAF, puede aprender a ver los registros del WAF. Para más información, consulte Diagnósticos de Application Gateway.
- Más información sobre la seguridad de red de Azure