Skip to content

Commit 3fbca17

Browse files
Merge branch '3167-pluralize-credential-collectors' into develop
Issue #3167 PR #3250
2 parents 40db19a + f5c7818 commit 3fbca17

File tree

32 files changed

+97
-100
lines changed

32 files changed

+97
-100
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ Changelog](https://keepachangelog.com/en/1.0.0/).
99
### Added
1010
- `PortScanData.open` property. #3238
1111

12+
### Changed
13+
- Renamed "Credential collector" to "Credentials collector". #3167
14+
1215
## [2.1.0] - 2023-04-19
1316
### Added
1417
- Logout button. #3063

envs/monkey_zoo/blackbox/test_configurations/credentials_reuse_ssh_key.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from .noop import noop_test_configuration
88
from .utils import (
9-
add_credential_collectors,
9+
add_credentials_collectors,
1010
add_exploiters,
1111
add_subnets,
1212
add_tcp_ports,
@@ -33,13 +33,13 @@ def _add_subnets(agent_configuration: AgentConfiguration) -> AgentConfiguration:
3333
return add_subnets(agent_configuration, subnets)
3434

3535

36-
def _add_credential_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
37-
credential_collectors = [
36+
def _add_credentials_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
37+
credentials_collectors = [
3838
PluginConfiguration(name="SSHCollector", options={}),
3939
]
4040

41-
return add_credential_collectors(
42-
agent_configuration, credential_collectors=credential_collectors
41+
return add_credentials_collectors(
42+
agent_configuration, credentials_collectors=credentials_collectors
4343
)
4444

4545

@@ -52,7 +52,7 @@ def _add_tcp_ports(agent_configuration: AgentConfiguration) -> AgentConfiguratio
5252
test_agent_configuration = set_keep_tunnel_open_time(test_agent_configuration, 20)
5353
test_agent_configuration = _add_exploiters(test_agent_configuration)
5454
test_agent_configuration = _add_subnets(test_agent_configuration)
55-
test_agent_configuration = _add_credential_collectors(test_agent_configuration)
55+
test_agent_configuration = _add_credentials_collectors(test_agent_configuration)
5656
test_agent_configuration = _add_tcp_ports(test_agent_configuration)
5757

5858
CREDENTIALS = (

envs/monkey_zoo/blackbox/test_configurations/depth_1_a.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from .noop import noop_test_configuration
88
from .utils import (
9-
add_credential_collectors,
9+
add_credentials_collectors,
1010
add_exploiters,
1111
add_fingerprinters,
1212
add_http_ports,
@@ -63,8 +63,8 @@ def _add_subnets(agent_configuration: AgentConfiguration) -> AgentConfiguration:
6363
return add_subnets(agent_configuration, subnets)
6464

6565

66-
def _add_credential_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
67-
return add_credential_collectors(
66+
def _add_credentials_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
67+
return add_credentials_collectors(
6868
agent_configuration, [PluginConfiguration(name="MimikatzCollector", options={})]
6969
)
7070

@@ -86,7 +86,7 @@ def _add_http_ports(agent_configuration: AgentConfiguration) -> AgentConfigurati
8686
test_agent_configuration = _add_fingerprinters(test_agent_configuration)
8787
test_agent_configuration = _add_subnets(test_agent_configuration)
8888
test_agent_configuration = _add_tcp_ports(test_agent_configuration)
89-
test_agent_configuration = _add_credential_collectors(test_agent_configuration)
89+
test_agent_configuration = _add_credentials_collectors(test_agent_configuration)
9090
test_agent_configuration = _add_http_ports(test_agent_configuration)
9191

9292
CREDENTIALS = (

envs/monkey_zoo/blackbox/test_configurations/noop.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
_agent_configuration = AgentConfiguration(
4141
keep_tunnel_open_time=0,
42-
credential_collectors=[],
42+
credentials_collectors=[],
4343
payloads={},
4444
propagation=_propagation_configuration,
4545
)

envs/monkey_zoo/blackbox/test_configurations/utils.py

+3-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ def add_exploiters(
99
agent_configuration: AgentConfiguration,
1010
exploiters: Optional[Dict[str, Mapping]],
1111
) -> AgentConfiguration:
12-
1312
agent_configuration_copy = agent_configuration.copy(deep=True)
1413
if not exploiters:
1514
exploiters = {}
@@ -21,7 +20,6 @@ def add_exploiters(
2120
def add_fingerprinters(
2221
agent_configuration: AgentConfiguration, fingerprinters: Sequence[PluginConfiguration]
2322
) -> AgentConfiguration:
24-
2523
agent_configuration_copy = agent_configuration.copy(deep=True)
2624
agent_configuration_copy.propagation.network_scan.fingerprinters = fingerprinters
2725

@@ -31,7 +29,6 @@ def add_fingerprinters(
3129
def add_tcp_ports(
3230
agent_configuration: AgentConfiguration, tcp_ports: Sequence[int]
3331
) -> AgentConfiguration:
34-
3532
agent_configuration_copy = agent_configuration.copy(deep=True)
3633
agent_configuration_copy.propagation.network_scan.tcp.ports = tuple(tcp_ports)
3734

@@ -41,27 +38,24 @@ def add_tcp_ports(
4138
def add_subnets(
4239
agent_configuration: AgentConfiguration, subnets: Sequence[str]
4340
) -> AgentConfiguration:
44-
4541
agent_configuration_copy = agent_configuration.copy(deep=True)
4642
agent_configuration_copy.propagation.network_scan.targets.subnets = subnets
4743

4844
return agent_configuration_copy
4945

5046

51-
def add_credential_collectors(
52-
agent_configuration: AgentConfiguration, credential_collectors: Sequence[PluginConfiguration]
47+
def add_credentials_collectors(
48+
agent_configuration: AgentConfiguration, credentials_collectors: Sequence[PluginConfiguration]
5349
) -> AgentConfiguration:
54-
5550
agent_configuration_copy = agent_configuration.copy(deep=True)
56-
agent_configuration_copy.credential_collectors = tuple(credential_collectors)
51+
agent_configuration_copy.credentials_collectors = tuple(credentials_collectors)
5752

5853
return agent_configuration_copy
5954

6055

6156
def add_http_ports(
6257
agent_configuration: AgentConfiguration, http_ports: Sequence[int]
6358
) -> AgentConfiguration:
64-
6559
agent_configuration_copy = agent_configuration.copy(deep=True)
6660
agent_configuration_copy.propagation.exploitation.options.http_ports = http_ports
6761

@@ -71,7 +65,6 @@ def add_http_ports(
7165
def set_keep_tunnel_open_time(
7266
agent_configuration: AgentConfiguration, keep_tunnel_open_time: int
7367
) -> AgentConfiguration:
74-
7568
agent_configuration_copy = agent_configuration.copy(deep=True)
7669
agent_configuration_copy.keep_tunnel_open_time = keep_tunnel_open_time
7770

@@ -81,7 +74,6 @@ def set_keep_tunnel_open_time(
8174
def set_maximum_depth(
8275
agent_configuration: AgentConfiguration, maximum_depth: int
8376
) -> AgentConfiguration:
84-
8577
agent_configuration_copy = agent_configuration.copy(deep=True)
8678
agent_configuration_copy.propagation.maximum_depth = maximum_depth
8779

envs/monkey_zoo/blackbox/test_configurations/wmi_mimikatz.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from .noop import noop_test_configuration
88
from .utils import (
9-
add_credential_collectors,
9+
add_credentials_collectors,
1010
add_exploiters,
1111
add_subnets,
1212
add_tcp_ports,
@@ -32,8 +32,8 @@ def _add_subnets(agent_configuration: AgentConfiguration) -> AgentConfiguration:
3232
return add_subnets(agent_configuration, subnets)
3333

3434

35-
def _add_credential_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
36-
return add_credential_collectors(
35+
def _add_credentials_collectors(agent_configuration: AgentConfiguration) -> AgentConfiguration:
36+
return add_credentials_collectors(
3737
agent_configuration, [PluginConfiguration(name="MimikatzCollector", options={})]
3838
)
3939

@@ -46,9 +46,9 @@ def _add_tcp_ports(agent_configuration: AgentConfiguration) -> AgentConfiguratio
4646
test_agent_configuration = set_maximum_depth(noop_test_configuration.agent_configuration, 1)
4747
test_agent_configuration = _add_exploiters(test_agent_configuration)
4848
test_agent_configuration = _add_subnets(test_agent_configuration)
49-
test_agent_configuration = _add_credential_collectors(test_agent_configuration)
49+
test_agent_configuration = _add_credentials_collectors(test_agent_configuration)
5050
test_agent_configuration = _add_tcp_ports(test_agent_configuration)
51-
test_agent_configuration = _add_credential_collectors(test_agent_configuration)
51+
test_agent_configuration = _add_credentials_collectors(test_agent_configuration)
5252

5353
CREDENTIALS = (
5454
Credentials(identity=Username(username="Administrator"), secret=None),

monkey/common/agent_configuration/agent_configuration.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ class AgentConfiguration(MutableInfectionMonkeyBaseModel):
1515
"seconds)",
1616
default=30,
1717
)
18-
credential_collectors: Tuple[PluginConfiguration, ...] = Field(
19-
title="Credential collectors",
20-
description="Configure options for the attack’s credential collection stage",
18+
credentials_collectors: Tuple[PluginConfiguration, ...] = Field(
19+
title="Credentials collectors",
20+
description="Configure options for the attack’s credentials collection stage",
2121
)
2222
payloads: Dict[str, Dict] = Field(
2323
title="Payloads", description="Configure payloads that Agents will execute"

monkey/common/agent_configuration/default_agent_configuration.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
TCPScanConfiguration,
1313
)
1414

15-
CREDENTIAL_COLLECTORS = ("MimikatzCollector", "SSHCollector")
15+
CREDENTIALS_COLLECTORS = ("MimikatzCollector", "SSHCollector")
1616

17-
CREDENTIAL_COLLECTOR_CONFIGURATION = tuple(
18-
PluginConfiguration(name=collector, options={}) for collector in CREDENTIAL_COLLECTORS
17+
CREDENTIALS_COLLECTOR_CONFIGURATION = tuple(
18+
PluginConfiguration(name=collector, options={}) for collector in CREDENTIALS_COLLECTORS
1919
)
2020

2121
RANSOMWARE_OPTIONS = {
@@ -93,10 +93,10 @@
9393

9494
DEFAULT_AGENT_CONFIGURATION = AgentConfiguration(
9595
keep_tunnel_open_time=30,
96-
credential_collectors=CREDENTIAL_COLLECTOR_CONFIGURATION,
96+
credentials_collectors=CREDENTIALS_COLLECTOR_CONFIGURATION,
9797
payloads=PAYLOAD_CONFIGURATION,
9898
propagation=PROPAGATION_CONFIGURATION,
9999
)
100100

101101
DEFAULT_RANSOMWARE_AGENT_CONFIGURATION = deepcopy(DEFAULT_AGENT_CONFIGURATION)
102-
DEFAULT_RANSOMWARE_AGENT_CONFIGURATION.credential_collectors = tuple()
102+
DEFAULT_RANSOMWARE_AGENT_CONFIGURATION.credentials_collectors = tuple()

monkey/common/agent_plugins/agent_plugin_manifest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class AgentPluginManifest(InfectionMonkeyBaseModel):
1515
Attributes:
1616
:param name: Plugin name in snake case
1717
:param plugin_type: Type of the plugin (exploiter, fingerprinter,
18-
credential collector, etc.)
18+
credentials collector, etc.)
1919
:param supported_operating_systems: Operating systems that the plugin can run on
2020
:param target_operating_systems: Operating systems that the plugin can target
2121
:param title: Human readable name for the plugin

monkey/common/agent_plugins/agent_plugin_type.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
class AgentPluginType(Enum):
5-
CREDENTIAL_COLLECTOR = "CredentialCollector"
5+
CREDENTIALS_COLLECTOR = "Credentials_Collector"
66
EXPLOITER = "Exploiter"
77
FINGERPRINTER = "Fingerprinter"
88
PAYLOAD = "Payload"

monkey/common/hard_coded_manifests/hard_coded_credential_collector_manifests.py monkey/common/hard_coded_manifests/hard_coded_credentials_collector_manifests.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from common.agent_plugins import AgentPluginManifest, AgentPluginType
22
from common.operating_system import OperatingSystem
33

4-
HARD_CODED_CREDENTIAL_COLLECTOR_MANIFESTS = {
4+
HARD_CODED_CREDENTIALS_COLLECTOR_MANIFESTS = {
55
"MimikatzCollector": AgentPluginManifest(
66
name="MimikatzCollector",
7-
plugin_type=AgentPluginType.CREDENTIAL_COLLECTOR,
7+
plugin_type=AgentPluginType.CREDENTIALS_COLLECTOR,
88
supported_operating_systems=(OperatingSystem.LINUX, OperatingSystem.WINDOWS),
99
target_operating_systems=(OperatingSystem.WINDOWS,),
1010
title="Mimikatz Credentials Collector",
@@ -14,7 +14,7 @@
1414
),
1515
"SSHCollector": AgentPluginManifest(
1616
name="SSHCollector",
17-
plugin_type=AgentPluginType.CREDENTIAL_COLLECTOR,
17+
plugin_type=AgentPluginType.CREDENTIALS_COLLECTOR,
1818
supported_operating_systems=(OperatingSystem.LINUX, OperatingSystem.WINDOWS),
1919
target_operating_systems=(OperatingSystem.LINUX,),
2020
title="SSH Credentials Collector",

monkey/infection_monkey/credential_collectors/mimikatz_collector/mimikatz_credential_collector.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from common.event_queue import IAgentEventQueue
77
from common.tags import DATA_FROM_LOCAL_SYSTEM_T1005_TAG, OS_CREDENTIAL_DUMPING_T1003_TAG
88
from common.types import AgentID
9-
from infection_monkey.i_puppet import ICredentialCollector
9+
from infection_monkey.i_puppet import ICredentialsCollector
1010
from infection_monkey.model import USERNAME_PREFIX
1111

1212
from . import pypykatz_handler
@@ -26,7 +26,7 @@
2626
)
2727

2828

29-
class MimikatzCredentialCollector(ICredentialCollector):
29+
class MimikatzCredentialCollector(ICredentialsCollector):
3030
def __init__(self, agent_event_queue: IAgentEventQueue, agent_id: AgentID):
3131
self._agent_event_queue = agent_event_queue
3232
self._agent_id = agent_id

monkey/infection_monkey/credential_collectors/ssh_collector/ssh_credential_collector.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
from common.event_queue import IAgentEventQueue
66
from common.types import AgentID
77
from infection_monkey.credential_collectors.ssh_collector import ssh_handler
8-
from infection_monkey.i_puppet import ICredentialCollector
8+
from infection_monkey.i_puppet import ICredentialsCollector
99

1010
logger = logging.getLogger(__name__)
1111

1212

13-
class SSHCredentialCollector(ICredentialCollector):
13+
class SSHCredentialCollector(ICredentialsCollector):
1414
"""
1515
SSH keys credential collector
1616
"""

monkey/infection_monkey/i_puppet/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
IncompatibleOperatingSystemError,
1010
)
1111
from .i_fingerprinter import IFingerprinter
12-
from .i_credential_collector import ICredentialCollector
12+
from .i_credentials_collector import ICredentialsCollector
1313
from .target_host import TargetHost, TargetHostPorts, PortScanDataDict

monkey/infection_monkey/i_puppet/i_credential_collector.py monkey/infection_monkey/i_puppet/i_credentials_collector.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from common.credentials import Credentials
55

66

7-
class ICredentialCollector(ABC):
7+
class ICredentialsCollector(ABC):
88
@abstractmethod
99
def collect_credentials(self, options: Optional[Mapping]) -> Sequence[Credentials]:
1010
pass

monkey/infection_monkey/i_puppet/i_puppet.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ def load_plugin(self, plugin_type: AgentPluginType, plugin_name: str, plugin: ob
3333
"""
3434

3535
@abc.abstractmethod
36-
def run_credential_collector(self, name: str, options: Dict) -> Sequence[Credentials]:
36+
def run_credentials_collector(self, name: str, options: Dict) -> Sequence[Credentials]:
3737
"""
38-
Runs a credential collector
38+
Runs a credentials collector
3939
40-
:param str name: The name of the credential collector to run
40+
:param str name: The name of the credentials collector to run
4141
:param Dict options: A dictionary containing options that modify the behavior of the
42-
Credential collector
42+
Credentials collector
4343
:return: A sequence of Credentials that have been collected from the system
4444
:rtype: Sequence[Credentials]
4545
"""

monkey/infection_monkey/master/automated_master.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -126,19 +126,19 @@ def _run_simulation(self):
126126
logger.error(f"An error occurred while fetching configuration: {e}")
127127
return
128128

129-
credential_collector_thread = create_daemon_thread(
129+
credentials_collector_thread = create_daemon_thread(
130130
target=self._run_plugins_legacy,
131-
name="CredentialCollectorThread",
131+
name="CredentialsCollectorThread",
132132
args=(
133-
config.credential_collectors,
134-
"credential collector",
133+
config.credentials_collectors,
134+
"credentials collector",
135135
self._collect_credentials,
136136
),
137137
)
138138
# We don't need to use multithreading here, but it's likely that in the
139139
# future we'll like to run other tasks while credentials are being collected
140-
credential_collector_thread.start()
141-
credential_collector_thread.join()
140+
credentials_collector_thread.start()
141+
credentials_collector_thread.join()
142142

143143
current_depth = self._current_depth if self._current_depth is not None else 0
144144
logger.info(f"Current depth is {current_depth}")
@@ -157,7 +157,7 @@ def _run_simulation(self):
157157
payload_thread.join()
158158

159159
def _collect_credentials(self, collector: PluginConfiguration):
160-
credentials = self._puppet.run_credential_collector(collector.name, collector.options)
160+
credentials = self._puppet.run_credentials_collector(collector.name, collector.options)
161161

162162
if not credentials:
163163
logger.debug(f"No credentials were collected by {collector}")

monkey/infection_monkey/monkey.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -406,12 +406,12 @@ def _build_puppet(self, operating_system: OperatingSystem) -> IPuppet:
406406
)
407407

408408
puppet.load_plugin(
409-
AgentPluginType.CREDENTIAL_COLLECTOR,
409+
AgentPluginType.CREDENTIALS_COLLECTOR,
410410
"MimikatzCollector",
411411
MimikatzCredentialCollector(self._agent_event_queue, self._agent_id),
412412
)
413413
puppet.load_plugin(
414-
AgentPluginType.CREDENTIAL_COLLECTOR,
414+
AgentPluginType.CREDENTIALS_COLLECTOR,
415415
"SSHCollector",
416416
SSHCredentialCollector(self._agent_event_queue, self._agent_id),
417417
)

monkey/infection_monkey/puppet/puppet.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ def __init__(
4141
def load_plugin(self, plugin_type: AgentPluginType, plugin_name: str, plugin: object) -> None:
4242
self._plugin_registry.load_plugin(plugin_type, plugin_name, plugin)
4343

44-
def run_credential_collector(self, name: str, options: Dict) -> Sequence[Credentials]:
45-
credential_collector = self._plugin_registry.get_plugin(
46-
AgentPluginType.CREDENTIAL_COLLECTOR, name
44+
def run_credentials_collector(self, name: str, options: Dict) -> Sequence[Credentials]:
45+
credentials_collector = self._plugin_registry.get_plugin(
46+
AgentPluginType.CREDENTIALS_COLLECTOR, name
4747
)
48-
return credential_collector.collect_credentials(options)
48+
return credentials_collector.collect_credentials(options)
4949

5050
def ping(self, host: str, timeout: float = CONNECTION_TIMEOUT) -> PingScanData:
5151
return network_scanning.ping(host, timeout, self._agent_event_queue, self._agent_id)

0 commit comments

Comments
 (0)