From abb7ab09a96ec70220ead3f3d6be8e48eadae59f Mon Sep 17 00:00:00 2001 From: VakarisZ Date: Thu, 25 Mar 2021 14:11:56 +0200 Subject: [PATCH] Rebased changes to include what was done in release/1.10.0 --- .../exploiter_descriptor_enum.py | 9 ++--- .../processors/cred_exploit.py | 6 ++-- .../processors/shellshock_exploit.py | 6 ++-- .../reporting/issue_processing/issue.py | 0 .../issue_processing/issue_processor.py | 0 .../cc/services/reporting/report.py | 35 +++++++++++++++++-- 6 files changed, 43 insertions(+), 13 deletions(-) delete mode 100644 monkey/monkey_island/cc/services/reporting/issue_processing/issue.py delete mode 100644 monkey/monkey_island/cc/services/reporting/issue_processing/issue_processor.py diff --git a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/exploiter_descriptor_enum.py b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/exploiter_descriptor_enum.py index e6820b178..8628136d8 100644 --- a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/exploiter_descriptor_enum.py +++ b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/exploiter_descriptor_enum.py @@ -2,9 +2,10 @@ from dataclasses import dataclass from enum import Enum from typing import Type -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import CredExploitProcessor -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import ExploitProcessor -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import \ +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.cred_exploit import \ + CredExploitProcessor +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.exploit import ExploitProcessor +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.shellshock_exploit import \ ShellShockExploitProcessor @@ -13,7 +14,7 @@ class ExploiterDescriptor: # Must match with class names of exploiters in Infection Monkey code class_name: str display_name: str - processor: Type[ExploitProcessor] + processor: Type[object] = ExploitProcessor class ExploiterDescriptorEnum(Enum): diff --git a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/cred_exploit.py b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/cred_exploit.py index fc61676b8..720655b52 100644 --- a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/cred_exploit.py +++ b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/cred_exploit.py @@ -2,8 +2,8 @@ from __future__ import annotations from enum import Enum -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import ExploitProcessor, \ - ExploiterReportInfo +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.exploit import \ + ExploiterReportInfo, ExploitProcessor class CredentialType(Enum): @@ -12,7 +12,7 @@ class CredentialType(Enum): KEY = 'key' -class CredExploitProcessor(ExploitProcessor): +class CredExploitProcessor: @staticmethod def get_exploit_info_by_dict(class_name: str, exploit_dict: dict) -> ExploiterReportInfo: diff --git a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/shellshock_exploit.py b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/shellshock_exploit.py index 181a19f41..f8d36d4d8 100644 --- a/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/shellshock_exploit.py +++ b/monkey/monkey_island/cc/services/reporting/issue_processing/exploit_processing/processors/shellshock_exploit.py @@ -1,10 +1,10 @@ from __future__ import annotations -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import ExploitProcessor, \ - ExploiterReportInfo +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.exploit import \ + ExploiterReportInfo, ExploitProcessor -class ShellShockExploitProcessor(ExploitProcessor): +class ShellShockExploitProcessor: @staticmethod def get_exploit_info_by_dict(class_name: str, exploit_dict: dict) -> ExploiterReportInfo: diff --git a/monkey/monkey_island/cc/services/reporting/issue_processing/issue.py b/monkey/monkey_island/cc/services/reporting/issue_processing/issue.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/monkey/monkey_island/cc/services/reporting/issue_processing/issue_processor.py b/monkey/monkey_island/cc/services/reporting/issue_processing/issue_processor.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/monkey/monkey_island/cc/services/reporting/report.py b/monkey/monkey_island/cc/services/reporting/report.py index 30f096fb7..181b8616b 100644 --- a/monkey/monkey_island/cc/services/reporting/report.py +++ b/monkey/monkey_island/cc/services/reporting/report.py @@ -19,8 +19,10 @@ from monkey_island.cc.services.configuration.utils import get_config_network_seg from monkey_island.cc.services.node import NodeService from monkey_island.cc.services.reporting.issue_processing.exploit_processing.exploiter_descriptor_enum import ExploiterDescriptorEnum, \ ExploiterDescriptor -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import CredentialType -from monkey_island.cc.services.reporting.issue_processing.exploit_processing import ExploiterReportInfo +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.cred_exploit import \ + CredentialType +from monkey_island.cc.services.reporting.issue_processing.exploit_processing.processors.exploit import \ + ExploiterReportInfo from monkey_island.cc.services.reporting.pth_report import PTHReportService from monkey_island.cc.services.reporting.report_exporter_manager import ReportExporterManager from monkey_island.cc.services.reporting.report_generation_synchronisation import safe_generate_regular_report @@ -544,6 +546,7 @@ class ReportService: issues = ReportService.get_issues() config_users = ReportService.get_config_users() config_passwords = ReportService.get_config_passwords() + issue_set = ReportService.get_issue_set(issues, config_users, config_passwords) cross_segment_issues = ReportService.get_cross_segment_issues() monkey_latest_modify_time = Monkey.get_latest_modifytime() @@ -561,7 +564,7 @@ class ReportService: 'config_scan': ReportService.get_config_scan(), 'monkey_start_time': ReportService.get_first_monkey_time().strftime("%d/%m/%Y %H:%M:%S"), 'monkey_duration': ReportService.get_monkey_duration(), - 'issues': ReportService.get_issue_set(issues, config_users, config_passwords), + 'issues': issue_set, 'cross_segment_issues': cross_segment_issues }, 'glance': @@ -589,6 +592,32 @@ class ReportService: return report + @staticmethod + def get_issues(): + ISSUE_GENERATORS = [ + ReportService.get_exploits, + ReportService.get_tunnels, + ReportService.get_island_cross_segment_issues, + ReportService.get_azure_issues, + PTHReportService.get_duplicated_passwords_issues, + PTHReportService.get_strong_users_on_crit_issues + ] + + issues = functools.reduce(lambda acc, issue_gen: acc + issue_gen(), ISSUE_GENERATORS, []) + + issues_dict = {} + for issue in issues: + if issue.get('is_local', True): + machine = issue.get('machine').upper() + aws_instance_id = ReportService.get_machine_aws_instance_id(issue.get('machine')) + if machine not in issues_dict: + issues_dict[machine] = [] + if aws_instance_id: + issue['aws_instance_id'] = aws_instance_id + issues_dict[machine].append(issue) + logger.info('Issues generated for reporting') + return issues_dict + @staticmethod def encode_dot_char_before_mongo_insert(report_dict): """