O Cloud Armor fornece
regras de WAF pré-configuradas, e cada regra é composta por
diversas assinaturas provenientes do
conjunto de regras principais (CRS) do OWASP.
Cada assinatura corresponde a uma regra de detecção de ataques
no conjunto de regras. As solicitações recebidas são avaliadas com base nas regras de WAF pré-configuradas.
Uma solicitação é considerada correspondente a uma regra de WAF pré-configurada quando ela coincide
com qualquer uma das assinaturas associadas a essa regra. Uma correspondência é identificada quando
a expressão evaluatePreconfiguredWaf() retorna o valor true.
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 por padrão.
Níveis de sensibilidade mais baixos correspondem a assinaturas mais confiáveis, com menos
chances de gerarem falsos positivos. Um nível de sensibilidade elevado fortalece a
segurança, porém 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 1:
evaluatePreconfiguredWaf(
'sqli-v33-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 deseja utilizar.
O exemplo a seguir demonstra a exclusão de dois IDs de regras do CRS da regra de WAF pré-configurada
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']
}
)
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.
Também é possível desativar IDs de assinaturas com a expressão legada
evaluatePreconfigureExpr(). 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-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ções (como
cabeçalhos, cookies, parâmetros de consulta ou URIs) que corresponda a assinaturas
de regras de WAF pré-configuradas, mas que você sabe ser legítimo. Nesse caso, é possível
reduzir falsos positivos excluindo esses campos de solicitações da inspeção ao
associar uma lista de exclusões de campos de solicitaçõ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, que pode ser a regra de WAF pré-configurada completa ou uma lista de assinaturas pertencentes a uma regra de WAF pré-configurada. Você pode 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:
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çar 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 contiver o valor especificado.EQUALS_ANY: o operador corresponde se o valor do campo for qualquer valor.
Nas próximas seções, você encontrará mais detalhes sobre os campos da solicitação que podem ser excluídos da inspeção, acompanhados de exemplos.
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.
URI 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.
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
AaZ(maiúsculos e minúsculos) - Caracteres numéricos de
0a9
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.
- Um fragmento não pode ser usado.
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 para todas as assinaturas da regra de WAF pré-configurada sqli-v33-stable, excluindo da inspeção todos os cookies da solicitaçã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 as assinaturas
owasp-crs-v030301-id941140-xss e owasp-crs-v030301-id941270-xss da regra de WAF pré-configurada
xss-v33-stable, excluindo da inspeção os cabeçalhos de solicitação que começam com
abc ou terminam com 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"
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 todas as assinaturas
da regra de WAF pré-configurada sqli-v33-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_3 \
--target-rule-set "sqli-v33-stable" \
--request-query-param-to-exclude "op=EQUALS,val=bad-param"
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 a assinatura
owasp-crs-v030301-id930100-lfi da regra de WAF pré-configurada lfi-v33-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_4 \
--target-rule-set "lfi-v33-stable" \
--target-rule-ids "owasp-crs-v030301-id930100-lfi" \
--request-uri-to-exclude "op=CONTAINS,val=/bad-path"
O quinto exemplo atualiza a regra na política de segurança POLICY_5,
em PRIORITY para remover todas as exclusões de campos de solicitação para os IDs de regras
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_5 \
--target-rule-set "sqli-v33-stable" \
--target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"
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
- Saiba mais sobre como configurar políticas de segurança.
- Saiba mais sobre quais assinaturas de regras estão disponíveis para as regras de WAF pré-configuradas.
- Saiba mais sobre regras de WAF pré-configuradas acessando a referência de linguagem para regras personalizadas.