io_settings:
  save_agent_actions: true
  save_step_metadata: true
  save_pcap_logs: true
  save_sys_logs: true



game:
  ports:
  - ARP
  - DNS
  - HTTP
  - POSTGRES_SERVER
  protocols:
  - ICMP
  - TCP
  - UDP

agents:
  - ref: client_2_green_user
    team: GREEN
    type: ProbabilisticAgent

    action_space:
      action_map:
        0:
          action: do_nothing
          options: {}

    agent_settings: # options specific to this particular agent type, basically args of __init__(self)
      action_probabilities:
        0: 1.0

  - ref: data_manipulation_attacker
    team: RED
    type: RedDatabaseCorruptingAgent



    action_space:
      action_map:
        0:
          action: do_nothing
          options: {}
        1:
          action: node_application_execute
          options:
            node_name: client_1
            application_name: DataManipulationBot

    agent_settings: # options specific to this particular agent type, basically args of __init__(self)
      possible_start_nodes: [client_1,]
      target_application: DataManipulationBot
      start_step: 25
      frequency: 20
      variance: 5

  - ref: defender
    team: BLUE
    type: ProxyAgent

    observation_space:
      type: CUSTOM
      options:
        components:
          - type: NODES
            label: NODES
            options:
              hosts:
                - hostname: domain_controller
                - hostname: web_server
                  services:
                    - service_name: WebServer
                - hostname: database_server
                  folders:
                    - folder_name: database
                      files:
                      - file_name: database.db
                - hostname: backup_server
                - hostname: security_suite
                - hostname: client_1
                - hostname: client_2
              num_services: 1
              num_applications: 0
              num_folders: 1
              num_files: 1
              num_nics: 2
              include_num_access: false
              include_nmne: false
              routers:
                - hostname: router_1
              num_ports: 0
              ip_list:
                - 192.168.1.10
                - 192.168.1.12
                - 192.168.1.14
                - 192.168.1.16
                - 192.168.1.110
                - 192.168.10.21
                - 192.168.10.22
                - 192.168.10.110
              wildcard_list:
                - 0.0.0.1
              port_list:
                - HTTP
                - POSTGRES_SERVER
              protocol_list:
                - ICMP
                - TCP
                - UDP
              num_rules: 10

          - type: LINKS
            label: LINKS
            options:
              link_references:
                - router_1:eth-1<->switch_1:eth-8
                - router_1:eth-2<->switch_2:eth-8
                - switch_1:eth-1<->domain_controller:eth-1
                - switch_1:eth-2<->web_server:eth-1
                - switch_1:eth-3<->database_server:eth-1
                - switch_1:eth-4<->backup_server:eth-1
                - switch_1:eth-7<->security_suite:eth-1
                - switch_2:eth-1<->client_1:eth-1
                - switch_2:eth-2<->client_2:eth-1
                - switch_2:eth-7<->security_suite:eth-2
          - type: "NONE"
            label: ICS
            options: {}

    action_space:
      action_map:
          0:
            action: do_nothing
            options: {}
          # scan webapp service
          1:
            action: node_service_scan
            options:
              node_name: web_server
              service_name: WebServer
          # stop webapp service
          2:
            action: node_service_stop
            options:
              node_name: web_server
              service_name: WebServer
          # start webapp service
          3:
            action: "node_service_start"
            options:
              node_name: web_server
              service_name: WebServer
          4:
            action: "node_service_pause"
            options:
              node_name: web_server
              service_name: WebServer
          5:
            action: "node_service_resume"
            options:
              node_name: web_server
              service_name: WebServer
          6:
            action: "node_service_restart"
            options:
              node_name: web_server
              service_name: WebServer
          7:
            action: "node_service_disable"
            options:
              node_name: web_server
              service_name: WebServer
          8:
            action: "node_service_enable"
            options:
              node_name: web_server
              service_name: WebServer
          9: # check database.db file
            action: "node_file_scan"
            options:
                node_name: database_server
                folder_name: database
                file_name: database.db
          10:
            action: "node_file_checkhash"
            options:
                node_name: database_server
                folder_name: database
                file_name: database.db
          11:
            action: "node_file_delete"
            options:
                node_name: database_server
                folder_name: database
                file_name: database.db
          12:
            action: "node_file_repair"
            options:
                node_name: database_server
                folder_name: database
                file_name: database.db
          13:
            action: "node_service_fix"
            options:
                node_name: database_server
                service_name: DatabaseService
          14:
            action: "node_folder_scan"
            options:
                node_name: database_server
                folder_name: database
          15:
            action: "node_folder_checkhash"
            options:
                node_name: database_server
                folder_name: database
          16:
            action: "node_folder_repair"
            options:
                node_name: database_server
                folder_name: database
          17:
            action: "node_folder_restore"
            options:
                node_name: database_server
                folder_name: database
          18:
            action: "node_os_scan"
            options:
                node_name: database_server
          19: # shutdown client 1
            action: "node_shutdown"
            options:
                node_name: client_1
          20:
            action: "node_startup"
            options:
                node_name: client_1
          21:
            action: "node_reset"
            options:
                node_name: client_1
          22: # "ACL: ADDRULE - Block outgoing traffic from client 1" (not supported in Primaite)
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 1
                permission: DENY
                src_ip: 192.168.10.21 # client 1
                dst_ip: ALL # ALL
                src_port: ALL
                dst_port: ALL
                protocol_name: ALL
                src_wildcard: NONE
                dst_wildcard: NONE
          23: # "ACL: ADDRULE - Block outgoing traffic from client 2" (not supported in Primaite)
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 2
                permission: DENY
                src_ip: 192.168.10.22 # client 2
                dst_ip: ALL # ALL
                src_port: ALL
                dst_port: ALL
                protocol_name: ALL
                src_wildcard: NONE
                dst_wildcard: NONE
          24: # block tcp traffic from client 1 to web app
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 3
                permission: DENY
                src_ip: 192.168.10.21 # client 1
                dst_ip: 192.168.1.12 # web server
                src_port: ALL
                dst_port: ALL
                protocol_name: TCP
                src_wildcard: NONE
                dst_wildcard: NONE
          25: # block tcp traffic from client 2 to web app
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 4
                permission: DENY
                src_ip: 192.168.10.22 # client 2
                dst_ip: 192.168.1.12 # web server
                src_port: ALL
                dst_port: ALL
                protocol_name: TCP
                src_wildcard: NONE
                dst_wildcard: NONE
          26:
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 5
                permission: DENY
                src_ip: 192.168.10.21 # client 1
                dst_ip: 192.168.1.14 # database
                src_port: ALL
                dst_port: ALL
                protocol_name: TCP
                src_wildcard: NONE
                dst_wildcard: NONE
          27:
            action: "router_acl_add_rule"
            options:
                target_router: router_1
                position: 6
                permission: DENY
                src_ip: 192.168.10.22 # client 2
                dst_ip: 192.168.1.14 # database
                src_port: ALL
                dst_port: ALL
                protocol_name: TCP
                src_wildcard: NONE
                dst_wildcard: NONE
          28:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 0
          29:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 1
          30:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 2
          31:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 3
          32:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 4
          33:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 5
          34:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 6
          35:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 7
          36:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 8
          37:
            action: "router_acl_remove_rule"
            options:
                target_router: router_1
                position: 9
          38:
            action: "host_nic_disable"
            options:
                node_name: domain_controller
                nic_num: 1
          39:
            action: "host_nic_enable"
            options:
                node_name: domain_controller
                nic_num: 1
          40:
            action: "host_nic_disable"
            options:
                node_name: web_server
                nic_num: 1
          41:
            action: "host_nic_enable"
            options:
                node_name: web_server
                nic_num: 1
          42:
            action: "host_nic_disable"
            options:
                node_name: database_server
                nic_num: 1
          43:
            action: "host_nic_enable"
            options:
                node_name: database_server
                nic_num: 1
          44:
            action: "host_nic_disable"
            options:
                node_name: backup_server
                nic_num: 1
          45:
            action: "host_nic_enable"
            options:
                node_name: backup_server
                nic_num: 1
          46:
            action: "host_nic_disable"
            options:
                node_name: security_suite
                nic_num: 1
          47:
            action: "host_nic_enable"
            options:
                node_name: security_suite
                nic_num: 1
          48:
            action: "host_nic_disable"
            options:
                node_name: security_suite
                nic_num: 2
          49:
            action: "host_nic_enable"
            options:
                node_name: security_suite
                nic_num: 2
          50:
            action: "host_nic_disable"
            options:
                node_name: client_1
                nic_num: 1
          51:
            action: "host_nic_enable"
            options:
                node_name: client_1
                nic_num: 1
          52:
            action: "host_nic_disable"
            options:
                node_name: client_2
                nic_num: 1
          53:
            action: "host_nic_enable"
            options:
                node_name: client_2
                nic_num: 1

    reward_function:
      reward_components:
        - type: DATABASE_FILE_INTEGRITY
          weight: 0.5
          options:
            node_hostname: database_server
            folder_name: database
            file_name: database.db


        - type: WEB_SERVER_404_PENALTY
          weight: 0.5
          options:
            node_hostname: web_server
            service_name: web_server_web_service


    agent_settings:
      flatten_obs: true
      action_masking: true





