diff --git a/src/primaite/config/_package_data/example_config.yaml b/src/primaite/config/_package_data/example_config.yaml index 270760f5..af872a01 100644 --- a/src/primaite/config/_package_data/example_config.yaml +++ b/src/primaite/config/_package_data/example_config.yaml @@ -665,7 +665,7 @@ simulation: options: port_scan_p_of_success: 0.1 data_manipulation_p_of_success: 0.1 - payload: "DROP TABLE IF EXISTS user;" + payload: "DELETE" server_ip: 192.168.1.14 services: - ref: client_1_dns_client diff --git a/src/primaite/game/agent/interface.py b/src/primaite/game/agent/interface.py index ff0986a8..38116987 100644 --- a/src/primaite/game/agent/interface.py +++ b/src/primaite/game/agent/interface.py @@ -58,7 +58,7 @@ class AbstractAgent(ABC): action_space: Optional[ActionManager], observation_space: Optional[ObservationManager], reward_function: Optional[RewardFunction], - agent_settings: Optional[AgentSettings], + agent_settings: Optional[AgentSettings] = None, ) -> None: """ Initialize an agent. @@ -217,7 +217,7 @@ class DataManipulationAgent(AbstractScriptedAgent): :return: _description_ :rtype: Tuple[str, Dict] """ - current_timestep = self.action_space.session.step_counter + current_timestep = self.action_manager.session.step_counter if current_timestep < self.next_execution_timestep: return "DONOTHING", {"dummy": 0} diff --git a/src/primaite/simulator/network/networks.py b/src/primaite/simulator/network/networks.py index c0f9a07e..ea767b54 100644 --- a/src/primaite/simulator/network/networks.py +++ b/src/primaite/simulator/network/networks.py @@ -140,7 +140,12 @@ def arcd_uc2_network() -> Network: network.connect(endpoint_b=client_1.ethernet_port[1], endpoint_a=switch_2.switch_ports[1]) client_1.software_manager.install(DataManipulationBot) db_manipulation_bot: DataManipulationBot = client_1.software_manager.software["DataManipulationBot"] - db_manipulation_bot.configure(server_ip_address=IPv4Address("192.168.1.14"), payload="DELETE") + db_manipulation_bot.configure( + server_ip_address=IPv4Address("192.168.1.14"), + payload="DELETE", + port_scan_p_of_success=1.0, + data_manipulation_p_of_success=1.0, + ) # Client 2 client_2 = Computer( diff --git a/src/primaite/simulator/system/applications/database_client.py b/src/primaite/simulator/system/applications/database_client.py index a5c213cd..da2299c4 100644 --- a/src/primaite/simulator/system/applications/database_client.py +++ b/src/primaite/simulator/system/applications/database_client.py @@ -129,9 +129,9 @@ class DatabaseClient(Application): ) return self._query(sql=sql, query_id=query_id, is_reattempt=True) - def execute(self) -> None: + def run(self) -> None: """Run the DatabaseClient.""" - super().execute() + super().run() if self.operating_state == ApplicationOperatingState.RUNNING: self.connect() diff --git a/src/primaite/simulator/system/services/red_services/data_manipulation_bot.py b/src/primaite/simulator/system/services/red_services/data_manipulation_bot.py index 2b0bed30..17b89386 100644 --- a/src/primaite/simulator/system/services/red_services/data_manipulation_bot.py +++ b/src/primaite/simulator/system/services/red_services/data_manipulation_bot.py @@ -50,7 +50,7 @@ class DataManipulationBot(DatabaseClient): def _init_request_manager(self) -> RequestManager: rm = super()._init_request_manager() - rm.add_request(name="execute", request_type=RequestType(func=lambda request, context: self.execute())) + rm.add_request(name="execute", request_type=RequestType(func=lambda request, context: self.run())) return rm @@ -139,13 +139,13 @@ class DataManipulationBot(DatabaseClient): self.sys_log.info(f"{self.name}: Data manipulation failed") self.attack_stage = DataManipulationAttackStage.FAILED - def execute(self): + def run(self): """ - Execute the Data Manipulation Bot. + Run the Data Manipulation Bot. Calls the parent classes execute method before starting the application loop. """ - super().execute() + super().run() self._application_loop() def _application_loop(self): diff --git a/tests/assets/configs/bad_primaite_session.yaml b/tests/assets/configs/bad_primaite_session.yaml index 80567aea..6344eac0 100644 --- a/tests/assets/configs/bad_primaite_session.yaml +++ b/tests/assets/configs/bad_primaite_session.yaml @@ -2,9 +2,17 @@ training_config: rl_framework: SB3 rl_algorithm: PPO se3ed: 333 # Purposeful typo to check that error is raised with bad configuration. - n_learn_steps: 2560 + n_learn_episodes: 25 n_eval_episodes: 5 + max_steps_per_episode: 128 + deterministic_eval: false + n_agents: 1 + agent_references: + - defender +io_settings: + save_checkpoints: true + checkpoint_interval: 5 game_config: @@ -49,9 +57,10 @@ game_config: - type: DUMMY agent_settings: - start_step: 5 - frequency: 4 - variance: 3 + start_settings: + start_step: 5 + frequency: 4 + variance: 3 - ref: client_1_data_manipulation_red_bot team: RED @@ -65,8 +74,8 @@ game_config: observations: - logon_status - operating_status - services: - - service_ref: data_manipulation_bot + applications: + - application_ref: data_manipulation_bot observations: operating_status health_status @@ -76,22 +85,19 @@ game_config: action_list: - type: DONOTHING #