
Ambiente CybORG CAGE 2 atualizado para o artigo "Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping"
Código do nosso artigo Alignment of Autonomous Cyber Defense Agents via Adaptive Policy Shaping. Este repositório estende o CybORG CAGE Challenge 2 para estudar como defensores autônomos podem ser direcionados para prioridades operacionais, mantendo sua capacidade de defender a rede.
O desafio CAGE 2 original avalia defensores azuis contra agentes vermelhos integrados usando a recompensa CAGE. Esta versão modificada adiciona objetivos operacionais, políticas de atacante modificadas e métodos de alinhamento para defensores azuis. O simulador e os scripts de experimento permanecem na estrutura CybORG/. O guia original do CAGE 2 mantém a descrição original do desafio.
A rede modificada inclui servidores de autenticação (Auth), banco de dados (Database) e front-end (Front), além dos hosts de usuário, empresarial, operacional e defensor. Esses servidores representam prioridades operacionais expressas por meio de confidencialidade (C), integridade (I) e disponibilidade (A):
| Tipo de servidor | Prioridades operacionais |
|---|---|
Autenticação (Auth) | Confidencialidade, integridade, disponibilidade |
Banco de dados (Database) | Confidencialidade, disponibilidade |
Front-end (Front) | Integridade, disponibilidade |
A pontuação de resiliência é adaptada de Cadet et al. Quantitative Resilience Modeling for Autonomous Cyber Defense. A implementação baseia-se no código CyberResilience associado.
Nossa métrica de resiliência registra as quedas de CIA em cada etapa e as combina em uma queda de resiliência normalizada, com pesos padrão de 0,6 para confidencialidade, 0,2 para integridade e 0,2 para disponibilidade. Ela também pontua ações azuis candidatas para a política baseada em atributos e a análise de alinhamento. Os cenários gerados atribuem aos servidores críticos para CIA valores de recompensa de host CAGE comuns iguais a zero, permitindo que o alinhamento operacional e o desempenho geral de defesa da rede sejam avaliados separadamente.
Alterações internas adicionais feitas na base de código do CAGE 2 estão detalhadas no README do experimento.
Os atacantes originais Meander e B-line são estendidos para atingir os servidores operacionais adicionados e oferecer suporte a nomes de host em todos os tamanhos de rede gerados. A avaliação usa cinco adversários:
| Adversário do artigo | Classe Python | Alvos de impacto |
|---|---|---|
| M-CIA | RedMeanderAgent_Combination_CIA | Servidores Auth, Database e Front críticos para CIA |
| M-CAGE | RedMeanderAgent_Combination_CAGE | Outros hosts comprometidos elegíveis que contribuem para o desempenho CAGE |
| Bline-C | B_lineAgent_Resilience_C | Servidores Auth ou Database |
| Bline-I | B_lineAgent_Resilience_I | Servidores Auth ou Front |
| Bline-A | B_lineAgent_Resilience_A | Servidores Auth, Database ou Front |
O treinamento usa RedMeanderAgent_Combination, que seleciona entre alvos de impacto CIA e CAGE com igual probabilidade em cada decisão de seleção de impacto. As variantes B-line selecionam um tipo de servidor alvo uma vez por episódio e resolvem os hosts correspondentes a partir das observações. Consulte Meander_Resilience.py e B_line_resilience.py.
Use Python 3.10 ou mais recente e instale o uv. A partir da raiz do repositório:
uv sync
cd CybORG
uv sync cria o ambiente do projeto e instala o CybORG e as suas dependências. Execute scripts com uv run ... e lançadores de shell com uv run bash ...; a ativação manual do ambiente não é necessária.
| Localização | Conteúdo |
|---|---|
CybORG/CybORG/ | Simulador, agentes, recompensas, métricas, cenários e testes upstream |
CybORG/experiment_configs/ | Configurações de avaliação em tempo de teste, tempo de treino, adaptativas, de escalonamento e de agente vermelho |
CybORG/train_agents.py | Treinar agentes azuis de linha de base ou com recompensa moldada |
CybORG/test_experiment.py | Avaliar políticas de linha de base, fixas e adaptativas |
CybORG/test_experiment_training_time.py | Avaliar agentes alinhados durante o treino |
CybORG/alignment_analysis.py | Calcular pontuações de alinhamento e analisar trade-offs de recompensa |
CybORG/CybORG/Shared/Scenarios/scenario_generation.py | Gerar cenários com populações de hosts e definições de recompensa configuráveis |
Utilize train_agents.py para treinar um defensor PPO contra o atacante errante misto. PPOAgent treina a linha de base; AlignedPPOAgent adiciona um termo de recompensa para o atributo CIA selecionado. O bónus de tempo de treino é designado por lambda no artigo e por alpha apenas na CLI; é distinto do peso de interpolação em tempo de teste.
Para treinar um checkpoint de linha de base para 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
Para treinar um defensor alinhado à confidencialidade com um bônus 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
Para as varreduras completas de treinamento:
uv run bash experiment_configs/train_agents/train_base.sh
uv run bash experiment_configs/train_agents/train_trainingtime_alignment.sh
Esses launchers cobrem base, hosts_2, hosts_3 e hosts_4 com seeds de treinamento 0 1 2 3 4. Os checkpoints são salvos em CybORG/checkpoints/ como PPO_{scenario}_0_seed{seed}.zip para as baselines e PPO_{scenario}_{bonus}_{attribute}_seed{seed}.zip para os agentes com modelagem de recompensa. Após salvar um checkpoint, train_agents.py também executa uma breve avaliação. O logging fica desativado por padrão; adicione --wandb a um comando de treinamento em Python para habilitá-lo.
Os scripts de avaliação carregam checkpoints treinados e executam os agentes contra o adversário vermelho configurado. As configurações fornecidas usam 100 episódios, uma seed de avaliação começando em 42 e cinco seeds de treinamento. Os horizontes dos episódios são de 200, 300, 400 e 500 passos para base, hosts_2, hosts_3 e hosts_4, respectivamente.
test_experiment.py avalia as baselines Blue Monitor e PPO juntamente com alinhamento de tempo de teste fixo ou adaptativo: