#3075: Fix notebooks after test changes.

This commit is contained in:
Nick Todd
2025-02-06 16:42:26 +00:00
parent 0d8672cdba
commit 1a8c3b9471
9 changed files with 86 additions and 97 deletions

View File

@@ -59,30 +59,30 @@
"custom_c2_agent = \"\"\"\n", "custom_c2_agent = \"\"\"\n",
" - ref: CustomC2Agent\n", " - ref: CustomC2Agent\n",
" team: RED\n", " team: RED\n",
" type: ProxyAgent\n", " type: proxy-agent\n",
"\n", "\n",
" action_space:\n", " action_space:\n",
" action_map:\n", " action_map:\n",
" 0:\n", " 0:\n",
" action: do_nothing\n", " action: do-nothing\n",
" options: {}\n", " options: {}\n",
" 1:\n", " 1:\n",
" action: node_application_install\n", " action: node-application-install\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" application_name: C2Beacon\n", " application_name: c2-beacon\n",
" 2:\n", " 2:\n",
" action: configure_c2_beacon\n", " action: configure-c2-beacon\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" c2_server_ip_address: 192.168.10.21\n", " c2_server_ip_address: 192.168.10.21\n",
" 3:\n", " 3:\n",
" action: node_application_execute\n", " action: node-application-execute\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" application_name: C2Beacon\n", " application_name: c2-beacon\n",
" 4:\n", " 4:\n",
" action: c2_server_terminal_command\n", " action: c2-server-terminal-command\n",
" options:\n", " options:\n",
" node_name: client_1\n", " node_name: client_1\n",
" ip_address:\n", " ip_address:\n",
@@ -93,7 +93,7 @@
" - software_manager\n", " - software_manager\n",
" - application\n", " - application\n",
" - install\n", " - install\n",
" - RansomwareScript\n", " - ransomware-script\n",
" 5:\n", " 5:\n",
" action: c2-server-ransomware-configure\n", " action: c2-server-ransomware-configure\n",
" options:\n", " options:\n",
@@ -101,7 +101,7 @@
" server_ip_address: 192.168.1.14\n", " server_ip_address: 192.168.1.14\n",
" payload: ENCRYPT\n", " payload: ENCRYPT\n",
" 6:\n", " 6:\n",
" action: c2_server_data_exfiltrate\n", " action: c2-server-data-exfiltrate\n",
" options:\n", " options:\n",
" node_name: client_1\n", " node_name: client_1\n",
" target_file_name: \"database.db\"\n", " target_file_name: \"database.db\"\n",
@@ -112,23 +112,23 @@
" password: admin\n", " password: admin\n",
"\n", "\n",
" 7:\n", " 7:\n",
" action: c2_server_ransomware_launch\n", " action: c2-server-ransomware-launch\n",
" options:\n", " options:\n",
" node_name: client_1\n", " node_name: client_1\n",
" 8:\n", " 8:\n",
" action: configure_c2_beacon\n", " action: configure-c2-beacon\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" c2_server_ip_address: 192.168.10.21\n", " c2_server_ip_address: 192.168.10.21\n",
" 9:\n", " 9:\n",
" action: configure_c2_beacon\n", " action: configure-c2-beacon\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" c2_server_ip_address: 192.168.10.22\n", " c2_server_ip_address: 192.168.10.22\n",
"\n", "\n",
" reward_function:\n", " reward_function:\n",
" reward_components:\n", " reward_components:\n",
" - type: DUMMY\n", " - type: dummy\n",
"\"\"\"\n", "\"\"\"\n",
"c2_agent_yaml = yaml.safe_load(custom_c2_agent)" "c2_agent_yaml = yaml.safe_load(custom_c2_agent)"
] ]
@@ -169,7 +169,7 @@
"source": [ "source": [
"client_1: Computer = env.game.simulation.network.get_node_by_hostname(\"client_1\")\n", "client_1: Computer = env.game.simulation.network.get_node_by_hostname(\"client_1\")\n",
"client_1.software_manager.install(C2Server)\n", "client_1.software_manager.install(C2Server)\n",
"c2_server: C2Server = client_1.software_manager.software[\"C2Server\"]\n", "c2_server: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
"c2_server.run()\n", "c2_server.run()\n",
"client_1.software_manager.show()" "client_1.software_manager.show()"
] ]
@@ -262,7 +262,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"env.step(2)\n", "env.step(2)\n",
"c2_beacon: C2Beacon = web_server.software_manager.software[\"C2Beacon\"]\n", "c2_beacon: C2Beacon = web_server.software_manager.software[\"c2-beacon\"]\n",
"web_server.software_manager.show()\n", "web_server.software_manager.show()\n",
"c2_beacon.show()" "c2_beacon.show()"
] ]
@@ -435,7 +435,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"ransomware_script: RansomwareScript = web_server.software_manager.software[\"RansomwareScript\"]\n", "ransomware_script: RansomwareScript = web_server.software_manager.software[\"ransomware-script\"]\n",
"web_server.software_manager.show()\n", "web_server.software_manager.show()\n",
"ransomware_script.show()" "ransomware_script.show()"
] ]
@@ -574,20 +574,20 @@
"custom_blue_agent_yaml = \"\"\"\n", "custom_blue_agent_yaml = \"\"\"\n",
" - ref: defender\n", " - ref: defender\n",
" team: BLUE\n", " team: BLUE\n",
" type: ProxyAgent\n", " type: proxy-agent\n",
"\n", "\n",
" observation_space:\n", " observation_space:\n",
" type: CUSTOM\n", " type: custom\n",
" options:\n", " options:\n",
" components:\n", " components:\n",
" - type: NODES\n", " - type: nodes\n",
" label: NODES\n", " label: nodes\n",
" options:\n", " options:\n",
" hosts:\n", " hosts:\n",
" - hostname: web_server\n", " - hostname: web_server\n",
" applications:\n", " applications:\n",
" - application_name: C2Beacon\n", " - application_name: c2-beacon\n",
" - application_name: RansomwareScript\n", " - application_name: ransomware-script\n",
" folders:\n", " folders:\n",
" - folder_name: exfiltration_folder\n", " - folder_name: exfiltration_folder\n",
" files:\n", " files:\n",
@@ -637,7 +637,7 @@
" - UDP\n", " - UDP\n",
" num_rules: 10\n", " num_rules: 10\n",
"\n", "\n",
" - type: LINKS\n", " - type: links\n",
" label: LINKS\n", " label: LINKS\n",
" options:\n", " options:\n",
" link_references:\n", " link_references:\n",
@@ -651,26 +651,26 @@
" - switch_2:eth-1<->client_1:eth-1\n", " - switch_2:eth-1<->client_1:eth-1\n",
" - switch_2:eth-2<->client_2:eth-1\n", " - switch_2:eth-2<->client_2:eth-1\n",
" - switch_2:eth-7<->security_suite:eth-2\n", " - switch_2:eth-7<->security_suite:eth-2\n",
" - type: \"NONE\"\n", " - type: \"none\"\n",
" label: ICS\n", " label: ICS\n",
" options: {}\n", " options: {}\n",
"\n", "\n",
" action_space:\n", " action_space:\n",
" action_map:\n", " action_map:\n",
" 0:\n", " 0:\n",
" action: do_nothing\n", " action: do-nothing\n",
" options: {}\n", " options: {}\n",
" 1:\n", " 1:\n",
" action: node_application_remove\n", " action: node-application-remove\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" application_name: C2Beacon\n", " application_name: c2-beacon\n",
" 2:\n", " 2:\n",
" action: node_shutdown\n", " action: node-shutdown\n",
" options:\n", " options:\n",
" node_name: web_server\n", " node_name: web_server\n",
" 3:\n", " 3:\n",
" action: router_acl_add_rule\n", " action: router-acl-add-rule\n",
" options:\n", " options:\n",
" target_router: router_1\n", " target_router: router_1\n",
" position: 1\n", " position: 1\n",
@@ -685,7 +685,7 @@
"\n", "\n",
" reward_function:\n", " reward_function:\n",
" reward_components:\n", " reward_components:\n",
" - type: DUMMY\n", " - type: dummy\n",
"\n", "\n",
" agent_settings:\n", " agent_settings:\n",
" flatten_obs: False\n", " flatten_obs: False\n",
@@ -776,12 +776,12 @@
"\n", "\n",
"# Installing the C2 Server.\n", "# Installing the C2 Server.\n",
"client_1.software_manager.install(C2Server)\n", "client_1.software_manager.install(C2Server)\n",
"c2_server: C2Server = client_1.software_manager.software[\"C2Server\"]\n", "c2_server: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
"c2_server.run()\n", "c2_server.run()\n",
"\n", "\n",
"# Installing the C2 Beacon.\n", "# Installing the C2 Beacon.\n",
"web_server.software_manager.install(C2Beacon)\n", "web_server.software_manager.install(C2Beacon)\n",
"c2_beacon: C2Beacon = web_server.software_manager.software[\"C2Beacon\"]\n", "c2_beacon: C2Beacon = web_server.software_manager.software[\"c2-beacon\"]\n",
"c2_beacon.configure(c2_server_ip_address=\"192.168.10.21\")\n", "c2_beacon.configure(c2_server_ip_address=\"192.168.10.21\")\n",
"c2_beacon.establish()" "c2_beacon.establish()"
] ]
@@ -825,7 +825,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"# Installing RansomwareScript via C2 Terminal Commands\n", "# Installing RansomwareScript via C2 Terminal Commands\n",
"ransomware_install_command = {\"commands\":[[\"software_manager\", \"application\", \"install\", \"RansomwareScript\"]],\n", "ransomware_install_command = {\"commands\":[[\"software_manager\", \"application\", \"install\", \"ransomware-script\"]],\n",
" \"username\": \"admin\",\n", " \"username\": \"admin\",\n",
" \"password\": \"admin\"}\n", " \"password\": \"admin\"}\n",
"c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)\n" "c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)\n"
@@ -984,11 +984,11 @@
" web_server: Server = given_env.game.simulation.network.get_node_by_hostname(\"web_server\")\n", " web_server: Server = given_env.game.simulation.network.get_node_by_hostname(\"web_server\")\n",
"\n", "\n",
" client_1.software_manager.install(C2Server)\n", " client_1.software_manager.install(C2Server)\n",
" c2_server: C2Server = client_1.software_manager.software[\"C2Server\"]\n", " c2_server: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
" c2_server.run()\n", " c2_server.run()\n",
"\n", "\n",
" web_server.software_manager.install(C2Beacon)\n", " web_server.software_manager.install(C2Beacon)\n",
" c2_beacon: C2Beacon = web_server.software_manager.software[\"C2Beacon\"]\n", " c2_beacon: C2Beacon = web_server.software_manager.software[\"c2-beacon\"]\n",
" c2_beacon.configure(c2_server_ip_address=\"192.168.10.21\")\n", " c2_beacon.configure(c2_server_ip_address=\"192.168.10.21\")\n",
" c2_beacon.establish()\n", " c2_beacon.establish()\n",
"\n", "\n",
@@ -1086,7 +1086,7 @@
" \"username\": \"admin\",\n", " \"username\": \"admin\",\n",
" \"password\": \"admin\"}\n", " \"password\": \"admin\"}\n",
"\n", "\n",
"c2_server: C2Server = client_1.software_manager.software[\"C2Server\"]\n", "c2_server: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
"c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)" "c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)"
] ]
}, },
@@ -1174,7 +1174,7 @@
" \"username\": \"admin\",\n", " \"username\": \"admin\",\n",
" \"password\": \"admin\"}\n", " \"password\": \"admin\"}\n",
"\n", "\n",
"c2_server: C2Server = client_1.software_manager.software[\"C2Server\"]\n", "c2_server: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
"c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)" "c2_server.send_command(C2Command.TERMINAL, command_options=ransomware_install_command)"
] ]
}, },
@@ -1396,16 +1396,16 @@
"source": [ "source": [
"web_server: Server = c2_config_env.game.simulation.network.get_node_by_hostname(\"web_server\")\n", "web_server: Server = c2_config_env.game.simulation.network.get_node_by_hostname(\"web_server\")\n",
"web_server.software_manager.install(C2Beacon)\n", "web_server.software_manager.install(C2Beacon)\n",
"c2_beacon: C2Beacon = web_server.software_manager.software[\"C2Beacon\"]\n", "c2_beacon: C2Beacon = web_server.software_manager.software[\"c2-beacon\"]\n",
"\n", "\n",
"client_1: Computer = c2_config_env.game.simulation.network.get_node_by_hostname(\"client_1\")\n", "client_1: Computer = c2_config_env.game.simulation.network.get_node_by_hostname(\"client_1\")\n",
"client_1.software_manager.install(C2Server)\n", "client_1.software_manager.install(C2Server)\n",
"c2_server_1: C2Server = client_1.software_manager.software[\"C2Server\"]\n", "c2_server_1: C2Server = client_1.software_manager.software[\"c2-server\"]\n",
"c2_server_1.run()\n", "c2_server_1.run()\n",
"\n", "\n",
"client_2: Computer = c2_config_env.game.simulation.network.get_node_by_hostname(\"client_2\")\n", "client_2: Computer = c2_config_env.game.simulation.network.get_node_by_hostname(\"client_2\")\n",
"client_2.software_manager.install(C2Server)\n", "client_2.software_manager.install(C2Server)\n",
"c2_server_2: C2Server = client_2.software_manager.software[\"C2Server\"]\n", "c2_server_2: C2Server = client_2.software_manager.software[\"c2-server\"]\n",
"c2_server_2.run()" "c2_server_2.run()"
] ]
}, },

