コンテンツにスキップ

ランナー

runner.sh は、スイートディレクトリ内の番号付きスクリプトをすべて順番に実行し、出力をキャプチャして結果メタデータを記録するスイートオーケストレーターです。VM 上の /opt/traffic-generator/suites/runner.sh にインストールされています。

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

引数:

引数必須説明
suite-nameはいスイートディレクトリ名(例: web-app-attacksapi-attacks
--dry-runいいえスクリプトを実行せずに実行対象を表示します

例:

Terminal window
# web-app-attacks スイートを実行する
/opt/traffic-generator/suites/runner.sh web-app-attacks
# api-attacks スクリプトをドライランでプレビューする
/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# ボットシミュレーションを実行する
/opt/traffic-generator/suites/runner.sh bot-simulation

ランナーは /opt/traffic-generator/config.env から設定を読み込みます:

Terminal window
# 必須: ターゲット FQDN(F5 XC ロードバランサーのドメイン)
TARGET_FQDN=demo.example.com
# オプション: ベースラインテスト用の直接オリジン IP(F5 XC をバイパス)
TARGET_ORIGIN_IP=

このファイルは、target_fqdn および target_origin_ip 変数から Terraform プロビジョニング中に自動的に書き込まれます。デプロイ後にターゲットを変更するには、VM 上でこのファイルを直接編集してください。

config.env 内の任意の変数は、スイートを実行する前にエクスポートすることでオーバーライドできます:

Terminal window
# 単一の実行でターゲット FQDN をオーバーライドする
TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# export を使ってオーバーライドする
export TARGET_FQDN=staging.example.com
/opt/traffic-generator/suites/runner.sh web-app-attacks

設定ファイルのパス自体もオーバーライドできます:

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

--dry-run フラグは、実行せずに実行されるスクリプトをそれぞれ表示します:

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

出力:

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

ドライランを使用して、デプロイ後または新しいターゲットに対してスイートを実行する前にスイート構造を確認してください。

各スイートの実行により、タイムスタンプ付きの結果ディレクトリが作成されます:

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

構造:

/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

各スクリプトの stdout と stderr は、スクリプトにちなんで名付けられた .log ファイルにキャプチャされます。

meta.json ファイルはスイート実行のメタデータを記録します:

{
"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
}
フィールド説明
suiteスイート名
target実行に使用されたターゲット FQDN
startedスイートが開始された UTC タイムスタンプ
completedスイートが完了した UTC タイムスタンプ
status実行中は running、完了時は completed
passedコード 0 で終了したスクリプトの数
failedゼロ以外のコードで終了したスクリプトの数
skippedスキップされたスクリプトの数(実行不可またはドライラン)

各スクリプトはランナーなしでスタンドアロンとして実行できます:

Terminal window
# 単一スクリプトを直接実行する
/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# 特定の API 攻撃を実行する
/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.com

スクリプトは最初の位置引数としてターゲット FQDN を受け取ります。スクリプトは config.env を直接読み込みません — それはランナーのみが行います。スタンドアロンで実行する場合は、FQDN を明示的に渡す必要があります。

すべてのスイートを順番に実行する

Section titled “すべてのスイートを順番に実行する”

すべてのスイートを連続して実行するには:

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

これにより、すべての F5 XC セキュリティ機能にわたる包括的なトラフィックが生成されます。ターゲットの応答時間によって、完全な実行には 45〜80 分かかることが予想されます。

SSH セッションを維持せずにローカルマシンからスイートを実行します:

Terminal window
TGEN_IP=$(terraform output -raw public_ip)
# 単一スイートを実行する
ssh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# ターゲットをオーバーライドしてスイートを実行する
ssh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# バックグラウンドで実行する(切断に対して安全)
ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# 後で結果を確認する
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'

長時間実行されるスイートの場合、SSH の切断によってプロセスが終了しないように nohup または tmux を使用してください:

Terminal window
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# 後で再接続して進捗を確認する
ssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'
  1. 設定の読み込み — ランナーは config.env(または CONFIG_FILE のオーバーライド)を読み込み、環境内の TARGET_FQDN を確認します。

  2. スイートの検証 — 指定されたスイートディレクトリがスイートディレクトリ以下に存在することを確認します。見つからない場合は利用可能なスイートを一覧表示します。

  3. 結果ディレクトリの作成/opt/traffic-generator/results/<timestamp>-<suite>/ を作成し、status: running で初期 meta.json を書き込みます。

  4. スクリプトの実行 — スイートディレクトリ内の [0-9]* にマッチするファイルを名前順にソートして反復処理します。実行不可のファイルはスキップします。最初の引数として TARGET_FQDN を渡します。出力を <script-name>.log にキャプチャします。

  5. 結果の記録meta.json に完了タイムスタンプと合格/不合格/スキップ数を更新します。