Saltar al contenido

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

10 minutos de lectura
0

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

Descripción corta

Para usar AWS WAF en tus recursos para protegerte contra los ataques comunes, lleva a cabo una o varias de las siguientes acciones:

  • Migra de AWS WAF Classic a AWS WAF.
  • Asocia tu recurso a una lista de control de acceso web (ACL web) en AWS WAF.
  • Revisa las solicitudes entrantes para optimizar tus reglas.
  • Utiliza reglas administradas de AWS para protegerte contra ataques comunes.
  • Utiliza la tasa de solicitudes legítimas como referencia para AWS WAF.
  • Utiliza Automatizaciones de seguridad para AWS WAF para evitar ataques comunes.
  • Utiliza instrucciones de reglas de ataque de inyección de código SQL y scripting entre sitios (XSS).
  • Restringe el acceso desde Amazon CloudFront.
  • Protégete contra los ataques de denegación de servicio distribuida (DDoS).

Resolución

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

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. Si no puedes integrar directamente tu recurso con AWS WAF, revisa las siguientes alternativas. Para obtener más información, consulta Recursos que se pueden proteger con 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:

Revisión de las solicitudes entrantes para optimizar las reglas personalizadas

Para proteger los recursos, utiliza los registros de las aplicaciones, como los registros de acceso de CloudFront o del equilibrador de carga de aplicación, para determinar los patrones de solicitud más comunes.

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:

  1. 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.
  2. 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 este patrón, debes conocer todos los URI compatibles en 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, puedes usar los siguientes grupos de reglas con un coste adicional:

Agrega los grupos de reglas relevantes a tu ACL web en el modo Recuento. A continuación, revisa los registros de AWS WAF y las métricas de CloudWatch para determinar si la regla administrada coincide con tráfico legítimo. Si la regla no coincide con tráfico legítimo, desactiva el modo Activar 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 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 QuickSight 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 periodo 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 periodo 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 periodo 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 periodo 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 periodo 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, puedes usar 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 reglas administradas de AWS?

Restricción del acceso desde CloudFront

Puedes restringir el acceso en función de las direcciones IP de CloudFront. A continuación, agrega un encabezado personalizado en CloudFront para las solicitudes de origen. En el origen, permite el acceso solo si 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 las prácticas recomendadas de AWS para la resiliencia frente a DDoS y las características de AWS Shield.

Información relacionada

Modelo de responsabilidad compartida

Administración de falsos positivos en AWS WAF

OFICIAL DE AWSActualizada hace 6 meses