Ajustar las reglas de WAF preconfiguradas de Cloud Armor

Cloud Armor proporciona reglas de WAF preconfiguradas, cada una de las cuales consta de varias firmas procedentes del conjunto de reglas principales (CRS) de OWASP. Cada firma corresponde a una regla de detección de ataques del conjunto de reglas. Las solicitudes entrantes se evalúan en función de las reglas de WAF preconfiguradas. Una solicitud coincide con una regla de WAF preconfigurada si coincide con alguna de las firmas asociadas a la regla de WAF preconfigurada. Se produce una coincidencia cuando la expresión evaluatePreconfiguredWaf() devuelve el valor true.

Elige un nivel de sensibilidad

Cada firma tiene un nivel de sensibilidad que se corresponde con un nivel de paranoia de OWASP. Puedes seleccionar una sensibilidad entre 0 y 4, aunque el nivel de sensibilidad 0 significa que no hay ninguna regla habilitada de forma predeterminada.

Un nivel de sensibilidad más bajo indica firmas de mayor confianza, que tienen menos probabilidades de generar un falso positivo. Un nivel de sensibilidad más alto aumenta la seguridad, pero también el riesgo de generar un falso positivo. Cuando seleccionas un nivel de sensibilidad para tu regla de WAF preconfigurada, se habilitan las firmas con niveles de sensibilidad inferiores o iguales al nivel de sensibilidad seleccionado. En el siguiente ejemplo, se ajusta una regla de WAF preconfigurada seleccionando el nivel de sensibilidad 1:

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 1
  }
)

Inhabilitar firmas de reglas

Si decides que una regla de WAF preconfigurada coincide con más solicitudes de las necesarias o si la regla bloquea el tráfico que se debe permitir, puedes ajustarla para inhabilitar firmas ruidosas o innecesarias. Para inhabilitar las firmas en una regla de WAF preconfigurada concreta, debes proporcionar una lista de los IDs de las firmas que no quieras usar en la expresión evaluatePreconfiguredWaf().

En el siguiente ejemplo, se excluyen dos IDs de reglas de CRS de la regla de WAF preconfigurada sqli-v33-stable (CRS 3.3):

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 4,
    'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']
  }
)

Cuando excluyas IDs de firma de conjuntos de reglas de CRS preconfigurados, debes hacer coincidir la versión del ID de firma con la versión del conjunto de reglas (CRS 3.0 o 3.3) para evitar errores de configuración.

También puedes inhabilitar los IDs de firma mediante la expresión antigua evaluatePreconfigureExpr(). Para obtener más información sobre las expresiones de reglas de WAF preconfiguradas, consulta la referencia del lenguaje de reglas personalizadas.

Firmas de reglas de habilitación

En lugar de inhabilitar las firmas de reglas, puede habilitarlas en niveles de sensibilidad que estén inhabilitados. Te recomendamos que habilites las firmas de reglas cuando quieras usar menos firmas en un nivel de sensibilidad determinado que reglas que quieras inhabilitar. Para habilitar las firmas de reglas, el nivel de sensibilidad debe ser 0. En el siguiente ejemplo, se inhabilitan todas las firmas cve-canary en todos los niveles de sensibilidad y, a continuación, se habilitan explícitamente owasp-crs-v030001-id044228-cve y owasp-crs-v030001-id144228-cve:

evaluatePreconfiguredWaf(
  'cve-canary',
  {
    'sensitivity': 0,
    'opt_in_rule_ids': ['owasp-crs-v030001-id044228-cve', 'owasp-crs-v030001-id144228-cve']
  }
)

Excluir campos de solicitud de la inspección

Tu aplicación personalizada puede contener contenido en campos de solicitud (como encabezados, cookies, parámetros de consulta o URIs) que coincida con firmas de reglas de WAF preconfiguradas, pero que sabes que es legítimo. En este caso, puedes reducir los falsos positivos excluyendo esos campos de solicitud de la inspección asociando una lista de exclusiones de campos de solicitud a la regla de la política de seguridad. Ten en cuenta que, si tienes una exclusión de campo de solicitud asociada a una regla de WAF, no puedes usar la acción allow.

