Google Cloud Armor proporciona Reglas de WAF preconfiguradas, cada una de las cuales consiste en varias firmas originadas del Conjunto de reglas principales (CRS) de ModSecurity.
Cada firma corresponde a una regla de detección de ataques en el 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 con la regla de WAF preconfigurada. Se genera una coincidencia cuando la expresión evaluatePreconfiguredWaf()
o evaluatePreconfiguredExpr()
muestra el valor true
.
Elige un nivel de sensibilidad
Cada firma tiene un nivel de sensibilidad que corresponde a un nivel de paranoia de ModSecurity.
Puedes seleccionar una sensibilidad entre 0
y 4
, aunque el nivel de sensibilidad 0
significa que no hay reglas habilitadas de forma predeterminada.
Un nivel de sensibilidad más bajo indica firmas de confianza más alta, que tienen menos probabilidades de generar un falso positivo. Un nivel de sensibilidad más alto aumenta la seguridad, pero también aumenta el riesgo de generar un falso positivo. Cuando seleccionas un nivel de sensibilidad para tu regla de WAF, debes habilitar firmas en los niveles de sensibilidad inferiores o iguales al nivel de sensibilidad seleccionado. En el siguiente ejemplo, se selecciona el nivel de sensibilidad de 1
para ajustar una regla de WAF preconfigurada:
evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 1})
Inhabilita las firmas de reglas
Si decides que una regla de WAF preconfigurada coincide con más solicitudes de lo necesario o si la regla bloquea el tráfico que se debe permitir, esta se puede ajustar para inhabilitar firmas ruidosas o innecesarias. Para inhabilitar firmas en una regla de WAF preconfigurada en particular, proporciona una lista de los IDs de las firmas no deseadas a la expresión evaluatePreconfiguredWaf()
.
En el siguiente ejemplo, se excluyen dos ID de reglas CRS de la regla de WAF xss-v33-stable
(CRS 3.3) preconfigurada:
evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 4, 'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']})
Cuando inhabilitas el ID de firma de conjuntos de reglas de CRS preconfiguradas, 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 heredada evaluatePreconfigureExpr()
. Para obtener más información sobre las expresiones de reglas de WAF preconfiguradas, consulta la referencia del lenguaje de reglas personalizadas.
Habilita las firmas de reglas
En lugar de inhabilitar las firmas de reglas, puedes habilitarlas en niveles de sensibilidad inhabilitados. Te recomendamos que habilites las firmas de reglas cuando haya menos firmas que desees usar en un nivel de sensibilidad determinado que reglas que desees 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, luego, se habilitan de forma explícita 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']})
Excluye los campos de solicitud de la inspección
Tu aplicación personalizada puede incluir contenido en campos de solicitud (como encabezados, cookies, parámetros de consulta o URI) que coincida con las firmas de las reglas de WAF preconfiguradas, pero que sabes que es legítimo. En este caso, puedes reducir los falsos positivos si excluyes esos campos de solicitud mediante la asociación de una lista de exclusiones para los campos de solicitud con la regla de política de seguridad.
Cuando configuras una exclusión de campos de solicitud, la asocias con un destino, que puede ser una regla completa de WAF preconfigurada o una lista de firmas en una regla de WAF preconfigurada. Puedes especificar una coincidencia exacta o una coincidencia parcial con 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 comienza con 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 proporciona más información sobre los campos de solicitud que puedes excluir de la inspección, seguidas de ejemplos.
Encabezados de la solicitud
Una lista de nombres de encabezados de solicitud (no distingue entre mayúsculas y minúsculas, después de la transformación) cuyo valor se excluye de la inspección durante la evaluación de la regla de WAF preconfigurada.
La exclusión solo se aplica a las firmas en el destino que inspeccionarían el valor del encabezado de solicitud originalmente. Esto incluye las firmas que están asociadas con la siguiente marca de solicitud del conjunto de reglas principales de ModSecurity:
- REQUEST_HEADERS
Solo se excluye de la inspección el valor de los encabezados de solicitud especificados. El nombre se inspecciona de todos modos.
Cookies de solicitud
Una lista de nombres de cookies de solicitud (no distingue entre mayúsculas y minúsculas, después de la transformación) cuyo valor se excluye de la inspección durante la evaluación de la regla de WAF preconfigurada.
La exclusión solo se aplica a las firmas en el destino que inspeccionarían el valor de la cookie de solicitud originalmente. Esto incluye las firmas que están asociadas con la siguiente marca de solicitud del conjunto de reglas principales de ModSecurity:
- REQUEST_COOKIES
Solo se excluye de la inspección el valor de las cookies de solicitud especificadas. El nombre se inspecciona de todos modos.
Parámetros de consulta de solicitud
Una lista de nombres de parámetros de consulta de solicitud (no distingue entre mayúsculas y minúsculas, después de la transformación) cuyo valor se excluye de la inspección durante la evaluación de la regla de WAF preconfigurada.
La exclusión solo se aplica a las firmas en el destino que inspeccionarían los parámetros de solicitud originalmente. Esto incluye las firmas que están asociadas con las siguientes marcas de solicitud del conjunto de reglas principales de ModSecurity:
- ARGS
- ARGS_GET
- REQUEST_URI
- REQUEST_URI_RAW
- REQUEST_LINE
Solo el valor de los parámetros de consulta especificados se excluye de la inspección, que puede ser en la string de consulta o en el cuerpo de POST. El nombre se inspecciona de todos modos.
Debido a que los parámetros de consulta son parte del URI y la línea de solicitud, estos campos se vuelven a ensamblar para inspeccionarlos después de excluir los parámetros de consulta especificados. Sin embargo, para las firmas que inspeccionan todo el cuerpo de la solicitud (como las firmas asociadas con la marca de la solicitud REQUEST_BODY
), no se aplica la exclusión de los parámetros de consulta.
Por ejemplo, si excluyes un parámetro de consulta llamado “args”, es posible que aún veas una coincidencia en una firma que inspeccione todo el cuerpo de la solicitud si la solicitud tiene un parámetro “args” en el cuerpo de POST y el valor de “args” coincide.
URI de solicitud
Una lista de URI de la línea de solicitud que excluye los datos de la string de consulta (no distingue mayúsculas y minúsculas, después de la transformación) para excluirlos de la inspección durante la evaluación de la regla de WAF preconfigurada
La exclusión solo se aplica a las firmas en el destino que inspeccionarían los URI de solicitud originalmente. Esto incluye las firmas que están asociadas con las siguientes marcas de solicitud del conjunto de reglas principales de ModSecurity:
- REQUEST_URI
- REQUEST_URI_RAW
- REQUEST_LINE
- REQUEST_FILENAME
- REQUEST_BASENAME
Cuando se excluye cualquiera de los campos anteriores, el campo se excluye por completo de la inspección y no se vuelve a ensamblar.
Ejemplos
En el primer ejemplo, se actualiza la regla en la política de seguridad POLICY_1 en PRIORITY a fin de agregar una configuración de exclusión para todas las firmas en la regla de WAF sqli-v33-stable
a fin de excluir todas las cookies de solicitud de la inspección:
gcloud beta 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 en la política de seguridad POLICY_2 en PRIORITY a fin de agregar una configuración de exclusión para las firmas owasp-crs-v030301-id941140-xss
y owasp-crs-v030301-id941270-xss
en la regla de WAF xss-v33-stable
, para excluir de la inspección los encabezados de solicitud que comienzan con abc
o terminan con xyz
:
gcloud beta 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 en la política de seguridad POLICY_3 en PRIORITY a fin de quitar todas las exclusiones del campo de solicitud para los IDs de regla owasp-crs-v030301-id942110-sqli
y owasp-crs-v030301-id942120-sqli
en sqli-v33-stable
.
gcloud beta compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \ --security-policy POLICY_3 \ --target-rule-set "sqli-v33-stable" \ --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"
Aplica el análisis de JSON en los valores de encabezado Content-Type
personalizados
Cuando se evalúa el cuerpo de POST según las reglas de WAF preconfiguradas, el encabezado Content-Type
indica el formato de los datos en el cuerpo de la solicitud. De forma predeterminada, el análisis de JSON solo se aplica cuando está habilitado y el encabezado Content-Type
se establece en application/json
. Sin embargo, puedes configurar una lista de valores de encabezado Content-Type
personalizados para los que se aplicará el análisis de JSON. En el siguiente ejemplo, se actualiza la política de seguridad POLICY_NAME para habilitar el análisis de JSON y se especifican los tipos de contenido application/json
, application/vnd.api+json
, application/vnd.collection+json
y application/vnd.hyper+json
:
gcloud compute security-policies update POLICY_NAME \ --json-parsing STANDARD \ --json-custom-content-types "application/json,application/vnd.api+json,application/vnd.collection+json,application/vnd.hyper+json"
La inspección del cuerpo de POST todavía se limita a los primeros 8 KB. Para obtener más información, consulta Limitaciones de las políticas de seguridad.
Si el contenido JSON supera los 8 KB, de modo que el analizador de JSON muestra una lista parcial de los parámetros de nombre-valor, los resultados analizados hasta el momento se usan para la inspección de parámetros.
Si el analizador de JSON no muestra ningún resultado, se puede intentar el análisis de URI. Si el analizador de URI no muestra parámetros de nombre-valor o muestra solo parámetros nombre-valor parciales, la string completa o parcial podría tratarse como el nombre de parámetro para la inspección.
¿Qué sigue?
- Obtén más información sobre la configuración de políticas de seguridad.
- Obtén más información sobre qué firmas de reglas están disponibles para las reglas de WAF preconfiguradas.
- Obtén más información sobre las reglas de WAF preconfiguradas mediante la referencia del lenguaje de reglas personalizadas.