aws:tutoriales:challenges:waf
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| aws:tutoriales:challenges:waf [2025/02/24 10:52] – created gepelbaum | aws:tutoriales:challenges:waf [2025/03/03 23:53] (current) – [Solución de Problemas Comunes] gepelbaum | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== WAF (Web Application Firewall) ====== | ====== WAF (Web Application Firewall) ====== | ||
| - | ===== Teoría Básica ===== | + | ===== Parte 1: Teoría Básica ===== |
| === 1. ¿Qué es AWS WAF? === | === 1. ¿Qué es AWS WAF? === | ||
| - | * **Definición**: | + | * **Definición**: |
| + | * **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/ | ||
| + | - 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**: | * **Integración**: | ||
| * **Modelo de Costo**: Pago por reglas creadas y solicitudes procesadas. | * **Modelo de Costo**: Pago por reglas creadas y solicitudes procesadas. | ||
| Line 28: | Line 36: | ||
| ===== Parte 2: Ejercicios Prácticos ===== | ===== Parte 2: Ejercicios Prácticos ===== | ||
| + | ====== Challenge AWS WAF ====== | ||
| + | |||
| + | |||
| + | ===== Contexto del Problema ===== | ||
| + | La empresa **Troncoso Software** requiere proteger su aplicación web contra ataques de SQL Injection y XSS. Como administrador, | ||
| + | |||
| + | ===== Prerrequisitos ===== | ||
| + | * Cuenta de AWS con acceso **root**. | ||
| + | * (Opcional) Aplicación web existente. Si no, se creará un ALB de ejemplo. | ||
| + | |||
| + | ===== Solución: ===== | ||
| + | === Paso 1: Crear un Application Load Balancer(ALB) === | ||
| + | **En caso de ya haberlo creado, | ||
| + | |||
| + | 1. **Acceder a la consola de AWS**: | ||
| + | - Ingresa a [[https:// | ||
| + | 2. **Crear el ALB**: | ||
| + | - Ve a **EC2** > **Load Balancers** > **Create Load Balancer**. | ||
| + | - Selecciona **Application Load Balancer**. | ||
| + | - **Configuración básica**: | ||
| + | * Nombre: `alb-troncoso`. | ||
| + | * Esquema: **Internet-facing**. | ||
| + | * Listener: Puerto **80 (HTTP)**. | ||
| + | - **Security Group**: Crea uno nuevo permitiendo tráfico HTTP (0.0.0.0/ | ||
| + | - **Target Group**: Crea uno nuevo (`tg-troncoso`) con instancias ficticias si no hay servidores. | ||
| + | 3. **Finalizar**: | ||
| + | **#Lo mismo pero desde la CLI** | ||
| + | aws elbv2 create-load-balancer \ | ||
| + | --name alb-troncoseco \ | ||
| + | --subnets subnet-XXXXXXXX subnet-YYYYYYYY \ | ||
| + | --security-groups sg-XXXXXXXX \ | ||
| + | --scheme internet-facing \ | ||
| + | --type application \ | ||
| + | --ip-address-type ipv4 | ||
| + | |||
| + | |||
| + | === 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-troncoso`. | ||
| + | - **Recurso asociado**: Selecciona el ALB `alb-troncoso`. | ||
| + | - **Región**: | ||
| + | |||
| + | === Paso 3: Añadir Reglas Personalizadas === | ||
| + | ==== Regla 1: Bloquear SQL Injection ==== | ||
| + | 1. **Crear regla**: | ||
| + | - En **Web ACLs** > `waf-troncoso` > **Add rules** > **Add my own rules**. | ||
| + | - **Nombre**: `block-sqli`. | ||
| + | - **Condición**: | ||
| + | * **Field to inspect**: Body. | ||
| + | * **Match type**: Regex. | ||
| + | * **Patrón**: | ||
| + | - **Acción**: | ||
| + | |||
| + | ==== Regla 2: Bloquear XSS ==== | ||
| + | 1. **Crear regla**: | ||
| + | - **Nombre**: `block-xss`. | ||
| + | - **Condición**: | ||
| + | * **Field to inspect**: Headers > User-Agent. | ||
| + | * **Match type**: Regex. | ||
| + | * **Patrón**: | ||
| + | - **Acción**: | ||
| + | |||
| + | === Paso 4: Priorizar Reglas === | ||
| + | 1. **Orden de evaluación**: | ||
| + | - Arrastra las reglas en este orden: | ||
| + | 1. `block-sqli`. | ||
| + | 2. `block-xss`. | ||
| + | 2. **Guardar**: | ||
| + | |||
| + | === Paso 5: Probar el WAF === | ||
| + | 1. **Obtener DNS del ALB**: | ||
| + | - Ve a **EC2** > **Load Balancers** > Copia el **DNS Name** de `alb-troncoso`. | ||
| + | 2. **Prueba SQLi**: | ||
| + | < | ||
| + | curl " | ||
| + | </ | ||
| + | * **Resultado esperado**: HTTP 403. | ||
| + | 3. **Prueba XSS**: | ||
| + | < | ||
| + | curl -A "< | ||
| + | </ | ||
| + | * **Resultado esperado**: HTTP 403. | ||
| + | |||
| + | === Paso 6: Habilitar Logs para Monitoreo === | ||
| + | 1. **Configurar logs en S3**: | ||
| + | - En **Web ACLs** > `waf-troncoso` > **Logging and metrics** > **Enable logging**. | ||
| + | - Selecciona un bucket S3 ([[https:// | ||
| + | |||
| + | 2. **Ver logs en CloudWatch**: | ||
| + | - Ve a **CloudWatch** > **Logs** > Busca `/ | ||
| + | |||
| + | === Paso 7: Limpiar Recursos (Opcional) === | ||
| + | 1. **Eliminar Web ACL**: | ||
| + | - **WAF & Shield** > **Web ACLs** > Eliminar `waf-troncoso`. | ||
| + | 2. **Eliminar ALB**: | ||
| + | - **EC2** > **Load Balancers** > Eliminar `alb-troncoso`. | ||
| + | |||
| + | ===== Notas Importantes ===== | ||
| + | * **Costos**: La capa gratuita incluye 1 Web ACL, 10 reglas, y 1M solicitudes/ | ||
| + | * **Seguridad**: | ||
| + | * **Pruebas**: | ||
| + | |||
| + | ===== Solución de Problemas Comunes ===== | ||
| + | * **Reglas no bloquean**: | ||
| + | - Verifica que el Web ACL esté asociado al ALB/ | ||
| + | - 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 === | === Ejercicio 1 (Custom): Bloquear SQLi y XSS === | ||
| Line 34: | Line 154: | ||
| **Pasos**: | **Pasos**: | ||
| - **Crear Web ACL**: | - **Crear Web ACL**: | ||
| - | | + | |
| 1. En AWS WAF, ir a "Web ACLs" > " | 1. En AWS WAF, ir a "Web ACLs" > " | ||
| 2. Asociar a un ALB/ | 2. Asociar a un ALB/ | ||
| - | </ | + | |
| - **Regla SQLi**: | - **Regla SQLi**: | ||
| * **Field to inspect**: Body. | * **Field to inspect**: Body. | ||
| Line 84: | Line 204: | ||
| * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/ | * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/ | ||
| * **Pruebas**: | * **Pruebas**: | ||
| - | * **Mantenimiento**: | + | * **Mantenimiento**: |
| + | * | ||
| + | ====== Documentación y Soporte oficial ====== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
aws/tutoriales/challenges/waf.1740394325.txt.gz · Last modified: 2025/02/24 10:52 by gepelbaum
