Common: Add common.credentials package

Migrate all objects that represent credentials from their present home
in the agent to their new home in common. This allows these classes to
be shared by the island. Furthermore, it will simplify
serialization/deserialization and clear a path to remove other redundant
classes in the Island.
This commit is contained in:
Mike Salvatore 2022-07-05 13:28:17 -04:00
parent bc1ff393b7
commit 7bc8ed649a
32 changed files with 37 additions and 58 deletions

View File

@ -0,0 +1,8 @@
from .credential_component_type import CredentialComponentType
from .i_credential_component import ICredentialComponent
from .credentials import Credentials
from .lm_hash import LMHash
from .nt_hash import NTHash
from .password import Password
from .ssh_keypair import SSHKeypair
from .username import Username

View File

@ -1,6 +1,6 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType
class ICredentialComponent(ABC): class ICredentialComponent(ABC):

View File

@ -1,7 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType, ICredentialComponent
from infection_monkey.i_puppet import ICredentialComponent
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@ -1,7 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType, ICredentialComponent
from infection_monkey.i_puppet import ICredentialComponent
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@ -1,7 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType, ICredentialComponent
from infection_monkey.i_puppet import ICredentialComponent
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@ -1,7 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType, ICredentialComponent
from infection_monkey.i_puppet import ICredentialComponent
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@ -1,7 +1,6 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from common.common_consts.credential_component_type import CredentialComponentType from . import CredentialComponentType, ICredentialComponent
from infection_monkey.i_puppet import ICredentialComponent
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@ -1,7 +1,2 @@
from .credential_components.nt_hash import NTHash
from .credential_components.lm_hash import LMHash
from .credential_components.password import Password
from .credential_components.username import Username
from .credential_components.ssh_keypair import SSHKeypair
from .mimikatz_collector import MimikatzCredentialCollector from .mimikatz_collector import MimikatzCredentialCollector
from .ssh_collector import SSHCredentialCollector from .ssh_collector import SSHCredentialCollector

View File

@ -1,8 +1,8 @@
import logging import logging
from typing import Sequence from typing import Sequence
from infection_monkey.credential_collectors import LMHash, NTHash, Password, Username from common.credentials import Credentials, LMHash, NTHash, Password, Username
from infection_monkey.i_puppet.credential_collection import Credentials, ICredentialCollector from infection_monkey.i_puppet.credential_collection import ICredentialCollector
from infection_monkey.model import USERNAME_PREFIX from infection_monkey.model import USERNAME_PREFIX
from . import pypykatz_handler from . import pypykatz_handler

View File

@ -1,9 +1,9 @@
import logging import logging
from typing import Dict, Iterable, Sequence from typing import Dict, Iterable, Sequence
from infection_monkey.credential_collectors import SSHKeypair, Username from common.credentials import Credentials, SSHKeypair, Username
from infection_monkey.credential_collectors.ssh_collector import ssh_handler from infection_monkey.credential_collectors.ssh_collector import ssh_handler
from infection_monkey.i_puppet.credential_collection import Credentials, ICredentialCollector from infection_monkey.i_puppet.credential_collection import ICredentialCollector
from infection_monkey.telemetry.messengers.i_telemetry_messenger import ITelemetryMessenger from infection_monkey.telemetry.messengers.i_telemetry_messenger import ITelemetryMessenger
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,10 +1,9 @@
import logging import logging
from typing import Any, Iterable, Mapping from typing import Any, Iterable, Mapping
from common.common_consts.credential_component_type import CredentialComponentType from common.credentials import CredentialComponentType, Credentials
from infection_monkey.custom_types import PropagationCredentials from infection_monkey.custom_types import PropagationCredentials
from infection_monkey.i_control_channel import IControlChannel from infection_monkey.i_control_channel import IControlChannel
from infection_monkey.i_puppet import Credentials
from infection_monkey.utils.decorators import request_cache from infection_monkey.utils.decorators import request_cache
from .i_credentials_store import ICredentialsStore from .i_credentials_store import ICredentialsStore

View File

@ -1,8 +1,8 @@
import abc import abc
from typing import Iterable from typing import Iterable
from common.credentials import Credentials
from infection_monkey.custom_types import PropagationCredentials from infection_monkey.custom_types import PropagationCredentials
from infection_monkey.i_puppet import Credentials
class ICredentialsStore(metaclass=abc.ABCMeta): class ICredentialsStore(metaclass=abc.ABCMeta):

View File

@ -16,7 +16,7 @@ from impacket.dcerpc.v5 import epm, nrpc, rpcrt, transport
from impacket.dcerpc.v5.dtypes import NULL from impacket.dcerpc.v5.dtypes import NULL
from common.common_consts.timeouts import LONG_REQUEST_TIMEOUT from common.common_consts.timeouts import LONG_REQUEST_TIMEOUT
from infection_monkey.credential_collectors import LMHash, NTHash, Username from common.credentials import Credentials, LMHash, NTHash, Username
from infection_monkey.exploit.HostExploiter import HostExploiter from infection_monkey.exploit.HostExploiter import HostExploiter
from infection_monkey.exploit.tools.wmi_tools import WmiTools from infection_monkey.exploit.tools.wmi_tools import WmiTools
from infection_monkey.exploit.zerologon_utils.dump_secrets import DumpSecrets from infection_monkey.exploit.zerologon_utils.dump_secrets import DumpSecrets
@ -24,7 +24,6 @@ from infection_monkey.exploit.zerologon_utils.options import OptionsForSecretsdu
from infection_monkey.exploit.zerologon_utils.vuln_assessment import get_dc_details, is_exploitable from infection_monkey.exploit.zerologon_utils.vuln_assessment import get_dc_details, is_exploitable
from infection_monkey.exploit.zerologon_utils.wmiexec import Wmiexec from infection_monkey.exploit.zerologon_utils.wmiexec import Wmiexec
from infection_monkey.i_puppet import ExploiterResultData from infection_monkey.i_puppet import ExploiterResultData
from infection_monkey.i_puppet.credential_collection import Credentials
from infection_monkey.telemetry.credentials_telem import CredentialsTelem from infection_monkey.telemetry.credentials_telem import CredentialsTelem
from infection_monkey.utils.capture_output import StdoutCapture from infection_monkey.utils.capture_output import StdoutCapture
from infection_monkey.utils.threading import interruptible_iter from infection_monkey.utils.threading import interruptible_iter

View File

@ -10,8 +10,3 @@ from .i_puppet import (
UnknownPluginError, UnknownPluginError,
) )
from .i_fingerprinter import IFingerprinter from .i_fingerprinter import IFingerprinter
from .credential_collection import (
Credentials,
ICredentialCollector,
ICredentialComponent,
)

View File

@ -1,3 +1 @@
from .i_credential_collector import ICredentialCollector from .i_credential_collector import ICredentialCollector
from .credentials import Credentials
from .i_credential_component import ICredentialComponent

View File

@ -1,7 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Mapping, Optional, Sequence from typing import Mapping, Optional, Sequence
from .credentials import Credentials from common.credentials import Credentials
class ICredentialCollector(ABC): class ICredentialCollector(ABC):

View File

@ -5,10 +5,10 @@ from dataclasses import dataclass
from enum import Enum from enum import Enum
from typing import Dict, Iterable, List, Mapping, Sequence from typing import Dict, Iterable, List, Mapping, Sequence
from common.credentials import Credentials
from infection_monkey.model import VictimHost from infection_monkey.model import VictimHost
from . import PluginType from . import PluginType
from .credential_collection import Credentials
class PortStatus(Enum): class PortStatus(Enum):

View File