simulation:
  network:
    nodes:

    - type: router
      hostname: router_1
      num_ports: 5
      ports:
        1:
          ip_address: 192.168.1.1
          subnet_mask: 255.255.255.0
        2:
          ip_address: 192.168.1.1
          subnet_mask: 255.255.255.0
      acl:
        0:
          action: PERMIT
          src_port: POSTGRES_SERVER
          dst_port: POSTGRES_SERVER
        1:
          action: PERMIT
          src_port: DNS
          dst_port: DNS
        22:
          action: PERMIT
          src_port: ARP
          dst_port: ARP
        23:
          action: PERMIT
          protocol: ICMP

    - type: switch
      hostname: switch_1
      num_ports: 8

    - type: switch
      hostname: switch_2
      num_ports: 8

    - type: server
      hostname: domain_controller
      ip_address: 192.168.1.10
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.1.1
      services:
      - type: DNSServer
        options:
          domain_mapping:
            arcd.com: 192.168.1.12 # web server

    - type: server
      hostname: web_server
      ip_address: 192.168.1.12
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.1.1
      dns_server: 192.168.1.10
      services:
      - type: WebServer
      applications:
      - type: DatabaseClient
        options:
          db_server_ip: 192.168.1.14


    - type: server
      hostname: database_server
      ip_address: 192.168.1.14
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.1.1
      dns_server: 192.168.1.10
      services:
      - type: DatabaseService
        options:
          backup_server_ip: 192.168.1.16

    - type: server
      hostname: backup_server
      ip_address: 192.168.1.16
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.1.1
      dns_server: 192.168.1.10
      services:
      - type: FTPServer

    - type: server
      hostname: security_suite
      ip_address: 192.168.1.110
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.1.1
      dns_server: 192.168.1.10
      network_interfaces:
        2: # unfortunately this number is currently meaningless, they're just added in order and take up the next available slot
          ip_address: 192.168.10.110
          subnet_mask: 255.255.255.0

    - type: computer
      hostname: client_1
      ip_address: 192.168.10.21
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.10.1
      dns_server: 192.168.1.10
      applications:
      - type: DataManipulationBot
        options:
          port_scan_p_of_success: 0.1
          data_manipulation_p_of_success: 0.1
          payload: "DELETE"
          server_ip: 192.168.1.14
      services:
      - type: DNSClient

    - type: computer
      hostname: client_2
      ip_address: 192.168.10.22
      subnet_mask: 255.255.255.0
      default_gateway: 192.168.10.1
      dns_server: 192.168.1.10
      applications:
      - type: WebBrowser
      services:
      - type: DNSClient

    - type: printer
      hostname: HP_LaserJet_Pro_4102fdn_printer
      ip_address: 192.168.10.99
      subnet_mask: 255.255.255.0

    - type: wireless_router
      hostname: router_2
      router_interface:
        ip_address: 192.169.1.1
        subnet_mask: 255.255.255.0
      wireless_access_point:
        ip_address: 192.170.1.1
        subnet_mask: 255.255.255.0
        frequency: WIFI_2_4
      acl:
        0:
          action: PERMIT
          src_port: POSTGRES_SERVER
          dst_port: POSTGRES_SERVER
        1:
          action: PERMIT
          src_port: DNS
          dst_port: DNS
        22:
          action: PERMIT
          src_port: ARP
          dst_port: ARP
        23:
          action: PERMIT
          protocol: ICMP

    links:
    - endpoint_a_hostname: router_1
      endpoint_a_port: 1
      endpoint_b_hostname: switch_1
      endpoint_b_port: 8
    - endpoint_a_hostname: router_1
      endpoint_a_port: 2
      endpoint_b_hostname: switch_2
      endpoint_b_port: 8
    - endpoint_a_hostname: switch_1
      endpoint_a_port: 1
      endpoint_b_hostname: domain_controller
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_1
      endpoint_a_port: 2
      endpoint_b_hostname: web_server
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_1
      endpoint_a_port: 3
      endpoint_b_hostname: database_server
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_1
      endpoint_a_port: 4
      endpoint_b_hostname: backup_server
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_1
      endpoint_a_port: 7
      endpoint_b_hostname: security_suite
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_2
      endpoint_a_port: 1
      endpoint_b_hostname: client_1
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_2
      endpoint_a_port: 2
      endpoint_b_hostname: client_2
      endpoint_b_port: 1
    - endpoint_a_hostname: switch_2
      endpoint_a_port: 7
      endpoint_b_hostname: security_suite
      endpoint_b_port: 2
