Merged PR 329: Remove link refs and put nice naming convention instead

instead of UUID for link primary key in describe state, we are using something more like

router_1:eth-3<->switch_1:eth-8
**all configs need to change the observation space link schema as a result of this change**

It looks like there are a lot of changed files, but it's mostly just removing the `game` parameter from observations and removing 'ref' from config files.

:)

also we no longer need to specify `ref` for nodes, services, or applications. (**but existing configs will not break based on this change!**)

Related work items: #2450
This commit is contained in:
Marek Wolan
2024-04-04 09:11:23 +00:00
27 changed files with 623 additions and 1031 deletions

View File

@@ -226,16 +226,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -756,8 +756,7 @@ simulation:
- DELETE - DELETE
nodes: nodes:
- ref: router_1 - hostname: router_1
hostname: router_1
type: router type: router
num_ports: 5 num_ports: 5
ports: ports:
@@ -792,74 +791,61 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - hostname: switch_1
hostname: switch_1
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: switch_2 - hostname: switch_2
hostname: switch_2
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: domain_controller - hostname: domain_controller
hostname: domain_controller
type: server type: server
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - hostname: web_server
hostname: web_server
type: server type: server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - hostname: database_server
hostname: database_server
type: server type: server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
options: options:
backup_server_ip: 192.168.1.16 backup_server_ip: 192.168.1.16
- ref: database_ftp_client - type: FTPClient
type: FTPClient
- ref: backup_server - hostname: backup_server
hostname: backup_server
type: server type: server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - hostname: security_suite
hostname: security_suite
type: server type: server
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -870,110 +856,88 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - hostname: client_1
hostname: client_1
type: computer type: computer
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_1_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: client_1_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - hostname: client_2
hostname: client_2
type: computer type: computer
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_2_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -228,16 +228,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -803,16 +803,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -1334,8 +1334,7 @@ simulation:
- DELETE - DELETE
nodes: nodes:
- ref: router_1 - hostname: router_1
hostname: router_1
type: router type: router
num_ports: 5 num_ports: 5
ports: ports:
@@ -1370,74 +1369,61 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - hostname: switch_1
hostname: switch_1
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: switch_2 - hostname: switch_2
hostname: switch_2
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: domain_controller - hostname: domain_controller
hostname: domain_controller
type: server type: server
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - hostname: web_server
hostname: web_server
type: server type: server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - hostname: database_server
hostname: database_server
type: server type: server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
options: options:
backup_server_ip: 192.168.1.16 backup_server_ip: 192.168.1.16
- ref: database_ftp_client - type: FTPClient
type: FTPClient
- ref: backup_server - hostname: backup_server
hostname: backup_server
type: server type: server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - hostname: security_suite
hostname: security_suite
type: server type: server
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -1448,110 +1434,90 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - hostname: client_1
hostname: client_1
type: computer type: computer
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_1_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: client_1_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - hostname: client_2
hostname: client_2
type: computer type: computer
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_2_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_2_dns_client - ty DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -1,7 +1,7 @@
from __future__ import annotations from __future__ import annotations
from ipaddress import IPv4Address from ipaddress import IPv4Address
from typing import Dict, List, Optional, TYPE_CHECKING from typing import Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -10,8 +10,6 @@ from primaite import getLogger
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -167,7 +165,7 @@ class ACLObservation(AbstractObservation, identifier="ACL"):
) )
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> ACLObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> ACLObservation:
""" """
Create an ACL observation from a configuration schema. Create an ACL observation from a configuration schema.

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, Iterable, List, Optional, TYPE_CHECKING from typing import Dict, Iterable, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -9,8 +9,6 @@ from primaite import getLogger
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -94,7 +92,7 @@ class FileObservation(AbstractObservation, identifier="FILE"):
return spaces.Dict(space) return spaces.Dict(space)
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> FileObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> FileObservation:
""" """
Create a file observation from a configuration schema. Create a file observation from a configuration schema.
@@ -193,7 +191,7 @@ class FolderObservation(AbstractObservation, identifier="FOLDER"):
return spaces.Dict(shape) return spaces.Dict(shape)
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> FolderObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> FolderObservation:
""" """
Create a folder observation from a configuration schema. Create a folder observation from a configuration schema.
@@ -211,5 +209,5 @@ class FolderObservation(AbstractObservation, identifier="FOLDER"):
for file_config in config.files: for file_config in config.files:
file_config.include_num_access = config.include_num_access file_config.include_num_access = config.include_num_access
files = [FileObservation.from_config(config=f, game=game, parent_where=where) for f in config.files] files = [FileObservation.from_config(config=f, parent_where=where) for f in config.files]
return cls(where=where, files=files, num_files=config.num_files, include_num_access=config.include_num_access) return cls(where=where, files=files, num_files=config.num_files, include_num_access=config.include_num_access)

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, List, Optional, TYPE_CHECKING from typing import Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -10,8 +10,6 @@ from primaite.game.agent.observations.acl_observation import ACLObservation
from primaite.game.agent.observations.nic_observations import PortObservation from primaite.game.agent.observations.nic_observations import PortObservation
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -200,9 +198,7 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"):
return space return space
@classmethod @classmethod
def from_config( def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> FirewallObservation:
cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []
) -> FirewallObservation:
""" """
Create a firewall observation from a configuration schema. Create a firewall observation from a configuration schema.

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, List, Optional, TYPE_CHECKING from typing import Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -12,8 +12,6 @@ from primaite.game.agent.observations.observations import AbstractObservation, W
from primaite.game.agent.observations.software_observation import ApplicationObservation, ServiceObservation from primaite.game.agent.observations.software_observation import ApplicationObservation, ServiceObservation
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -201,7 +199,7 @@ class HostObservation(AbstractObservation, identifier="HOST"):
return spaces.Dict(shape) return spaces.Dict(shape)
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> HostObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> HostObservation:
""" """
Create a host observation from a configuration schema. Create a host observation from a configuration schema.
@@ -225,12 +223,10 @@ class HostObservation(AbstractObservation, identifier="HOST"):
for nic_config in config.network_interfaces: for nic_config in config.network_interfaces:
nic_config.include_nmne = config.include_nmne nic_config.include_nmne = config.include_nmne
services = [ServiceObservation.from_config(config=c, game=game, parent_where=where) for c in config.services] services = [ServiceObservation.from_config(config=c, parent_where=where) for c in config.services]
applications = [ applications = [ApplicationObservation.from_config(config=c, parent_where=where) for c in config.applications]
ApplicationObservation.from_config(config=c, game=game, parent_where=where) for c in config.applications folders = [FolderObservation.from_config(config=c, parent_where=where) for c in config.folders]
] nics = [NICObservation.from_config(config=c, parent_where=where) for c in config.network_interfaces]
folders = [FolderObservation.from_config(config=c, game=game, parent_where=where) for c in config.folders]
nics = [NICObservation.from_config(config=c, game=game, parent_where=where) for c in config.network_interfaces]
return cls( return cls(
where=where, where=where,

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict, List, TYPE_CHECKING from typing import Any, Dict, List
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -9,8 +9,6 @@ from primaite import getLogger
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -68,21 +66,19 @@ class LinkObservation(AbstractObservation, identifier="LINK"):
return spaces.Dict({"PROTOCOLS": spaces.Dict({"ALL": spaces.Discrete(11)})}) return spaces.Dict({"PROTOCOLS": spaces.Dict({"ALL": spaces.Discrete(11)})})
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> LinkObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> LinkObservation:
""" """
Create a link observation from a configuration schema. Create a link observation from a configuration schema.
:param config: Configuration schema containing the necessary information for the link observation. :param config: Configuration schema containing the necessary information for the link observation.
:type config: ConfigSchema :type config: ConfigSchema
:param game: The PrimaiteGame instance.
:type game: PrimaiteGame
:param parent_where: Where in the simulation state dictionary to find the information about this link. :param parent_where: Where in the simulation state dictionary to find the information about this link.
A typical location might be ['network', 'links', <link_reference>]. A typical location might be ['network', 'links', <link_reference>].
:type parent_where: WhereType, optional :type parent_where: WhereType, optional
:return: Constructed link observation instance. :return: Constructed link observation instance.
:rtype: LinkObservation :rtype: LinkObservation
""" """
link_reference = game.ref_map_links[config.link_reference] link_reference = config.link_reference
if parent_where == []: if parent_where == []:
where = ["network", "links", link_reference] where = ["network", "links", link_reference]
else: else:
@@ -135,14 +131,12 @@ class LinksObservation(AbstractObservation, identifier="LINKS"):
return spaces.Dict({i + 1: l.space for i, l in enumerate(self.links)}) return spaces.Dict({i + 1: l.space for i, l in enumerate(self.links)})
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> LinksObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> LinksObservation:
""" """
Create a links observation from a configuration schema. Create a links observation from a configuration schema.
:param config: Configuration schema containing the necessary information for the links observation. :param config: Configuration schema containing the necessary information for the links observation.
:type config: ConfigSchema :type config: ConfigSchema
:param game: The PrimaiteGame instance.
:type game: PrimaiteGame
:param parent_where: Where in the simulation state dictionary to find the information about these links. :param parent_where: Where in the simulation state dictionary to find the information about these links.
A typical location might be ['network']. A typical location might be ['network'].
:type parent_where: WhereType, optional :type parent_where: WhereType, optional
@@ -151,5 +145,5 @@ class LinksObservation(AbstractObservation, identifier="LINKS"):
""" """
where = parent_where + ["network"] where = parent_where + ["network"]
link_cfgs = [LinkObservation.ConfigSchema(link_reference=ref) for ref in config.link_references] link_cfgs = [LinkObservation.ConfigSchema(link_reference=ref) for ref in config.link_references]
links = [LinkObservation.from_config(c, game=game, parent_where=where) for c in link_cfgs] links = [LinkObservation.from_config(c, parent_where=where) for c in link_cfgs]
return cls(where=where, links=links) return cls(where=where, links=links)

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, Optional, TYPE_CHECKING from typing import Dict, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -8,9 +8,6 @@ from gymnasium.core import ObsType
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
class NICObservation(AbstractObservation, identifier="NETWORK_INTERFACE"): class NICObservation(AbstractObservation, identifier="NETWORK_INTERFACE"):
"""Status information about a network interface within the simulation environment.""" """Status information about a network interface within the simulation environment."""
@@ -119,7 +116,7 @@ class NICObservation(AbstractObservation, identifier="NETWORK_INTERFACE"):
return space return space
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> NICObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> NICObservation:
""" """
Create a network interface observation from a configuration schema. Create a network interface observation from a configuration schema.
@@ -179,7 +176,7 @@ class PortObservation(AbstractObservation, identifier="PORT"):
return spaces.Dict({"operating_status": spaces.Discrete(3)}) return spaces.Dict({"operating_status": spaces.Discrete(3)})
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> PortObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> PortObservation:
""" """
Create a port observation from a configuration schema. Create a port observation from a configuration schema.

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, List, Optional, TYPE_CHECKING from typing import Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -12,8 +12,6 @@ from primaite.game.agent.observations.host_observations import HostObservation
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.observations.router_observation import RouterObservation from primaite.game.agent.observations.router_observation import RouterObservation
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -152,7 +150,7 @@ class NodesObservation(AbstractObservation, identifier="NODES"):
return space return space
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> NodesObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> NodesObservation:
""" """
Create a nodes observation from a configuration schema. Create a nodes observation from a configuration schema.
@@ -211,8 +209,8 @@ class NodesObservation(AbstractObservation, identifier="NODES"):
if firewall_config.num_rules is None: if firewall_config.num_rules is None:
firewall_config.num_rules = config.num_rules firewall_config.num_rules = config.num_rules
hosts = [HostObservation.from_config(config=c, game=game, parent_where=where) for c in config.hosts] hosts = [HostObservation.from_config(config=c, parent_where=where) for c in config.hosts]
routers = [RouterObservation.from_config(config=c, game=game, parent_where=where) for c in config.routers] routers = [RouterObservation.from_config(config=c, parent_where=where) for c in config.routers]
firewalls = [FirewallObservation.from_config(config=c, game=game, parent_where=where) for c in config.firewalls] firewalls = [FirewallObservation.from_config(config=c, parent_where=where) for c in config.firewalls]
return cls(where=where, hosts=hosts, routers=routers, firewalls=firewalls) return cls(where=where, hosts=hosts, routers=routers, firewalls=firewalls)

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict, List, Optional, TYPE_CHECKING from typing import Any, Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -8,9 +8,6 @@ from pydantic import BaseModel, ConfigDict, model_validator, ValidationError
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
class NestedObservation(AbstractObservation, identifier="CUSTOM"): class NestedObservation(AbstractObservation, identifier="CUSTOM"):
"""Observation type that allows combining other observations into a gymnasium.spaces.Dict space.""" """Observation type that allows combining other observations into a gymnasium.spaces.Dict space."""
@@ -76,7 +73,7 @@ class NestedObservation(AbstractObservation, identifier="CUSTOM"):
return spaces.Dict({label: obs.space for label, obs in self.components.items()}) return spaces.Dict({label: obs.space for label, obs in self.components.items()})
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> NestedObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> NestedObservation:
""" """
Read the Nested observation config and create all defined subcomponents. Read the Nested observation config and create all defined subcomponents.
@@ -115,7 +112,7 @@ class NestedObservation(AbstractObservation, identifier="CUSTOM"):
instances = dict() instances = dict()
for component in config.components: for component in config.components:
obs_class = AbstractObservation._registry[component.type] obs_class = AbstractObservation._registry[component.type]
obs_instance = obs_class.from_config(config=obs_class.ConfigSchema(**component.options), game=game) obs_instance = obs_class.from_config(config=obs_class.ConfigSchema(**component.options))
instances[component.label] = obs_instance instances[component.label] = obs_instance
return cls(components=instances) return cls(components=instances)
@@ -137,9 +134,7 @@ class NullObservation(AbstractObservation, identifier="NONE"):
return spaces.Discrete(1) return spaces.Discrete(1)
@classmethod @classmethod
def from_config( def from_config(cls, config: NullObservation.ConfigSchema, parent_where: WhereType = []) -> NullObservation:
cls, config: NullObservation.ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []
) -> NullObservation:
"""Instantiate a NullObservation. Accepts parameters to comply with API.""" """Instantiate a NullObservation. Accepts parameters to comply with API."""
return cls() return cls()
@@ -180,7 +175,7 @@ class ObservationManager:
return self.obs.space return self.obs.space
@classmethod @classmethod
def from_config(cls, config: Optional[Dict], game: "PrimaiteGame") -> "ObservationManager": def from_config(cls, config: Optional[Dict]) -> "ObservationManager":
""" """
Create observation space from a config. Create observation space from a config.
@@ -191,14 +186,12 @@ class ObservationManager:
AbstractObservation AbstractObservation
options: this must adhere to the chosen observation type's ConfigSchema nested class. options: this must adhere to the chosen observation type's ConfigSchema nested class.
:type config: Dict :type config: Dict
:param game: Reference to the PrimaiteGame object that spawned this observation.
:type game: PrimaiteGame
""" """
if config is None: if config is None:
return cls(NullObservation()) return cls(NullObservation())
print(config) print(config)
obs_type = config["type"] obs_type = config["type"]
obs_class = AbstractObservation._registry[obs_type] obs_class = AbstractObservation._registry[obs_type]
observation = obs_class.from_config(config=obs_class.ConfigSchema(**config["options"]), game=game) observation = obs_class.from_config(config=obs_class.ConfigSchema(**config["options"]))
obs_manager = cls(observation) obs_manager = cls(observation)
return obs_manager return obs_manager

View File

@@ -1,6 +1,6 @@
"""Manages the observation space for the agent.""" """Manages the observation space for the agent."""
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Any, Dict, Iterable, Type, TYPE_CHECKING from typing import Any, Dict, Iterable, Type
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -8,8 +8,6 @@ from pydantic import BaseModel, ConfigDict
from primaite import getLogger from primaite import getLogger
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
WhereType = Iterable[str | int] | None WhereType = Iterable[str | int] | None
@@ -65,8 +63,6 @@ class AbstractObservation(ABC):
@classmethod @classmethod
@abstractmethod @abstractmethod
def from_config( def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> "AbstractObservation":
cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []
) -> "AbstractObservation":
"""Create this observation space component form a serialised format.""" """Create this observation space component form a serialised format."""
return cls() return cls()

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, List, Optional, TYPE_CHECKING from typing import Dict, List, Optional
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -11,8 +11,6 @@ from primaite.game.agent.observations.nic_observations import PortObservation
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
_LOGGER = getLogger(__name__) _LOGGER = getLogger(__name__)
@@ -112,7 +110,7 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"):
return spaces.Dict(shape) return spaces.Dict(shape)
@classmethod @classmethod
def from_config(cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []) -> RouterObservation: def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> RouterObservation:
""" """
Create a router observation from a configuration schema. Create a router observation from a configuration schema.
@@ -142,6 +140,6 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"):
if config.ports is None: if config.ports is None:
config.ports = [PortObservation.ConfigSchema(port_id=i + 1) for i in range(config.num_ports)] config.ports = [PortObservation.ConfigSchema(port_id=i + 1) for i in range(config.num_ports)]
ports = [PortObservation.from_config(config=c, game=game, parent_where=where) for c in config.ports] ports = [PortObservation.from_config(config=c, parent_where=where) for c in config.ports]
acl = ACLObservation.from_config(config=config.acl, game=game, parent_where=where) acl = ACLObservation.from_config(config=config.acl, parent_where=where)
return cls(where=where, ports=ports, num_ports=config.num_ports, acl=acl) return cls(where=where, ports=ports, num_ports=config.num_ports, acl=acl)

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Dict, TYPE_CHECKING from typing import Dict
from gymnasium import spaces from gymnasium import spaces
from gymnasium.core import ObsType from gymnasium.core import ObsType
@@ -8,9 +8,6 @@ from gymnasium.core import ObsType
from primaite.game.agent.observations.observations import AbstractObservation, WhereType from primaite.game.agent.observations.observations import AbstractObservation, WhereType
from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE from primaite.game.agent.utils import access_from_nested_dict, NOT_PRESENT_IN_STATE
if TYPE_CHECKING:
from primaite.game.game import PrimaiteGame
class ServiceObservation(AbstractObservation, identifier="SERVICE"): class ServiceObservation(AbstractObservation, identifier="SERVICE"):
"""Service observation, shows status of a service in the simulation environment.""" """Service observation, shows status of a service in the simulation environment."""
@@ -60,9 +57,7 @@ class ServiceObservation(AbstractObservation, identifier="SERVICE"):
return spaces.Dict({"operating_status": spaces.Discrete(7), "health_status": spaces.Discrete(5)}) return spaces.Dict({"operating_status": spaces.Discrete(7), "health_status": spaces.Discrete(5)})
@classmethod @classmethod
def from_config( def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> ServiceObservation:
cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []
) -> ServiceObservation:
""" """
Create a service observation from a configuration schema. Create a service observation from a configuration schema.
@@ -153,9 +148,7 @@ class ApplicationObservation(AbstractObservation, identifier="APPLICATION"):
) )
@classmethod @classmethod
def from_config( def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> ApplicationObservation:
cls, config: ConfigSchema, game: "PrimaiteGame", parent_where: WhereType = []
) -> ApplicationObservation:
""" """
Create an application observation from a configuration schema. Create an application observation from a configuration schema.