@ -3,9 +3,9 @@ import threading
from typing import Dict, Iterable, List, Sequence from typing import Dict, Iterable, List, Sequence
from common.common_consts.timeouts import CONNECTION_TIMEOUT from common.common_consts.timeouts import CONNECTION_TIMEOUT
from common.credentials import Credentials
from infection_monkey import network_scanning from infection_monkey import network_scanning
from infection_monkey.i_puppet import ( from infection_monkey.i_puppet import (
Credentials,
ExploiterResultData, ExploiterResultData,
FingerprintData, FingerprintData,
IPuppet, IPuppet,

View File

@ -3,7 +3,7 @@ import json
from typing import Dict, Iterable from typing import Dict, Iterable
from common.common_consts.telem_categories import TelemCategoryEnum from common.common_consts.telem_categories import TelemCategoryEnum
from infection_monkey.i_puppet.credential_collection import Credentials, ICredentialComponent from common.credentials import Credentials, ICredentialComponent
from infection_monkey.telemetry.base_telem import BaseTelem from infection_monkey.telemetry.base_telem import BaseTelem

View File

@ -1,7 +1,7 @@
import logging import logging
from typing import Mapping, Sequence from typing import Mapping, Sequence
from common.common_consts.credential_component_type import CredentialComponentType from common.credentials import CredentialComponentType
from monkey_island.cc.models import StolenCredentials from monkey_island.cc.models import StolenCredentials
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -2,7 +2,7 @@ import logging
from itertools import chain from itertools import chain
from typing import Mapping from typing import Mapping
from common.common_consts.credential_component_type import CredentialComponentType from common.credentials import CredentialComponentType
from monkey_island.cc.models import StolenCredentials from monkey_island.cc.models import StolenCredentials
from .credentials import Credentials from .credentials import Credentials

View File

@ -2,17 +2,11 @@ from typing import Sequence
import pytest import pytest
from infection_monkey.credential_collectors import ( from common.credentials import Credentials, LMHash, NTHash, Password, Username
LMHash, from infection_monkey.credential_collectors import MimikatzCredentialCollector
MimikatzCredentialCollector,
NTHash,
Password,
Username,
)
from infection_monkey.credential_collectors.mimikatz_collector.windows_credentials import ( from infection_monkey.credential_collectors.mimikatz_collector.windows_credentials import (
WindowsCredentials, WindowsCredentials,
) )
from infection_monkey.i_puppet import Credentials
def patch_pypykatz(win_creds: [WindowsCredentials], monkeypatch): def patch_pypykatz(win_creds: [WindowsCredentials], monkeypatch):

View File

@ -2,8 +2,8 @@ from unittest.mock import MagicMock
import pytest import pytest
from infection_monkey.credential_collectors import SSHCredentialCollector, SSHKeypair, Username from common.credentials import Credentials, SSHKeypair, Username
from infection_monkey.i_puppet.credential_collection import Credentials from infection_monkey.credential_collectors import SSHCredentialCollector
@pytest.fixture @pytest.fixture

View File

@ -2,9 +2,8 @@ from unittest.mock import MagicMock
import pytest import pytest
from infection_monkey.credential_collectors import Password, SSHKeypair, Username from common.credentials import Credentials, Password, SSHKeypair, Username
from infection_monkey.credential_store import AggregatingCredentialsStore from infection_monkey.credential_store import AggregatingCredentialsStore
from infection_monkey.i_puppet import Credentials
CONTROL_CHANNEL_CREDENTIALS = { CONTROL_CHANNEL_CREDENTIALS = {
"exploit_user_list": ["Administrator", "root", "user1"], "exploit_user_list": ["Administrator", "root", "user1"],

View File

@ -3,9 +3,8 @@ import threading
from typing import Dict, Iterable, List, Sequence from typing import Dict, Iterable, List, Sequence
from common import OperatingSystems from common import OperatingSystems
from infection_monkey.credential_collectors import LMHash, Password, SSHKeypair, Username from common.credentials import Credentials, LMHash, Password, SSHKeypair, Username
from infection_monkey.i_puppet import ( from infection_monkey.i_puppet import (
Credentials,
ExploiterResultData, ExploiterResultData,
FingerprintData, FingerprintData,
IPuppet, IPuppet,

View File

@ -1,7 +1,6 @@
from unittest.mock import MagicMock from unittest.mock import MagicMock
from infection_monkey.credential_collectors import Password, SSHKeypair, Username from common.credentials import Credentials, Password, SSHKeypair, Username
from infection_monkey.i_puppet import Credentials
from infection_monkey.telemetry.credentials_telem import CredentialsTelem from infection_monkey.telemetry.credentials_telem import CredentialsTelem
from infection_monkey.telemetry.messengers.credentials_intercepting_telemetry_messenger import ( from infection_monkey.telemetry.messengers.credentials_intercepting_telemetry_messenger import (
CredentialsInterceptingTelemetryMessenger, CredentialsInterceptingTelemetryMessenger,

View File

@ -2,8 +2,7 @@ import json
import pytest import pytest
from infection_monkey.credential_collectors import Password, SSHKeypair, Username from common.credentials import Credentials, Password, SSHKeypair, Username
from infection_monkey.i_puppet import Credentials
from infection_monkey.telemetry.credentials_telem import CredentialsTelem from infection_monkey.telemetry.credentials_telem import CredentialsTelem
USERNAME = "m0nkey" USERNAME = "m0nkey"

View File

@ -1,6 +1,6 @@
import pytest import pytest
from common.common_consts.credential_component_type import CredentialComponentType from common.credentials import CredentialComponentType
from monkey_island.cc.models import Monkey, StolenCredentials from monkey_island.cc.models import Monkey, StolenCredentials
from monkey_island.cc.services.reporting.stolen_credentials import ( from monkey_island.cc.services.reporting.stolen_credentials import (
extract_ssh_keys, extract_ssh_keys,

View File

@ -6,13 +6,13 @@ from tests.unit_tests.monkey_island.cc.services.telemetry.processing.credentials
CREDENTIAL_TELEM_TEMPLATE, CREDENTIAL_TELEM_TEMPLATE,
) )
from common.common_consts.credential_component_type import CredentialComponentType
from common.config_value_paths import ( from common.config_value_paths import (
LM_HASH_LIST_PATH, LM_HASH_LIST_PATH,
NTLM_HASH_LIST_PATH, NTLM_HASH_LIST_PATH,
PASSWORD_LIST_PATH, PASSWORD_LIST_PATH,
USER_LIST_PATH, USER_LIST_PATH,
) )
from common.credentials import CredentialComponentType
from monkey_island.cc.models import StolenCredentials from monkey_island.cc.models import StolenCredentials
from monkey_island.cc.services.config import ConfigService from monkey_island.cc.services.config import ConfigService
from monkey_island.cc.services.telemetry.processing.credentials.credentials_parser import ( from monkey_island.cc.services.telemetry.processing.credentials.credentials_parser import (