Ir para o conteúdo

Como posso configurar o AWS WAF para proteger meus recursos de ataques comuns?

9 minuto de leitura
0

Quero usar o AWS WAF em meus recursos para me proteger de ataques comuns.

Resolução

Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para usar o AWS WAF em seus recursos para se proteger contra ataques comuns, realize uma ou mais das seguintes ações:

Migre do AWS WAF Classic para o AWS WAF

Se você usa o AWS WAF Classic, é uma prática recomendada migrar para o AWS WAF. Para obter mais informações, consulte Por que migrar para AWS WAF?

Associe seu recurso a uma ACL da web

Primeiro, crie sua ACL da web no AWS WAF. Em seguida, associe seu recurso a essa ACL da web para permitir que o AWS WAF monitore as solicitações recebidas. Para obter mais informações, consulte Recursos que é possível proteger com AWS WAF.

Recursos que podem ser integrados ao AWS WAF

Para recursos que podem ser integrados ao AWS WAF, use uma das seguintes opções para integrar seus recursos:

Recursos que não podem ser integrados ao AWS WAF
Nos recursos que não podem ser integrados diretamente ao AWS WAF, use uma das seguintes opções para integrar seus recursos:

Analise as solicitações recebidas para melhorar suas regras

Para identificar padrões de solicitação comuns, use os logs de aplicação, como os logs de acesso do Application Load Balancer ou do CloudFront.
Observação: é uma prática recomendada usar os logs do AWS WAF para armazenar, consultar e analisar logs de solicitações HTTP.

Depois de identificar padrões de solicitação comuns, armazene seus logs no Amazon Simple Storage Service (Amazon S3) ou no Amazon CloudWatch. Para consultar os logs e identificar padrões, use o Amazon Athena ou o CloudWatch Logs Insights.
Por fim, crie uma regra do AWS WAF no modo Count que verifique as solicitações recebidas e, em seguida, defina a regra para Block. Realize as seguintes ações:

  • Crie uma declaração de regra NOT no cabeçalho do host em example.com. Observação: substitua example.com pelo cabeçalho do seu host.
  • Defina Action como Block. O AWS WAF bloqueia solicitações que não têm o cabeçalho de host que você especifica.

Observação: essa regra também bloqueia solicitações para o nome de domínio totalmente qualificado (fully qualified domain name, FQDN) fornecido pela AWS.

Os exemplos a seguir são padrões de solicitação comuns que você pode encontrar.

Solicitações de URIs que não existem

Para reconhecer solicitações de URIs que não existem, você deve conhecer todos os URI compatíveis em seu ambiente. Veja a seguir um exemplo de consulta do Athena nos logs do AWS WAF que conta as solicitações para cada URI:

SELECT COUNT("httprequest"."uri") AS URIcount, "httprequest"."uri"  FROM waf_logs GROUP BY "httprequest"."uri" ORDER BY URIcount DESC

Veja a seguir um exemplo de consulta do CloudWatch nos logs do AWS WAF que conta as solicitações para cada URI:

fields httpRequest.uri| stats count(*) as requestCount by httpRequest.uri| sort requestCount desc

Solicitações que contêm diferentes valores de cabeçalho do host

Esse padrão inclui solicitações com um cabeçalho de host HTTP com o qual seu servidor web não é compatível. Esse padrão também inclui solicitações que contêm um endereço IP em vez do nome de domínio do seu site.

Veja a seguir um exemplo de consulta do Athena nos logs do AWS WAF que conta solicitações com diferentes valores de cabeçalho de host:

SELECT header.value as HostHeader, count(header) as count  FROM waf_logs, UNNEST(httprequest.headers) AS x(header) WHERE "header"."name" = 'Host' GROUP BY  header ORDER BY count DESC

Veja a seguir um exemplo de consulta do CloudWatch nos logs do AWS WAF que conta solicitações com diferentes valores de cabeçalho de host:

fields @timestamp, @message| parse @message '{"name":"Host","value":"*"}' as host| stats count(*) as requestCount by host| sort requestCount desc

Use as Regras gerenciadas pela AWS para se proteger de ataques comuns

Para usar as Regras gerenciadas pela AWS, identifique padrões de solicitação e ataques comuns contra os quais você deseja se proteger. Em seguida, adicione os grupos de regras relevantes das regras gerenciadas pela AWS. Para se proteger contra tarefas especializadas, use os seguintes grupos de regras por um custo adicional:

Adicione os grupos de regras relevantes à sua ACL da web no modo Count. Em seguida, analise os logs do AWS WAF e as métricas do CloudWatch para verificar se a regra gerenciada corresponde a algum tráfego legítimo. Se a regra não corresponder ao tráfego legítimo, desative o modo Enable count para que o grupo de regras bloqueie o tráfego. Para desativar uma regra específica no Grupo de regras gerenciadas pela AWS, selecione Substituir ação de regras para essa regra.

Observação: solicitações legítimas para seu ambiente podem iniciar as Regras gerenciadas pela AWS. Para obter mais informações, consulte How to customize behavior of AWS Managed Rules for AWS WAF (Como personalizar o comportamento das Regras gerenciadas pela AWS no AWS WAF).

Defina uma linha de base do seu AWS WAF usando a taxa de solicitações legítimas

Para se proteger contra ataques volumétricos, analise seu tráfego para identificar o número de solicitações feitas por endereços IP legítimos de clientes. Para analisar seu tráfego, use o CloudWatch Logs Insights, as consultas do Athena ou o Amazon Quick Sight nos logs do AWS WAF. Use as informações da análise como linha de base do seu AWS WAF. Em seguida, configure uma declaração de regra baseada em taxas para definir um limite de solicitação.

A seguir está um exemplo de consulta do Athena nos logs do AWS WAF que conta as solicitações de um único endereço IP dentro de um intervalo de tempo específico:

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"  FROM waf_logs WHERE httprequest.clientip LIKE '10.0.0.0' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00' GROUP BY "httprequest"."clientip", "httprequest"."country"

Observação: substitua 10.0.0.0 pelo seu endereço IP e 2020-11-16 09:00:00 e 2020-11-16 10:00:00 pelo seu intervalo de tempo.

Veja a seguir um exemplo de consulta do CloudWatch Insights nos logs do AWS WAF que conta as solicitações de um único endereço IP:

fields httpRequest.clientIp, httpRequest.country| stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country| filter httpRequest.clientIp = "10.0.0.0"

Observação: substitua 10.0.0.0 pelo seu endereço IP.

Veja a seguir um exemplo de consulta do Athena nos logs do AWS WAF que conta todas as solicitações de endereços IP dentro de um intervalo de tempo específico:

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"  FROM waf_logs WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') BETWEEN '2020-11-16 09:00:00' AND '2020-11-16 10:00:00' GROUP BY "httprequest"."clientip", "httprequest"."country" ORDER BY "count" DESC

Observação: substitua 2020-11-16 09:00:00 e 2020-11-16 10:00:00 pelo seu intervalo de tempo.

Veja a seguir um exemplo de consulta do CloudWatch Insights nos logs do AWS WAF que conta solicitações de endereços IP dentro de um intervalo de tempo específico:

fields httpRequest.clientIp, httpRequest.country| stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country| sort requestCount desc

Use Automações de segurança do AWS WAF para evitar ataques comuns

Para proporcionar proteção extra contra ataques comuns, é possível usar as Security Automations for AWS WAF (Automações de segurança do AWS WAF).

Observação: essa solução usa outros serviços da AWS que podem gerar custos.

Use instruções de regras de ataques de injeção de SQL e XSS

Para proteger suas aplicações contra ataques de injeção de SQL e XSS, use instruções integradas de regras de ataques de injeção de SQL e XSS. Os ataques podem ocorrer em diferentes partes da solicitação HTTP, como o cabeçalho HTTP, a string de consulta ou o URI. Configure suas regras do AWS WAF para inspecionar diferentes partes da solicitação HTTP em relação às instruções de regras de ataque.

Observação: solicitações legítimas para seu ambiente podem iniciar as instruções de regras de ataque. Para obter mais informações, consulte Como posso detectar falsos positivos causados pelo AWS Managed Rules?

Restrinja o acesso do CloudFront

Restrinja o acesso com base nos endereços IP do CloudFront. Em seguida, adicione um cabeçalho personalizado no CloudFront para solicitações de origem. Na origem, permita acesso somente quando o cabeçalho personalizado e o valor estiverem presentes. Se a origem for um Application Load Balancer ou API Gateway, use o AWS WAF na origem. Essa ação permite solicitações que contenham o cabeçalho personalizado e o valor.

Proteja-se contra ataques de DDoS

Para se proteger contra ataques de DDoS, consulte Como faço para usar o AWS WAF para mitigar ataques de DDoS? e AWS WAF Distributed Denial of Service (DDoS) prevention rule group (Grupo de regras de prevenção de negação de serviço distribuída (DDoS) do AWS WAF). Veja também AWS best practices for DDoS resiliency (Práticas recomendadas da AWS para resiliência contra DDoS) e Recursos do AWS Shield.

Informações relacionadas

Modelo de responsabilidade compartilhada

Gerenciamento de falsos positivos no AWS WAF

AWS OFICIALAtualizada há 7 meses