View File

@@ -76,9 +76,9 @@
" # parse the info dict form step output and write out what the red agent is doing\n", " # parse the info dict form step output and write out what the red agent is doing\n",
" red_info : AgentHistoryItem = info['agent_actions']['data_manipulation_attacker']\n", " red_info : AgentHistoryItem = info['agent_actions']['data_manipulation_attacker']\n",
" red_action = red_info.action\n", " red_action = red_info.action\n",
" if red_action == 'do_nothing':\n", " if red_action == 'do-nothing':\n",
" red_str = 'DO NOTHING'\n", " red_str = 'DO NOTHING'\n",
" elif red_action == 'node_application_execute':\n", " elif red_action == 'node-application-execute':\n",
" red_str = f\"ATTACK from {red_info.parameters['node_name']}\"\n", " red_str = f\"ATTACK from {red_info.parameters['node_name']}\"\n",
" return red_str" " return red_str"
] ]
@@ -369,18 +369,18 @@
"change = yaml.safe_load(\"\"\"\n", "change = yaml.safe_load(\"\"\"\n",
" applications:\n", " applications:\n",
" - ref: data_manipulation_bot\n", " - ref: data_manipulation_bot\n",
" type: DataManipulationBot\n", " type: data-manipulation-bot\n",
" options:\n", " options:\n",
" port_scan_p_of_success: 1.0\n", " port_scan_p_of_success: 1.0\n",
" data_manipulation_p_of_success: 1.0\n", " data_manipulation_p_of_success: 1.0\n",
" payload: \"DELETE\"\n", " payload: \"DELETE\"\n",
" server_ip: 192.168.1.14\n", " server_ip: 192.168.1.14\n",
" - ref: client_1_web_browser\n", " - ref: client_1_web_browser\n",
" type: WebBrowser\n", " type: web-browser\n",
" options:\n", " options:\n",
" target_url: http://arcd.com/users/\n", " target_url: http://arcd.com/users/\n",
" - ref: client_1_database_client\n", " - ref: client_1_database_client\n",
" type: DatabaseClient\n", " type: database-client\n",
" options:\n", " options:\n",
" db_server_ip: 192.168.1.14\n", " db_server_ip: 192.168.1.14\n",
"\"\"\")\n", "\"\"\")\n",
@@ -414,18 +414,18 @@
"change = yaml.safe_load(\"\"\"\n", "change = yaml.safe_load(\"\"\"\n",
" applications:\n", " applications:\n",
" - ref: data_manipulation_bot\n", " - ref: data_manipulation_bot\n",
" type: DataManipulationBot\n", " type: data-manipulation-bot\n",
" options:\n", " options:\n",
" port_scan_p_of_success: 0.0\n", " port_scan_p_of_success: 0.0\n",
" data_manipulation_p_of_success: 0.0\n", " data_manipulation_p_of_success: 0.0\n",
" payload: \"DELETE\"\n", " payload: \"DELETE\"\n",
" server_ip: 192.168.1.14\n", " server_ip: 192.168.1.14\n",
" - ref: client_1_web_browser\n", " - ref: client_1_web_browser\n",
" type: WebBrowser\n", " type: web-browser\n",
" options:\n", " options:\n",
" target_url: http://arcd.com/users/\n", " target_url: http://arcd.com/users/\n",
" - ref: client_1_database_client\n", " - ref: client_1_database_client\n",
" type: DatabaseClient\n", " type: database-client\n",
" options:\n", " options:\n",
" db_server_ip: 192.168.1.14\n", " db_server_ip: 192.168.1.14\n",
"\"\"\")\n", "\"\"\")\n",

