
Interfaz de usuario de terminal para explorar y reproducir registros de AWS WAF v2 desde CloudWatch, S3 y la API de muestreo, con filtrado YAML, detección de autenticación y reproducción con curl/navegador.
Navegador y reproductor de logs de AWS WAF v2 con una TUI interactiva. Extrae logs de CloudWatch, S3 y la API de muestreo de WAF (con caché en SQLite), los muestra en una interfaz de terminal de paneles divididos con detección de autenticación y filtrado basado en YAML, y reproduce solicitudes a través de Firefox, Chrome o curl con total fidelidad de encabezados/cookies/cuerpo. Admite exportación por lotes a curl, JSON y HAR.
uv pip install waf-fu
pipx install waf-fu
uv pip install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
pipx install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
git clone https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
cd waf-fu
uv pip install .
pipx install .
El archivo uv.toml incluido configura uv pip para instalar en el Python
del sistema en lugar de crear un virtualenv. pipx y uv tool install
siempre usan sus propios entornos aislados.
Python >= 3.12
Credenciales de AWS configuradas mediante perfil, variables de entorno o rol de instancia. Consulte Permisos IAM para los requisitos de cada fuente.
| Paquete | Versión mínima | Necesario para |
|---|---|---|
| boto3 | cualquiera | Obtención de logs de AWS |
| selenium | 4.26 | Reproducción en Chrome y Firefox |
| trio | cualquiera | Internos de reproducción CDP de Chrome |
boto3 y selenium están declarados en pyproject.toml y se instalan
automáticamente. trio es una dependencia transitiva del backend de Chrome.
La reproducción en navegador es opcional. La reproducción con curl funciona sin dependencias adicionales.
Firefox (recomendado para fidelidad de encabezados):
| Componente | Versión mínima | Instalación |
|---|---|---|
| Firefox | 120 | sudo dnf install firefox / sudo apt install firefox |
| geckodriver | 0.35.0 | sudo dnf install geckodriver / sudo apt install firefox-geckodriver o github.com/mozilla/geckodriver/releases (>= 0.35.0) |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
La reproducción en Firefox utiliza la interceptación de red WebDriver BiDi para inyectar el método, los encabezados, las cookies y el cuerpo de la solicitud original. La compatibilidad de red BiDi requiere geckodriver >= 0.35 y selenium >= 4.26. Las versiones anteriores recurren a un enfoque basado en XHR que no puede inyectar encabezados personalizados.
Chrome / Chromium:
| Componente | Versión mínima | Instalación |
|---|---|---|
| Chrome | 118 | sudo dnf install google-chrome-stable / sudo apt install google-chrome-stable o Chromium |
| chromedriver | 118 | sudo dnf install chromedriver / sudo apt install chromium-driver o googlechromelabs.github.io/chrome-for-testing |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
La reproducción en Chrome utiliza el dominio Fetch de CDP (Chrome DevTools Protocol) para interceptar y modificar solicitudes. El método, los encabezados, el cuerpo y las cookies se inyectan todos a través de CDP.
Las rutas de los controladores se pueden sobrescribir con --chromedriver PATH y
--geckodriver PATH si la detección automática no encuentra el binario correcto.
# TUI interactiva -- explorar y reproducir
waf-fu --log-group "aws-waf-logs-my-acl"
# Sin grupo de logs -- seleccionar interactivamente entre los grupos descubiertos
waf-fu --profile myprofile --region us-east-1
# Logs de WAF en S3 en lugar de CloudWatch
waf-fu --s3-bucket aws-waf-logs-my-bucket
# Descubrir y obtener todas las fuentes de logs en todas las regiones
waf-fu --inventory
# Prefiltrar antes de que se abra la TUI
waf-fu --start 4h --action BLOCK
# Modo sin conexión -- solo registros en caché, sin llamadas a AWS
waf-fu --db-only
# Reproducir a través de un proxy (Burp, mitmproxy, etc.)
waf-fu --log-group "aws-waf-logs-my-acl" --proxy 127.0.0.1:8080
# Exportación por lotes no interactiva
waf-fu --log-group "aws-waf-logs-my-acl" --mode batch-curl -o replay.sh
# Exportar registros en caché a JSON
waf-fu --export logs.json
# Modo de depuración -- registrar detalles de reproducción en archivo (datos del cliente censurados)
waf-fu --log-group "aws-waf-logs-my-acl" --debug
waf-fu extrae logs de WAF de tres fuentes y los fusiona por solicitud:
| Fuente | Opción de CLI | Datos |
|---|---|---|
| CloudWatch | --log-group (predeterminado) | JSON completo del log de WAF (encabezados, URI, consulta, acción) |
| S3 | --s3-bucket | Igual que CloudWatch, desde la entrega de S3 |
| WAF API | --log-location waf | Solicitudes muestreadas con campos sin censurar |
Use --log-location cwl|s3|waf para restringir a una sola fuente, o
--inventory para descubrir y obtener todas las fuentes en todas las regiones
automáticamente.
Los registros de diferentes fuentes se fusionan por clave de correlación para que vea una única vista unificada por solicitud, con los datos más completos de cada una.
Cada fuente necesita sus propios permisos IAM, limitados a las opciones de CLI que la activan.
Necesario para: operación predeterminada, --log-location cwl
logs:FilterLogEvents -- obtener registros de logs desde CloudWatchlogs:DescribeLogGroups -- descubrir grupos de logs que coincidan con aws-waf-logs-*Necesario para: --s3-bucket, --log-location s3, --inventory
s3:ListAllMyBuckets -- descubrir buckets de logs de WAF por prefijo de nombres3:ListBucket -- listar objetos de log en un bucket de logs de WAFs3:GetObject -- descargar archivos de log comprimidos con gzipNecesario para: --log-location waf, --inventory, enriquecimiento automático
wafv2:ListWebACLs -- descubrir web ACLswafv2:GetWebACL -- enumerar reglas para consultas de solicitudes muestreadaswafv2:GetLoggingConfiguration -- descubrir qué destinos de logs (CWL, S3) usa una ACLwafv2:GetSampledRequests -- recuperar muestras de solicitudes sin censurar (omite RedactedFields)Mínimo viable: solo se requieren los permisos de CloudWatch Logs. Los permisos de S3 y WAFv2 son opcionales y habilitan fuentes de datos adicionales. La herramienta recurre a alternativas de forma controlada cuando faltan permisos.