Update configs to new db manipulation bot approach
This commit is contained in:
@@ -146,6 +146,9 @@ def arcd_uc2_network() -> Network:
|
|||||||
)
|
)
|
||||||
client_1.power_on()
|
client_1.power_on()
|
||||||
network.connect(endpoint_b=client_1.network_interface[1], endpoint_a=switch_2.network_interface[1])
|
network.connect(endpoint_b=client_1.network_interface[1], endpoint_a=switch_2.network_interface[1])
|
||||||
|
db_client_1 = client_1.software_manager.install(DatabaseClient)
|
||||||
|
db_client_1 = client_1.software_manager.software.get("DatabaseClient")
|
||||||
|
db_client_1.run()
|
||||||
client_1.software_manager.install(DataManipulationBot)
|
client_1.software_manager.install(DataManipulationBot)
|
||||||
db_manipulation_bot: DataManipulationBot = client_1.software_manager.software.get("DataManipulationBot")
|
db_manipulation_bot: DataManipulationBot = client_1.software_manager.software.get("DataManipulationBot")
|
||||||
db_manipulation_bot.configure(
|
db_manipulation_bot.configure(
|
||||||
@@ -165,6 +168,9 @@ def arcd_uc2_network() -> Network:
|
|||||||
start_up_duration=0,
|
start_up_duration=0,
|
||||||
)
|
)
|
||||||
client_2.power_on()
|
client_2.power_on()
|
||||||
|
client_2.software_manager.install(DatabaseClient)
|
||||||
|
db_client_2 = client_2.software_manager.software.get("DatabaseClient")
|
||||||
|
db_client_2.run()
|
||||||
web_browser = client_2.software_manager.software.get("WebBrowser")
|
web_browser = client_2.software_manager.software.get("WebBrowser")
|
||||||
web_browser.target_url = "http://arcd.com/users/"
|
web_browser.target_url = "http://arcd.com/users/"
|
||||||
network.connect(endpoint_b=client_2.network_interface[1], endpoint_a=switch_2.network_interface[2])
|
network.connect(endpoint_b=client_2.network_interface[1], endpoint_a=switch_2.network_interface[2])
|
||||||
@@ -194,67 +200,10 @@ def arcd_uc2_network() -> Network:
|
|||||||
database_server.power_on()
|
database_server.power_on()
|
||||||
network.connect(endpoint_b=database_server.network_interface[1], endpoint_a=switch_1.network_interface[3])
|
network.connect(endpoint_b=database_server.network_interface[1], endpoint_a=switch_1.network_interface[3])
|
||||||
|
|
||||||
ddl = """
|
|
||||||
CREATE TABLE IF NOT EXISTS user (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name VARCHAR(50) NOT NULL,
|
|
||||||
email VARCHAR(50) NOT NULL,
|
|
||||||
age INT,
|
|
||||||
city VARCHAR(50),
|
|
||||||
occupation VARCHAR(50)
|
|
||||||
);"""
|
|
||||||
|
|
||||||
user_insert_statements = [
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('John Doe', 'johndoe@example.com', 32, 'New York', 'Engineer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Jane Smith', 'janesmith@example.com', 27, 'Los Angeles', 'Designer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Bob Johnson', 'bobjohnson@example.com', 45, 'Chicago', 'Manager');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Alice Lee', 'alicelee@example.com', 22, 'San Francisco', 'Student');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('David Kim', 'davidkim@example.com', 38, 'Houston', 'Consultant');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Emily Chen', 'emilychen@example.com', 29, 'Seattle', 'Software Developer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Frank Wang', 'frankwang@example.com', 55, 'New York', 'Entrepreneur');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Grace Park', 'gracepark@example.com', 31, 'Los Angeles', 'Marketing Specialist');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Henry Wu', 'henrywu@example.com', 40, 'Chicago', 'Accountant');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Isabella Kim', 'isabellakim@example.com', 26, 'San Francisco', 'Graphic Designer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Jake Lee', 'jakelee@example.com', 33, 'Houston', 'Sales Manager');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Kelly Chen', 'kellychen@example.com', 28, 'Seattle', 'Web Developer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Lucas Liu', 'lucasliu@example.com', 42, 'New York', 'Lawyer');",
|
|
||||||
# noqa
|
|
||||||
"INSERT INTO user (name, email, age, city, occupation) "
|
|
||||||
"VALUES ('Maggie Wang', 'maggiewang@example.com', 30, 'Los Angeles', 'Data Analyst');",
|
|
||||||
# noqa
|
|
||||||
]
|
|
||||||
database_server.software_manager.install(DatabaseService)
|
database_server.software_manager.install(DatabaseService)
|
||||||
database_service: DatabaseService = database_server.software_manager.software.get("DatabaseService") # noqa
|
database_service: DatabaseService = database_server.software_manager.software.get("DatabaseService") # noqa
|
||||||
database_service.start()
|
database_service.start()
|
||||||
database_service.configure_backup(backup_server=IPv4Address("192.168.1.16"))
|
database_service.configure_backup(backup_server=IPv4Address("192.168.1.16"))
|
||||||
database_service._process_sql(ddl, None, None) # noqa
|
|
||||||
for insert_statement in user_insert_statements:
|
|
||||||
database_service._process_sql(insert_statement, None, None) # noqa
|
|
||||||
|
|
||||||
# Web Server
|
# Web Server
|
||||||
web_server = Server(
|
web_server = Server(
|
||||||
|
|||||||
@@ -149,6 +149,10 @@ class DataManipulationBot(Application):
|
|||||||
|
|
||||||
:param p_of_success: Probability of successfully performing data manipulation, by default 0.1.
|
:param p_of_success: Probability of successfully performing data manipulation, by default 0.1.
|
||||||
"""
|
"""
|
||||||
|
if self._host_db_client is None:
|
||||||
|
self.attack_stage = DataManipulationAttackStage.FAILED
|
||||||
|
return
|
||||||
|
|
||||||
self._host_db_client.server_ip_address = self.server_ip_address
|
self._host_db_client.server_ip_address = self.server_ip_address
|
||||||
self._host_db_client.server_password = self.server_password
|
self._host_db_client.server_password = self.server_password
|
||||||
if self.attack_stage == DataManipulationAttackStage.PORT_SCAN:
|
if self.attack_stage == DataManipulationAttackStage.PORT_SCAN:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ game:
|
|||||||
agents:
|
agents:
|
||||||
- ref: client_2_green_user
|
- ref: client_2_green_user
|
||||||
team: GREEN
|
team: GREEN
|
||||||
type: GreenWebBrowsingAgent
|
type: probabilistic_agent
|
||||||
observation_space:
|
observation_space:
|
||||||
type: UC2GreenObservation
|
type: UC2GreenObservation
|
||||||
action_space:
|
action_space:
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ def test_create_dm_bot(dm_client):
|
|||||||
data_manipulation_bot: DataManipulationBot = dm_client.software_manager.software.get("DataManipulationBot")
|
data_manipulation_bot: DataManipulationBot = dm_client.software_manager.software.get("DataManipulationBot")
|
||||||
|
|
||||||
assert data_manipulation_bot.name == "DataManipulationBot"
|
assert data_manipulation_bot.name == "DataManipulationBot"
|
||||||
assert data_manipulation_bot.port == Port.POSTGRES_SERVER
|
assert data_manipulation_bot.port == Port.NONE
|
||||||
assert data_manipulation_bot.protocol == IPProtocol.TCP
|
assert data_manipulation_bot.protocol == IPProtocol.NONE
|
||||||
assert data_manipulation_bot.payload == "DELETE"
|
assert data_manipulation_bot.payload == "DELETE"
|
||||||
|
|
||||||
|
|
||||||
@@ -70,4 +70,13 @@ def test_dm_bot_perform_data_manipulation_success(dm_bot):
|
|||||||
dm_bot._perform_data_manipulation(p_of_success=1.0)
|
dm_bot._perform_data_manipulation(p_of_success=1.0)
|
||||||
|
|
||||||
assert dm_bot.attack_stage in (DataManipulationAttackStage.SUCCEEDED, DataManipulationAttackStage.FAILED)
|
assert dm_bot.attack_stage in (DataManipulationAttackStage.SUCCEEDED, DataManipulationAttackStage.FAILED)
|
||||||
assert len(dm_bot.connections)
|
assert len(dm_bot._host_db_client.connections)
|
||||||
|
|
||||||
|
|
||||||
|
def test_dm_bot_fails_without_db_client(dm_client):
|
||||||
|
dm_client.software_manager.uninstall("DatabaseClient")
|
||||||
|
dm_bot = dm_client.software_manager.software.get("DataManipulationBot")
|
||||||
|
assert dm_bot._host_db_client is None
|
||||||
|
dm_bot.attack_stage = DataManipulationAttackStage.PORT_SCAN
|
||||||
|
dm_bot._perform_data_manipulation(p_of_success=1.0)
|
||||||
|
assert dm_bot.attack_stage is DataManipulationAttackStage.FAILED
|
||||||
|
|||||||
Reference in New Issue
Block a user