View File

@@ -458,9 +458,9 @@
" # parse the info dict form step output and write out what the red agent is doing\n", " # parse the info dict form step output and write out what the red agent is doing\n",
" red_info : AgentHistoryItem = info['agent_actions']['data_manipulation_attacker']\n", " red_info : AgentHistoryItem = info['agent_actions']['data_manipulation_attacker']\n",
" red_action = red_info.action\n", " red_action = red_info.action\n",
" if red_action == 'do_nothing':\n", " if red_action == 'do-nothing':\n",
" red_str = 'DO NOTHING'\n", " red_str = 'DO NOTHING'\n",
" elif red_action == 'node_application_execute':\n", " elif red_action == 'node-application-execute':\n",
" client = \"client 1\" if red_info.parameters['node_name'] == 0 else \"client 2\"\n", " client = \"client 1\" if red_info.parameters['node_name'] == 0 else \"client 2\"\n",
" red_str = f\"ATTACK from {client}\"\n", " red_str = f\"ATTACK from {client}\"\n",
" return red_str" " return red_str"

View File

@@ -120,11 +120,11 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"some_tech_jnr_dev_pc: Computer = game.simulation.network.get_node_by_hostname(\"some_tech_jnr_dev_pc\")\n", "some_tech_jnr_dev_pc: Computer = game.simulation.network.get_node_by_hostname(\"some_tech_jnr_dev_pc\")\n",
"some_tech_jnr_dev_db_client: DatabaseClient = some_tech_jnr_dev_pc.software_manager.software[\"DatabaseClient\"]\n", "some_tech_jnr_dev_db_client: DatabaseClient = some_tech_jnr_dev_pc.software_manager.software[\"database-client\"]\n",
"some_tech_jnr_dev_web_browser: WebBrowser = some_tech_jnr_dev_pc.software_manager.software[\"WebBrowser\"]\n", "some_tech_jnr_dev_web_browser: WebBrowser = some_tech_jnr_dev_pc.software_manager.software[\"web-browser\"]\n",
"some_tech_rt: Router = game.simulation.network.get_node_by_hostname(\"some_tech_rt\")\n", "some_tech_rt: Router = game.simulation.network.get_node_by_hostname(\"some_tech_rt\")\n",
"some_tech_db_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_db_srv\")\n", "some_tech_db_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_db_srv\")\n",
"some_tech_db_service: DatabaseService = some_tech_db_srv.software_manager.software[\"DatabaseService\"]\n", "some_tech_db_service: DatabaseService = some_tech_db_srv.software_manager.software[\"database-service\"]\n",
"some_tech_storage_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_storage_srv\")\n", "some_tech_storage_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_storage_srv\")\n",
"some_tech_web_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_web_srv\")" "some_tech_web_srv: Server = game.simulation.network.get_node_by_hostname(\"some_tech_web_srv\")"
] ]
@@ -211,7 +211,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"node_session_remote_login\", \"admin\", \"admin\", str(some_tech_storage_srv.network_interface[1].ip_address)\n", " \"service\", \"terminal\", \"node-session-remote-login\", \"admin\", \"admin\", str(some_tech_storage_srv.network_interface[1].ip_address)\n",
"]\n", "]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
@@ -233,7 +233,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"WebBrowser\", \"execute\"]\n", "caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"web-browser\", \"execute\"]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
}, },
@@ -256,7 +256,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"UserSessionManager\"][\"active_remote_sessions\"]" "game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"user-session-manager\"][\"active_remote_sessions\"]"
] ]
}, },
{ {
@@ -269,7 +269,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"node_session_remote_login\", \"admin\", \"admin\", str(some_tech_rt.network_interface[4].ip_address)\n", " \"service\", \"terminal\", \"node-session-remote-login\", \"admin\", \"admin\", str(some_tech_rt.network_interface[4].ip_address)\n",
"]\n", "]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
@@ -282,7 +282,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"UserSessionManager\"][\"active_remote_sessions\"]" "game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"user-session-manager\"][\"active_remote_sessions\"]"
] ]
}, },
{ {
@@ -315,7 +315,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"send_remote_command\", str(some_tech_rt.network_interface[4].ip_address),\n", " \"service\", \"terminal\", \"send_remote_command\", str(some_tech_rt.network_interface[4].ip_address),\n",
" {\n", " {\n",
" \"command\": [\n", " \"command\": [\n",
" \"acl\", \"add_rule\", \"PERMIT\", \"TCP\",\n", " \"acl\", \"add_rule\", \"PERMIT\", \"TCP\",\n",
@@ -368,7 +368,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"remote_logoff\", str(some_tech_rt.network_interface[4].ip_address)\n", " \"service\", \"terminal\", \"remote_logoff\", str(some_tech_rt.network_interface[4].ip_address)\n",
"]\n", "]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
@@ -386,7 +386,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"UserSessionManager\"][\"active_remote_sessions\"]" "game.get_sim_state()[\"network\"][\"nodes\"][\"some_tech_rt\"][\"services\"][\"user-session-manager\"][\"active_remote_sessions\"]"
] ]
}, },
{ {
@@ -406,7 +406,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"node_session_remote_login\", \"admin\", \"admin\", str(some_tech_storage_srv.network_interface[1].ip_address)\n", " \"service\", \"terminal\", \"node-session-remote-login\", \"admin\", \"admin\", str(some_tech_storage_srv.network_interface[1].ip_address)\n",
"]\n", "]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
@@ -421,7 +421,7 @@
"source": [ "source": [
"caos_action = [\n", "caos_action = [\n",
" \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n", " \"network\", \"node\", \"some_tech_jnr_dev_pc\", \n",
" \"service\", \"Terminal\", \"send_remote_command\", str(some_tech_storage_srv.network_interface[1].ip_address),\n", " \"service\", \"terminal\", \"send_remote_command\", str(some_tech_storage_srv.network_interface[1].ip_address),\n",
" {\n", " {\n",
" \"command\": [\n", " \"command\": [\n",
" \"file_system\", \"delete\", \"file\", db_backup_folder, \"database.db\"\n", " \"file_system\", \"delete\", \"file\", db_backup_folder, \"database.db\"\n",
@@ -476,7 +476,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"WebBrowser\", \"execute\"]\n", "caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"web-browser\", \"execute\"]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
}, },
@@ -535,7 +535,7 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"WebBrowser\", \"execute\"]\n", "caos_action = [\"network\", \"node\", \"some_tech_jnr_dev_pc\", \"application\", \"web-browser\", \"execute\"]\n",
"game.simulation.apply_request(caos_action)" "game.simulation.apply_request(caos_action)"
] ]
}, },

