
Terminal-UI zum Durchsuchen und Wiedergeben von AWS WAF v2-Logs aus CloudWatch, S3 und der Sampling-API, mit YAML-Filterung, Authentifizierungserkennung und curl/Browser-Wiedergabe.
AWS WAF v2 Log-Browser und Replayer mit einer interaktiven TUI. Ruft Logs aus CloudWatch, S3 und der WAF-Sampling-API ab (mit SQLite-Caching), zeigt sie in einer geteilten Terminal-UI mit Auth-Erkennung und YAML-basierter Filterung an und spielt Anfragen über Firefox, Chrome oder curl mit vollständiger Header-/Cookie-/Body-Treue erneut ab. Unterstützt Batch-Export nach curl, JSON und 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 .
Die mitgelieferte uv.toml konfiguriert uv pip so, dass es in das
System-Python installiert, anstatt eine virtuelle Umgebung zu erstellen.
pipx und uv tool install verwenden immer ihre eigenen isolierten
Umgebungen.
Python >= 3.12
AWS-Anmeldedaten konfiguriert über Profil, Umgebungsvariablen oder Instanzrolle. Siehe IAM-Berechtigungen für die Anforderungen pro Quelle.
| Paket | Mindestversion | Erforderlich für |
|---|---|---|
| boto3 | beliebig | AWS-Log-Abruf |
| selenium | 4.26 | Chrome- und Firefox-Replay |
| trio | beliebig | Chrome-CDP-Replay-Interna |
boto3 und selenium sind in pyproject.toml deklariert und werden
automatisch installiert. trio ist eine transitive Abhängigkeit des
Chrome-Backends.
Browser-Replay ist optional. Curl-Replay funktioniert ohne zusätzliche Abhängigkeiten.
Firefox (empfohlen für Header-Treue):
| Komponente | Mindestversion | Installation |
|---|---|---|
| Firefox | 120 | sudo dnf install firefox / sudo apt install firefox |
| geckodriver | 0.35.0 | sudo dnf install geckodriver / sudo apt install firefox-geckodriver oder github.com/mozilla/geckodriver/releases (>= 0.35.0) |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Firefox-Replay verwendet WebDriver BiDi Network Interception, um die Methode, Header, Cookies und den Body der ursprünglichen Anfrage einzuschleusen. BiDi-Netzwerkunterstützung erfordert geckodriver >= 0.35 und selenium >= 4.26. Ältere Versionen fallen auf einen XHR-basierten Ansatz zurück, der keine benutzerdefinierten Header einschleusen kann.
Chrome / Chromium:
| Komponente | Mindestversion | Installation |
|---|---|---|
| Chrome | 118 | sudo dnf install google-chrome-stable / sudo apt install google-chrome-stable oder Chromium |
| chromedriver | 118 | sudo dnf install chromedriver / sudo apt install chromium-driver oder googlechromelabs.github.io/chrome-for-testing |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Chrome-Replay verwendet die CDP (Chrome DevTools Protocol) Fetch Domain, um Anfragen abzufangen und zu modifizieren. Methode, Header, Body und Cookies werden alle über CDP eingeschleust.
Treiberpfade können mit --chromedriver PATH und --geckodriver PATH
überschrieben werden, falls die Auto-Erkennung die korrekte Binärdatei
nicht findet.
# Interaktive TUI -- browsen und replayed
waf-fu --log-group "aws-waf-logs-my-acl"
# Keine Log-Gruppe -- interaktiv aus entdeckten Gruppen auswählen
waf-fu --profile myprofile --region us-east-1
# S3-WAF-Logs statt CloudWatch
waf-fu --s3-bucket aws-waf-logs-my-bucket
# Jede Log-Quelle über alle Regionen hinweg entdecken und abrufen
waf-fu --inventory
# Vor dem Öffnen der TUI vorfiltern
waf-fu --start 4h --action BLOCK
# Offline-Modus -- nur gecachte Datensätze, keine AWS-Aufrufe
waf-fu --db-only
# Replay über einen Proxy (Burp, mitmproxy, etc.)
waf-fu --log-group "aws-waf-logs-my-acl" --proxy 127.0.0.1:8080
# Nicht-interaktiver Batch-Export
waf-fu --log-group "aws-waf-logs-my-acl" --mode batch-curl -o replay.sh
# Gecachte Datensätze nach JSON exportieren
waf-fu --export logs.json
# Debug-Modus -- Replay-Details in Datei protokollieren (Client-Daten redigiert)
waf-fu --log-group "aws-waf-logs-my-acl" --debug
waf-fu ruft WAF-Logs aus drei Quellen ab und führt sie pro Anfrage zusammen:
| Quelle | CLI-Flag | Daten |
|---|---|---|
| CloudWatch | --log-group (Standard) | Vollständiges WAF-Log-JSON (Header, URI, Query, Aktion) |
| S3 | --s3-bucket | Wie CloudWatch, aus S3-Zustellung |
| WAF API | --log-location waf | Gesampelte Anfragen mit unredigierten Feldern |
Verwenden Sie --log-location cwl|s3|waf, um auf eine einzelne Quelle
einzuschränken, oder --inventory, um alle Quellen über alle Regionen
hinweg automatisch zu entdecken und abzurufen.
Datensätze aus verschiedenen Quellen werden über einen Korrelationsschlüssel zusammengeführt, sodass Sie eine einzelne vereinheitlichte Ansicht pro Anfrage sehen, mit den reichhaltigsten Daten aus jeder Quelle.
Jede Quelle benötigt ihre eigenen IAM-Berechtigungen, beschränkt auf die CLI-Flags, die sie auslösen.
Erforderlich für: Standardbetrieb, --log-location cwl
logs:FilterLogEvents -- Log-Datensätze aus CloudWatch abrufenlogs:DescribeLogGroups -- Log-Gruppen entdecken, die aws-waf-logs-* entsprechenErforderlich für: --s3-bucket, --log-location s3, --inventory
s3:ListAllMyBuckets -- WAF-Log-Buckets nach Namenspräfix entdeckens3:ListBucket -- Log-Objekte in einem WAF-Log-Bucket auflistens3:GetObject -- gzip-komprimierte Log-Dateien herunterladenErforderlich für: --log-location waf, --inventory, Auto-Anreicherung
wafv2:ListWebACLs -- Web-ACLs entdeckenwafv2:GetWebACL -- Regeln für gesampelte Anfrageabfragen aufzählenwafv2:GetLoggingConfiguration -- entdecken, welche Log-Ziele (CWL, S3) eine ACL verwendetwafv2:GetSampledRequests -- unredigierte Anfragestichproben abrufen (umgeht RedactedFields)Minimal erforderlich: nur CloudWatch-Logs-Berechtigungen sind notwendig. S3- und WAFv2-Berechtigungen sind optional und aktivieren zusätzliche Datenquellen. Das Tool fällt graceful zurück, wenn Berechtigungen fehlen.