
CybORG CAGE 2環境が論文「Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping」向けに更新されました
論文 Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping のコードです。このリポジトリは CybORG CAGE Challenge 2 を拡張し、自律型防衛エージェントがネットワークを防御する能力を維持しつつ、運用上の優先事項へどのように誘導できるかを研究するものです。
元の CAGE 2 チャレンジでは、CAGE 報酬を用いて、組み込みのレッドエージェントに対してブルー防衛エージェントを評価します。この改変版では、運用上の目的、変更された攻撃者ポリシー、およびブルー防衛エージェント向けのアラインメント手法が追加されています。シミュレータと実験スクリプトは引き続き CybORG/ のレイアウトにあります。元の CAGE 2 ガイドには元のチャレンジの説明が保持されています。
変更されたネットワークには、ユーザー、エンタープライズ、運用、および防衛ホストに加えて、認証 (Auth)、データベース (Database)、およびフロントエンド (Front) サーバーが含まれます。これらのサーバーは、機密性 (C)、完全性 (I)、および可用性 (A) を通じて表現される運用上の優先事項を表します:
| サーバータイプ | 運用上の優先事項 |
|---|---|
認証 (Auth) | 機密性、完全性、可用性 |
データベース (Database) | 機密性、可用性 |
フロントエンド (Front) | 完全性、可用性 |
レジリエンスのスコアリングは Cadet ら Quantitative Resilience Modeling for Autonomous Cyber Defense から適応されています。実装は関連する CyberResilience コードに基づいています。
当社のレジリエンス指標は、各ステップで CIA の低下を記録し、それらを正規化されたレジリエンス低下に統合します。デフォルトの重みは機密性 0.6、完全性 0.2、可用性 0.2 です。また、属性ベースのポリシーとアラインメント分析のために候補となるブルーアクションもスコアリングします。生成されたシナリオでは、CIA 上重要なサーバーに通常の CAGE ホスト報酬値としてゼロを割り当てることで、運用上のアラインメントと一般的なネットワーク防御性能を別々に評価できるようにしています。
CAGE 2 コードベースに対して行われたその他の内部変更については、実験 README で詳述されています。
元の Meander および B-line 攻撃者は、追加された運用サーバーを標的にし、生成されるネットワークサイズ全体でホスト名をサポートするように拡張されています。評価では 5 つの敵対者を使用します:
| 論文の敵対者 | Python クラス | 影響対象 |
|---|---|---|
| M-CIA | RedMeanderAgent_Combination_CIA | CIA 上重要な Auth、Database、および Front サーバー |
| M-CAGE | RedMeanderAgent_Combination_CAGE | CAGE 性能に寄与するその他の適格な侵害済みホスト |
| Bline-C | B_lineAgent_Resilience_C | Auth または Database サーバー |
| Bline-I | B_lineAgent_Resilience_I | Auth または Front サーバー |
| Bline-A | B_lineAgent_Resilience_A | Auth、Database、または Front サーバー |
トレーニングでは RedMeanderAgent_Combination を使用します。これは各影響選択の決定において、CIA と CAGE の影響対象の間を等確率で選択します。B-line の各バリアントは、エピソードごとにターゲットサーバータイプを 1 回選択し、観測から一致するホストを解決します。Meander_Resilience.py および B_line_resilience.py を参照してください。
Python 3.10 以降を使用し、uv をインストールしてください。リポジトリのルートから:
uv sync
cd CybORG
uv sync はプロジェクト環境を作成し、CybORG とその依存関係をインストールします。スクリプトは uv run ... で、シェルランチャーは uv run bash ... で実行してください。手動での環境アクティベーションは不要です。
| 場所 | 内容 |
|---|---|
CybORG/CybORG/ | シミュレータ、エージェント、報酬、メトリクス、シナリオ、および上流のテスト |
CybORG/experiment_configs/ | テスト時、トレーニング時、適応型、スケーリング、およびレッドエージェント評価の設定 |
CybORG/train_agents.py | ベースラインまたは報酬整形されたブルーエージェントをトレーニング |
CybORG/test_experiment.py | ベースライン、固定、および適応型ポリシーを評価 |
CybORG/test_experiment_training_time.py | トレーニング中に整合されたエージェントを評価 |
CybORG/alignment_analysis.py | 整合スコアを計算し、報酬のトレードオフを分析 |
CybORG/CybORG/Shared/Scenarios/scenario_generation.py | 設定可能なホスト集団と報酬設定でシナリオを生成 |
train_agents.py を使用して、混合蛇行型攻撃者に対して PPO ディフェンダーをトレーニングします。PPOAgent はベースラインをトレーニングし、AlignedPPOAgent は選択された CIA 属性に対する報酬項を追加します。トレーニング時のボーナスは論文では lambda と呼ばれ、CLI では alpha のみと呼ばれます。これはテスト時の補間重みとは別のものです。
base 用に 1 つのベースラインチェックポイントをトレーニングするには:
uv run python train_agents.py \
--scenario scalability_experiments/base \
--agent_type PPOAgent \
--red_agent RedMeanderAgent_Combination \
--alpha 0 --seed 0 --game_steps 200 --training_iter 500000 \
--agent_export checkpoints/PPO_base_0_seed0
機密性に沿った防御側を、ボーナス1.5でトレーニングするには:
uv run python train_agents.py \
--scenario scalability_experiments/base \
--agent_type AlignedPPOAgent \
--red_agent RedMeanderAgent_Combination \
--alignment_attribute C --alpha 1.5 \
--seed 0 --game_steps 200 --training_iter 500000 \
--agent_export checkpoints/PPO_base_1.5_C_seed0
完全なトレーニングスイープについては:
uv run bash experiment_configs/train_agents/train_base.sh
uv run bash experiment_configs/train_agents/train_trainingtime_alignment.sh
これらのランチャーは base、hosts_2、hosts_3、hosts_4 を対象とし、学習シードは 0 1 2 3 4 です。チェックポイントは CybORG/checkpoints/ 配下に、ベースラインの場合は PPO_{scenario}_0_seed{seed}.zip、報酬整形エージェントの場合は PPO_{scenario}_{bonus}_{attribute}_seed{seed}.zip として保存されます。チェックポイントを保存した後、train_agents.py は短い評価も実行します。ログ記録はデフォルトで無効になっています。有効にするには、Python の学習コマンドに --wandb を追加してください。
評価スクリプトは学習済みチェックポイントを読み込み、設定されたレッドアドバザリに対してエージェントを実行します。提供されている設定では、100 エピソード、42 から始まる評価シード、5 つの学習シードを使用しています。エピソードのホライズンは、base、hosts_2、hosts_3、hosts_4 に対してそれぞれ 200、300、400、500 ステップです。
test_experiment.py は、Blue Monitor と PPO ベースラインを、固定または適応型のテスト時アラインメントとともに評価します:
# Baselines and fixed test-time interpolation
uv run python test_experiment.py --config experiment_configs/base.yaml
uv run python alignment_analysis.py --config experiment_configs/base.yaml
# Adaptive test-time policy selection
uv run python test_experiment.py --config experiment_configs/adaptive_alpha_config/base/cia.yaml
uv run python alignment_analysis.py --config experiment_configs/adaptive_alpha_config/base/cia.yaml
test_experiment_training_time.py は報酬整形されたチェックポイントを評価します:
uv run python test_experiment_training_time.py --config experiment_configs/training_time_config/base.yaml
uv run python alignment_analysis.py --config experiment_configs/training_time_config/base.yaml
設定で要求されるすべてのチェックポイントを、実行前にトレーニングします。完全な評価と分析のスイープを実行するには:
uv run bash experiment_configs/run_all.sh
uv run bash experiment_configs/run_training_time_experiments.sh
uv run bash experiment_configs/export_alignment_analysis.sh
手法と敵対者の設定については設定ガイドを参照してください。
生成済みのシナリオはすでに含まれているため、提供されている実験を実行するために生成は必要ありません:
CybORG/CybORG/Shared/Scenarios/scalability_experiments/にあり、ブルーエージェントにはAlignedRewardを使用します。CybORG/CybORG/Shared/Scenarios/scalability_eval_scenarios/にあり、通常のCAGEパフォーマンスを測定するためにHybridAvailabilityConfidentialityを使用します。どちらのフォルダにも以下の論文シナリオが含まれています。それぞれに3つのサブネット(User、Enterprise、Operational)があり、合計にはディフェンダーホスト1台が含まれます。以下のOperationalホストはOp_ServerとOp_Hostを合わせて数えており、CIAクリティカルなサーバーとは別に扱っています。
| シナリオファイル | Userホスト | Enterpriseホスト | Operationalホスト | Auth | Database | Front | Defender | 合計ホスト数 |
|---|---|---|---|---|---|---|---|---|
base.yaml | 5 | 3 | 4 | 1 | 1 | 1 | 1 | 16 |
hosts_2.yaml | 10 | 6 | 8 | 2 | 2 | 2 | 1 | 31 |
hosts_3.yaml | 15 | 9 | 12 | 3 | 3 | 3 | 1 | 46 |
hosts_4.yaml | 20 | 12 | 16 | 4 | 4 | 4 | 1 | 61 |
カスタムシナリオを作成するにはscenario_generation.pyを使用してください。例えば、以下は31ホストの新しいトレーニングシナリオを作成します: