Runner
Panoramica
Sezione intitolata “Panoramica”runner.sh è l’orchestratore di suite che esegue tutti gli script numerati in una directory di suite nell’ordine corretto, acquisisce l’output e registra i metadati dei risultati. È installato in /opt/traffic-generator/suites/runner.sh sulla VM.
Utilizzo
Sezione intitolata “Utilizzo”runner.sh <suite-name> [--dry-run]Argomenti:
| Argomento | Obbligatorio | Descrizione |
|---|---|---|
suite-name | Sì | Nome della directory della suite (es. web-app-attacks, api-attacks) |
--dry-run | No | Mostra cosa verrebbe eseguito senza avviare alcuno script |
Esempi:
# Esegue la suite web-app-attacks/opt/traffic-generator/suites/runner.sh web-app-attacks
# Dry-run per visualizzare in anteprima gli script api-attacks/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# Esegue la simulazione bot/opt/traffic-generator/suites/runner.sh bot-simulationConfigurazione
Sezione intitolata “Configurazione”config.env
Sezione intitolata “config.env”Il runner legge la configurazione da /opt/traffic-generator/config.env:
# Obbligatorio: FQDN di destinazione (dominio del load balancer F5 XC)TARGET_FQDN=demo.example.com
# Opzionale: IP di origine diretto per test di riferimento (bypassa F5 XC)TARGET_ORIGIN_IP=Questo file viene scritto automaticamente durante il provisioning Terraform a partire dalle variabili target_fqdn e target_origin_ip. Per modificare la destinazione dopo il deployment, è possibile modificare direttamente questo file sulla VM.
Override delle variabili d’ambiente
Sezione intitolata “Override delle variabili d’ambiente”Qualsiasi variabile presente in config.env può essere sovrascritta esportandola prima di eseguire la suite:
# Override del FQDN di destinazione per una singola esecuzioneTARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Override tramite exportexport TARGET_FQDN=staging.example.com/opt/traffic-generator/suites/runner.sh web-app-attacksAnche il percorso del file di configurazione può essere sovrascritto:
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacksModalità Dry-Run
Sezione intitolata “Modalità Dry-Run”Il flag --dry-run mostra ogni script che verrebbe eseguito senza avviarlo effettivamente:
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-runOutput:
=== 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-attacksUtilizzare il dry-run per verificare la struttura della suite dopo il deployment o prima di eseguirla su una nuova destinazione.
Directory dei risultati
Sezione intitolata “Directory dei risultati”Ogni esecuzione della suite crea una directory dei risultati con timestamp:
/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/Struttura:
/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.logLo stdout e lo stderr di ogni script vengono acquisiti in un file .log con il nome dello script.
Formato meta.json
Sezione intitolata “Formato meta.json”Il file meta.json registra i metadati di esecuzione della suite:
{ "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}| Campo | Descrizione |
|---|---|
suite | Nome della suite |
target | FQDN di destinazione utilizzato per l’esecuzione |
started | Timestamp UTC dell’avvio della suite |
completed | Timestamp UTC del completamento della suite |
status | running durante l’esecuzione, completed al termine |
passed | Numero di script terminati con codice 0 |
failed | Numero di script terminati con codice diverso da zero |
skipped | Numero di script saltati (non eseguibili o in modalità dry-run) |
Esecuzione di singoli script
Sezione intitolata “Esecuzione di singoli script”Ogni script può essere eseguito in modalità standalone senza il runner:
# Esegue un singolo script direttamente/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# Esegue uno specifico attacco API/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.comGli script accettano il FQDN di destinazione come primo argomento posizionale. Non leggono direttamente config.env — solo il runner lo fa. Quando si eseguono in modalità standalone, è necessario passare il FQDN esplicitamente.
Esecuzione di tutte le suite in sequenza
Sezione intitolata “Esecuzione di tutte le suite in sequenza”Per eseguire tutte le suite in successione:
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 ""doneQuesto genera traffico completo su tutte le funzionalità di sicurezza di F5 XC. L’esecuzione completa richiede circa 45-80 minuti a seconda dei tempi di risposta della destinazione.
Esecuzione remota via SSH
Sezione intitolata “Esecuzione remota via SSH”Per eseguire le suite dalla propria macchina locale senza mantenere una sessione SSH attiva:
TGEN_IP=$(terraform output -raw public_ip)
# Esegue una singola suitessh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Esegue una suite con override della destinazionessh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# Esegue in background (resistente alla disconnessione)ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# Verifica i risultati in un secondo momentossh 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'Per suite a lunga esecuzione, utilizzare nohup o tmux per evitare che la disconnessione SSH interrompa il processo:
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Ricollegarsi in seguito per monitorare l'avanzamentossh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'Flusso di esecuzione
Sezione intitolata “Flusso di esecuzione”-
Caricamento della configurazione — Il runner legge
config.env(o l’overrideCONFIG_FILE), quindi verifica la presenza diTARGET_FQDNnell’ambiente. -
Validazione della suite — Verifica che la directory della suite indicata esista nella directory delle suite. Elenca le suite disponibili se non viene trovata.
-
Creazione della directory dei risultati — Crea
/opt/traffic-generator/results/<timestamp>-<suite>/e scrive ilmeta.jsoniniziale constatus: running. -
Esecuzione degli script — Itera i file corrispondenti a
[0-9]*nella directory della suite, ordinati per nome. Salta i file non eseguibili. PassaTARGET_FQDNcome primo argomento. Acquisisce l’output in<script-name>.log. -
Registrazione dei risultati — Aggiorna
meta.jsoncon il timestamp di completamento e i conteggi di esito positivo/negativo/saltato.