Ir al contenido

Runner

runner.sh es el orquestador de suites que ejecuta todos los scripts numerados de un directorio de suite en orden, captura la salida y registra los metadatos de los resultados. Se instala en /opt/traffic-generator/suites/runner.sh en la VM.

Ventana de terminal
runner.sh <suite-name> [--dry-run]

Argumentos:

ArgumentoRequeridoDescripción
suite-nameNombre del directorio de la suite (p. ej., web-app-attacks, api-attacks)
--dry-runNoMuestra lo que se ejecutaría sin ejecutar ningún script

Ejemplos:

Ventana de terminal
# 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

El runner lee la configuración desde /opt/traffic-generator/config.env:

Ventana de terminal
# 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=

Este archivo se escribe automáticamente durante el aprovisionamiento de Terraform a partir de las variables target_fqdn y target_origin_ip. Para cambiar el destino después del despliegue, edite este archivo directamente en la VM.

Cualquier variable en config.env puede anularse exportándola antes de ejecutar la suite:

Ventana de terminal
# 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

La ruta al archivo de configuración también puede anularse:

Ventana de terminal
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacks

El indicador --dry-run muestra cada script que se ejecutaría sin ejecutarlo:

Ventana de terminal
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-run

Salida:

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

Utilice el modo dry-run para verificar la estructura de la suite tras el despliegue o antes de ejecutarla contra un nuevo destino.

Cada ejecución de suite crea un directorio de resultados con marca de tiempo:

/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/

Estructura:

/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

La salida estándar y los errores de cada script se capturan en un archivo .log con el nombre del script.

El archivo meta.json registra los metadatos de ejecución 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
}
CampoDescripción
suiteNombre de la suite
targetFQDN de destino utilizado en la ejecución
startedMarca de tiempo UTC cuando inició la suite
completedMarca de tiempo UTC cuando finalizó la suite
statusrunning durante la ejecución, completed al terminar
passedNúmero de scripts que finalizaron con código 0
failedNúmero de scripts que finalizaron con código distinto de cero
skippedNúmero de scripts omitidos (no ejecutables o en modo dry-run)

Cada script puede ejecutarse de forma independiente sin el runner:

Ventana de terminal
# 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

Los scripts aceptan el FQDN de destino como primer argumento posicional. No leen config.env directamente; solo el runner lo hace. Al ejecutar de forma independiente, debe pasar el FQDN explícitamente.

Para ejecutar todas las suites una tras otra:

Ventana de terminal
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

Esto genera tráfico exhaustivo a través de todas las funcionalidades de seguridad de F5 XC. Se espera que la ejecución completa tome entre 45 y 80 minutos según los tiempos de respuesta del destino.

Ejecute suites desde su máquina local sin mantener una sesión SSH activa:

Ventana de terminal
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'

Para suites de larga duración, utilice nohup o tmux para evitar que la desconexión SSH interrumpa el proceso:

Ventana de terminal
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. Cargar configuración — El runner lee config.env (o la anulación CONFIG_FILE), luego verifica TARGET_FQDN en el entorno.

  2. Validar la suite — Confirma que el directorio de suite indicado existe bajo el directorio de suites. Lista las suites disponibles si no se encuentra.

  3. Crear el directorio de resultados — Crea /opt/traffic-generator/results/<timestamp>-<suite>/ y escribe el meta.json inicial con status: running.

  4. Ejecutar los scripts — Itera sobre los archivos que coinciden con [0-9]* en el directorio de la suite, ordenados por nombre. Omite los archivos no ejecutables. Pasa TARGET_FQDN como primer argumento. Captura la salida en <script-name>.log.

  5. Registrar los resultados — Actualiza meta.json con la marca de tiempo de finalización y los conteos de scripts aprobados, fallidos y omitidos.