Ajustar regras de WAF pré-configuradas

O Google Cloud Armor ajuda a proteger seus serviços contra ataques distribuídos de negação de serviço (DDoS) e da Web usando a infraestrutura global e os sistemas de segurança do Google. É possível ajustar as regras de WAF pré-configuradas do Cloud Armor para personalizar como elas avaliam as solicitações recebidas, refinar a detecção de ameaças e reduzir falsos positivos. Nesta página, descrevemos como escolher níveis de confidencialidade, ativar ou desativar assinaturas de regras e excluir campos de solicitação da inspeção.

As regras de WAF pré-configuradas consistem em várias assinaturas provenientes do conjunto de regras principais do OWASP. Cada assinatura corresponde a uma regra de detecção de ataques. Ao ajustar essas regras, é possível personalizar como elas avaliam as solicitações recebidas para se adequar melhor aos padrões de tráfego específicos do aplicativo. É possível ajustar regras de WAF pré-configuradas em políticas de segurança hierárquicas de sua propriedade. Se o serviço herdar uma política de segurança hierárquica, não será possível ajustar as regras dela.

Escolher um nível de sensibilidade

Cada assinatura tem um nível de sensibilidade que equivale a um nível de paranoia do OWASP. É possível escolher um nível de sensibilidade entre 0 e 4; no entanto, o nível 0 indica que nenhuma regra está ativada.

Níveis de sensibilidade mais baixos correspondem a assinaturas mais confiáveis, com menos chances de gerarem falsos positivos. Por padrão, o Cloud Armor é configurado para ser executado no nível de sensibilidade 4 e avalia todas as assinaturas em um conjunto de regras quando ativado. Um nível de sensibilidade mais alto aumenta a segurança, mas também aumenta o risco de gerar um falso positivo. Quando você escolhe um nível de sensibilidade para sua regra de WAF pré-configurada, todas as assinaturas com sensibilidade igual ou inferior ao nível escolhido são incluídas. No exemplo a seguir, você ajusta uma regra de WAF pré-configurada selecionando o nível de sensibilidade de 1:

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

Desativar assinaturas de regras

Se você perceber que uma regra de WAF pré-configurada corresponde a mais solicitações do que o necessário, ou se a regra está bloqueando tráfego que deveria ser permitido, é possível ajustá-la para desativar assinaturas com ruídos ou desnecessárias. Para desativar assinaturas em uma regra de WAF pré-configurada específica, basta fornecer à expressão evaluatePreconfiguredWaf uma lista com os IDs das assinaturas que não quer usar.

O exemplo a seguir exclui dois IDs de regras do CRS da regra de WAF pré-configurada sqli-v422-stable (CRS 4.22):

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

Ao desativar IDs de assinaturas em conjuntos de regras CRS pré-configurados, é necessário que a versão do ID da assinatura corresponda à versão do conjunto de regras (CRS 3.0 ou 3.3) para evitar erros de configuração.

Para mais informações sobre expressões de regras de WAF pré-configuradas, confira a referência de linguagem para regras personalizadas.

Ativar assinaturas de regras

Em vez de desativar assinaturas de regras, você pode ativar assinaturas de regras em níveis de sensibilidade que estão desabilitados. Recomendamos ativar assinaturas de regras quando houver menos assinaturas que você deseja usar em um determinado nível de sensibilidade do que regras que você gostaria de desativar. Para ativar assinaturas de regras, o nível de sensibilidade deve ser 0. No exemplo a seguir, todas as assinaturas cve-canary são desativadas em todos os níveis de sensibilidade, e depois são incluídas explicitamente owasp-crs-v042200-id044228-cve e owasp-crs-v042200-id144228-cve:

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

Excluir campos de solicitação da inspeção

Às vezes, os aplicativos personalizados contêm conteúdo legítimo em campos de solicitação (como cabeçalhos, cookies, parâmetros de consulta, URIs ou corpos de solicitação) que correspondem a assinaturas em regras de WAF pré-configuradas. Para reduzir os falsos positivos, exclua esses campos de solicitação da inspeção adicionando uma lista de exclusões à regra da política de segurança. Vale ressaltar que, se um campo da solicitação estiver excluído em uma regra de WAF, não é possível usar a ação allow.

Ao configurar uma exclusão de campo de solicitação, você a associa a um destino. Um destino pode ser todos os conjuntos de regras (uma exclusão global), uma regra de WAF pré-configurada inteira ou uma lista de assinaturas em uma regra de WAF pré-configurada. Use um operador de campo e um valor de campo para especificar uma correspondência exata ou parcial. Os operadores de campo disponíveis são os seguintes:

  • EQUALS: o operador corresponde se o valor do campo for igual ao valor especificado.
  • STARTS_WITH: o operador corresponde se o valor do campo começa com o valor especificado.
  • ENDS_WITH: o operador corresponde se o valor do campo terminar com o valor especificado.
  • CONTAINS: o operador corresponde se o valor do campo contém o valor especificado.
  • EQUALS_ANY: o operador corresponde se o valor do campo for qualquer valor.

