Runner
Übersicht
Abschnitt betitelt „Übersicht“runner.sh ist der Suite-Orchestrator, der alle nummerierten Skripte in einem Suite-Verzeichnis der Reihe nach ausführt, die Ausgabe erfasst und Ergebnismetadaten aufzeichnet. Er ist auf der VM unter /opt/traffic-generator/suites/runner.sh installiert.
Verwendung
Abschnitt betitelt „Verwendung“runner.sh <suite-name> [--dry-run]Argumente:
| Argument | Erforderlich | Beschreibung |
|---|---|---|
suite-name | Ja | Name des Suite-Verzeichnisses (z. B. web-app-attacks, api-attacks) |
--dry-run | Nein | Gibt aus, was ausgeführt werden würde, ohne Skripte tatsächlich auszuführen |
Beispiele:
# Run the web-app-attacks suite/opt/traffic-generator/suites/runner.sh web-app-attacks
# Dry-run to preview api-attacks scripts/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# Run bot simulation/opt/traffic-generator/suites/runner.sh bot-simulationKonfiguration
Abschnitt betitelt „Konfiguration“config.env
Abschnitt betitelt „config.env“Der Runner liest die Konfiguration aus /opt/traffic-generator/config.env:
# Required: target FQDN (F5 XC load balancer domain)TARGET_FQDN=demo.example.com
# Optional: direct origin IP for baseline testing (bypasses F5 XC)TARGET_ORIGIN_IP=Diese Datei wird während der Terraform-Provisionierung automatisch aus den Variablen target_fqdn und target_origin_ip geschrieben. Um das Ziel nach der Bereitstellung zu ändern, bearbeiten Sie diese Datei direkt auf der VM.
Überschreiben von Umgebungsvariablen
Abschnitt betitelt „Überschreiben von Umgebungsvariablen“Jede Variable in config.env kann durch Export vor dem Ausführen der Suite überschrieben werden:
# Override target FQDN for a single runTARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Override via exportexport TARGET_FQDN=staging.example.com/opt/traffic-generator/suites/runner.sh web-app-attacksDer Pfad zur Konfigurationsdatei selbst kann ebenfalls überschrieben werden:
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacksDry-Run-Modus
Abschnitt betitelt „Dry-Run-Modus“Das Flag --dry-run gibt jedes Skript aus, das ausgeführt werden würde, ohne es tatsächlich auszuführen:
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-runAusgabe:
=== 01-sqli.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com=== 02-xss.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/02-xss.sh demo.example.com=== 03-command-injection.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/03-command-injection.sh demo.example.com=== 04-path-traversal.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/04-path-traversal.sh demo.example.com=== 05-nikto-scan.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/05-nikto-scan.sh demo.example.com=== 06-nuclei-scan.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/06-nuclei-scan.sh demo.example.com=== Suite Complete ===Passed: 0 | Failed: 0 | Skipped: 6Results: /opt/traffic-generator/results/20260425-143000-web-app-attacksVerwenden Sie den Dry-Run-Modus, um die Suite-Struktur nach der Bereitstellung oder vor dem Ausführen einer Suite gegen ein neues Ziel zu überprüfen.
Ergebnisverzeichnis
Abschnitt betitelt „Ergebnisverzeichnis“Jeder Suite-Lauf erstellt ein zeitgestempeltes Ergebnisverzeichnis:
/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/Struktur:
/opt/traffic-generator/results/20260425-143000-web-app-attacks/ meta.json 01-sqli.sh.log 02-xss.sh.log 03-command-injection.sh.log 04-path-traversal.sh.log 05-nikto-scan.sh.log 06-nuclei-scan.sh.logDie Standardausgabe und Fehlerausgabe jedes Skripts werden in einer .log-Datei erfasst, die nach dem Skript benannt ist.
meta.json-Format
Abschnitt betitelt „meta.json-Format“Die Datei meta.json zeichnet Metadaten zur Suite-Ausführung auf:
{ "suite": "web-app-attacks", "target": "demo.example.com", "started": "2026-04-25T14:30:00Z", "completed": "2026-04-25T14:45:23Z", "status": "completed", "passed": 5, "failed": 1, "skipped": 0}| Feld | Beschreibung |
|---|---|
suite | Name der Suite |
target | Für den Lauf verwendeter Ziel-FQDN |
started | UTC-Zeitstempel, wann die Suite gestartet wurde |
completed | UTC-Zeitstempel, wann die Suite abgeschlossen wurde |
status | running während der Ausführung, completed nach Abschluss |
passed | Anzahl der Skripte, die mit Code 0 beendet wurden |
failed | Anzahl der Skripte, die mit einem Fehlercode beendet wurden |
skipped | Anzahl der übersprungenen Skripte (nicht ausführbar oder Dry-Run) |
Einzelne Skripte ausführen
Abschnitt betitelt „Einzelne Skripte ausführen“Jedes Skript kann eigenständig ohne den Runner ausgeführt werden:
# Run a single script directly/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# Run a specific API attack/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.comSkripte akzeptieren den Ziel-FQDN als erstes Positionsargument. Sie lesen config.env nicht direkt – das tut nur der Runner. Bei eigenständiger Ausführung müssen Sie den FQDN explizit übergeben.
Alle Suites nacheinander ausführen
Abschnitt betitelt „Alle Suites nacheinander ausführen“Um jede Suite nacheinander auszuführen:
for suite in web-app-attacks api-attacks bot-simulation reconnaissance ssl-scanning javascript-exploits traffic-generation; do echo "=========================================" echo "Starting suite: ${suite}" echo "=========================================" /opt/traffic-generator/suites/runner.sh "$suite" echo ""doneDies erzeugt umfassenden Datenverkehr über alle F5 XC-Sicherheitsfunktionen hinweg. Der vollständige Durchlauf dauert je nach Antwortzeiten des Ziels 45–80 Minuten.
Remote-Ausführung über SSH
Abschnitt betitelt „Remote-Ausführung über SSH“Führen Sie Suites von Ihrem lokalen Rechner aus, ohne eine SSH-Sitzung aufrechtzuerhalten:
TGEN_IP=$(terraform output -raw public_ip)
# Run a single suitessh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Run a suite with target overridessh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# Run in background (disconnection-safe)ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# Check results laterssh azureuser@${TGEN_IP} 'ls -la /opt/traffic-generator/results/ | tail -5'ssh azureuser@${TGEN_IP} 'cat /opt/traffic-generator/results/$(ls -t /opt/traffic-generator/results/ | head -1)/meta.json'Verwenden Sie bei lang laufenden Suites nohup oder tmux, um zu verhindern, dass eine SSH-Unterbrechung den Prozess beendet:
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Reattach later to watch progressssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'Ausführungsablauf
Abschnitt betitelt „Ausführungsablauf“-
Konfiguration laden — Der Runner liest
config.env(oder die Überschreibung viaCONFIG_FILE) und prüft dann, obTARGET_FQDNin der Umgebung vorhanden ist. -
Suite validieren — Bestätigt, dass das angegebene Suite-Verzeichnis unter dem Suites-Verzeichnis existiert. Listet verfügbare Suites auf, falls nicht gefunden.
-
Ergebnisverzeichnis erstellen — Erstellt
/opt/traffic-generator/results/<timestamp>-<suite>/und schreibt die initialemeta.jsonmitstatus: running. -
Skripte ausführen — Iteriert durch Dateien, die
[0-9]*im Suite-Verzeichnis entsprechen, sortiert nach Name. Überspringt nicht ausführbare Dateien. ÜbergibtTARGET_FQDNals erstes Argument. Erfasst die Ausgabe in<script-name>.log. -
Ergebnisse aufzeichnen — Aktualisiert
meta.jsonmit dem Abschlusszeitstempel sowie den Zählern für bestanden/fehlgeschlagen/übersprungen.