
Ambiente CybORG CAGE 2 aggiornato per il paper "Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping"
Codice per il nostro articolo Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping. Questo repository estende CybORG CAGE Challenge 2 per studiare come i difensori autonomi possano essere guidati verso priorità operative mantenendo al contempo la loro capacità di difendere la rete.
La sfida originale CAGE 2 valuta i difensori blu contro agenti rossi integrati utilizzando la ricompensa CAGE. Questa versione modificata aggiunge obiettivi operativi, politiche degli attaccanti modificate e metodi di allineamento per i difensori blu. Il simulatore e gli script degli esperimenti rimangono nella struttura CybORG/. La guida originale di CAGE 2 conserva la descrizione originale della sfida.
La rete modificata include server di autenticazione (Auth), database (Database) e front-end (Front) oltre agli host utente, enterprise, operativi e difensore. Questi server rappresentano priorità operative espresse tramite riservatezza (C), integrità (I) e disponibilità (A):
| Tipo di server | Priorità operative |
|---|---|
Autenticazione (Auth) | Riservatezza, integrità, disponibilità |
Database (Database) | Riservatezza, disponibilità |
Front-end (Front) | Integrità, disponibilità |
Il punteggio di resilienza è adattato da Cadet et al. Quantitative Resilience Modeling for Autonomous Cyber Defense. L'implementazione si basa sul relativo codice CyberResilience.
La nostra metrica di resilienza registra i cali di CIA a ogni passo e li combina in un calo di resilienza normalizzato, con pesi predefiniti di 0,6 per la riservatezza, 0,2 per l'integrità e 0,2 per la disponibilità. Assegna inoltre un punteggio alle azioni blu candidate per la politica basata sugli attributi e l'analisi di allineamento. Gli scenari generati assegnano ai server critici per CIA valori di ricompensa host CAGE ordinaria pari a zero, consentendo di valutare separatamente l'allineamento operativo e le prestazioni generali di difesa della rete.
Ulteriori modifiche interne apportate alla base di codice CAGE 2 sono dettagliate nel README degli esperimenti.
Gli attaccanti originali Meander e B-line sono estesi per prendere di mira i server operativi aggiunti e supportare i nomi degli host attraverso le dimensioni di rete generate. La valutazione utilizza cinque avversari:
| Avversario dell'articolo | Classe Python | Obiettivi di impatto |
|---|---|---|
| M-CIA | RedMeanderAgent_Combination_CIA | Server Auth, Database e Front critici per CIA |
| M-CAGE | RedMeanderAgent_Combination_CAGE | Altri host compromessi idonei che contribuiscono alle prestazioni CAGE |
| Bline-C | B_lineAgent_Resilience_C | Server Auth o Database |
| Bline-I | B_lineAgent_Resilience_I | Server Auth o Front |
| Bline-A | B_lineAgent_Resilience_A | Server Auth, Database o Front |
L'addestramento utilizza RedMeanderAgent_Combination, che seleziona tra obiettivi di impatto CIA e CAGE con uguale probabilità a ogni decisione di selezione dell'impatto. Le varianti B-line selezionano un tipo di server bersaglio una volta per episodio e risolvono gli host corrispondenti dalle osservazioni. Vedere Meander_Resilience.py e B_line_resilience.py.
Utilizzare Python 3.10 o versioni successive e installare uv. Dalla radice del repository:
uv sync
cd CybORG
uv sync crea l'ambiente del progetto e installa CybORG e le sue dipendenze. Esegui gli script con uv run ... e i launcher shell con uv run bash ...; l'attivazione manuale dell'ambiente non è necessaria.
| Posizione | Contenuto |
|---|---|
CybORG/CybORG/ | Simulatore, agenti, reward, metriche, scenari e test upstream |
CybORG/experiment_configs/ | Configurazioni per valutazione test-time, training-time, adattiva, di scaling e red-agent |
CybORG/train_agents.py | Addestra agenti blue baseline o con reward modellata |
CybORG/test_experiment.py | Valuta policy baseline, fisse e adattive |
CybORG/test_experiment_training_time.py | Valuta agenti allineati durante il training |
CybORG/alignment_analysis.py | Calcola i punteggi di allineamento e analizza i compromessi tra reward |
CybORG/CybORG/Shared/Scenarios/scenario_generation.py | Genera scenari con popolazioni di host e impostazioni di reward configurabili |
Usa train_agents.py per addestrare un difensore PPO contro l'attaccante misto meandering. PPOAgent addestra la baseline; AlignedPPOAgent aggiunge un termine di reward per l'attributo CIA selezionato. Il bonus di training-time è chiamato lambda nel paper e alpha solo nella CLI; è separato dal peso di interpolazione test-time.
Per addestrare un checkpoint baseline per 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
Per addestrare un defender allineato alla riservatezza con un bonus di 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
Per gli sweep di training completi:
uv run bash experiment_configs/train_agents/train_base.sh
uv run bash experiment_configs/train_agents/train_trainingtime_alignment.sh
Questi launcher coprono base, hosts_2, hosts_3 e hosts_4 con seed di training 0 1 2 3 4. I checkpoint vengono salvati in CybORG/checkpoints/ come PPO_{scenario}_0_seed{seed}.zip per le baseline e PPO_{scenario}_{bonus}_{attribute}_seed{seed}.zip per gli agenti con reward shaping. Dopo aver salvato un checkpoint, train_agents.py esegue anche una breve valutazione. Il logging è disabilitato per impostazione predefinita; aggiungi --wandb a un comando di training Python per abilitarlo.
Gli script di valutazione caricano i checkpoint addestrati ed eseguono gli agenti contro l'avversario rosso configurato. Le configurazioni fornite utilizzano 100 episodi, un seed di valutazione che parte da 42 e cinque seed di training. Gli orizzonti degli episodi sono rispettivamente di 200, 300, 400 e 500 passi per base, hosts_2, hosts_3 e hosts_4.
test_experiment.py valuta le baseline Blue Monitor e PPO insieme all'allineamento a test-time fisso o adattivo:
# 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