Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/CyberBattleSim
Path: blob/main/cyberbattle/__init__.py
597 views
1
# Copyright (c) Microsoft Corporation.
2
# Licensed under the MIT License.
3
4
"""Initialize CyberBattleSim module"""
5
6
from gymnasium.envs.registration import registry, EnvSpec
7
from gymnasium.error import Error
8
9
from . import simulation
10
from . import agents
11
from ._env.cyberbattle_env import AttackerGoal, DefenderGoal
12
from .samples.chainpattern import chainpattern
13
from .samples.toyctf import toy_ctf
14
from .samples.active_directory import generate_ad
15
from .simulation import generate_network, model
16
17
__all__ = (
18
"simulation",
19
"agents",
20
)
21
22
23
def register(id: str, cyberbattle_env_identifiers: model.Identifiers, **kwargs):
24
"""same as gym.envs.registry.register, but adds CyberBattle specs to env.spec"""
25
if id in registry:
26
raise Error("Cannot re-register id: {}".format(id))
27
spec = EnvSpec(id, **kwargs)
28
registry[id] = spec
29
30
31
if "CyberBattleToyCtf-v0" in registry:
32
del registry["CyberBattleToyCtf-v0"]
33
34
register(
35
id="CyberBattleToyCtf-v0",
36
cyberbattle_env_identifiers=toy_ctf.ENV_IDENTIFIERS,
37
entry_point="cyberbattle._env.cyberbattle_toyctf:CyberBattleToyCtf",
38
kwargs={"defender_agent": None, "attacker_goal": AttackerGoal(own_atleast=6), "defender_goal": DefenderGoal(eviction=True)},
39
# max_episode_steps=2600,
40
)
41
42
if "CyberBattleTiny-v0" in registry:
43
del registry["CyberBattleTiny-v0"]
44
45
register(
46
id="CyberBattleTiny-v0",
47
cyberbattle_env_identifiers=toy_ctf.ENV_IDENTIFIERS,
48
entry_point="cyberbattle._env.cyberbattle_tiny:CyberBattleTiny",
49
kwargs={"defender_agent": None, "attacker_goal": AttackerGoal(own_atleast=6), "defender_goal": DefenderGoal(eviction=True), "maximum_total_credentials": 10, "maximum_node_count": 10},
50
# max_episode_steps=2600,
51
)
52
53
54
if "CyberBattleRandom-v0" in registry:
55
del registry["CyberBattleRandom-v0"]
56
57
register(
58
id="CyberBattleRandom-v0",
59
cyberbattle_env_identifiers=generate_network.ENV_IDENTIFIERS,
60
entry_point="cyberbattle._env.cyberbattle_random:CyberBattleRandom",
61
)
62
63
if "CyberBattleChain-v0" in registry:
64
del registry["CyberBattleChain-v0"]
65
66
register(
67
id="CyberBattleChain-v0",
68
cyberbattle_env_identifiers=chainpattern.ENV_IDENTIFIERS,
69
entry_point="cyberbattle._env.cyberbattle_chain:CyberBattleChain",
70
kwargs={"size": 4, "defender_agent": None, "attacker_goal": AttackerGoal(own_atleast_percent=1.0), "defender_goal": DefenderGoal(eviction=True), "winning_reward": 5000.0, "losing_reward": 0.0},
71
reward_threshold=2200,
72
)
73
74
ad_envs = [f"ActiveDirectory-v{i}" for i in range(0, 10)]
75
for index, env in enumerate(ad_envs):
76
if env in registry:
77
del registry[env]
78
79
register(
80
id=env,
81
cyberbattle_env_identifiers=generate_ad.ENV_IDENTIFIERS,
82
entry_point="cyberbattle._env.active_directory:CyberBattleActiveDirectory",
83
kwargs={
84
"seed": index,
85
"maximum_discoverable_credentials_per_action": 50000,
86
"maximum_node_count": 30,
87
"maximum_total_credentials": 50000,
88
},
89
)
90
91
if "ActiveDirectoryTiny-v0" in registry:
92
del registry["ActiveDirectoryTiny-v0"]
93
register(
94
id="ActiveDirectoryTiny-v0",
95
cyberbattle_env_identifiers=chainpattern.ENV_IDENTIFIERS,
96
entry_point="cyberbattle._env.active_directory:CyberBattleActiveDirectoryTiny",
97
kwargs={"maximum_discoverable_credentials_per_action": 50000, "maximum_node_count": 30, "maximum_total_credentials": 50000},
98
)
99
100