
L'environnement CybORG CAGE 2 a été mis à jour pour l'article « Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping »
Code de notre article Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping. Ce dépôt étend CybORG CAGE Challenge 2 pour étudier comment les défenseurs autonomes peuvent être orientés vers des priorités opérationnelles tout en conservant leur capacité à défendre le réseau.
Le challenge CAGE 2 original évalue les défenseurs bleus face à des agents rouges intégrés en utilisant la récompense CAGE. Cette version modifiée ajoute des objectifs opérationnels, des politiques d'attaquants modifiées et des méthodes d'alignement pour les défenseurs bleus. Le simulateur et les scripts d'expérimentation restent dans l'arborescence CybORG/. Le guide CAGE 2 original conserve la description originale du challenge.
Le réseau modifié inclut des serveurs d'authentification (Auth), de base de données (Database) et front-end (Front) en plus des hôtes utilisateur, entreprise, opérationnel et défenseur. Ces serveurs représentent des priorités opérationnelles exprimées par la confidentialité (C), l'intégrité (I) et la disponibilité (A) :
| Type de serveur | Priorités opérationnelles |
|---|---|
Authentification (Auth) | Confidentialité, intégrité, disponibilité |
Base de données (Database) | Confidentialité, disponibilité |
Front-end (Front) | Intégrité, disponibilité |
Le calcul de résilience est adapté de Cadet et al. Quantitative Resilience Modeling for Autonomous Cyber Defense. L'implémentation s'appuie sur le code CyberResilience associé.
Notre métrique de résilience enregistre les baisses de CIA à chaque étape et les combine en une baisse de résilience normalisée, avec des poids par défaut de 0,6 pour la confidentialité, 0,2 pour l'intégrité et 0,2 pour la disponibilité. Elle évalue également les actions bleues candidates pour la politique basée sur les attributs et l'analyse d'alignement. Les scénarios générés attribuent aux serveurs critiques pour la CIA des valeurs de récompense d'hôte CAGE ordinaire nulles, permettant d'évaluer séparément l'alignement opérationnel et la performance de défense générale du réseau.
Les modifications internes supplémentaires apportées à la base de code CAGE 2 sont détaillées dans le README des expérimentations.
Les attaquants originaux Meander et B-line sont étendus pour cibler les serveurs opérationnels ajoutés et prendre en charge les noms d'hôtes à travers les tailles de réseau générées. L'évaluation utilise cinq adversaires :
| Adversaire de l'article | Classe Python | Cibles d'impact |
|---|---|---|
| M-CIA | RedMeanderAgent_Combination_CIA | Serveurs Auth, Database et Front critiques pour la CIA |
| M-CAGE | RedMeanderAgent_Combination_CAGE | Autres hôtes compromis éligibles contribuant à la performance CAGE |
| Bline-C | B_lineAgent_Resilience_C | Serveurs Auth ou Database |
| Bline-I | B_lineAgent_Resilience_I | Serveurs Auth ou Front |
| Bline-A | B_lineAgent_Resilience_A | Serveurs Auth, Database ou Front |
L'entraînement utilise RedMeanderAgent_Combination, qui choisit entre les cibles d'impact CIA et CAGE avec une probabilité égale à chaque décision de sélection d'impact. Les variantes B-line sélectionnent un type de serveur cible une fois par épisode et résolvent les hôtes correspondants à partir des observations. Voir Meander_Resilience.py et B_line_resilience.py.
Utilisez Python 3.10 ou une version plus récente et installez uv. Depuis la racine du dépôt :
uv sync
cd CybORG
uv sync crée l'environnement du projet et installe CybORG ainsi que ses dépendances. Exécutez les scripts avec uv run ... et les lanceurs shell avec uv run bash ... ; l'activation manuelle de l'environnement n'est pas nécessaire.
| Emplacement | Contenu |
|---|---|
CybORG/CybORG/ | Simulateur, agents, récompenses, métriques, scénarios et tests upstream |
CybORG/experiment_configs/ | Configurations d'évaluation en phase de test, en phase d'entraînement, adaptatives, de mise à l'échelle et d'agents rouges |
CybORG/train_agents.py | Entraîner des agents bleus de référence ou à récompense modelée |
CybORG/test_experiment.py | Évaluer les politiques de référence, fixes et adaptatives |
CybORG/test_experiment_training_time.py | Évaluer les agents alignés pendant l'entraînement |
CybORG/alignment_analysis.py | Calculer les scores d'alignement et analyser les compromis de récompense |
CybORG/CybORG/Shared/Scenarios/scenario_generation.py | Générer des scénarios avec des populations d'hôtes et des paramètres de récompense configurables |
Utilisez train_agents.py pour entraîner un défenseur PPO contre l'attaquant mixte sinueux. PPOAgent entraîne la référence ; AlignedPPOAgent ajoute un terme de récompense pour l'attribut CIA sélectionné. Le bonus en phase d'entraînement est appelé lambda dans l'article et alpha uniquement dans la CLI ; il est distinct du poids d'interpolation en phase de test.
Pour entraîner un point de contrôle de référence pour base :
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
Pour entraîner un défenseur aligné sur la confidentialité avec un bonus de 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
Pour les balayages d'entraînement complets :
uv run bash experiment_configs/train_agents/train_base.sh
uv run bash experiment_configs/train_agents/train_trainingtime_alignment.sh
Ces lanceurs couvrent base, hosts_2, hosts_3 et hosts_4 avec les graines d'entraînement 0 1 2 3 4. Les checkpoints sont enregistrés sous CybORG/checkpoints/ sous la forme PPO_{scenario}_0_seed{seed}.zip pour les baselines et PPO_{scenario}_{bonus}_{attribute}_seed{seed}.zip pour les agents à récompense modelée. Après l'enregistrement d'un checkpoint, train_agents.py exécute également une courte évaluation. La journalisation est désactivée par défaut ; ajoutez --wandb à une commande d'entraînement Python pour l'activer.
Les scripts d'évaluation chargent les checkpoints entraînés et exécutent les agents contre l'adversaire rouge configuré. Les configurations fournies utilisent 100 épisodes, une graine d'évaluation commençant à 42 et cinq graines d'entraînement. Les horizons d'épisode sont de 200, 300, 400 et 500 pas pour base, hosts_2, hosts_3 et hosts_4, respectivement.