Ajustar regras WAF pré-configuradas do Google Cloud Armor

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Google Cloud Armor oferece regras WAF pré-configuradas cada uma consiste em váriosassinaturas proveniente dos Conjunto de regras principais do ModSecurity (CRS). Cada assinatura corresponde a uma regra de detecção de ataque no conjunto de regras. As solicitações recebidas são avaliadas em relação às regras WAF pré-configuradas. Uma solicitação corresponderá a uma regra WAF pré-configurada se a solicitação corresponder a qualquer uma das assinaturas associadas à regra WAF pré-configurada. Uma correspondência é feita quando a expressão evaluatePreconfiguredWaf() ou evaluatePreconfiguredExpr() retorna o valor true.

Escolher um nível de sensibilidade

Cada assinatura tem um nível de confidencialidade que corresponde a um nível de paranoia do ModSecurity. Você pode selecionar uma sensibilidade entre 0 e 4, embora o nível de confidencialidade 0 significa que nenhuma regra está ativada por padrão.

Um nível de sensibilidade mais baixo indica assinaturas de maior confiança, que têm menos probabilidade de gerar um falso positivo. Um nível de sensibilidade mais alto aumenta a segurança, mas também aumenta o risco de gerar um falso positivo. Quando você seleciona um nível de confidencialidade para a regra WAF, as assinaturas são ativadas nos níveis de sensibilidade menores ou iguais ao nível de sensibilidade selecionado. No exemplo a seguir, você ajusta uma regra WAF pré-configurada selecionando o nível de sensibilidade de 1:

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

Desativar assinaturas de regras

Se você decidir que uma regra WAF pré-configurada corresponde a mais solicitações do que o necessário ou se a regra estiver bloqueando o tráfego que precisa ser permitido, a regra pode ser ajustada para desativar assinaturas com ruídos ou desnecessárias. Para desativar assinaturas em uma regra WAF pré-configurada específica, forneça uma lista de IDs das assinaturas indesejadas à expressão evaluatePreconfiguredWaf().

O exemplo a seguir exclui dois códigos de regra de CRS da regra WAF xss-v33-stable (CRS 3.3) pré-configurada:

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

Ao desativar IDs de assinatura de conjuntos de regras CRS pré-configurados, você precisa corresponder a versão do ID de assinatura com a versão do conjunto de regras (CRS 3.0 ou 3.3) para evitar erros de configuração.

Você também pode desativar os IDs de assinatura usando a expressão legada evaluatePreconfigureExpr(). Para mais informações sobre as expressões de regra WAF pré-configuradas, consulte a referência de linguagem de regras personalizadas.

Ativar assinaturas de regras

Em vez de desativar as assinaturas das regras, você pode ativá-las com níveis de sensibilidade desativados. Recomendamos que você ative as assinaturas de regras quando houver menos assinaturas para usar em determinado nível de sensibilidade do que regras para desativar. Para ativar as assinaturas de regras, o nível de confidencialidade precisa ser 0. O exemplo a seguir desativa todas as assinaturas cve-canary em todos os níveis de sensibilidade e, em seguida, ativa explicitamente em owasp-crs-v030001-id044228-cve e 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 solicitação da inspeção

Seu aplicativo personalizado pode ter conteúdo em campos de solicitação (como cabeçalhos, cookies, parâmetros de consulta ou URIs) que correspondem a assinaturas em regras WAF pré-configuradas, mas que você sabe que são legítimas. Nesse caso, é possível reduzir os falsos positivos excluindo esses campos de solicitação da inspeção, associando uma lista de exclusões de campos de solicitação à regra da política de segurança.

Ao configurar uma exclusão de campo de solicitação, você a associa a um destino, que pode ser uma regra WAF pré-configurada inteira ou uma lista de assinaturas em uma regra WAF pré-configurada. É possível especificar uma correspondência exata ou parcial usando um operador de campo e um valor de campo. Os operadores de campo disponíveis são os seguintes:

  • EQUALS: o operador corresponderá 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 termina 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.

As seções a seguir fornecem mais informações sobre os campos de solicitação que podem ser excluídos da inspeção, seguidos de exemplos.

Cabeçalhos das solicitações

Uma lista de nomes de cabeçalho de solicitação (sem distinção entre maiúsculas e minúsculas, após a transformação) com o valor excluído da inspeção durante a avaliação da regra WAF pré-configurada.

