
Среда 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 challenge оценивает синих защитников против встроенных красных агентов с использованием награды CAGE. Эта модифицированная версия добавляет операционные цели, изменённые политики атакующих и методы согласования для синих защитников. Симулятор и скрипты экспериментов остаются в структуре CybORG/. Оригинальное руководство CAGE 2 сохраняет исходное описание challenge.
Модифицированная сеть включает серверы аутентификации (Auth), базы данных (Database) и фронтенда (Front) в дополнение к хостам пользователей, предприятия, операционным и защитника. Эти серверы представляют операционные приоритеты, выраженные через конфиденциальность (C), целостность (I) и доступность (A):
| Тип сервера | Операционные приоритеты |
|---|---|
Аутентификация (Auth) | Конфиденциальность, целостность, доступность |
База данных (Database) | Конфиденциальность, доступность |
Фронтенд (Front) | Целостность, доступность |
Оценка устойчивости адаптирована из работы Cadet et al. Quantitative Resilience Modeling for Autonomous Cyber Defense. Реализация основана на соответствующем коде CyberResilience.
Наша метрика устойчивости фиксирует падения CIA на каждом шаге и объединяет их в нормализованное падение устойчивости со значениями весов по умолчанию 0.6 для конфиденциальности, 0.2 для целостности и 0.2 для доступности. Она также оценивает кандидатные действия синих для анализа политики на основе атрибутов и анализа согласования. Сгенерированные сценарии присваивают CIA-критичным серверам нулевые значения обычной награды хоста CAGE, что позволяет отдельно оценивать операционное согласование и общую производительность защиты сети.
Дополнительные внутренние изменения, внесённые в кодовую базу CAGE 2, подробно описаны в README экспериментов.
Оригинальные атакующие Meander и B-line расширены для нацеливания на добавленные операционные серверы и поддержки имён хостов в пределах сгенерированных размеров сети. В оценке используются пять противников:
| Противник из статьи | Класс 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 выбирают тип целевого сервера один раз за эпизод и определяют соответствующие хосты по наблюдениям. См. Meander_Resilience.py и B_line_resilience.py.
Используйте Python 3.10 или новее и установите uv. Из корня репозитория:
uv sync
cd CybORG
uv sync создаёт окружение проекта и устанавливает CybORG и его зависимости. Запускайте скрипты через uv run ..., а shell-лаунчеры — через uv run bash ...; ручная активация окружения не требуется.
| Расположение | Содержимое |
|---|---|
CybORG/CybORG/ | Симулятор, агенты, награды, метрики, сценарии и вышестоящие тесты |
CybORG/experiment_configs/ | Конфигурации оценки на этапе тестирования, на этапе обучения, адаптивной, масштабирования и оценки red-агента |
CybORG/train_agents.py | Обучение базовых или reward-shaped синих агентов |
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 в статье и alpha только в CLI; он отделён от веса интерполяции на этапе тестирования.
Чтобы обучить один базовый чекпоинт для 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
Чтобы обучить защитника, ориентированного на конфиденциальность, с бонусом 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 с seed'ами обучения 0 1 2 3 4. Чекпоинты сохраняются в CybORG/checkpoints/ как PPO_{scenario}_0_seed{seed}.zip для базовых линий и PPO_{scenario}_{bonus}_{attribute}_seed{seed}.zip для агентов с формированием награды. После сохранения чекпоинта train_agents.py также запускает короткую оценку. Логирование по умолчанию отключено; добавьте --wandb к команде обучения на Python, чтобы включить его.
Скрипты оценки загружают обученные чекпоинты и запускают агентов против настроенного красного противника. Предоставленные конфигурации используют 100 эпизодов, seed оценки, начинающийся с 42, и пять seed'ов обучения. Горизонты эпизодов составляют 200, 300, 400 и 500 шагов для base, hosts_2, hosts_3 и hosts_4 соответственно.
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