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
sqli-v33-stable
(CRS 3.3) pré-configurada:
evaluatePreconfiguredWaf('sqli-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. Quando você tem uma exclusão de campo de solicitação anexada a uma regra do 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, 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 de solicitação
Uma lista de nomes de cabeçalho de solicitaçã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 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 de solicitação com valor excluído da inspeção durante a avaliação da regra WAF reconfigurada.
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 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 de solicitação
Uma lista de URIs da linha de solicitação, excluindo os dados da string de consulta 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.
Valores de campo
É necessário especificar um valor de campo se você usar um operador de campo diferente de EQUALS_ANY
.
Para cabeçalhos de solicitação, cookies de solicitação e parâmetros de consulta de solicitação, o conjunto de caracteres permitido para valores de campo inclui os seguintes caracteres:
!
,#
,$
,%
,&
,*
,+
,-
,.
,^
,_
,`
,|
,~
- Caracteres alfabéticos
A
aZ
(minúsculas e maiúsculas) - Caracteres numéricos de
0
a9
Ao aplicar exclusões para esses campos de solicitação, os valores de campo configurados são comparados com os valores (sem distinção entre maiúsculas e minúsculas, após a transformação) da solicitação. Não é necessário realizar outras codificações se você quiser excluir um caractere específico que não está no conjunto de caracteres permitido.
Para URIs de solicitação, o valor do campo precisa ser fornecido em um formato de URI da seguinte maneira:
- Um esquema é permitido, mas está restrito apenas a http ou https.
- Um host é permitido e pode ser um endereço IP.
- Uma porta é permitida.
- Um caminho é permitido.
- Uma consulta não é permitida.
- Um fragmento não é permitido.
Ao aplicar exclusões para URIs de solicitação, os valores de campo configurados são comparados com os URIs (que não diferenciam maiúsculas de minúsculas, após a transformação) da linha de solicitaçã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 a todas as assinaturas na regra WAF sqli-v33-stable
para excluir todos os cookies de solicitação da inspeção:
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"
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 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 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 a valores de cabeçalho Content-Type
personalizados
Quando o Google Cloud Armor avalia o corpo POST em relação às regras de WAF predefinidas, o
cabeçalho Content-Type
indica o formato dos dados no corpo da solicitação. Por
padrão, o Google Cloud Armor lida com o conteúdo do corpo POST como uma
string, considerando-o todo qualificado para inspeção e correspondência nas
regras de WAF predefinidas. No entanto, será possível configurar uma análise mais precisa se as
solicitações recebidas tiverem uma codificação diferente. O Google Cloud Armor é compatível com os
seguintes tipos de codificação:
- JSON
- GraphQL
Para mais informações, consulte Análise do conteúdo do corpo POST.
A seguir
- Saiba mais sobre como configurar políticas de segurança.
- Saiba mais sobre quais assinaturas de regras estão disponíveis para regras WAF pré-configuradas.
- Saiba mais sobre regras WAF pré-configuradas usando a referência de linguagem de regras personalizadas.