Runner
Vue d’ensemble
Section intitulée « Vue d’ensemble »runner.sh est l’orchestrateur de suites qui exécute tous les scripts numérotés d’un répertoire de suite dans l’ordre, capture les sorties et enregistre les métadonnées des résultats. Il est installé à l’emplacement /opt/traffic-generator/suites/runner.sh sur la VM.
Utilisation
Section intitulée « Utilisation »runner.sh <suite-name> [--dry-run]Arguments :
| Argument | Obligatoire | Description |
|---|---|---|
suite-name | Oui | Nom du répertoire de suite (ex. : web-app-attacks, api-attacks) |
--dry-run | Non | Affiche ce qui serait exécuté sans lancer aucun script |
Exemples :
# 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-simulationConfiguration
Section intitulée « Configuration »config.env
Section intitulée « config.env »Le runner lit la configuration depuis /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=Ce fichier est écrit automatiquement lors du provisionnement Terraform à partir des variables target_fqdn et target_origin_ip. Pour modifier la cible après le déploiement, éditez ce fichier directement sur la VM.
Substitution par variable d’environnement
Section intitulée « Substitution par variable d’environnement »Toute variable de config.env peut être substituée en l’exportant avant d’exécuter la suite :
# 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-attacksLe chemin du fichier de configuration lui-même peut également être substitué :
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacksMode simulation (Dry-Run)
Section intitulée « Mode simulation (Dry-Run) »L’option --dry-run affiche chaque script qui serait exécuté sans le lancer :
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-runSortie :
=== 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-attacksUtilisez le mode simulation pour vérifier la structure de la suite après le déploiement ou avant d’exécuter une suite contre une nouvelle cible.
Répertoire de résultats
Section intitulée « Répertoire de résultats »Chaque exécution de suite crée un répertoire de résultats horodaté :
/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/Structure :
/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.logLa sortie standard et la sortie d’erreur de chaque script sont capturées dans un fichier .log portant le nom du script.
Format meta.json
Section intitulée « Format meta.json »Le fichier meta.json enregistre les métadonnées d’exécution de la 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}| Champ | Description |
|---|---|
suite | Nom de la suite |
target | FQDN cible utilisé pour l’exécution |
started | Horodatage UTC du démarrage de la suite |
completed | Horodatage UTC de la fin de la suite |
status | running pendant l’exécution, completed une fois terminée |
passed | Nombre de scripts ayant terminé avec le code 0 |
failed | Nombre de scripts ayant terminé avec un code non nul |
skipped | Nombre de scripts ignorés (non exécutables ou mode simulation) |
Exécution de scripts individuels
Section intitulée « Exécution de scripts individuels »Chaque script peut être exécuté de manière autonome sans le runner :
# 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.comLes scripts acceptent le FQDN cible comme premier argument positionnel. Ils ne lisent pas directement config.env — seul le runner le fait. Lors d’une exécution autonome, vous devez passer le FQDN explicitement.
Exécution de toutes les suites en séquence
Section intitulée « Exécution de toutes les suites en séquence »Pour exécuter toutes les suites les unes après les autres :
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 ""doneCette commande génère un trafic complet couvrant toutes les fonctionnalités de sécurité de F5 XC. Prévoyez entre 45 et 80 minutes pour l’exécution complète selon les temps de réponse de la cible.
Exécution distante via SSH
Section intitulée « Exécution distante via SSH »Exécutez des suites depuis votre machine locale sans maintenir une session SSH active :
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'Pour les suites de longue durée, utilisez nohup ou tmux pour éviter qu’une déconnexion SSH n’interrompe le processus :
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'Flux d’exécution
Section intitulée « Flux d’exécution »-
Chargement de la configuration — Le runner lit
config.env(ou la substitutionCONFIG_FILE), puis vérifie la présence deTARGET_FQDNdans l’environnement. -
Validation de la suite — Vérifie que le répertoire de suite nommé existe sous le répertoire des suites. Liste les suites disponibles si introuvable.
-
Création du répertoire de résultats — Crée
/opt/traffic-generator/results/<timestamp>-<suite>/et écrit le fichiermeta.jsoninitial avecstatus: running. -
Exécution des scripts — Parcourt les fichiers correspondant à
[0-9]*dans le répertoire de suite, triés par nom. Ignore les fichiers non exécutables. PasseTARGET_FQDNcomme premier argument. Capture la sortie dans<script-name>.log. -
Enregistrement des résultats — Met à jour
meta.jsonavec l’horodatage de fin et les compteurs de succès/échec/ignoré.