Zum Inhalt springen

Runner

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.

Terminal-Fenster
runner.sh <suite-name> [--dry-run]

Argumente:

ArgumentErforderlichBeschreibung
suite-nameJaName des Suite-Verzeichnisses (z. B. web-app-attacks, api-attacks)
--dry-runNeinGibt aus, was ausgeführt werden würde, ohne Skripte tatsächlich auszuführen

Beispiele:

Terminal-Fenster
# 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-simulation

Der Runner liest die Konfiguration aus /opt/traffic-generator/config.env:

Terminal-Fenster
# 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.

Jede Variable in config.env kann durch Export vor dem Ausführen der Suite überschrieben werden:

Terminal-Fenster
# Override target FQDN for a single run
TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Override via export
export TARGET_FQDN=staging.example.com
/opt/traffic-generator/suites/runner.sh web-app-attacks

Der Pfad zur Konfigurationsdatei selbst kann ebenfalls überschrieben werden:

Terminal-Fenster
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacks

Das Flag --dry-run gibt jedes Skript aus, das ausgeführt werden würde, ohne es tatsächlich auszuführen:

Terminal-Fenster
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-run

Ausgabe:

=== 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: 6
Results: /opt/traffic-generator/results/20260425-143000-web-app-attacks

Verwenden 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.

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.log

Die Standardausgabe und Fehlerausgabe jedes Skripts werden in einer .log-Datei erfasst, die nach dem Skript benannt ist.

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
}
FeldBeschreibung
suiteName der Suite
targetFür den Lauf verwendeter Ziel-FQDN
startedUTC-Zeitstempel, wann die Suite gestartet wurde
completedUTC-Zeitstempel, wann die Suite abgeschlossen wurde
statusrunning während der Ausführung, completed nach Abschluss
passedAnzahl der Skripte, die mit Code 0 beendet wurden
failedAnzahl der Skripte, die mit einem Fehlercode beendet wurden
skippedAnzahl der übersprungenen Skripte (nicht ausführbar oder Dry-Run)

Jedes Skript kann eigenständig ohne den Runner ausgeführt werden:

Terminal-Fenster
# 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.com

Skripte 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.

Um jede Suite nacheinander auszuführen:

Terminal-Fenster
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 ""
done

Dies erzeugt umfassenden Datenverkehr über alle F5 XC-Sicherheitsfunktionen hinweg. Der vollständige Durchlauf dauert je nach Antwortzeiten des Ziels 45–80 Minuten.

Führen Sie Suites von Ihrem lokalen Rechner aus, ohne eine SSH-Sitzung aufrechtzuerhalten:

Terminal-Fenster
TGEN_IP=$(terraform output -raw public_ip)
# Run a single suite
ssh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Run a suite with target override
ssh 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 later
ssh 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:

Terminal-Fenster
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Reattach later to watch progress
ssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'
  1. Konfiguration laden — Der Runner liest config.env (oder die Überschreibung via CONFIG_FILE) und prüft dann, ob TARGET_FQDN in der Umgebung vorhanden ist.

  2. Suite validieren — Bestätigt, dass das angegebene Suite-Verzeichnis unter dem Suites-Verzeichnis existiert. Listet verfügbare Suites auf, falls nicht gefunden.

  3. Ergebnisverzeichnis erstellen — Erstellt /opt/traffic-generator/results/<timestamp>-<suite>/ und schreibt die initiale meta.json mit status: running.

  4. Skripte ausführen — Iteriert durch Dateien, die [0-9]* im Suite-Verzeichnis entsprechen, sortiert nach Name. Überspringt nicht ausführbare Dateien. Übergibt TARGET_FQDN als erstes Argument. Erfasst die Ausgabe in <script-name>.log.

  5. Ergebnisse aufzeichnen — Aktualisiert meta.json mit dem Abschlusszeitstempel sowie den Zählern für bestanden/fehlgeschlagen/übersprungen.