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.
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.
En caso de ya haberlo creado,saltar al Paso 2.
1. Acceder a la consola de AWS:
2. Crear el ALB:
3. Finalizar: Haz clic en Create. #Lo mismo pero desde la CLI aws elbv2 create-load-balancer \
1. Acceder a AWS WAF:
2. Crear Web ACL:
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.
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.
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**.
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.
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`.
1. **Eliminar Web ACL**: - **WAF & Shield** > **Web ACLs** > Eliminar `waf-troncoso`. 2. **Eliminar ALB**: - **EC2** > **Load Balancers** > Eliminar `alb-troncoso`.
Objetivo: Crear reglas personalizadas para ataques SQL Injection y Cross-Site Scripting.
Pasos:
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.
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:
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>