#2689 Fixed issues with .rst (fixed terminal as well)

This commit is contained in:
Archer Bowen
2024-08-16 15:47:41 +01:00
parent 83b8206ce0
commit 87332873d2
2 changed files with 35 additions and 28 deletions

View File

@@ -18,7 +18,7 @@ These two new classes give red agents a cyber realistic way of leveraging the ca
For a more in-depth look at the command and control applications then please refer to the ``C2-E2E-Notebook``. For a more in-depth look at the command and control applications then please refer to the ``C2-E2E-Notebook``.
``C2 Server`` ``C2 Server``
"""""""""""" """""""""""""
The C2 Server application is intended to represent the malicious infrastructure already under the control of an adversary. The C2 Server application is intended to represent the malicious infrastructure already under the control of an adversary.
@@ -101,8 +101,8 @@ However, each host implements it's own receive methods.
The sequence diagram below clarifies the functionality of both applications: The sequence diagram below clarifies the functionality of both applications:
.. image:: ../_static/c2_sequence.png .. image:: ../../../../_static/c2_sequence.png
:width: 500 :width: 1000
:align: center :align: center
@@ -114,38 +114,45 @@ Examples
Python Python
"""""" """"""
.. code-block:: python .. code-block:: python
from primaite.simulator.system.applications.red_applications.c2.c2_beacon import C2Beacon
from primaite.simulator.system.applications.red_applications.c2.c2_server import C2Server from primaite.simulator.network.container import Network
from primaite.simulator.system.applications.red_applications.c2.c2_server import C2Command
from primaite.simulator.network.hardware.nodes.host.computer import Computer from primaite.simulator.network.hardware.nodes.host.computer import Computer
from primaite.simulator.system.services.database.database_service import DatabaseService from primaite.simulator.network.hardware.nodes.network.switch import Switch
from primaite.simulator.system.applications.database_client import DatabaseClient from primaite.simulator.system.applications.database_client import DatabaseClient
from primaite.simulator.system.applications.red_applications.ransomware_script import RansomwareScript
from primaite.simulator.system.services.database.database_service import DatabaseService
from primaite.simulator.system.applications.red_applications.c2.c2_server import C2Command, C2Server
from primaite.simulator.system.applications.red_applications.c2.c2_beacon import C2Beacon
# Network Setup # Network Setup
network = Network()
switch = Switch(hostname="switch", start_up_duration=0, num_ports=4) switch = Switch(hostname="switch", start_up_duration=0, num_ports=4)
switch.power_on() switch.power_on()
node_a = Computer(hostname="node_a", ip_address="192.168.0.10", subnet_mask="255.255.255.0", start_up_duration=0) node_a = Computer(hostname="node_a", ip_address="192.168.0.10", subnet_mask="255.255.255.0", start_up_duration=0)
node_a.power_on() node_a.power_on()
node_a.software_manager.install(software_class=C2Server)
network.connect(node_a.network_interface[1], switch.network_interface[1]) network.connect(node_a.network_interface[1], switch.network_interface[1])
node_b = Computer(hostname="node_b", ip_address="192.168.0.11", subnet_mask="255.255.255.0", start_up_duration=0) node_b = Computer(hostname="node_b", ip_address="192.168.0.11", subnet_mask="255.255.255.0", start_up_duration=0)
node_b.power_on() node_b.power_on()
node_b.software_manager.install(software_class=C2Beacon)
node_b.software_manager.install(software_class=DatabaseClient)
network.connect(node_b.network_interface[1], switch.network_interface[2]) network.connect(node_b.network_interface[1], switch.network_interface[2])
node_c = Computer(hostname="node_c", ip_address="192.168.0.12", subnet_mask="255.255.255.0", start_up_duration=0) node_c = Computer(hostname="node_c", ip_address="192.168.0.12", subnet_mask="255.255.255.0", start_up_duration=0)
node_c.power_on() node_c.power_on()
node_c.software_manager.install(software_class=DatabaseServer)
network.connect(node_c.network_interface[1], switch.network_interface[3]) network.connect(node_c.network_interface[1], switch.network_interface[3])
node_c.software_manager.install(software_class=DatabaseService)
node_b.software_manager.install(software_class=DatabaseClient)
node_b.software_manager.install(software_class=RansomwareScript)
node_a.software_manager.install(software_class=C2Server)
# C2 Application objects # C2 Application objects
c2_server_host: computer = simulation_testing_network.get_node_by_hostname("node_a") c2_server_host: Computer = network.get_node_by_hostname("node_a")
c2_beacon_host: computer = simulation_testing_network.get_node_by_hostname("node_b") c2_beacon_host: Computer = network.get_node_by_hostname("node_b")
c2_server: C2Server = c2_server_host.software_manager.software["C2Server"] c2_server: C2Server = c2_server_host.software_manager.software["C2Server"]
c2_beacon: C2Beacon = c2_beacon_host.software_manager.software["C2Beacon"] c2_beacon: C2Beacon = c2_beacon_host.software_manager.software["C2Beacon"]
@@ -182,7 +189,7 @@ Python
"password": "admin", "password": "admin",
"ip_address": None, "ip_address": None,
} }
c2_server.send_command(given_command=C2Command.TERMINAL, command_options=ransomware_config) c2_server.send_command(given_command=C2Command.TERMINAL, command_options=ransomware_installation_command)
ransomware_config = {"server_ip_address": "192.168.0.12"} ransomware_config = {"server_ip_address": "192.168.0.12"}
@@ -197,9 +204,8 @@ Python
"password": "admin", "password": "admin",
"ip_address": None, "ip_address": None,
"target_ip_address": "192.168.0.12", "target_ip_address": "192.168.0.12",
"target_file_name": "database.db" "target_file_name": "database.db",
"target_folder_name": "database" "target_folder_name": "database",
"exfiltration_folder_name":
} }
c2_server.send_command(given_command=C2Command.DATA_EXFILTRATION, command_options=data_exfil_options) c2_server.send_command(given_command=C2Command.DATA_EXFILTRATION, command_options=data_exfil_options)
@@ -254,7 +260,7 @@ C2 Beacon Configuration
.. |SOFTWARE_NAME_BACKTICK| replace:: ``C2Beacon`` .. |SOFTWARE_NAME_BACKTICK| replace:: ``C2Beacon``
``c2_server_ip_address`` ``c2_server_ip_address``
""""""""""""""""""""""" """"""""""""""""""""""""
IP address of the ``C2Server`` that the C2 Beacon will use to establish connection. IP address of the ``C2Server`` that the C2 Beacon will use to establish connection.
@@ -262,7 +268,7 @@ This must be a valid octet i.e. in the range of ``0.0.0.0`` and ``255.255.255.25
``Keep Alive Frequency`` ``Keep Alive Frequency``
""""""""""""""""""""""" """"""""""""""""""""""""
How often should the C2 Beacon confirm it's connection in timesteps. How often should the C2 Beacon confirm it's connection in timesteps.