Cuando configura una exclusión de campo de solicitud, la asocia a un destino, que puede ser una regla de WAF preconfigurada completa o una lista de firmas de una regla de WAF preconfigurada. Puede especificar una concordancia exacta o parcial mediante un operador de campo y un valor de campo. Los operadores de campo disponibles son los siguientes:

  • EQUALS: el operador coincide si el valor del campo es igual al valor especificado.
  • STARTS_WITH: el operador coincide si el valor del campo empieza por el valor especificado.
  • ENDS_WITH: el operador coincide si el valor del campo termina con el valor especificado.
  • CONTAINS: el operador coincide si el valor del campo contiene el valor especificado.
  • EQUALS_ANY: el operador coincide si el valor del campo es cualquier valor.

En las siguientes secciones se ofrece más información sobre los campos de solicitud que puede excluir de la inspección, así como ejemplos.

Encabezados de solicitud

Lista de nombres de encabezados de solicitud cuyo valor se excluye de la inspección durante la evaluación de reglas de WAF preconfiguradas.

La exclusión solo se aplica a las firmas del destino que inspeccionarían el valor del encabezado de solicitud originalmente. Esto incluye firmas asociadas a la siguiente marca de solicitud en el conjunto de reglas principal de OWASP:

  • REQUEST_HEADERS

Solo se excluyen de la inspección los valores de los encabezados de solicitud especificados. El nombre sigue inspeccionándose.

Solicitar cookies

Lista de nombres de cookies de solicitud cuyo valor se excluye de la inspección durante la evaluación de reglas de WAF preconfiguradas.

La exclusión solo se aplica a las firmas del destino que inspeccionarían el valor de la cookie de solicitud originalmente. Esto incluye las firmas asociadas a la siguiente marca de solicitud en el conjunto de reglas principal de OWASP:

  • REQUEST_COOKIES

Solo se excluye de la inspección el valor de las cookies de solicitud especificadas. El nombre sigue inspeccionándose.

Parámetros de consulta de la solicitud

Lista de nombres de parámetros de consulta de solicitud cuyo valor se excluye de la inspección durante la evaluación de reglas de WAF preconfiguradas.

La exclusión solo se aplica a las firmas del destino que inspeccionarían los parámetros de la solicitud originalmente. Esto incluye firmas asociadas a las siguientes marcas de solicitud en el conjunto de reglas principal de OWASP:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

Solo se excluye de la inspección el valor de los parámetros de consulta especificados, que pueden estar en la cadena de consulta o en el cuerpo POST. El nombre se sigue inspeccionando.

Como los parámetros de consulta forman parte del URI y de la línea de solicitud, estos campos se vuelven a ensamblar para la inspección después de excluir los parámetros de consulta especificados. Sin embargo, en el caso de las firmas que inspeccionan todo el cuerpo de la solicitud (como las firmas asociadas a la marca de solicitud REQUEST_BODY), no se aplica la exclusión de los parámetros de consulta.

Por ejemplo, si excluye un parámetro de consulta llamado "args", es posible que siga viendo una coincidencia en una firma que inspeccione todo el cuerpo de la solicitud si la solicitud tiene un parámetro "args" en el cuerpo POST y el valor de "args" coincide.

URI de solicitud

Lista de URIs de la línea de solicitud, excluidos los datos de la cadena de consulta, que se excluirán de la inspección durante la evaluación de las reglas de WAF preconfiguradas.

La exclusión solo se aplica a las firmas del destino que inspeccionarían el URI de la solicitud originalmente. Esto incluye firmas asociadas a las siguientes marcas de solicitud en el conjunto de reglas principal de OWASP:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Si excluyes alguno de los campos anteriores, se excluirá por completo de la inspección y no se volverá a ensamblar.

Valores de campo

Debes especificar un valor de campo si usas un operador de campo que no sea EQUALS_ANY.

En el caso de los encabezados, las cookies y los parámetros de consulta de las solicitudes, el conjunto de caracteres permitidos para los valores de los campos incluye los siguientes caracteres:

  • !, #, $, %, &, *, +, -, ., ^, _, `, |, ~
  • Caracteres alfabéticos de la A a la Z (tanto en minúsculas como en mayúsculas)
  • Caracteres de dígitos 0 a 9