View File

@@ -102,18 +102,6 @@ class PrimaiteGame:
self.options: PrimaiteGameOptions self.options: PrimaiteGameOptions
"""Special options that apply for the entire game.""" """Special options that apply for the entire game."""
self.ref_map_nodes: Dict[str, str] = {}
"""Mapping from unique node reference name to node object. Used when parsing config files."""
self.ref_map_services: Dict[str, str] = {}
"""Mapping from human-readable service reference to service object. Used for parsing config files."""
self.ref_map_applications: Dict[str, str] = {}
"""Mapping from human-readable application reference to application object. Used for parsing config files."""
self.ref_map_links: Dict[str, str] = {}
"""Mapping from human-readable link reference to link object. Used when parsing config files."""
self.save_step_metadata: bool = False self.save_step_metadata: bool = False
"""Whether to save the RL agents' action, environment state, and other data at every single step.""" """Whether to save the RL agents' action, environment state, and other data at every single step."""
@@ -238,7 +226,6 @@ class PrimaiteGame:
links_cfg = network_config.get("links", []) links_cfg = network_config.get("links", [])
for node_cfg in nodes_cfg: for node_cfg in nodes_cfg:
node_ref = node_cfg["ref"]
n_type = node_cfg["type"] n_type = node_cfg["type"]
if n_type == "computer": if n_type == "computer":
new_node = Computer( new_node = Computer(
@@ -289,13 +276,11 @@ class PrimaiteGame:
if "services" in node_cfg: if "services" in node_cfg:
for service_cfg in node_cfg["services"]: for service_cfg in node_cfg["services"]:
new_service = None new_service = None
service_ref = service_cfg["ref"]
service_type = service_cfg["type"] service_type = service_cfg["type"]
if service_type in SERVICE_TYPES_MAPPING: if service_type in SERVICE_TYPES_MAPPING:
_LOGGER.debug(f"installing {service_type} on node {new_node.hostname}") _LOGGER.debug(f"installing {service_type} on node {new_node.hostname}")
new_node.software_manager.install(SERVICE_TYPES_MAPPING[service_type]) new_node.software_manager.install(SERVICE_TYPES_MAPPING[service_type])
new_service = new_node.software_manager.software[service_type] new_service = new_node.software_manager.software[service_type]
game.ref_map_services[service_ref] = new_service.uuid
# start the service # start the service
new_service.start() new_service.start()
@@ -331,13 +316,11 @@ class PrimaiteGame:
if "applications" in node_cfg: if "applications" in node_cfg:
for application_cfg in node_cfg["applications"]: for application_cfg in node_cfg["applications"]:
new_application = None new_application = None
application_ref = application_cfg["ref"]
application_type = application_cfg["type"] application_type = application_cfg["type"]
if application_type in APPLICATION_TYPES_MAPPING: if application_type in APPLICATION_TYPES_MAPPING:
new_node.software_manager.install(APPLICATION_TYPES_MAPPING[application_type]) new_node.software_manager.install(APPLICATION_TYPES_MAPPING[application_type])
new_application = new_node.software_manager.software[application_type] new_application = new_node.software_manager.software[application_type]
game.ref_map_applications[application_ref] = new_application.uuid
else: else:
msg = f"Configuration contains an invalid application type: {application_type}" msg = f"Configuration contains an invalid application type: {application_type}"
_LOGGER.error(msg) _LOGGER.error(msg)
@@ -391,7 +374,6 @@ class PrimaiteGame:
# run through the power on step if the node is to be turned on at the start # run through the power on step if the node is to be turned on at the start
if new_node.operating_state == NodeOperatingState.ON: if new_node.operating_state == NodeOperatingState.ON:
new_node.power_on() new_node.power_on()
game.ref_map_nodes[node_ref] = new_node.uuid
# set start up and shut down duration # set start up and shut down duration
new_node.start_up_duration = int(node_cfg.get("start_up_duration", 3)) new_node.start_up_duration = int(node_cfg.get("start_up_duration", 3))
@@ -399,8 +381,8 @@ class PrimaiteGame:
# 2. create links between nodes # 2. create links between nodes
for link_cfg in links_cfg: for link_cfg in links_cfg:
node_a = net.nodes[game.ref_map_nodes[link_cfg["endpoint_a_ref"]]] node_a = net.get_node_by_hostname(link_cfg["endpoint_a_hostname"])
node_b = net.nodes[game.ref_map_nodes[link_cfg["endpoint_b_ref"]]] node_b = net.get_node_by_hostname(link_cfg["endpoint_b_hostname"])
if isinstance(node_a, Switch): if isinstance(node_a, Switch):
endpoint_a = node_a.network_interface[link_cfg["endpoint_a_port"]] endpoint_a = node_a.network_interface[link_cfg["endpoint_a_port"]]
else: else:
@@ -409,8 +391,7 @@ class PrimaiteGame:
endpoint_b = node_b.network_interface[link_cfg["endpoint_b_port"]] endpoint_b = node_b.network_interface[link_cfg["endpoint_b_port"]]
else: else:
endpoint_b = node_b.network_interface[link_cfg["endpoint_b_port"]] endpoint_b = node_b.network_interface[link_cfg["endpoint_b_port"]]
new_link = net.connect(endpoint_a=endpoint_a, endpoint_b=endpoint_b) net.connect(endpoint_a=endpoint_a, endpoint_b=endpoint_b)
game.ref_map_links[link_cfg["ref"]] = new_link.uuid
# 3. create agents # 3. create agents
agents_cfg = cfg.get("agents", []) agents_cfg = cfg.get("agents", [])
@@ -423,7 +404,7 @@ class PrimaiteGame:
reward_function_cfg = agent_cfg["reward_function"] reward_function_cfg = agent_cfg["reward_function"]
# CREATE OBSERVATION SPACE # CREATE OBSERVATION SPACE
obs_space = ObservationManager.from_config(observation_space_cfg, game) obs_space = ObservationManager.from_config(observation_space_cfg)
# CREATE ACTION SPACE # CREATE ACTION SPACE
action_space = ActionManager.from_config(game, action_space_cfg) action_space = ActionManager.from_config(game, action_space_cfg)

View File

@@ -225,18 +225,19 @@ class Network(SimComponent):
} }
) )
# Update the links one-by-one. The key is a 4-tuple of `hostname_a, port_a, hostname_b, port_b` # Update the links one-by-one. The key is a 4-tuple of `hostname_a, port_a, hostname_b, port_b`
for uuid, link in self.links.items(): for _, link in self.links.items():
node_a = link.endpoint_a._connected_node node_a = link.endpoint_a._connected_node
node_b = link.endpoint_b._connected_node node_b = link.endpoint_b._connected_node
hostname_a = node_a.hostname if node_a else None hostname_a = node_a.hostname if node_a else None
hostname_b = node_b.hostname if node_b else None hostname_b = node_b.hostname if node_b else None
port_a = link.endpoint_a.port_num port_a = link.endpoint_a.port_num
port_b = link.endpoint_b.port_num port_b = link.endpoint_b.port_num
state["links"][uuid] = link.describe_state() link_key = f"{hostname_a}:eth-{port_a}<->{hostname_b}:eth-{port_b}"
state["links"][uuid]["hostname_a"] = hostname_a state["links"][link_key] = link.describe_state()
state["links"][uuid]["hostname_b"] = hostname_b state["links"][link_key]["hostname_a"] = hostname_a
state["links"][uuid]["port_a"] = port_a state["links"][link_key]["hostname_b"] = hostname_b
state["links"][uuid]["port_b"] = port_b state["links"][link_key]["port_a"] = port_a
state["links"][link_key]["port_b"] = port_b
return state return state

