Saltar al contenido

¿Cómo configuro AWS WAF para proteger mis recursos de ataques comunes?

9 minutos de lectura
0

Quiero usar AWS WAF en mis recursos para protegerme contra los ataques comunes.

Solución

Nota: Si se muestran errores al ejecutar comandos de Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas para AWS CLI. Además, asegúrate de utilizar la versión más reciente de AWS CLI.

Para usar AWS WAF en tus recursos para protegerte contra los ataques comunes, usa una o varias de las siguientes opciones:

Migración de AWS WAF Classic a AWS WAF

Si usas AWS WAF Classic, se recomienda migrar a AWS WAF. Para más información, consulta ¿Por qué hacer la migración a AWS WAF?

Asociación de un recurso a una ACL web

En primer lugar, crea tu ACL web en AWS WAF. A continuación, asocia el recurso a esa ACL web para permitir que AWS WAF supervise las solicitudes entrantes. Para obtener más información, consulta Recursos con los que puede protegerse AWS WAF.

Recursos que se pueden integrar con AWS WAF

Para los recursos que se pueden integrar con AWS WAF, utiliza una de las siguientes opciones para integrar tus recursos:

Recursos que no se pueden integrar con AWS WAF
En el caso de los recursos que no se pueden integrar directamente con AWS WAF, utiliza una de las siguientes opciones para integrar los recursos:

Revisa las solicitudes entrantes para mejorar tus reglas

Para determinar los patrones de solicitud comunes, use registros de aplicaciones, como los registros de acceso del equilibrador de carga de aplicación o de CloudFront.
Nota: Se recomienda utilizar los registros de AWS WAF para almacenar, consultar y analizar los registros de solicitudes HTTP.

Después de determinar los patrones de solicitud comunes, almacena los registros en Amazon Simple Storage Service (Amazon S3) o Amazon CloudWatch. Para consultar los registros e identificar patrones, utiliza Amazon Athena o Información de registros de CloudWatch.
Por último, crea una regla de AWS WAF en el modo de recuento que verifique las solicitudes entrantes y, a continuación, establece la regla en Bloquear: Haz lo siguiente:

  • Crea una instrucción de regla NOT en el encabezado del host de ejemplo.com. Nota: Sustituye ejemplo.com por el encabezado de tu host.
  • Establece Acción en Bloquear. AWS WAF bloquea las solicitudes que no tienen el encabezado de host que especifiques.

Nota: Esta regla también bloquea las solicitudes al nombre de dominio completo (FQDN) proporcionado por AWS.

Los siguientes ejemplos son patrones de solicitud comunes que puedes encontrar.

Solicitudes de URI que no existen

Para reconocer las solicitudes de URI que no existen, debes conocer todos los URI compatibles de tu entorno. El siguiente es un ejemplo de consulta de Athena en los registros de AWS WAF que cuenta las solicitudes de cada URI:

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

A continuación, se muestra un ejemplo de consulta de CloudWatch en los registros de AWS WAF que cuenta las solicitudes de cada URI:

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

Solicitudes que contienen valores de encabezado de host diferentes

Este patrón incluye solicitudes con un encabezado de host HTTP que tu servidor web no admite. Este patrón también incluye solicitudes que contienen una dirección IP en lugar del nombre de dominio de tu sitio web.

El siguiente es un ejemplo de consulta de Athena en los registros de AWS WAF que cuenta las solicitudes con diferentes valores de encabezado 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

El siguiente es un ejemplo de consulta de CloudWatch en los registros de AWS WAF que cuenta las solicitudes con diferentes valores de encabezado de host:

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

Uso de reglas administradas de AWS para protegerse contra ataques comunes

Para usar las reglas administradas de AWS, identifica los patrones de solicitud y los ataques comunes contra los que deseas protegerte. A continuación, agrega los grupos de reglas administradas de AWS correspondientes. Para protegerte contra tareas especializadas, usa los siguientes grupos de reglas con un coste adicional:

