aws:tutoriales:challenges:waf
This is an old revision of the document!
Table of Contents
WAF (Web Application Firewall)
Parte 1: Teoría Básica
1. ¿Qué es AWS WAF?
- Definición: Servicio de firewall de capa 7 (aplicación) que protege aplicaciones web de ataques dirigidos al tráfico HTTP/HTTPS.
- Capa 7: Opera en el nivel de aplicación del modelo OSI, analizando solicitudes HTTP(S) (headers, body, URI, etc.).
- Diferencia con firewalls tradicionales:
- Los firewalls de red (capa 3/4) filtran por IPs/puertos.
- AWS WAF inspecciona contenido (ej: parámetros GET/POST, cookies).
- Casos de uso:
- Bloquear SQL Injection en formularios web.
- Detectar XSS en headers personalizados.
- Mitigar ataques DDoS aplicativos.
- Integración: Funciona con CloudFront, API Gateway y Application Load Balancer (ALB).
- Modelo de Costo: Pago por reglas creadas y solicitudes procesadas.
2. Conceptos Clave
- Web ACL (Access Control List): Conjunto de reglas para filtrar tráfico.
- Reglas (Rules): Acciones (Allow, Block, Count) basadas en condiciones (IPs, headers, etc.).
- Rule Groups: Grupos de reglas reutilizables (Managed por AWS o custom).
3. Notas de Uso Básico
- Crear un Web ACL:
1. Ir a AWS WAF & Shield en la consola.
2. Asociar a un recurso (ALB, CloudFront). 3. Agregar reglas con acciones definidas. * **Reglas Comunes**: * Bloquear IPs: Usar **IP match conditions**. * Detectar SQLi: Regex en el body (ej: `(?i)(\bunion\b)`). * **Monitoreo**: Habilitar [[https://docs.aws.amazon.com/waf/latest/developerguide/logging.html|AWS WAF Logs]] en S3/CloudWatch.
4. Documentación Oficial
Parte 2: Ejercicios Prácticos
Challenge AWS WAF
Contexto del Problema
La empresa TroncoSeco Software requiere proteger su aplicación web contra ataques de SQL Injection y XSS. Como administrador, debes implementar un WAF desde cero siguiendo esta guía.
Prerrequisitos
- Cuenta de AWS con acceso root.
- (Opcional) Aplicación web existente. Si no, se creará un ALB de ejemplo.
Ejercicio Paso a Paso
Paso 1: Crear un Application Load Balancer (ALB)
Si ya tienes un ALB, salta al Paso 2.
1. **Acceder a la consola de AWS**:
- Ingresa a [[https://aws.amazon.com|AWS Console]] > Inicia sesión como root.
2. **Crear el ALB**:
- Ve a **EC2** > **Load Balancers** > **Create Load Balancer**.
- Selecciona **Application Load Balancer**.
- **Configuración básica**:
* Nombre: `alb-troncoseco`.
* Esquema: **Internet-facing**.
* Listener: Puerto **80 (HTTP)**.
- **Security Group**: Crea uno nuevo permitiendo tráfico HTTP (0.0.0.0/0).
- **Target Group**: Crea uno nuevo (`tg-troncoseco`) con instancias ficticias si no hay servidores.
3. **Finalizar**: Haz clic en **Create**.
Paso 2: Crear un Web ACL en AWS WAF
1. **Acceder a AWS WAF**: - Busca **WAF & Shield** en la barra de servicios. 2. **Crear Web ACL**: - **Nombre**: `waf-troncoseco`. - **Recurso asociado**: Selecciona el ALB `alb-troncoseco`. - **Región**: Asegúrate de que coincida con la del ALB.
Paso 3: Añadir Reglas Personalizadas
Regla 1: Bloquear SQL Injection
1. **Crear regla**:
- En **Web ACLs** > `waf-troncoseco` > **Add rules** > **Add my own rules**.
- **Nombre**: `block-sqli`.
- **Condición**:
* **Field to inspect**: Body.
* **Match type**: Regex.
* **Patrón**: <code>(?i)(\b(union|select|insert|delete|update|drop|exec)\b)</code>.
- **Acción**: Block.
Regla 2: Bloquear XSS
1. **Crear regla**:
- **Nombre**: `block-xss`.
- **Condición**:
* **Field to inspect**: Headers > User-Agent.
* **Match type**: Regex.
* **Patrón**: <code>(<script>|javascript:|onerror=)</code>.
- **Acción**: Block.
Paso 4: Priorizar Reglas
1. **Orden de evaluación**:
- Arrastra las reglas en este orden:
1. `block-sqli`.
2. `block-xss`.
2. **Guardar**: Haz clic en **Create web ACL**.
Paso 5: Probar el WAF
1. **Obtener DNS del ALB**:
- Ve a **EC2** > **Load Balancers** > Copia el **DNS Name** de `alb-troncoseco`.
2. **Prueba SQLi**:
<code>
curl "http://[DNS-ALB]/?param=' OR 1=1 --"
</code>
* **Resultado esperado**: HTTP 403.
3. **Prueba XSS**:
<code>
curl -A "<script>alert('XSS')</script>" http://[DNS-ALB]/
</code>
* **Resultado esperado**: HTTP 403.
Paso 6: Habilitar Logs para Monitoreo
1. **Configurar logs en S3**: - En **Web ACLs** > `waf-troncoseco` > **Logging and metrics** > **Enable logging**. - Selecciona un bucket S3 ([[https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html|crea uno si es necesario]]).
2. **Ver logs en CloudWatch**: - Ve a **CloudWatch** > **Logs** > Busca `/aws/waf/webacl/waf-troncoseco`.
Paso 7: Limpiar Recursos (Opcional)
1. **Eliminar Web ACL**: - **WAF & Shield** > **Web ACLs** > Eliminar `waf-troncoseco`. 2. **Eliminar ALB**: - **EC2** > **Load Balancers** > Eliminar `alb-troncoseco`.
Notas Importantes
- Costos: La capa gratuita incluye 1 Web ACL, 10 reglas, y 1M solicitudes/mes.
- Seguridad: Nunca uses el usuario root para operaciones diarias. Usa usuarios IAM.
- Pruebas: Valida en staging antes de producción.
Solución de Problemas Comunes
- Reglas no bloquean:
- Verifica que el Web ACL esté asociado al ALB/CloudFront.
- Usa la acción Count para probar sin bloquear.
- Error 403 inesperado:
- Revisa los patrones de las reglas (ej: regex demasiado amplia).
Ejercicio 1 (Custom): Bloquear SQLi y XSS
Objetivo: Crear reglas personalizadas para ataques SQL Injection y Cross-Site Scripting.
Pasos:
- Crear Web ACL:
1. En AWS WAF, ir a "Web ACLs" > "Create web ACL".
2. Asociar a un ALB/CloudFront.
- Regla SQLi:
- Field to inspect: Body.
- Regex: `(?i)(\b(union|select|insert)\b)`.
- Regla XSS:
- Field to inspect: URI o Headers.
- Regex: `(<script>|javascript:)`.
Prueba:
<code>
curl "http://tu-endpoint?param=<script>alert('xss')</script>"
</code>
* **Resultado esperado**: HTTP 403 Forbidden.
Ejercicio 2 (Oficial AWS): Reglas Administradas
Objetivo: Usar AWS Managed Rules para bloquear tráfico malicioso.
Pasos:
1. En **Web ACL**, agregar un **Rule Group** > **AWSManagedRulesCommonRuleSet**. 2. Configurar acción **Block**. 3. Probar con User-Agent: `BadBot`.
Documentación:
Ejercicio 3 (Challenge Extra): Rate Limiting
Objetivo: Limitar solicitudes a 1000/IP en 5 minutos.
Configuración:
<code> 1. En Web ACL, crear "Rate-based rule". 2. Límite: 1000 solicitudes. 3. Acción: Block. </code>
Prueba:
<code> ab -n 2000 -c 10 http://tu-endpoint/ </code>
Recursos Adicionales
Notas Finales
- Capa Gratuita: 1 Web ACL, 10 reglas, 1M solicitudes/mes.
- Pruebas: Siempre en staging antes de producción.
- Mantenimiento: Actualizar reglas managed cada 3-6 meses.
Documentación de Soporte oficial
aws/tutoriales/challenges/waf.1740395873.txt.gz · Last modified: 2025/02/24 11:17 by gepelbaum
