Salta ai contenuti

Runner

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.

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

Argomenti:

ArgomentoObbligatorioDescrizione
suite-nameNome della directory della suite (es. web-app-attacks, api-attacks)
--dry-runNoMostra cosa verrebbe eseguito senza avviare alcuno script

Esempi:

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

Il runner legge la configurazione da /opt/traffic-generator/config.env:

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

Qualsiasi variabile presente in config.env può essere sovrascritta esportandola prima di eseguire la suite:

Terminal window
# Override del FQDN di destinazione per una singola esecuzione
TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Override tramite export
export TARGET_FQDN=staging.example.com
/opt/traffic-generator/suites/runner.sh web-app-attacks

Anche il percorso del file di configurazione può essere sovrascritto:

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

Il flag --dry-run mostra ogni script che verrebbe eseguito senza avviarlo effettivamente:

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

Output:

=== 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

Utilizzare il dry-run per verificare la struttura della suite dopo il deployment o prima di eseguirla su una nuova destinazione.

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

Lo stdout e lo stderr di ogni script vengono acquisiti in un file .log con il nome dello script.

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
}
CampoDescrizione
suiteNome della suite
targetFQDN di destinazione utilizzato per l’esecuzione
startedTimestamp UTC dell’avvio della suite
completedTimestamp UTC del completamento della suite
statusrunning durante l’esecuzione, completed al termine
passedNumero di script terminati con codice 0
failedNumero di script terminati con codice diverso da zero
skippedNumero di script saltati (non eseguibili o in modalità dry-run)

Ogni script può essere eseguito in modalità standalone senza il runner:

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

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

Per eseguire tutte le suite in successione:

Terminal window
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

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

Per eseguire le suite dalla propria macchina locale senza mantenere una sessione SSH attiva:

Terminal window
TGEN_IP=$(terraform output -raw public_ip)
# Esegue una singola suite
ssh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Esegue una suite con override della destinazione
ssh 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 momento
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'

Per suite a lunga esecuzione, utilizzare nohup o tmux per evitare che la disconnessione SSH interrompa il processo:

Terminal window
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Ricollegarsi in seguito per monitorare l'avanzamento
ssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'
  1. Caricamento della configurazione — Il runner legge config.env (o l’override CONFIG_FILE), quindi verifica la presenza di TARGET_FQDN nell’ambiente.

  2. Validazione della suite — Verifica che la directory della suite indicata esista nella directory delle suite. Elenca le suite disponibili se non viene trovata.

  3. Creazione della directory dei risultati — Crea /opt/traffic-generator/results/<timestamp>-<suite>/ e scrive il meta.json iniziale con status: running.

  4. Esecuzione degli script — Itera i file corrispondenti a [0-9]* nella directory della suite, ordinati per nome. Salta i file non eseguibili. Passa TARGET_FQDN come primo argomento. Acquisisce l’output in <script-name>.log.

  5. Registrazione dei risultati — Aggiorna meta.json con il timestamp di completamento e i conteggi di esito positivo/negativo/saltato.