Limite de exclusão de ajuste

O limite padrão de exclusão de ajuste é 100 para políticas de back-end no nível do serviço (globais e regionais). Esse limite se aplica por destino e controla o número máximo de exclusões que podem ser configuradas em uma regra de política de segurança. Um destino é a combinação de um conjunto de regras e um ID de regra. O limite se aplica a exclusões para os seguintes campos:

Por exemplo, se você tiver uma regra de WAF pré-configurada (como evaluatePreconfiguredWaf('sqli-v422-stable')) e quiser excluir campos de solicitação em um destino específico (como owasp-crs-v042200-id942100-sqli em sqli-v422-stable), será possível configurar até 100 cabeçalhos da solicitação, 100 cookies de solicitação, 100 parâmetros de consulta de solicitação, 100 URIs de solicitação e 100 corpos de solicitação a serem excluídos para esse destino.

As seções a seguir descrevem as exclusões globais, os campos de solicitação que podem ser excluídos da inspeção e exemplos.

Exclusões globais

Para aplicar uma exclusão a todos os conjuntos de regras em uma regra de política de segurança, especifique uma exclusão global definindo a flag --target-rule-set como "*". É possível usar uma exclusão global para excluir qualquer tipo de campo de solicitação, como cabeçalhos, cookies, parâmetros de consulta, URIs ou corpos de solicitação. Não especifique IDs de regra de destino para uma exclusão global.

Cabeçalhos da solicitação

Uma lista de nomes de cabeçalhos da solicitação cujos valores são excluídos da inspeção durante a avaliação de regras de WAF pré-configuradas.

A exclusão é válida somente para as assinaturas do destino que, originalmente, fariam a inspeção do valor do cabeçalho da solicitação. Isso inclui assinaturas que estão associadas à seguinte flag de solicitação no conjunto de regras principais do OWASP:

  • REQUEST_HEADERS

Apenas o valor dos cabeçalhos da solicitação especificados é excluído da inspeção. O nome permanece sujeito à inspeção.

Cookies da solicitação

Uma lista de nomes de cookies da solicitação cujos valores são excluídos da inspeção durante a avaliação de regras de WAF pré-configuradas.

A exclusão é válida somente para as assinaturas do destino que, originalmente, fariam a inspeção do valor do cookie da solicitação. Isso inclui assinaturas que estão associadas à seguinte flag de solicitação no conjunto de regras principais do OWASP:

  • REQUEST_COOKIES

Apenas o valor dos cookies da solicitação especificados é excluído da inspeção. O nome permanece sujeito à inspeção.

Parâmetros de consulta da solicitação

Uma lista de nomes de parâmetros de consulta da solicitação cujos valores são excluídos da inspeção durante a avaliação de regras de WAF pré-configuradas.

A exclusão é válida somente para as assinaturas do destino que, originalmente, fariam a inspeção dos parâmetros da solicitação. Isso inclui assinaturas que estão associadas às seguintes flags de solicitação no conjunto de regras principais do OWASP:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

Apenas o valor dos parâmetros de consulta especificados é excluído da inspeção, podendo estar na string de consulta ou no corpo da solicitação. O nome permanece sujeito à inspeção.

Como os parâmetros de consulta fazem parte do URI e da linha de solicitação, esses campos são reconstituídos para inspeção após a exclusão dos parâmetros de consulta especificados. No entanto, para assinaturas que inspecionam todo o corpo da solicitação (como aquelas associadas à flag de solicitação REQUEST_BODY), a exclusão de parâmetros de consulta não é aplicada.

Por exemplo, se você excluir um parâmetro de consulta chamado “args”, ainda poderá ocorrer uma correspondência em uma assinatura que inspeciona todo o corpo da solicitação, caso o corpo da solicitação contenha um parâmetro “args” e o valor de “args” corresponda.

URIs de solicitação

Uma lista de URIs da linha de solicitação, excluindo os dados da string de consulta, que devem ser excluídos da inspeção durante a avaliação de regras de WAF pré-configuradas.

A exclusão é válida somente para as assinaturas do destino que, originalmente, fariam a inspeção do URI de solicitação. Isso inclui assinaturas que estão associadas às seguintes flags de solicitação no conjunto de regras principais do OWASP:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Ao excluir qualquer um dos campos anteriores, o campo é totalmente excluído da inspeção, e nenhuma reconstituição é realizada.

Corpos de solicitação

Especifica os valores do corpo da solicitação que serão excluídos da inspeção durante a avaliação de regras de WAF pré-configuradas.

Essa exclusão se aplica apenas a assinaturas no destino que inspecionam o valor do corpo da solicitação, como assinaturas associadas à flag de solicitação REQUEST_BODY no conjunto de regras principais do OWASP.

Somente os corpos de solicitação que correspondem ao valor especificado são excluídos da inspeção.

Valores dos campos