Agrega los grupos de reglas relevantes a tu ACL web en el modo Recuento. Entonces, revise los registros de AWS WAF y las métricas de CloudWatch para determinar si la regla gestionada coincide con el tráfico legítimo. Si la regla no coincide con tráfico legítimo, desactiva el modo Habilitar recuento para que el grupo de reglas bloquee el tráfico. Para desactivar una regla específica en el grupo de reglas administradas de AWS, selecciona Invalidar la acción de reglas para esa regla.

Nota: Las solicitudes legítimas a tu entorno pueden iniciar las reglas administradas de AWS. Para obtener más información, consulta How to customize behavior of AWS Managed Rules for AWS WAF (Cómo personalizar el comportamiento de las reglas administradas de AWS para AWS WAF).

Uso de la tasa de solicitudes legítimas como referencia para AWS WAF

Para protegerte contra los ataques volumétricos, analiza el tráfico para identificar la cantidad de solicitudes realizadas por direcciones IP de clientes legítimas. Para analizar el tráfico, utiliza Información de registros de CloudWatch, consultas de Athena o Amazon Quick Sight en los registros de AWS WAF. Utiliza la información del análisis para establecer una referencia para tu AWS WAF. A continuación, configura una instrucción de regla basada en tasas para establecer un umbral de solicitud.

El siguiente es un ejemplo de consulta de Athena en los registros de AWS WAF que cuenta las solicitudes de una única dirección IP dentro de un intervalo de tiempo 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"

Nota: Sustituye 10.0.0.0 por tu dirección IP y 2020-11-16 09:00:00 y 2020-11-16 10:00:00 por tu intervalo de tiempo.

El siguiente es un ejemplo de consulta de Información de CloudWatch en los registros de AWS WAF que cuenta las solicitudes de una sola dirección IP:

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

Nota: Sustituye 10.0.0.0 por tu dirección IP.

El siguiente es un ejemplo de consulta de Athena en los registros de AWS WAF que cuenta todas las solicitudes de direcciones IP dentro de un intervalo de tiempo 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

Nota: Sustituye 2020-11-16 09:00:00 y 2020-11-16 10:00:00 por tu intervalo de tiempo.

El siguiente es un ejemplo de consulta de Información de CloudWatch en los registros de AWS WAF que cuenta las solicitudes de direcciones IP dentro de un intervalo de tiempo específico:

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

Uso de Automatizaciones de seguridad para AWS WAF para evitar ataques comunes

Para ofrecer protección adicional contra los ataques comunes, usa Automatizaciones de seguridad para AWS WAF.

Nota: Esta solución usa otros servicios de AWS que generan costes.

Uso de instrucciones de reglas de ataque XSS e inyección de código SQL

Para proteger tus aplicaciones contra los ataques de inyección de código SQL y XSS, utiliza instrucciones de reglas de ataque integradas para la inyección de código SQL y XSS. Los ataques pueden producirse en diferentes partes de la solicitud HTTP, como el encabezado HTTP, la cadena de consulta o el URI. Configura las reglas de AWS WAF para inspeccionar diferentes partes de la solicitud HTTP comparándolas con las instrucciones de las reglas de ataque.

Nota: Las solicitudes legítimas a tu entorno pueden iniciar las instrucciones de reglas de ataque. Para más información, consulta ¿Cómo puedo detectar los falsos positivos provocados por las reglas administradas de AWS?

Restricción del acceso desde CloudFront

Restringe el acceso en función de las direcciones IP de CloudFront. A continuación, añade un encabezado personalizado en CloudFront para las solicitudes de origen. En el origen, permite el acceso solo cuando el encabezado y el valor personalizados están presentes. Si el origen es un equilibrador de carga de aplicación o una puerta de enlace de API, utiliza AWS WAF en el origen. Esta acción permite las solicitudes que contienen el encabezado y el valor personalizados.

Protección contra los ataques DDoS

Para protegerte contra los ataques DDoS, consulta ¿Cómo utilizo AWS WAF para mitigar los ataques DDoS? y Grupo de reglas de prevención de denegación de servicio distribuida (DDoS) de AWS WAF. Consulta también AWS best practices for DDoS resiliency (Prácticas recomendadas de AWS para la resiliencia ante DDoS) y Características de AWS Shield.

Información relacionada

Modelo de responsabilidad compartida

Administración de falsos positivos en AWS WAF