Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Resumen
Este artículo le ayuda a solucionar problemas de Web Application Firewall (WAF) para Azure Application Gateway cuando se bloquean las solicitudes legítimas, por lo que puede permitir el tráfico válido al tiempo que mantiene la protección.
Empiece por revisar la información general de WAF y la documentación de configuración de WAF y asegúrese de que la supervisión de WAF esté habilitada. En estos artículos se explica cómo funciona waf, cómo funcionan los conjuntos de reglas y cómo acceder a los registros de WAF.
Los conjuntos de reglas de OWASP están diseñados para que sean estrictos desde el principio y para ser ajustados según las necesidades específicas de la aplicación u organización que use WAF. Es completamente normal y en muchos casos se espera crear exclusiones, reglas personalizadas e incluso deshabilitar reglas que pueden estar causando problemas o falsos positivos. Las directivas por sitio y por URI permiten que estos cambios solo afecten a sitios o URI específicos. Por lo tanto, los cambios no deben tener que afectar a otros sitios que podrían no encontrarse con los mismos problemas.
Comprender los registros de WAF
El propósito de los registros de WAF es mostrar cada solicitud que WAF coincide o bloquea. Es un registro de todas las solicitudes evaluadas que se emparejan o se bloquean. Si observa que el WAF bloquea una solicitud que no debería (un falso positivo), puede tomar algunas medidas. En primer lugar, restrinja y busque la solicitud específica. Examine los registros para buscar el identificador URI, la marca de tiempo o el identificador de transacción específicos de la solicitud. Cuando encuentre las entradas de registro asociadas, puede empezar a actuar sobre los falsos positivos.
Por ejemplo, supongamos que tiene un tráfico legítimo que contiene la cadena 1=1 que desea que pase a través del WAF. Si prueba la solicitud, el WAF bloquea el tráfico que contiene su cadena 1=1 en cualquier parámetro o campo. Se trata de una cadena asociada a menudo con un ataque por inyección de código SQL. Puede examinar los registros y ver la marca de tiempo de la solicitud y las reglas bloqueadas o coincidentes.
En el ejemplo siguiente, puede ver que se desencadenan cuatro reglas durante la misma solicitud (mediante el campo TransactionId). La primera dice que coincide porque el usuario usó una dirección URL numérica o IP para la solicitud, lo que aumenta la puntuación de anomalías en tres, ya que es una advertencia. La siguiente regla que coincide es 942130, que es la que está buscando. Puede ver el details.data en el campo 1=1. Esto vuelve a aumentar la puntuación de anomalía en tres, ya que también es una advertencia. Por lo general, cada regla que tenga la acción Coincidencia aumenta la puntuación de anomalía y, en este momento, la puntuación de anomalía llegaría a seis. Para obtener más información, consulte Modo de puntuación de anomalías.
Las dos entradas finales del registro muestran que la solicitud se bloqueó porque la puntuación de anomalía era lo suficientemente alta. Estas entradas tienen una acción diferente a las otras dos. Muestran que realmente bloquearon la solicitud. Estas reglas son obligatorias y no se pueden deshabilitar. No deben considerarse como reglas, sino más bien como parte del núcleo de la infraestructura del WAF.
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Corrección de falsos positivos
Con esta información, y el conocimiento de que la regla 942130 es la que coincide con la 1=1 cadena, puede hacer algunas cosas para impedir que esto bloquee el tráfico:
Use una lista de exclusión. Para obtener más información sobre las listas de exclusión, consulte Listas de exclusión de WAF.
Desactiva la regla.
Usar una lista de exclusión
Para tomar una decisión informada sobre el control de un falso positivo, es importante familiarizarse con las tecnologías que usa la aplicación. Por ejemplo, supongamos que no hay un servidor SQL en su stack tecnológico y está recibiendo falsos positivos relacionados con esas reglas. Deshabilitar esas reglas no necesariamente debilita la seguridad.
Una ventaja de usar una lista de exclusión es que solo se deshabilita una parte específica de una solicitud. Sin embargo, esto significa que una exclusión específica es aplicable a todo el tráfico que pasa a través de WAF porque es una configuración global. Por ejemplo, esto podría provocar un problema si 1=1 es una solicitud válida en el cuerpo de una aplicación determinada, pero no para otras. Otra ventaja es que puede elegir entre el cuerpo, los encabezados y las cookies que se excluirán si se cumple una determinada condición, en lugar de excluir toda la solicitud.
En ocasiones, hay casos en los que los parámetros específicos se transmiten al WAF de una manera que quizá no sea intuitiva. Por ejemplo, hay un token que se pasa al autenticarse mediante Microsoft Entra ID.
__RequestVerificationToken normalmente se pasa como una cookie de solicitud. Sin embargo, en algunos casos en los que las cookies están deshabilitadas, este token también se pasa como un atributo de solicitud o arg. Si esto sucede, debe asegurarse de que __RequestVerificationToken se agregue también a la lista de exclusión como un nombre de atributo Request .
En este ejemplo, desea excluir el nombre del atributo Request que es igual a text1. Esto es evidente porque puede ver el nombre del atributo en los registros de firewall: datos: Datos coincidentes: 1=1 encontrados en ARGS:text1: 1=1. El atributo es text1. También puede encontrar este nombre de atributo de algunas otras maneras, consulte Búsqueda de nombres de atributo de solicitud.
Puede crear exclusiones para WAF en Application Gateway en distintos niveles de ámbito. Para obtener más información, consulte Web Application Firewall listas de exclusión.
Deshabilitar reglas
Otra manera de evitar un falso positivo es desactivar la regla que haya coincidido con la entrada que el sistema WAF pensó que era malintencionada. Puesto que ha analizado los registros de WAF y ha reducido la regla a 942130, puede deshabilitarla en el portal de Azure. Consulte Reglas de firewall de aplicaciones web personalizadas a través del portal de Azure.
Una ventaja de deshabilitar una regla es que si conoce todo el tráfico que contiene una determinada condición que normalmente está bloqueada es tráfico válido, puede deshabilitar esa regla para todo el WAF. Sin embargo, si solo hay tráfico válido en un caso de uso específico, usted abre una vulnerabilidad al deshabilitar esa regla para todo el WAF, ya que afecta a toda la configuración global.
Si quiere usar Azure PowerShell, consulte
Registro de archivos HAR
Puede usar el explorador o una herramienta externa como Fiddler para registrar archivos de archivo HTTP (HAR). Los archivos HAR contienen información sobre las solicitudes y respuestas que realiza el explorador al cargar una página web. Esta información puede ser útil para solucionar problemas de WAF.
Sugerencia
Es recomendable que el archivo HAR esté listo al ponerse en contacto con el soporte técnico. El equipo de soporte técnico puede usar el archivo HAR para ayudar a diagnosticar el problema.
Para registrar y guardar un archivo HAR en Microsoft Edge, siga estos pasos.
Presione F12 o Ctrl+Mayús+I para iniciar Edge Herramientas de desarrollo. También puede iniciar las herramientas desde el menú de la barra de herramientas de Más herramientas > Herramientas de desarrollo.
En la pestaña Consola , seleccione Borrar consola o presione Ctrl+L.
Seleccione la pestaña Red .
Seleccione Borrar registro de red o presione Ctrl+L y, a continuación, seleccione Grabar registro de red si no se está grabando.
Cargue la página web protegida por su WAF para la que desea solucionar problemas.
Para detener la grabación, seleccione Detener el registro de red.
Seleccione Exportar HAR (saneado)... y guarde el archivo HAR.
Buscar nombres de atributo de solicitud
Puede usar Fiddler para inspeccionar solicitudes individuales y determinar qué campos específicos de una página web se llaman. El uso de esta información ayuda a excluir determinados campos de la inspección mediante listas de exclusión.
En este ejemplo, puede ver que el campo donde se especificó la cadena 1=1 se denomina text1.
Se trata de un campo que se puede excluir. Para más información sobre las listas de exclusión, consulte Listas de exclusión de firewall de aplicaciones web. Puede excluir la evaluación en este caso configurando la siguiente exclusión:
También puede examinar los registros de firewall para obtener la información para ver lo que necesita agregar a la lista de exclusión. Para habilitar el registro, consulte Estado del back-end, registros de recursos y métricas de Application Gateway.
Examine el registro del firewall y vea el archivo PT1H.json durante la hora en que se produjo la solicitud que desea inspeccionar.
En este ejemplo, puede ver que tiene cuatro reglas con el mismo TransactionID y que todas se produjeron exactamente al mismo tiempo:
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "203.0.113.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Con el conocimiento de cómo funcionan los conjuntos de reglas de CRS y de que el conjunto de reglas de CRS 3.0 funciona con un sistema de puntuación de anomalías (consulte Web Application Firewall para Azure Application Gateway) sabe que las dos reglas inferiores con la action: Blocked propiedad se bloquean en función de la puntuación total de anomalías. Las reglas en las que centrarse son las dos principales.
La primera entrada se registra porque el usuario usó una dirección IP numérica para navegar a Application Gateway, que se puede omitir en este caso.
La segunda (regla 942130) es la interesante. Puede ver en los detalles que coinciden con un patrón (1=1)y el campo se denomina text1. Siga los mismos pasos anteriores para excluir el nombre del atributo de solicitud que es igual a 1=1.
Buscar nombres de encabezados de solicitud
Puede usar Fiddler para buscar nombres de encabezado de solicitud. En la captura de pantalla siguiente, puede ver los encabezados de esta solicitud GET, que incluyen Content-Type, User-Agent, etc.
Otra manera de ver los encabezados de solicitud y respuesta es usar las herramientas de desarrollo de Microsoft Edge o Google Chrome. Para obtener más información, vaya a Registrar archivos HAR.
Encuentra los nombres de las cookies de solicitud
Si la solicitud contiene cookies, se puede seleccionar la pestaña Cookies para verlos en Fiddler.
Restricción de parámetros globales para eliminar los falsos positivos
Deshabilitar la inspección del cuerpo de la solicitud
Al establecer Inspeccionar el cuerpo de la solicitud a desactivado, el WAF no evalúa los cuerpos de las solicitudes. Esto puede ser útil si sabe que los cuerpos de solicitud no son maliciosos para su aplicación.
Al deshabilitar esta opción, solo el cuerpo de la solicitud omite la inspección. Los encabezados y cookies se siguen inspeccionando, a menos que se excluyan los individuales mediante la funcionalidad de lista de exclusión.
Deshabilitar el límite máximo de tamaño del cuerpo de la solicitud
Al deshabilitar el límite de tamaño máximo del cuerpo de la solicitud, el WAF puede procesar grandes cuerpos de solicitud sin rechazarlos por exceder el límite de tamaño. Esta configuración es útil si tiene solicitudes grandes con regularidad.
Al deshabilitar esta opción, el cuerpo de la solicitud solo se inspeccionará hasta el límite máximo de inspección del cuerpo de la solicitud. Si hay contenido malintencionado en la solicitud más allá del límite máximo de inspección del cuerpo de la solicitud, el WAF no lo detectará.
Deshabilitación de los límites máximos de tamaño de archivo
Al deshabilitar los límites de tamaño de archivo para el WAF, se pueden cargar archivos grandes sin que WAF rechace estas cargas de archivos. Al permitir que se carguen archivos grandes, aumenta el riesgo de que el back-end se agote. Si sabe el tamaño máximo que puede tener una carga de archivos, puede establecer un límite de tamaño para cargas de archivos ligeramente por encima del tamaño máximo esperado. Limitar el tamaño del archivo a un caso de uso normal para la aplicación es otra manera de evitar ataques. Sin embargo, si las cargas de archivos superan regularmente el límite máximo de tamaño de carga de archivos ejecutable, es posible que tenga que deshabilitar los límites de tamaño de carga de archivos por completo para evitar falsos positivos.
Nota:
Si sabes que la aplicación nunca necesitará ninguna carga de archivos por encima de un tamaño determinado, puedes restringirla estableciendo un límite.
Advertencia
Al asignar un nuevo conjunto de reglas administrado a una directiva waf, todas las personalizaciones anteriores de los conjuntos de reglas administrados existentes, como el estado de regla, las acciones de regla y las exclusiones de nivel de regla, se restablecerán a los nuevos valores predeterminados del conjunto de reglas administrados. Sin embargo, las reglas personalizadas, la configuración de directiva y las exclusiones globales seguirán sin verse afectadas durante la nueva asignación del conjunto de reglas.
Métricas de firewall (solo WAF v1)
En el caso de los firewalls de aplicaciones web v1, las métricas siguientes ahora están disponibles en el portal:
- Cortafuegos de Aplicaciones Web: Recuento de Solicitudes Bloqueadas. El número de solicitudes que fueron bloqueadas.
- Web Application Firewall recuento de reglas bloqueadas: todas las reglas que coincidieron con and la solicitud se bloqueó.
- Web Application Firewall Distribución total de reglas Todas las reglas que coincidieron durante la evaluación
Para habilitar las métricas, seleccione la pestaña Métricas en el portal y seleccione una de las tres métricas.