Al aplicar exclusiones a estos campos de solicitud, los valores de campo configurados se comparan tal cual con los valores (sin distinguir entre mayúsculas y minúsculas, después de la transformación) de la solicitud. No es necesario que apliques una codificación adicional si quieres excluir un carácter específico que no esté en el conjunto de caracteres permitidos.

En el caso de los URIs de solicitud, el valor del campo debe proporcionarse en formato URI de la siguiente manera:

  • Se permite un esquema, pero solo puede ser http o https.
  • Se permite un host, que puede ser una dirección IP.
  • Se permite un puerto.
  • Se permite una ruta.
  • No se permite una consulta.
  • No se permite un fragmento.

Al aplicar exclusiones a URIs de solicitud, los valores de campo configurados se comparan tal cual con los URIs (sin distinguir entre mayúsculas y minúsculas, después de la transformación) de la línea de solicitud, excluyendo la cadena de consulta. Los URIs de la línea de solicitud pueden ser relativos o absolutos. Tenlo en cuenta al configurar las exclusiones de URIs de solicitudes.

Ejemplos

En el primer ejemplo, se actualiza la regla de la política de seguridad POLICY_1 en PRIORITY para añadir una configuración de exclusión de todas las firmas de la regla de WAF preconfigurada sqli-v33-stable, con el fin de excluir todas las cookies de solicitud de la inspección:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "sqli-v33-stable" \
    --request-cookie-to-exclude "op=EQUALS_ANY"

En el segundo ejemplo, se actualiza la regla de la política de seguridad POLICY_2 en PRIORITY para añadir una configuración de exclusión de las firmas owasp-crs-v030301-id941140-xss y owasp-crs-v030301-id941270-xss en la regla de WAF xss-v33-stable preconfigurada, con el fin de excluir de la inspección los encabezados de solicitud que empiecen por abc o terminen por xyz:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_2 \
    --target-rule-set "xss-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id941140-xss,owasp-crs-v030301-id941270-xss" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

En el tercer ejemplo, se actualiza la regla de la política de seguridad POLICY_3 en PRIORITY para añadir una configuración de exclusión para todas las firmas en la regla de WAF preconfigurada sqli-v33-stable. De este modo, se excluyen de la inspección los parámetros de consulta de la solicitud (analizados a partir de la cadena de consulta del URI o de la carga útil del cuerpo) que sean iguales a bad-param:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_3 \
    --target-rule-set "sqli-v33-stable" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param"

En el cuarto ejemplo, se actualiza la regla de la política de seguridad POLICY_4 en PRIORITY para añadir una configuración de exclusión de la firma owasp-crs-v030301-id930100-lfi en la regla de WAF preconfigurada lfi-v33-stable. De esta forma, se excluyen de la inspección los URIs de solicitud que contengan /bad-path:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_4 \
    --target-rule-set "lfi-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id930100-lfi" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

En el quinto ejemplo, se actualiza la regla de la política de seguridad POLICY_5 en PRIORITY para quitar todas las exclusiones de campos de solicitud de las reglas con los IDs owasp-crs-v030301-id942110-sqli y owasp-crs-v030301-id942120-sqli en sqli-v33-stable.

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_5 \
    --target-rule-set "sqli-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"

Aplicar el análisis a los valores de encabezado Content-Type personalizados

Cuando Cloud Armor evalúa el cuerpo POST con reglas de WAF preconfiguradas, el encabezado Content-Type indica el formato de los datos del cuerpo de la solicitud. De forma predeterminada, Cloud Armor trata el contenido del cuerpo de la solicitud POST como una cadena, que se puede inspeccionar y que coincide con las reglas de WAF preconfiguradas. Sin embargo, puede configurar un análisis más preciso si sus solicitudes entrantes tienen una codificación diferente. Cloud Armor admite los siguientes tipos de codificación:

  • JSON
  • GraphQL

Para obtener más información, consulta Análisis del contenido del cuerpo de la solicitud POST.

Siguientes pasos