View File

@@ -52,14 +52,15 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"sim = Simulation()\n", "sim = Simulation()\n",
"\n",
"sim.network.add_node(\n", "sim.network.add_node(\n",
" HostNode.from_config(\n", " HostNode.from_config(\n",
" config = {\n", " config = {\n",
" 'type': \"hostnode\",\n", " 'type': \"host-node\",\n",
" 'hostname': \"client\",\n", " 'hostname': \"client\",\n",
" 'ip_address': '10.0.0.1',\n", " 'ip_address': '10.0.0.1',\n",
" 'subnet_mask': '255.255.255.0',\n", " 'subnet_mask': '255.255.255.0',\n",
" 'operating_state': NodeOperatingState.ON,\n", " 'operating_state': \"ON\",\n",
" }\n", " }\n",
" )\n", " )\n",
")\n", ")\n",
@@ -98,7 +99,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"response = sim.apply_request(\n", "response = sim.apply_request(\n",
" request=[\"network\", \"node\", \"client\", \"service\", \"DNSClient\", \"stop\"],\n", " request=[\"network\", \"node\", \"client\", \"service\", \"dns-client\", \"stop\"],\n",
" context={}\n", " context={}\n",
" )\n", " )\n",
"print(response)" "print(response)"
@@ -118,7 +119,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"print(f\"DNS Client state: {client.software_manager.software.get('DNSClient').operating_state.name}\")" "print(f\"DNS Client state: {client.software_manager.software.get('dns-client').operating_state.name}\")"
] ]
}, },
{ {
@@ -142,7 +143,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"response = sim.apply_request(\n", "response = sim.apply_request(\n",
" request=[\"network\", \"node\", \"client\", \"service\", \"NonExistentApplication\", \"stop\"],\n", " request=[\"network\", \"node\", \"client\", \"service\", \"non-existent-application\", \"stop\"],\n",
" context={}\n", " context={}\n",
" )\n", " )\n",
"print(response)" "print(response)"
@@ -205,7 +206,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"response = sim.apply_request(\n", "response = sim.apply_request(\n",
" request=[\"network\", \"node\", \"client\", \"service\", \"DNSClient\", \"start\"],\n", " request=[\"network\", \"node\", \"client\", \"service\", \"dns-client\", \"start\"],\n",
" context={}\n", " context={}\n",
" )\n", " )\n",
"print(response)" "print(response)"

View File

@@ -6,7 +6,7 @@
"source": [ "source": [
"# Terminal Processing\n", "# Terminal Processing\n",
"\n", "\n",
"© Crown-owned copyright 2024, Defence Science and Technology Laboratory UK" "© Crown-owned copyright 2025, Defence Science and Technology Laboratory UK"
] ]
}, },
{ {
@@ -39,41 +39,27 @@
"from primaite.simulator.system.applications.red_applications.ransomware_script import RansomwareScript\n", "from primaite.simulator.system.applications.red_applications.ransomware_script import RansomwareScript\n",
"from primaite.simulator.system.services.terminal.terminal import RemoteTerminalConnection\n", "from primaite.simulator.system.services.terminal.terminal import RemoteTerminalConnection\n",
"\n", "\n",
"# print(dir(Computer))\n",
"# node_a = Computer.from_config(\n",
"# config = {\n",
"# \"type\": \"computer\",\n",
"# \"hostname\": \"node_a\",\n",
"# \"ip_address\": \"192.168.0.10\",\n",
"# \"subnet_mask\": \"255.255.255.0\",\n",
"# \"startup_duration\": 0,\n",
"# }\n",
"# )\n",
"# print(f\"{node_a=}\")\n",
"\n",
"def basic_network() -> Network:\n", "def basic_network() -> Network:\n",
" \"\"\"Utility function for creating a default network to demonstrate Terminal functionality\"\"\"\n", " \"\"\"Utility function for creating a default network to demonstrate Terminal functionality\"\"\"\n",
" network = Network()\n", " network = Network()\n",
" # node_a = Computer(hostname=\"node_a\", ip_address=\"192.168.0.10\", subnet_mask=\"255.255.255.0\", start_up_duration=0)\n",
" node_a = Computer.from_config(\n", " node_a = Computer.from_config(\n",
" config = {\n", " config = {\n",
" \"type\": \"computer\",\n", " \"type\": \"computer\",\n",
" \"hostname\": \"node_a\",\n", " \"hostname\": \"node_a\",\n",
" \"ip_address\": \"192.168.0.10\",\n", " \"ip_address\": \"192.168.0.10\",\n",
" \"subnet_mask\": \"255.255.255.0\",\n", " \"subnet_mask\": \"255.255.255.0\",\n",
" \"startup_duration\": 0,\n", " # \"startup_duration\": 0,\n",
" }\n", " }\n",
" )\n", " )\n",
" print(f\"{node_a=}\")\n", " print(f\"{node_a=}\")\n",
" node_a.power_on()\n", " node_a.power_on()\n",
" # node_b = Computer(hostname=\"node_b\", ip_address=\"192.168.0.11\", subnet_mask=\"255.255.255.0\", start_up_duration=0)\n",
" node_b = Computer.from_config(\n", " node_b = Computer.from_config(\n",
" config = {\n", " config = {\n",
" \"type\": \"computer\",\n", " \"type\": \"computer\",\n",
" \"hostname\": \"node_b\",\n", " \"hostname\": \"node_b\",\n",
" \"ip_address\": \"192.168.0.11\",\n", " \"ip_address\": \"192.168.0.11\",\n",
" \"subnet_mask\": \"255.255.255.0\",\n", " \"subnet_mask\": \"255.255.255.0\",\n",
" \"startup_duration\": 0,\n", " # \"startup_duration\": 0,\n",
" }\n", " }\n",
" )\n", " )\n",
" node_b.power_on()\n", " node_b.power_on()\n",
@@ -98,9 +84,9 @@
"source": [ "source": [
"network: Network = basic_network()\n", "network: Network = basic_network()\n",
"computer_a: Computer = network.get_node_by_hostname(\"node_a\")\n", "computer_a: Computer = network.get_node_by_hostname(\"node_a\")\n",
"terminal_a: Terminal = computer_a.software_manager.software.get(\"Terminal\")\n", "terminal_a: Terminal = computer_a.software_manager.software.get(\"terminal\")\n",
"computer_b: Computer = network.get_node_by_hostname(\"node_b\")\n", "computer_b: Computer = network.get_node_by_hostname(\"node_b\")\n",
"terminal_b: Terminal = computer_b.software_manager.software.get(\"Terminal\")" "terminal_b: Terminal = computer_b.software_manager.software.get(\"terminal\")"
] ]
}, },
{ {
@@ -152,7 +138,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"term_a_term_b_remote_connection.execute([\"software_manager\", \"application\", \"install\", \"RansomwareScript\"])" "term_a_term_b_remote_connection.execute([\"software_manager\", \"application\", \"install\", \"ransomware-script\"])"
] ]
}, },
{ {

View File

@@ -1632,7 +1632,9 @@ class Node(SimComponent, ABC):
dns_server=kwargs["config"].dns_server, dns_server=kwargs["config"].dns_server,
) )
super().__init__(**kwargs) super().__init__(**kwargs)
self.operating_state = NodeOperatingState.ON if not (p := kwargs["config"].operating_state) else p self.operating_state = (
NodeOperatingState.ON if not (p := kwargs["config"].operating_state) else NodeOperatingState[p.upper()]
)
self._install_system_software() self._install_system_software()
self.session_manager.node = self self.session_manager.node = self
self.session_manager.software_manager = self.software_manager self.session_manager.software_manager = self.software_manager

View File

@@ -313,7 +313,7 @@ class HostNode(Node, discriminator="host-node"):
""" """
SYSTEM_SOFTWARE: ClassVar[Dict] = { SYSTEM_SOFTWARE: ClassVar[Dict] = {
"HostARP": HostARP, "host-arp": HostARP,
"icmp": ICMP, "icmp": ICMP,
"dns-client": DNSClient, "dns-client": DNSClient,
"ntp-client": NTPClient, "ntp-client": NTPClient,

View File

@@ -34,10 +34,10 @@ agents:
action_space: action_space:
action_map: action_map:
0: 0:
action: do-nothing action: do_nothing
options: {} options: {}
1: 1:
action: node-application-execute action: node_application_execute
options: options:
node_name: client_2 node_name: client_2
application_name: web-browser application_name: web-browser
@@ -109,7 +109,7 @@ agents:
action_space: action_space:
action_map: action_map:
0: 0:
action: do-nothing action: do_nothing
options: {} options: {}
reward_function: reward_function: