Skip to content

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 contra ataques comuns.

Breve descrição

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.
  • Associe seu recurso a uma lista de controle de acesso à web (ACL da web) no AWS WAF.
  • Analise solicitações recebidas para otimizar suas regras.
  • Use o AWS Managed Rules para se proteger contra ataques comuns.
  • Use a taxa de solicitações legítimas como base do AWS WAF.
  • Use automações de segurança para o AWS WAF para evitar ataques comuns.
  • Use declarações de regras de ataque de injeção de SQL e cross-site scripting (XSS).
  • Restrinja o acesso do Amazon CloudFront.
  • Proteja-se contra ataques de negação de serviço distribuída (DDoS).

Resolução

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

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 o 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. Se não for possível integrar diretamente seu recurso ao AWS WAF, analise as alternativas a seguir. Para obter mais informações, consulte Recursos que é possível proteger com o 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

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

Analise solicitações recebidas para otimizar suas regras

Para proteger seus recursos, use os logs de aplicação, como os logs de acesso do Application Load Balancer ou do CloudFront, para determinar padrões de solicitação comuns.

Observação: é uma prática recomendada usar logs do AWS WAF para armazenar, consultar e analisar logs de solicitações HTTP.

Depois de determinar 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 de Contagem que verifique as solicitações recebidas e, em seguida, defina a regra para Bloquear:

  1. Crie uma declaração de regra NOT no cabeçalho do host para exemplo.com.
    Observação: substitua exemplo.com pelo cabeçalho do seu host.
  2. Defina Ação como Bloquear. 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 pelo AWS.

Os exemplos a seguir são padrões de solicitação comuns que é possível encontrar.

Solicitações de URIs que não existem

Para reconhecer esse padrão, você deve conhecer cada URI compatível 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 que seu servidor web não suporta. 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

Usar AWS Managed Rules para se proteger contra ataques comuns

Para usar o AWS Managed Rules, identifique padrões de solicitação e ataques comuns contra os quais você deseja se proteger. Em seguida, adicione os grupos de regras relevantes do AWS Managed Rules. Para se proteger contra tarefas especializadas, é possível usar os seguintes grupos de regras por um custo adicional:

Adicione os grupos de regras relevantes à sua ACL da web no modo Contagem. Em seguida, revise os logs do AWS WAF e as métricas do CloudWatch para determinar 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 Ativar Contagem para que o grupo de regras bloqueie o tráfego. Para desabilitar uma regra específica no AWS Managed Rule Group, escolha Substituir ação de regras para essa regra.

Observação: solicitações legítimas para seu ambiente podem iniciar o AWS Managed Rules. Para obter mais informações, consulte Como personalizar o comportamento do AWS Managed Rules para o 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 de clientes legítimos. Para analisar seu tráfego, use o CloudWatch Logs Insights, as consultas do Athena ou o Amazon QuickSight nos logs do AWS WAF. Use as informações da análise para definir como base 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 período 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 período 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 período 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 período 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 período 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 para o AWS WAF para evitar ataques comuns

Para fornecer proteção adicional contra ataques comuns, é possível usar as Security Automations para o AWS WAF.

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

Use declarações de regras de ataque de injeção de SQL e XSS

Para proteger suas aplicações contra ataques de injeção de SQL e XSS, use declarações de regras de ataque integradas para 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 declarações de regras de ataque.

Observação: solicitações legítimas para seu ambiente podem iniciar as declaraçõ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

É possível restringir 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 o acesso somente se 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.

Proteger-se contra ataques de DDoS

Para se proteger contra ataques de DDoS, consulte Práticas recomendadas do AWS para resiliência contra DDoS e atributos do AWS Shield.

Informações relacionadas

Modelo de responsabilidade compartilhada

Gerenciamento de falsos positivos no AWS WAF

AWS OFICIALAtualizada há um mês