User Tools

Site Tools


aws:tutoriales:challenges:waf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
aws:tutoriales:challenges:waf [2025/02/24 10:56] – [Parte 1: Teoría Básica] gepelbaumaws:tutoriales:challenges:waf [2025/03/03 23:53] (current) – [Solución de Problemas Comunes] gepelbaum
Line 36: 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, 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.  
 +
 +===== Solución: =====  
 +=== Paso 1: Crear un Application Load Balancer(ALB) ===  
 +**En caso de ya haberlo creado,saltar 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-troncoso`.  
 +       * 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-troncoso`) con instancias ficticias si no hay servidores.  
 +3. **Finalizar**: Haz clic en **Create**.  
 +**#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**: 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-troncoso` > **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-troncoso`.  
 +  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-troncoso` > **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-troncoso`.  
 +
 +=== 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/mes.  
 +  * **Seguridad**: Nunca uses el usuario root para operaciones diarias. Usa [[https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html|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 ===   === Ejercicio 1 (Custom): Bloquear SQLi y XSS ===  
Line 42: Line 154:
 **Pasos**:   **Pasos**:  
   - **Crear Web ACL**:     - **Crear Web ACL**:  
-    <code>  +    
     1. En AWS WAF, ir a "Web ACLs" > "Create web ACL".       1. En AWS WAF, ir a "Web ACLs" > "Create web ACL".  
     2. Asociar a un ALB/CloudFront.       2. Asociar a un ALB/CloudFront.  
-    </code>  +      
   - **Regla SQLi**:     - **Regla SQLi**:  
     * **Field to inspect**: Body.       * **Field to inspect**: Body.  
Line 92: Line 204:
   * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/mes.     * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/mes.  
   * **Pruebas**: Siempre en staging antes de producción.     * **Pruebas**: Siempre en staging antes de producción.  
-  * **Mantenimiento**: Actualizar reglas managed cada 3-6 meses.  +  * **Mantenimiento**: Actualizar reglas managed cada 3-6 meses.  
 +  *  
 +====== Documentación y Soporte oficial ======   
 +  * [[https://docs.aws.amazon.com/waf/latest/developerguide/tutorials-create-web-acl.html|Tutorial Oficial: Crear un Web ACL]].   
 +  * [[https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing.html|Pruebas de Reglas WAF]].   
 + 
  
aws/tutoriales/challenges/waf.1740394589.txt.gz · Last modified: 2025/02/24 10:56 by gepelbaum