View File

@@ -5,26 +5,26 @@
.. _Terminal: .. _Terminal:
Terminal Terminal
======== ########
The ``Terminal.py`` class provides a generic terminal simulation, by extending the base Service class within PrimAITE. The aim of this is to act as the primary entrypoint for Nodes within the environment. The ``Terminal.py`` class provides a generic terminal simulation, by extending the base Service class within PrimAITE. The aim of this is to act as the primary entrypoint for Nodes within the environment.
Overview Overview
-------- ========
The Terminal service uses Secure Socket (SSH) as the communication method between terminals. They operate on port 22, and are part of the services automatically The Terminal service uses Secure Socket (SSH) as the communication method between terminals. They operate on port 22, and are part of the services automatically
installed on Nodes when they are instantiated. installed on Nodes when they are instantiated.
Key capabilities Key capabilities
================ """"""""""""""""
- Ensures packets are matched to an existing session - Ensures packets are matched to an existing session
- Simulates common Terminal processes/commands. - Simulates common Terminal processes/commands.
- Leverages the Service base class for install/uninstall, status tracking etc. - Leverages the Service base class for install/uninstall, status tracking etc.
Usage Usage
===== """""
- Pre-Installs on any `Node` (component with the exception of `Switches`). - Pre-Installs on any `Node` (component with the exception of `Switches`).
- Terminal Clients connect, execute commands and disconnect from remote nodes. - Terminal Clients connect, execute commands and disconnect from remote nodes.
@@ -32,7 +32,7 @@ Usage
- Service runs on SSH port 22 by default. - Service runs on SSH port 22 by default.
Implementation Implementation
============== """"""""""""""
- Manages remote connections in a dictionary by session ID. - Manages remote connections in a dictionary by session ID.
- Processes commands, forwarding to the ``RequestManager`` or ``SessionManager`` where appropriate. - Processes commands, forwarding to the ``RequestManager`` or ``SessionManager`` where appropriate.
@@ -67,7 +67,7 @@ Python
terminal: Terminal = client.software_manager.software.get("Terminal") terminal: Terminal = client.software_manager.software.get("Terminal")
Creating Remote Terminal Connection Creating Remote Terminal Connection
""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""
.. code-block:: python .. code-block:: python
@@ -93,7 +93,7 @@ Creating Remote Terminal Connection
Executing a basic application install command Executing a basic application install command
""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""
.. code-block:: python .. code-block:: python
@@ -121,7 +121,7 @@ Executing a basic application install command
Creating a folder on a remote node Creating a folder on a remote node
"""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""
.. code-block:: python .. code-block:: python
@@ -148,6 +148,7 @@ Creating a folder on a remote node
Disconnect from Remote Node Disconnect from Remote Node
"""""""""""""""""""""""""""
.. code-block:: python .. code-block:: python