É necessário especificar um valor de campo se usar um operador de campo diferente de EQUALS_ANY.

Para cabeçalhos da solicitação, cookies da solicitação e parâmetros de consulta da solicitação, o conjunto de caracteres permitido para os valores dos campos inclui os seguintes caracteres:

  • !, #, $, %, &, *, +, -, ., ^, _, `, | e ~
  • Caracteres alfabéticos de A a Z (maiúsculos e minúsculos)
  • Caracteres numéricos de 0 a 9

Para corpos de solicitação, o conjunto de caracteres permitido para valores de campo inclui todos os caracteres ASCII imprimíveis, exceto ', \`,(, and)`:

  • Espaço () e caracteres especiais: !, ", #, $, %, &, *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, ], ^, _, `, {, |, }, ~
  • Caracteres alfabéticos de A a Z (maiúsculos e minúsculos)
  • Caracteres numéricos de 0 a 9

Ao aplicar exclusões para esses campos de solicitações, os valores dos campos configurados são comparados exatamente como estão com os valores das solicitações (que não diferencia maiúsculas de minúsculas, após qualquer transformação). Não é necessário realizar codificação adicional se você quiser excluir um caractere específico que não esteja no conjunto de caracteres permitido.

No caso de URIs de solicitação, o valor do campo deve estar no formato de URI, obedecendo às seguintes regras:

  • Um esquema pode ser usado, mas apenas http ou https.
  • Um host pode ser usado, podendo ser um endereço IP.
  • Uma porta pode ser usada.
  • Um caminho pode ser usado.
  • Uma consulta não pode ser usada.
  • Não é permitido usar um fragmento.

Ao aplicar exclusões para URIs de solicitação, os valores de campo configurados são comparados exatamente como estão com os URIs da linha de solicitação (que não diferencia maiúsculas de minúsculas, após qualquer transformação), excluindo a string de consulta. Os URIs da linha de solicitação podem ser relativos ou absolutos. Considere isso ao configurar exclusões para URIs de solicitação.

Exemplos

O primeiro exemplo atualiza a regra na política de segurança POLICY_1 em PRIORITY para adicionar uma configuração de exclusão global para todos os conjuntos de regras. Isso exclui da inspeção os corpos de solicitação que contenham bad-body-value:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "*" \
    --request-body-to-exclude "op=CONTAINS,val=bad-body-value"

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_1: o nome da política de segurança

O segundo exemplo atualiza a regra na política de segurança POLICY_2 em PRIORITY para adicionar uma configuração de exclusão para todas as assinaturas na regra de WAF pré-configurada sqli-v422-stable, excluindo da inspeção todos os cookies da solicitação:

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

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_2: o nome da política de segurança

O terceiro exemplo atualiza a regra na política de segurança POLICY_3 em PRIORITY para adicionar uma configuração de exclusão para as assinaturas owasp-crs-v042200-id941140-xss e owasp-crs-v042200-id941270-xss da regra de WAF pré-configurada xss-v422-stable, excluindo da inspeção os cabeçalhos da solicitação que começam com abc ou terminam com xyz:

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

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_3: o nome da política de segurança

O quarto exemplo atualiza a regra na política de segurança POLICY_4, em PRIORITY, para adicionar uma configuração de exclusão para todas as assinaturas da regra de WAF pré-configurada sqli-v422-stable. Isso exclui da inspeção os parâmetros de consulta da solicitação (analisados com a string de consulta do URI ou o payload do corpo) que sejam iguais a bad-param:

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

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_4: o nome da política de segurança

O quinto exemplo atualiza a regra na política de segurança POLICY_5, em PRIORITY, para adicionar uma configuração de exclusão para a assinatura owasp-crs-v042200-id930100-lfi da regra de WAF pré-configurada lfi-v422-stable. Isso exclui da inspeção os URIs de solicitação que contenham /bad-path:

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

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_5: o nome da política de segurança

O sexto exemplo atualiza a regra na política de segurança POLICY_6 em PRIORITY para remover todas as exclusões de campos de solicitação para os IDs de regras owasp-crs-v042200-id942110-sqli e owasp-crs-v042200-id942120-sqli em sqli-v422-stable.

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

Substitua:

  • PRIORITY: a prioridade da regra.
  • POLICY_6: o nome da política de segurança

Aplicar análise nos valores personalizados do cabeçalho Content-Type

Quando o Cloud Armor avalia o corpo da solicitação em relação às regras de WAF pré-configuradas, o cabeçalho Content-Type indica o formato dos dados no corpo da solicitação. Por padrão, o Cloud Armor trata o conteúdo do corpo da solicitação como uma única string, toda passível de inspeção e correspondência pelas suas regras de WAF pré-configuradas. No entanto, é possível configurar uma análise mais detalhada se as solicitações recebidas tiverem uma codificação diferente.

O Cloud Armor é compatível com os seguintes tipos de codificação:

  • JSON
  • GraphQL

Para mais informações, confira Analisar o conteúdo do corpo da solicitação.

A seguir