A exclusão só é aplicável a assinaturas no destino que inspecionariam originalmente o valor do cabeçalho da solicitação. Isso inclui assinaturas associadas à seguinte sinalização de solicitação no conjunto de regras principais do ModSecurity:

  • REQUEST_HEADERS

Somente o valor dos cabeçalhos de solicitação especificados é excluído da inspeção. O nome ainda é inspecionado.

Solicitar cookies

Uma lista de nomes de cookies (sem distinção entre maiúsculas e minúsculas, após a transformação) com valor excluído da inspeção durante a avaliação da regra WAF pré-configurada.

A exclusão só é aplicável a assinaturas no destino que inspecionam o valor do cookie de solicitação originalmente. Isso inclui assinaturas associadas à seguinte sinalização de solicitação no conjunto de regras principais do ModSecurity:

  • REQUEST_COOKIES

Somente o valor dos cookies de solicitação especificados são excluídos da inspeção. O nome ainda é inspecionado.

Parâmetros de consulta da solicitação

Uma lista de nomes de parâmetros de consulta de solicitação (sem distinção entre maiúsculas e minúsculas, após a transformação) com valor excluído da inspeção durante a avaliação da regra WAF pré-configurada.

A exclusão só é aplicável a assinaturas no destino que inspecionariam os parâmetros de solicitação originalmente. Isso inclui assinaturas associadas às seguintes sinalizações de solicitação no conjunto de regras principais do ModSecurity:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

Apenas o valor dos parâmetros de consulta especificados são excluídos da inspeção, que pode estar na string de consulta ou no corpo POST. O nome ainda é inspecionado.

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

Por exemplo, se você excluir um parâmetro de consulta chamado "args", ainda poderá ver uma correspondência em uma assinatura que inspeciona todo o corpo da solicitação se a solicitação tiver um parâmetro "args" no corpo POST e no valor de correspondências "args"

URI da solicitação

Uma lista de URIs da linha de solicitação, excluindo os dados da string de consulta (que não diferenciam maiúsculas de minúsculas, após a transformação) a serem excluídos da inspeção durante a avaliação da regra WAF pré-configurada.

A exclusão só é aplicável a assinaturas no destino que inspecionariam o URI de solicitação originalmente. Isso inclui assinaturas associadas às seguintes sinalizações de solicitação no conjunto de regras principais do ModSecurity:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Ao excluir qualquer um dos campos anteriores, o campo é excluído completamente da inspeção, e não é realizada nova montagem.

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 a todas as assinaturas na regra WAF sqli-v33-stable para excluir todos os cookies de solicitação da inspeção:

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"

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 assinaturas owasp-crs-v030301-id941140-xss e owasp-crs-v030301-id941270-xss na regra WAF xss-v33-stable, para excluir cabeçalhos de solicitação que começam com abc ou terminam com xyz da inspeção:

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"

O terceiro exemplo atualiza a regra na política de segurança POLICY_3 em PRIORITY para remover todas as exclusões de campo de solicitação dos IDs de regra owasp-crs-v030301-id942110-sqli e owasp-crs-v030301-id942120-sqli em 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"

Aplicar a análise JSON em valores de cabeçalho personalizados Content-Type

Ao avaliar o corpo POST em relação às regras WAF pré-configuradas, o cabeçalho Content-Type indica o formato dos dados no corpo da solicitação. Por padrão, a análise JSON é aplicada apenas quando a análise JSON está ativada e o cabeçalho Content-Type está definido como application/json. No entanto, é possível configurar uma lista de valores de cabeçalho Content-Type personalizados para aplicar a análise JSON. O exemplo a seguir atualiza a política de segurança POLICY_NAME para ativar a análise JSON e especifica os tipos de conteúdo application/json, application/vnd.api+json, application/vnd.collection+json e 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"

A inspeção do corpo POST ainda está limitada aos primeiros 8 KB. Para mais informações, consulte Limitações da política de segurança.

  • Se o conteúdo JSON for maior que 8 KB, de modo que o analisador JSON retorne uma lista parcial de parâmetros de nome-valor, os resultados analisados até agora serão usados para a inspeção de parâmetros.

  • Se o analisador JSON não retornar um resultado, poderá ser feita uma análise de URI. Se o analisador de URI não retornar nenhum parâmetro de nome-valor ou apenas parâmetros parciais de nome-valor, a string inteira ou parcial vai poder ser tratada como o nome do parâmetro para a inspeção.

A seguir