#2258: moving applications to application types - more tests
This commit is contained in:
@@ -33,12 +33,16 @@ from primaite.simulator.system.services.web_server.web_server import WebServer
|
||||
|
||||
_LOGGER = getLogger(__name__)
|
||||
|
||||
APPLICATION_TYPES_MAPPING = {"WebBrowser": WebBrowser, "DataManipulationBot": DataManipulationBot, "DoSBot": DoSBot}
|
||||
APPLICATION_TYPES_MAPPING = {
|
||||
"WebBrowser": WebBrowser,
|
||||
"DatabaseClient": DatabaseClient,
|
||||
"DataManipulationBot": DataManipulationBot,
|
||||
"DoSBot": DoSBot,
|
||||
}
|
||||
|
||||
SERVICE_TYPES_MAPPING = {
|
||||
"DNSClient": DNSClient,
|
||||
"DNSServer": DNSServer,
|
||||
"DatabaseClient": DatabaseClient,
|
||||
"DatabaseService": DatabaseService,
|
||||
"WebServer": WebServer,
|
||||
"FTPClient": FTPClient,
|
||||
@@ -262,22 +266,21 @@ class PrimaiteGame:
|
||||
else:
|
||||
_LOGGER.warning(f"service type not found {service_type}")
|
||||
# service-dependent options
|
||||
if service_type == "DatabaseClient":
|
||||
if service_type == "DNSClient":
|
||||
if "options" in service_cfg:
|
||||
opt = service_cfg["options"]
|
||||
if "db_server_ip" in opt:
|
||||
new_service.configure(server_ip_address=IPv4Address(opt["db_server_ip"]))
|
||||
if "dns_server" in opt:
|
||||
new_service.dns_server = IPv4Address(opt["dns_server"])
|
||||
if service_type == "DNSServer":
|
||||
if "options" in service_cfg:
|
||||
opt = service_cfg["options"]
|
||||
if "domain_mapping" in opt:
|
||||
for domain, ip in opt["domain_mapping"].items():
|
||||
new_service.dns_register(domain, ip)
|
||||
new_service.dns_register(domain, IPv4Address(ip))
|
||||
if service_type == "DatabaseService":
|
||||
if "options" in service_cfg:
|
||||
opt = service_cfg["options"]
|
||||
if "backup_server_ip" in opt:
|
||||
new_service.configure_backup(backup_server=IPv4Address(opt["backup_server_ip"]))
|
||||
new_service.configure_backup(backup_server=IPv4Address(opt.get("backup_server_ip")))
|
||||
new_service.start()
|
||||
|
||||
if "applications" in node_cfg:
|
||||
@@ -303,6 +306,13 @@ class PrimaiteGame:
|
||||
port_scan_p_of_success=float(opt.get("port_scan_p_of_success", "0.1")),
|
||||
data_manipulation_p_of_success=float(opt.get("data_manipulation_p_of_success", "0.1")),
|
||||
)
|
||||
elif application_type == "DatabaseClient":
|
||||
if "options" in application_cfg:
|
||||
opt = application_cfg["options"]
|
||||
new_application.configure(
|
||||
server_ip_address=IPv4Address(opt.get("db_server_ip")),
|
||||
server_password=opt.get("server_password"),
|
||||
)
|
||||
elif application_type == "WebBrowser":
|
||||
if "options" in application_cfg:
|
||||
opt = application_cfg["options"]
|
||||
|
||||
@@ -81,6 +81,10 @@ simulation:
|
||||
type: WebBrowser
|
||||
options:
|
||||
target_url: http://arcd.com/users/
|
||||
- ref: client_1_database_client
|
||||
type: DatabaseClient
|
||||
options:
|
||||
db_server_ip: 192.168.1.10
|
||||
- ref: data_manipulation_bot
|
||||
type: DataManipulationBot
|
||||
options:
|
||||
@@ -95,27 +99,25 @@ simulation:
|
||||
payload: SPOOF DATA
|
||||
port_scan_p_of_success: 0.8
|
||||
services:
|
||||
- ref: client_1_dns_client
|
||||
type: DNSClient
|
||||
options:
|
||||
dns_server: 192.168.1.10
|
||||
- ref: client_1_dns_server
|
||||
type: DNSServer
|
||||
options:
|
||||
domain_mapping:
|
||||
arcd.com: 192.168.1.12 # web server
|
||||
- ref: client_1_database_client
|
||||
type: DatabaseClient
|
||||
options:
|
||||
db_server_ip: 192.168.10.21
|
||||
- ref: client_1_dosbot
|
||||
type: DoSBot
|
||||
options:
|
||||
db_server_ip: 192.168.10.21
|
||||
arcd.com: 192.168.1.10
|
||||
- ref: client_1_database_service
|
||||
type: DatabaseService
|
||||
options:
|
||||
backup_server_ip: 192.168.10.21
|
||||
backup_server_ip: 192.168.1.10
|
||||
- ref: client_1_web_service
|
||||
type: WebServer
|
||||
- ref: client_1_ftp_server
|
||||
type: FTPServer
|
||||
- ref: client_1_ntp_client
|
||||
type: NTPClient
|
||||
- ref: client_1_ntp_server
|
||||
type: NTPServer
|
||||
- ref: client_2
|
||||
|
||||
@@ -10,12 +10,18 @@ from primaite.game.agent.interface import ProxyAgent, RandomAgent
|
||||
from primaite.game.game import APPLICATION_TYPES_MAPPING, PrimaiteGame, SERVICE_TYPES_MAPPING
|
||||
from primaite.simulator.network.container import Network
|
||||
from primaite.simulator.network.hardware.nodes.computer import Computer
|
||||
from primaite.simulator.system.applications.database_client import DatabaseClient
|
||||
from primaite.simulator.system.applications.red_applications.data_manipulation_bot import DataManipulationBot
|
||||
from primaite.simulator.system.applications.red_applications.dos_bot import DoSBot
|
||||
from primaite.simulator.system.applications.web_browser import WebBrowser
|
||||
from primaite.simulator.system.services.database.database_service import DatabaseService
|
||||
from primaite.simulator.system.services.dns.dns_client import DNSClient
|
||||
from primaite.simulator.system.services.dns.dns_server import DNSServer
|
||||
from primaite.simulator.system.services.ftp.ftp_client import FTPClient
|
||||
from primaite.simulator.system.services.ftp.ftp_server import FTPServer
|
||||
from primaite.simulator.system.services.ntp.ntp_client import NTPClient
|
||||
from primaite.simulator.system.services.ntp.ntp_server import NTPServer
|
||||
from primaite.simulator.system.services.web_server.web_server import WebServer
|
||||
from tests import TEST_ASSETS_ROOT
|
||||
|
||||
BASIC_CONFIG = TEST_ASSETS_ROOT / "configs/basic_switched_network.yaml"
|
||||
@@ -33,19 +39,23 @@ def test_example_config():
|
||||
"""Test that the example config can be parsed properly."""
|
||||
game = load_config(example_config_path())
|
||||
|
||||
assert len(game.agents) == 3 # red, blue and green agent
|
||||
assert len(game.agents) == 4 # red, blue and 2 green agents
|
||||
|
||||
# green agent
|
||||
# green agent 1
|
||||
assert game.agents[0].agent_name == "client_2_green_user"
|
||||
assert isinstance(game.agents[0], RandomAgent)
|
||||
|
||||
# green agent 2
|
||||
assert game.agents[1].agent_name == "client_1_green_user"
|
||||
assert isinstance(game.agents[1], RandomAgent)
|
||||
|
||||
# red agent
|
||||
assert game.agents[1].agent_name == "client_1_data_manipulation_red_bot"
|
||||
assert isinstance(game.agents[1], DataManipulationAgent)
|
||||
assert game.agents[2].agent_name == "client_1_data_manipulation_red_bot"
|
||||
assert isinstance(game.agents[2], DataManipulationAgent)
|
||||
|
||||
# blue agent
|
||||
assert game.agents[2].agent_name == "defender"
|
||||
assert isinstance(game.agents[2], ProxyAgent)
|
||||
assert game.agents[3].agent_name == "defender"
|
||||
assert isinstance(game.agents[3], ProxyAgent)
|
||||
|
||||
network: Network = game.simulation.network
|
||||
|
||||
@@ -91,6 +101,16 @@ def test_web_browser_install():
|
||||
assert web_browser.target_url == "http://arcd.com/users/"
|
||||
|
||||
|
||||
def test_database_client_install():
|
||||
"""Test that the Database Client service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
database_client: DatabaseClient = client_1.software_manager.software.get("DatabaseClient")
|
||||
|
||||
assert database_client.server_ip_address == IPv4Address("192.168.1.10")
|
||||
|
||||
|
||||
def test_data_manipulation_bot_install():
|
||||
"""Test that the data manipulation bot can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
@@ -117,3 +137,70 @@ def test_dos_bot_install():
|
||||
assert dos_bot.dos_intensity == 1.0 # default
|
||||
assert dos_bot.max_sessions == 1000 # default
|
||||
assert dos_bot.repeat is False # default
|
||||
|
||||
|
||||
def test_dns_client_install():
|
||||
"""Test that the DNS Client service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
dns_client: DNSClient = client_1.software_manager.software.get("DNSClient")
|
||||
|
||||
assert dns_client.dns_server == IPv4Address("192.168.1.10")
|
||||
|
||||
|
||||
def test_database_service_install():
|
||||
"""Test that the Database Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
database_service: DatabaseService = client_1.software_manager.software.get("DatabaseService")
|
||||
|
||||
assert database_service.backup_server_ip == IPv4Address("192.168.1.10")
|
||||
|
||||
|
||||
def test_web_server_install():
|
||||
"""Test that the Web Server Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
web_server_service: WebServer = client_1.software_manager.software.get("WebServer")
|
||||
|
||||
# config should have also installed database client - web server service should be able to retrieve this
|
||||
assert web_server_service.software_manager.software.get("DatabaseClient") is not None
|
||||
|
||||
|
||||
def test_ftp_client_install():
|
||||
"""Test that the FTP Client Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
ftp_client_service: FTPClient = client_1.software_manager.software.get("FTPClient")
|
||||
assert ftp_client_service is not None
|
||||
|
||||
|
||||
def test_ftp_server_install():
|
||||
"""Test that the FTP Server Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
ftp_server_service: FTPServer = client_1.software_manager.software.get("FTPServer")
|
||||
assert ftp_server_service is not None
|
||||
|
||||
|
||||
def test_ntp_client_install():
|
||||
"""Test that the NTP Client Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
ntp_client_service: NTPClient = client_1.software_manager.software.get("NTPClient")
|
||||
assert ntp_client_service is not None
|
||||
|
||||
|
||||
def test_ntp_server_install():
|
||||
"""Test that the NTP Server Service can be configured via config."""
|
||||
game = load_config(BASIC_CONFIG)
|
||||
client_1: Computer = game.simulation.network.get_node_by_hostname("client_1")
|
||||
|
||||
ntp_server_service: NTPServer = client_1.software_manager.software.get("NTPServer")
|
||||
assert ntp_server_service is not None
|
||||
|
||||
Reference in New Issue
Block a user