View File

@@ -136,16 +136,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -551,8 +551,7 @@ simulation:
network: network:
nodes: nodes:
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
ports: ports:
@@ -579,70 +578,58 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: domain_controller - type: server
type: server
hostname: domain_controller hostname: domain_controller
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - type: server
type: server
hostname: web_server hostname: web_server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - type: server
type: server
hostname: database_server hostname: database_server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
- ref: backup_server - type: server
type: server
hostname: backup_server hostname: backup_server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - type: server
type: server
hostname: security_suite hostname: security_suite
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -653,87 +640,71 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.1 port_scan_p_of_success: 0.1
data_manipulation_p_of_success: 0.1 data_manipulation_p_of_success: 0.1
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -79,8 +79,7 @@ simulation:
network: network:
nodes: nodes:
- ref: firewall - type: firewall
type: firewall
hostname: firewall hostname: firewall
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
@@ -133,25 +132,21 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
# pre installed services and applications # pre installed services and applications
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -160,23 +155,19 @@ simulation:
# pre installed services and applications # pre installed services and applications
links: links:
- ref: switch_1___client_1 - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___firewall - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: firewall endpoint_b_hostname: firewall
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___firewall - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: firewall endpoint_b_hostname: firewall
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -79,79 +79,64 @@ simulation:
network: network:
nodes: nodes:
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: client_1 - hostname: client_1
type: computer type: computer
hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_1_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: client_1_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.10 db_server_ip: 192.168.1.10
server_password: arcd server_password: arcd
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.21 server_ip: 192.168.1.21
server_password: arcd server_password: arcd
- ref: dos_bot - type: DoSBot
type: DoSBot
options: options:
target_ip_address: 192.168.10.21 target_ip_address: 192.168.10.21
payload: SPOOF DATA payload: SPOOF DATA
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
options: options:
dns_server: 192.168.1.10 dns_server: 192.168.1.10
- ref: client_1_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.10 arcd.com: 192.168.1.10
- ref: client_1_database_service - type: DatabaseService
type: DatabaseService
options: options:
backup_server_ip: 192.168.1.10 backup_server_ip: 192.168.1.10
- ref: client_1_web_service - type: WebServer
type: WebServer - type: FTPServer
- ref: client_1_ftp_server
type: FTPServer
options: options:
server_password: arcd server_password: arcd
- ref: client_1_ntp_client - type: NTPClient
type: NTPClient
options: options:
ntp_server_ip: 192.168.1.10 ntp_server_ip: 192.168.1.10
- ref: client_1_ntp_server - type: NTPServer
type: NTPServer - hostname: client_2
- ref: client_2
type: computer type: computer
hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
# pre installed services and applications # pre installed services and applications
- ref: client_3 - hostname: client_3
type: computer type: computer
hostname: client_3
ip_address: 192.168.10.23 ip_address: 192.168.10.23
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
@@ -162,13 +147,11 @@ simulation:
# pre installed services and applications # pre installed services and applications
links: links:
- ref: switch_1___client_1 - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___client_2 - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1

View File

@@ -104,8 +104,7 @@ agents:
simulation: simulation:
network: network:
nodes: nodes:
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.0.10 ip_address: 192.168.0.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -114,15 +113,13 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
start_up_duration: 0 start_up_duration: 0
@@ -156,8 +153,7 @@ simulation:
next_hop_ip_address: 192.168.1.2 next_hop_ip_address: 192.168.1.2
metric: 0 metric: 0
- ref: dmz_server - type: server
type: server
hostname: dmz_server hostname: dmz_server
ip_address: 192.168.10.10 ip_address: 192.168.10.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -166,15 +162,13 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: firewall - type: firewall
type: firewall
hostname: firewall hostname: firewall
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
@@ -237,15 +231,13 @@ simulation:
next_hop_ip_address: 192.168.1.1 next_hop_ip_address: 192.168.1.1
metric: 0 metric: 0
- ref: switch_3 - type: switch
type: switch
hostname: switch_3 hostname: switch_3
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: external_computer - type: computer
type: computer
hostname: external_computer hostname: external_computer
ip_address: 192.168.20.10 ip_address: 192.168.20.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -254,8 +246,7 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: external_server - type: server
type: server
hostname: external_server hostname: external_server
ip_address: 192.168.20.11 ip_address: 192.168.20.11
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -263,46 +254,37 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
links: links:
- ref: client_1___switch_1 - endpoint_a_hostname: client_1
endpoint_a_ref: client_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___firewall - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 2 # internal firewall port endpoint_a_port: 2 # internal firewall port
endpoint_b_ref: router_1 endpoint_b_hostname: router_1
endpoint_b_port: 2 endpoint_b_port: 2
- ref: firewall___switch_2 - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 3 # dmz firewall port endpoint_a_port: 3 # dmz firewall port
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: dmz_server___switch_2 - endpoint_a_hostname: dmz_server
endpoint_a_ref: dmz_server
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: firewall___switch_3 - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 1 # external firewall port endpoint_a_port: 1 # external firewall port
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 8 endpoint_b_port: 8
- ref: external_computer___switch_3 - endpoint_a_hostname: external_computer
endpoint_a_ref: external_computer
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 1 endpoint_b_port: 1
- ref: external_server___switch_3 - endpoint_a_hostname: external_server
endpoint_a_ref: external_server
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -152,16 +152,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -567,8 +567,7 @@ simulation:
network: network:
nodes: nodes:
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
ports: ports:
@@ -595,70 +594,58 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: domain_controller - type: server
type: server
hostname: domain_controller hostname: domain_controller
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - type: server
type: server
hostname: web_server hostname: web_server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - type: server
type: server
hostname: database_server hostname: database_server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
- ref: backup_server - type: server
type: server
hostname: backup_server hostname: backup_server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - type: server
type: server
hostname: security_suite hostname: security_suite
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -669,87 +656,71 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.1 port_scan_p_of_success: 0.1
data_manipulation_p_of_success: 0.1 data_manipulation_p_of_success: 0.1
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -101,7 +101,7 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- client_1___switch_1 - client_1:eth-1<->switch_1:eth-1
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -298,8 +298,7 @@ agents:
simulation: simulation:
network: network:
nodes: nodes:
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.0.10 ip_address: 192.168.0.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -308,15 +307,13 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
start_up_duration: 0 start_up_duration: 0
@@ -350,8 +347,7 @@ simulation:
next_hop_ip_address: 192.168.1.2 next_hop_ip_address: 192.168.1.2
metric: 0 metric: 0
- ref: dmz_server - type: server
type: server
hostname: dmz_server hostname: dmz_server
ip_address: 192.168.10.10 ip_address: 192.168.10.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -360,15 +356,13 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: firewall - type: firewall
type: firewall
hostname: firewall hostname: firewall
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
@@ -431,15 +425,13 @@ simulation:
next_hop_ip_address: 192.168.1.1 next_hop_ip_address: 192.168.1.1
metric: 0 metric: 0
- ref: switch_3 - type: switch
type: switch
hostname: switch_3 hostname: switch_3
num_ports: 8 num_ports: 8
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: external_computer - type: computer
type: computer
hostname: external_computer hostname: external_computer
ip_address: 192.168.20.10 ip_address: 192.168.20.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -448,8 +440,7 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
- ref: external_server - type: server
type: server
hostname: external_server hostname: external_server
ip_address: 192.168.20.11 ip_address: 192.168.20.11
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -457,46 +448,37 @@ simulation:
start_up_duration: 0 start_up_duration: 0
shut_down_duration: 0 shut_down_duration: 0
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
links: links:
- ref: client_1___switch_1 - endpoint_a_hostname: client_1
endpoint_a_ref: client_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___firewall - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 2 # internal firewall port endpoint_a_port: 2 # internal firewall port
endpoint_b_ref: router_1 endpoint_b_hostname: router_1
endpoint_b_port: 2 endpoint_b_port: 2
- ref: firewall___switch_2 - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 3 # dmz firewall port endpoint_a_port: 3 # dmz firewall port
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: dmz_server___switch_2 - endpoint_a_hostname: dmz_server
endpoint_a_ref: dmz_server
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: firewall___switch_3 - endpoint_a_hostname: firewall
endpoint_a_ref: firewall
endpoint_a_port: 1 # external firewall port endpoint_a_port: 1 # external firewall port
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 8 endpoint_b_port: 8
- ref: external_computer___switch_3 - endpoint_a_hostname: external_computer
endpoint_a_ref: external_computer
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 1 endpoint_b_port: 1
- ref: external_server___switch_3 - endpoint_a_hostname: external_server
endpoint_a_ref: external_server
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_3 endpoint_b_hostname: switch_3
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -147,16 +147,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -613,16 +613,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -1027,8 +1027,7 @@ simulation:
network: network:
nodes: nodes:
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
ports: ports:
@@ -1055,69 +1054,57 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: domain_controller - type: server
type: server
hostname: domain_controller hostname: domain_controller
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - type: server
type: server
hostname: web_server hostname: web_server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - type: server
type: server
hostname: database_server hostname: database_server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
- ref: backup_server - type: server
type: server
hostname: backup_server hostname: backup_server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - type: server
type: server
hostname: security_suite hostname: security_suite
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -1128,87 +1115,71 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.1 port_scan_p_of_success: 0.1
data_manipulation_p_of_success: 0.1 data_manipulation_p_of_success: 0.1
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -226,16 +226,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -750,8 +750,7 @@ simulation:
- DELETE - DELETE
nodes: nodes:
- ref: router_1 - hostname: router_1
hostname: router_1
type: router type: router
num_ports: 5 num_ports: 5
ports: ports:
@@ -786,74 +785,61 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - hostname: switch_1
hostname: switch_1
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: switch_2 - hostname: switch_2
hostname: switch_2
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: domain_controller - hostname: domain_controller
hostname: domain_controller
type: server type: server
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - hostname: web_server
hostname: web_server
type: server type: server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - hostname: database_server
hostname: database_server
type: server type: server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
options: options:
backup_server_ip: 192.168.1.16 backup_server_ip: 192.168.1.16
- ref: database_ftp_client - type: FTPClient
type: FTPClient
- ref: backup_server - hostname: backup_server
hostname: backup_server
type: server type: server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - hostname: security_suite
hostname: security_suite
type: server type: server
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -864,110 +850,90 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - hostname: client_1
hostname: client_1
type: computer type: computer
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_1_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: client_1_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - hostname: client_2
hostname: client_2
type: computer type: computer
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_2_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -226,16 +226,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -782,8 +782,7 @@ simulation:
- DELETE - DELETE
nodes: nodes:
- ref: router_1 - hostname: router_1
hostname: router_1
type: router type: router
num_ports: 5 num_ports: 5
ports: ports:
@@ -818,74 +817,61 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - hostname: switch_1
hostname: switch_1
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: switch_2 - hostname: switch_2
hostname: switch_2
type: switch type: switch
num_ports: 8 num_ports: 8
- ref: domain_controller - hostname: domain_controller
hostname: domain_controller
type: server type: server
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - hostname: web_server
hostname: web_server
type: server type: server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - hostname: database_server
hostname: database_server
type: server type: server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
options: options:
backup_server_ip: 192.168.1.16 backup_server_ip: 192.168.1.16
- ref: database_ftp_client - type: FTPClient
type: FTPClient
- ref: backup_server - hostname: backup_server
hostname: backup_server
type: server type: server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - hostname: security_suite
hostname: security_suite
type: server type: server
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -896,110 +882,90 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - hostname: client_1
hostname: client_1
type: computer type: computer
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_1_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: client_1_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - hostname: client_2
hostname: client_2
type: computer type: computer
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
options: options:
target_url: http://arcd.com/users/ target_url: http://arcd.com/users/
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.8 port_scan_p_of_success: 0.8
data_manipulation_p_of_success: 0.8 data_manipulation_p_of_success: 0.8
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
- ref: client_2_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -160,16 +160,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -574,8 +574,7 @@ simulation:
network: network:
nodes: nodes:
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
ports: ports:
@@ -602,70 +601,58 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: domain_controller - type: server
type: server
hostname: domain_controller hostname: domain_controller
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - type: server
type: server
hostname: web_server hostname: web_server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - type: server
type: server
hostname: database_server hostname: database_server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
- ref: backup_server - type: server
type: server
hostname: backup_server hostname: backup_server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - type: server
type: server
hostname: security_suite hostname: security_suite
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -676,47 +663,39 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.1 port_scan_p_of_success: 0.1
data_manipulation_p_of_success: 0.1 data_manipulation_p_of_success: 0.1
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
- ref: HP_LaserJet_Pro_4102fdn_printer - type: printer
type: printer
hostname: HP_LaserJet_Pro_4102fdn_printer hostname: HP_LaserJet_Pro_4102fdn_printer
ip_address: 192.168.10.99 ip_address: 192.168.10.99
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: router_2 - type: wireless_router
type: wireless_router
hostname: router_2 hostname: router_2
router_interface: router_interface:
ip_address: 192.169.1.1 ip_address: 192.169.1.1
@@ -743,53 +722,43 @@ simulation:
protocol: ICMP protocol: ICMP
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -160,16 +160,16 @@ agents:
label: LINKS label: LINKS
options: options:
link_references: link_references:
- router_1___switch_1 - router_1:eth-1<->switch_1:eth-8
- router_1___switch_2 - router_1:eth-2<->switch_2:eth-8
- switch_1___domain_controller - switch_1:eth-1<->domain_controller:eth-1
- switch_1___web_server - switch_1:eth-2<->web_server:eth-1
- switch_1___database_server - switch_1:eth-3<->database_server:eth-1
- switch_1___backup_server - switch_1:eth-4<->backup_server:eth-1
- switch_1___security_suite - switch_1:eth-7<->security_suite:eth-1
- switch_2___client_1 - switch_2:eth-1<->client_1:eth-1
- switch_2___client_2 - switch_2:eth-2<->client_2:eth-1
- switch_2___security_suite - switch_2:eth-7<->security_suite:eth-2
- type: "NONE" - type: "NONE"
label: ICS label: ICS
options: {} options: {}
@@ -574,8 +574,7 @@ simulation:
network: network:
nodes: nodes:
- ref: router_1 - type: router
type: router
hostname: router_1 hostname: router_1
num_ports: 5 num_ports: 5
ports: ports:
@@ -602,70 +601,58 @@ simulation:
action: PERMIT action: PERMIT
protocol: ICMP protocol: ICMP
- ref: switch_1 - type: switch
type: switch
hostname: switch_1 hostname: switch_1
num_ports: 8 num_ports: 8
- ref: switch_2 - type: switch
type: switch
hostname: switch_2 hostname: switch_2
num_ports: 8 num_ports: 8
- ref: domain_controller - type: server
type: server
hostname: domain_controller hostname: domain_controller
ip_address: 192.168.1.10 ip_address: 192.168.1.10
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
services: services:
- ref: domain_controller_dns_server - type: DNSServer
type: DNSServer
options: options:
domain_mapping: domain_mapping:
arcd.com: 192.168.1.12 # web server arcd.com: 192.168.1.12 # web server
- ref: web_server - type: server
type: server
hostname: web_server hostname: web_server
ip_address: 192.168.1.12 ip_address: 192.168.1.12
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: web_server_web_service - type: WebServer
type: WebServer
applications: applications:
- ref: web_server_database_client - type: DatabaseClient
type: DatabaseClient
options: options:
db_server_ip: 192.168.1.14 db_server_ip: 192.168.1.14
- ref: database_server - type: server
type: server
hostname: database_server hostname: database_server
ip_address: 192.168.1.14 ip_address: 192.168.1.14
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: database_service - type: DatabaseService
type: DatabaseService
- ref: backup_server - type: server
type: server
hostname: backup_server hostname: backup_server
ip_address: 192.168.1.16 ip_address: 192.168.1.16
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.1.1 default_gateway: 192.168.1.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
services: services:
- ref: backup_service - type: FTPServer
type: FTPServer
- ref: security_suite - type: server
type: server
hostname: security_suite hostname: security_suite
ip_address: 192.168.1.110 ip_address: 192.168.1.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
@@ -676,87 +663,71 @@ simulation:
ip_address: 192.168.10.110 ip_address: 192.168.10.110
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
- ref: client_1 - type: computer
type: computer
hostname: client_1 hostname: client_1
ip_address: 192.168.10.21 ip_address: 192.168.10.21
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: data_manipulation_bot - type: DataManipulationBot
type: DataManipulationBot
options: options:
port_scan_p_of_success: 0.1 port_scan_p_of_success: 0.1
data_manipulation_p_of_success: 0.1 data_manipulation_p_of_success: 0.1
payload: "DELETE" payload: "DELETE"
server_ip: 192.168.1.14 server_ip: 192.168.1.14
services: services:
- ref: client_1_dns_client - type: DNSClient
type: DNSClient
- ref: client_2 - type: computer
type: computer
hostname: client_2 hostname: client_2
ip_address: 192.168.10.22 ip_address: 192.168.10.22
subnet_mask: 255.255.255.0 subnet_mask: 255.255.255.0
default_gateway: 192.168.10.1 default_gateway: 192.168.10.1
dns_server: 192.168.1.10 dns_server: 192.168.1.10
applications: applications:
- ref: client_2_web_browser - type: WebBrowser
type: WebBrowser
services: services:
- ref: client_2_dns_client - type: DNSClient
type: DNSClient
links: links:
- ref: router_1___switch_1 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: switch_1 endpoint_b_hostname: switch_1
endpoint_b_port: 8 endpoint_b_port: 8
- ref: router_1___switch_2 - endpoint_a_hostname: router_1
endpoint_a_ref: router_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: switch_2 endpoint_b_hostname: switch_2
endpoint_b_port: 8 endpoint_b_port: 8
- ref: switch_1___domain_controller - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: domain_controller endpoint_b_hostname: domain_controller
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___web_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: web_server endpoint_b_hostname: web_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___database_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 3 endpoint_a_port: 3
endpoint_b_ref: database_server endpoint_b_hostname: database_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___backup_server - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 4 endpoint_a_port: 4
endpoint_b_ref: backup_server endpoint_b_hostname: backup_server
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_1___security_suite - endpoint_a_hostname: switch_1
endpoint_a_ref: switch_1
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_1 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 1 endpoint_a_port: 1
endpoint_b_ref: client_1 endpoint_b_hostname: client_1
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___client_2 - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 2 endpoint_a_port: 2
endpoint_b_ref: client_2 endpoint_b_hostname: client_2
endpoint_b_port: 1 endpoint_b_port: 1
- ref: switch_2___security_suite - endpoint_a_hostname: switch_2
endpoint_a_ref: switch_2
endpoint_a_port: 7 endpoint_a_port: 7
endpoint_b_ref: security_suite endpoint_b_hostname: security_suite
endpoint_b_port: 2 endpoint_b_port: 2

View File

@@ -69,8 +69,8 @@ def test_link_observation():
assert link_1 is not None assert link_1 is not None
assert link_2 is not None assert link_2 is not None
link_1_observation = LinkObservation(where=["network", "links", link_1.uuid]) link_1_observation = LinkObservation(where=["network", "links", "switch:eth-1<->computer_1:eth-1"])
link_2_observation = LinkObservation(where=["network", "links", link_2.uuid]) link_2_observation = LinkObservation(where=["network", "links", "switch:eth-2<->computer_2:eth-1"])
state = sim.describe_state() state = sim.describe_state()
link_1_obs = link_1_observation.observe(state) link_1_obs = link_1_observation.observe(state)