diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7792d1b12..3b637b3dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -42,6 +42,7 @@ Changelog](https://keepachangelog.com/en/1.0.0/).
- MySQL fingerprinter. #1648
- MS08-067 (Conficker) exploiter. #1677
- Agent bootloader. #1676
+- Zero Trust integration with ScoutSuite. #1669
### Fixed
- A bug in network map page that caused delay of telemetry log loading. #1545
diff --git a/docs/content/reference/operating_systems_support.md b/docs/content/reference/operating_systems_support.md
index d945f2be3..a2b918b63 100644
--- a/docs/content/reference/operating_systems_support.md
+++ b/docs/content/reference/operating_systems_support.md
@@ -4,7 +4,7 @@ date: 2020-07-14T08:09:53+03:00
draft: false
pre: ' '
weight: 10
-tags: ["setup", "reference", "windows", "linux"]
+tags: ["setup", "reference", "windows", "linux"]
---
The Infection Monkey project supports many popular OSes (but we are always interested in supporting more).
diff --git a/docs/content/usage/integrations/scoutsuite.md b/docs/content/usage/integrations/scoutsuite.md
deleted file mode 100644
index 76737681c..000000000
--- a/docs/content/usage/integrations/scoutsuite.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: "Scoutsuite"
-date: 2021-03-02T16:23:06+02:00
-draft: false
-description: "Scout Suite is an open-source cloud security-auditing tool."
-weight: 10
----
-
-### About ScoutSuite
-
-Scout Suite is an open-source cloud security-auditing tool.
-It queries the cloud API to gather configuration data. Based on configuration
-data gathered, ScoutSuite shows security issues and risks present in your infrastructure.
-
-### Supported cloud providers
-
-Currently, ScoutSuite integration only supports AWS environments.
-
-### Enabling ScoutSuite
-
-First, Infection Monkey needs access to your cloud API. You can provide access
-in the following ways:
-
- - Provide access keys:
- - Create a new user with ReadOnlyAccess and SecurityAudit policies and generate keys
- - Generate keys for your current user (faster but less secure)
- - Configure AWS CLI:
- - If the command-line interface is available on the Island, it will be used to access
- the cloud API
-
-More details about configuring ScoutSuite can be found in the tool itself, by choosing
-"Cloud Security Scan" in the "Run Monkey" options.
-
-![Cloud scan option in run page](/images/usage/integrations/scoutsuite_run_page.png
-"Successful setup indicator")
-
-After you're done with the setup, make sure that a checkmark appears next to the AWS option. This
-verifies that ScoutSuite can access the API.
-
-![Successfull setup indicator](/images/usage/integrations/scoutsuite_aws_configured.png
-"Successful setup indicator")
-
-### Running a cloud security scan
-
-If you have successfully configured the cloud scan, Infection Monkey will scan
-your cloud infrastructure when the Monkey Agent is run **on the Island**. You
-can simply click on "From Island" in the run options to start the scan. The
-scope of the network scan and other activities you may have configured the Agent
-to perform are ignored by the ScoutSuite integration, except **Monkey
-Configuration -> System info collectors -> AWS collector**, which needs to
-remain **enabled**.
-
-
-### Assessing scan results
-
-After the scan is done, ScoutSuite results will be categorized according to the
-ZeroTrust Extended framework and displayed as a part of the ZeroTrust report.
-The main difference between Infection Monkey findings and ScoutSuite findings
-is that ScoutSuite findings contain security rules. To see which rules were
-checked, click on the "Rules" button next to the relevant test. You'll see a
-list of rule dropdowns that are color coded according to their status. Expand a
-rule to see its description, remediation and more details about resources
-flagged. Each flagged resource has a path so you can easily locate it in the
-cloud and remediate the issue.
-
-![Open ScoutSuite rule](/images/usage/integrations/scoutsuite_report_rule.png
-"Successful setup indicator")
diff --git a/docs/content/usage/scenarios/custom-scenario/zero-trust.md b/docs/content/usage/scenarios/custom-scenario/zero-trust.md
index 2e54dc73e..07884e3c8 100644
--- a/docs/content/usage/scenarios/custom-scenario/zero-trust.md
+++ b/docs/content/usage/scenarios/custom-scenario/zero-trust.md
@@ -11,8 +11,6 @@ weight: 1
Want to assess your progress in achieving a Zero Trust network? The Infection Monkey can automatically evaluate your readiness across the different
[Zero Trust Extended Framework](https://www.forrester.com/report/The+Zero+Trust+eXtended+ZTX+Ecosystem/-/E-RES137210) principles.
-You can additionally scan your cloud infrastructure's compliance to ZeroTrust principles using [ScoutSuite integration.]({{< ref "/usage/integrations/scoutsuite" >}})
-
## Configuration
- **Exploits -> Credentials** This configuration value will be used for brute-forcing. The Infection Monkey uses the most popular default passwords and usernames, but feel free to adjust it according to the default passwords common in your network. Keep in mind a longer list means longer scanning times.
diff --git a/monkey/common/cloud/scoutsuite_consts.py b/monkey/common/cloud/scoutsuite_consts.py
deleted file mode 100644
index e2d0c1664..000000000
--- a/monkey/common/cloud/scoutsuite_consts.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from enum import Enum
-
-
-class CloudProviders(Enum):
- AWS = "aws"
diff --git a/monkey/common/cmd/aws/aws_cmd_runner.py b/monkey/common/cmd/aws/aws_cmd_runner.py
index f4b8cd7bc..c1c65ecb9 100644
--- a/monkey/common/cmd/aws/aws_cmd_runner.py
+++ b/monkey/common/cmd/aws/aws_cmd_runner.py
@@ -1,4 +1,5 @@
import logging
+import time
from common.cloud.aws.aws_service import AwsService
from common.cmd.aws.aws_cmd_result import AwsCmdResult
@@ -20,6 +21,7 @@ class AwsCmdRunner(CmdRunner):
self.ssm = AwsService.get_client("ssm", region)
def query_command(self, command_id):
+ time.sleep(2)
return self.ssm.get_command_invocation(CommandId=command_id, InstanceId=self.instance_id)
def get_command_result(self, command_info):
diff --git a/monkey/common/common_consts/telem_categories.py b/monkey/common/common_consts/telem_categories.py
index 8c39abd74..dc6524c7b 100644
--- a/monkey/common/common_consts/telem_categories.py
+++ b/monkey/common/common_consts/telem_categories.py
@@ -2,7 +2,6 @@ class TelemCategoryEnum:
EXPLOIT = "exploit"
POST_BREACH = "post_breach"
SCAN = "scan"
- SCOUTSUITE = "scoutsuite"
STATE = "state"
SYSTEM_INFO = "system_info"
TRACE = "trace"
diff --git a/monkey/common/common_consts/zero_trust_consts.py b/monkey/common/common_consts/zero_trust_consts.py
index 245884e4a..3f2633b01 100644
--- a/monkey/common/common_consts/zero_trust_consts.py
+++ b/monkey/common/common_consts/zero_trust_consts.py
@@ -41,13 +41,6 @@ TEST_MALICIOUS_ACTIVITY_TIMELINE = "malicious_activity_timeline"
TEST_SEGMENTATION = "segmentation"
TEST_TUNNELING = "tunneling"
TEST_COMMUNICATE_AS_BACKDOOR_USER = "communicate_as_backdoor_user"
-TEST_SCOUTSUITE_PERMISSIVE_FIREWALL_RULES = "scoutsuite_permissive_firewall_rules"
-TEST_SCOUTSUITE_UNENCRYPTED_DATA = "scoutsuite_unencrypted_data"
-TEST_SCOUTSUITE_DATA_LOSS_PREVENTION = "scoutsuite_data_loss_prevention"
-TEST_SCOUTSUITE_SECURE_AUTHENTICATION = "scoutsuite_secure_authentication"
-TEST_SCOUTSUITE_RESTRICTIVE_POLICIES = "scoutsuite_unrestrictive_policies"
-TEST_SCOUTSUITE_LOGGING = "scoutsuite_logging"
-TEST_SCOUTSUITE_SERVICE_SECURITY = "scoutsuite_service_security"
TESTS = (
TEST_SEGMENTATION,
@@ -59,13 +52,6 @@ TESTS = (
TEST_DATA_ENDPOINT_ELASTIC,
TEST_TUNNELING,
TEST_COMMUNICATE_AS_BACKDOOR_USER,
- TEST_SCOUTSUITE_PERMISSIVE_FIREWALL_RULES,
- TEST_SCOUTSUITE_UNENCRYPTED_DATA,
- TEST_SCOUTSUITE_DATA_LOSS_PREVENTION,
- TEST_SCOUTSUITE_SECURE_AUTHENTICATION,
- TEST_SCOUTSUITE_RESTRICTIVE_POLICIES,
- TEST_SCOUTSUITE_LOGGING,
- TEST_SCOUTSUITE_SERVICE_SECURITY,
)
PRINCIPLE_DATA_CONFIDENTIALITY = "data_transit"
@@ -219,77 +205,6 @@ TESTS_MAP = {
PILLARS_KEY: [PEOPLE, NETWORKS, VISIBILITY_ANALYTICS],
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
},
- TEST_SCOUTSUITE_PERMISSIVE_FIREWALL_RULES: {
- TEST_EXPLANATION_KEY: "ScoutSuite assessed cloud firewall rules and settings.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found overly permissive firewall rules.",
- STATUS_PASSED: "ScoutSuite found no problems with cloud firewall rules.",
- },
- PRINCIPLE_KEY: PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES,
- PILLARS_KEY: [NETWORKS],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_UNENCRYPTED_DATA: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for resources containing " "unencrypted data.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found resources with unencrypted data.",
- STATUS_PASSED: "ScoutSuite found no resources with unencrypted data.",
- },
- PRINCIPLE_KEY: PRINCIPLE_DATA_CONFIDENTIALITY,
- PILLARS_KEY: [DATA],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_DATA_LOSS_PREVENTION: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for resources which are not "
- "protected against data loss.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found resources not protected against data loss.",
- STATUS_PASSED: "ScoutSuite found that all resources are secured against data loss.",
- },
- PRINCIPLE_KEY: PRINCIPLE_DISASTER_RECOVERY,
- PILLARS_KEY: [DATA],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_SECURE_AUTHENTICATION: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for issues related to users' " "authentication.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found issues related to users' authentication.",
- STATUS_PASSED: "ScoutSuite found no issues related to users' authentication.",
- },
- PRINCIPLE_KEY: PRINCIPLE_SECURE_AUTHENTICATION,
- PILLARS_KEY: [PEOPLE, WORKLOADS],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_RESTRICTIVE_POLICIES: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for permissive user access " "policies.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found permissive user access policies.",
- STATUS_PASSED: "ScoutSuite found no issues related to user access policies.",
- },
- PRINCIPLE_KEY: PRINCIPLE_USERS_MAC_POLICIES,
- PILLARS_KEY: [PEOPLE, WORKLOADS],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_LOGGING: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for issues, related to logging.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found logging issues.",
- STATUS_PASSED: "ScoutSuite found no logging issues.",
- },
- PRINCIPLE_KEY: PRINCIPLE_MONITORING_AND_LOGGING,
- PILLARS_KEY: [AUTOMATION_ORCHESTRATION, VISIBILITY_ANALYTICS],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
- TEST_SCOUTSUITE_SERVICE_SECURITY: {
- TEST_EXPLANATION_KEY: "ScoutSuite searched for service security issues.",
- FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "ScoutSuite found service security issues.",
- STATUS_PASSED: "ScoutSuite found no service security issues.",
- },
- PRINCIPLE_KEY: PRINCIPLE_MONITORING_AND_LOGGING,
- PILLARS_KEY: [DEVICES, NETWORKS],
- POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED],
- },
}
EVENT_TYPE_MONKEY_NETWORK = "monkey_network"
diff --git a/monkey/common/network/network_utils.py b/monkey/common/network/network_utils.py
index 3c87d5737..c0c04a9d0 100644
--- a/monkey/common/network/network_utils.py
+++ b/monkey/common/network/network_utils.py
@@ -3,19 +3,6 @@ from typing import Optional, Tuple
from urllib.parse import urlparse
-def get_host_from_network_location(network_location: str) -> str:
- """
- URL structure is ":///;?#" (
- https://tools.ietf.org/html/rfc1808.html)
- And the net_loc is ":@:" (
- https://tools.ietf.org/html/rfc1738#section-3.1)
- :param network_location: server network location
- :return: host part of the network location
- """
- url = urlparse("http://" + network_location)
- return str(url.hostname)
-
-
def remove_port(url):
parsed = urlparse(url)
with_port = f"{parsed.scheme}://{parsed.netloc}"
diff --git a/monkey/common/utils/exceptions.py b/monkey/common/utils/exceptions.py
index cc70cbc51..fc114781d 100644
--- a/monkey/common/utils/exceptions.py
+++ b/monkey/common/utils/exceptions.py
@@ -22,10 +22,6 @@ class IncorrectCredentialsError(Exception):
""" Raise to indicate that authentication failed """
-class RulePathCreatorNotFound(Exception):
- """ Raise to indicate that ScoutSuite rule doesn't have a path creator"""
-
-
class InvalidAWSKeys(Exception):
""" Raise to indicate that AWS API keys are invalid"""
@@ -34,10 +30,6 @@ class NoInternetError(Exception):
""" Raise to indicate problems caused when no internet connection is present"""
-class ScoutSuiteScanError(Exception):
- """ Raise to indicate problems ScoutSuite encountered during scanning"""
-
-
class UnknownFindingError(Exception):
""" Raise when provided finding is of unknown type"""
diff --git a/monkey/infection_monkey/Pipfile b/monkey/infection_monkey/Pipfile
index 90cc234ff..3b287a946 100644
--- a/monkey/infection_monkey/Pipfile
+++ b/monkey/infection_monkey/Pipfile
@@ -18,7 +18,6 @@ pypykatz = "==0.3.12"
requests = ">=2.24"
urllib3 = "==1.26.5"
WMI = {version = "==1.5.1", sys_platform = "== 'win32'"}
-ScoutSuite = {git = "git://github.com/guardicode/ScoutSuite"}
pyopenssl = "==19.0.0" # We can't build 32bit ubuntu12 binary with newer versions of pyopenssl
pypsrp = "*"
typing-extensions = "*" # Allows us to use 3.9 typing features on 3.7 project
diff --git a/monkey/infection_monkey/Pipfile.lock b/monkey/infection_monkey/Pipfile.lock
index a40dfa534..bc00423ec 100644
--- a/monkey/infection_monkey/Pipfile.lock
+++ b/monkey/infection_monkey/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "250fc3013e7083083999fbf289f8898d63ceffc95a02e87920d254950832ea68"
+ "sha256": "90dbc7b9edaacc7324c3e1cc9ab1bd618dd62951216cf993225937b20f657779"
},
"pipfile-spec": 6,
"requires": {
@@ -38,20 +38,13 @@
],
"version": "==1.4.0"
},
- "asyncio-throttle": {
- "hashes": [
- "sha256:a01a56f3671e961253cf262918f3e0741e222fc50d57d981ba5c801f284eccfe"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==0.1.1"
- },
"asysocks": {
"hashes": [
- "sha256:5ec0582252b0085d9337d13c6b03ab7fd062e487070667f9140e6972bd9db256",
- "sha256:b97ac905cd4ca1e7a8e7c295f9cb22ced5dfd3f17e888e71cbf05a1d67a4d393"
+ "sha256:23d5fcfae71a75826c3ed787bd9b1bc3b189ec37658961bce83c9e99455e354c",
+ "sha256:731eda25d41783c5243153d3cb4f9357fef337c7317135488afab9ecd6b7f1a1"
],
"markers": "python_version >= '3.6'",
- "version": "==0.1.6"
+ "version": "==0.1.7"
},
"attrs": {
"hashes": [
@@ -84,22 +77,6 @@
"markers": "python_version >= '3.6'",
"version": "==3.2.0"
},
- "boto3": {
- "hashes": [
- "sha256:1903e4462b08f7696a8d0977361fe9e35e7a50d9e70d7abd72a3a17012741938",
- "sha256:34e5ae33ef65b1c4e2e197009e88df5dc217386699939ae897d7fcdb5a6ff295"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==1.20.47"
- },
- "botocore": {
- "hashes": [
- "sha256:82da38e309bd6fd6303394e6e9d1ea50626746f2911e3fec996f9046c5d85085",
- "sha256:a89b1be0a7f235533d8279d90b0b15dc2130d0552a9f7654ba302b564ab5688a"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==1.23.47"
- },
"certifi": {
"hashes": [
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
@@ -178,30 +155,6 @@
"markers": "python_version >= '3'",
"version": "==2.0.11"
},
- "cheroot": {
- "hashes": [
- "sha256:366adf6e7cac9555486c2d1be6297993022eff6f8c4655c1443268cca3f08e25",
- "sha256:62cbced16f07e8aaf512673987cd6b1fc5ad00073345e9ed6c4e2a5cc2a3a22d"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==8.6.0"
- },
- "cherrypy": {
- "hashes": [
- "sha256:55659e6f012d374898d6d9d581e17cc1477b6a14710218e64f187b9227bea038",
- "sha256:f33e87286e7b3e309e04e7225d8e49382d9d7773e6092241d7f613893c563495"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==18.6.1"
- },
- "cherrypy-cors": {
- "hashes": [
- "sha256:eb512e20fa9e478abd1868b1417814a4e9240ed0c403472a2c624460e49ab0d5",
- "sha256:f7fb75f6e617ce29c9ec3fdd8b1ff6ec64fec2c56371182525e22bcf4c180513"
- ],
- "markers": "python_version >= '2.7'",
- "version": "==1.6"
- },
"click": {
"hashes": [
"sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3",
@@ -210,12 +163,13 @@
"markers": "python_version >= '3.6'",
"version": "==8.0.3"
},
- "coloredlogs": {
+ "colorama": {
"hashes": [
- "sha256:34fad2e342d5a559c31b6c889e8d14f97cb62c47d9a2ae7b5ed14ea10a79eff8",
- "sha256:b869a2dda3fa88154b9dd850e27828d8755bfab5a838a1c97fbc850c6e377c36"
+ "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b",
+ "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"
],
- "version": "==10.0"
+ "markers": "platform_system == 'Windows'",
+ "version": "==0.4.4"
},
"constantly": {
"hashes": [
@@ -272,20 +226,6 @@
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==0.18.2"
},
- "httpagentparser": {
- "hashes": [
- "sha256:a190dfdc5e63b2f1c87729424b19cbc49263d6a1fb585a16ac1c9d9ce127a4bf"
- ],
- "version": "==1.9.2"
- },
- "humanfriendly": {
- "hashes": [
- "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477",
- "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==10.0"
- },
"hyperlink": {
"hashes": [
"sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b",
@@ -316,14 +256,6 @@
"markers": "python_version < '3.8'",
"version": "==4.10.1"
},
- "importlib-resources": {
- "hashes": [
- "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45",
- "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"
- ],
- "markers": "python_version < '3.9'",
- "version": "==5.4.0"
- },
"incremental": {
"hashes": [
"sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57",
@@ -347,46 +279,6 @@
"markers": "python_version >= '3.6'",
"version": "==2.0.1"
},
- "jaraco.classes": {
- "hashes": [
- "sha256:22ac35313cf4b145bf7b217cc51be2d98a3d2db1c8558a30ca259d9f0b9c0b7d",
- "sha256:ed54b728af1937dc16b7236fbaf34ba561ba1ace572b03fffa5486ed363ecf34"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.2.1"
- },
- "jaraco.collections": {
- "hashes": [
- "sha256:b04f00bd4b3c4fc4ba5fe1baf8042c0efd192b13e386830ea23fff77bb69dc88",
- "sha256:ef7c308d6d7cadfb16b32c7e414d628151ab02b57a5702b9d9a293148c035e70"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.5.1"
- },
- "jaraco.context": {
- "hashes": [
- "sha256:17b909da2fb37ad237ca7ff9523977f8665a47a25b90aec6a99a3e0959c86141",
- "sha256:f0d4d82ffbbbff680384eba48a32a3167f12a91a30a7db56fd97b87e73a87241"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==4.1.1"
- },
- "jaraco.functools": {
- "hashes": [
- "sha256:141f95c490a18eb8aab86caf7a2728f02f604988a26dc36652e3d9fa9e4c49fa",
- "sha256:31e0e93d1027592b7b0bec6ad468db850338981ebee76ba5e212e235f4c7dda0"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.5.0"
- },
- "jaraco.text": {
- "hashes": [
- "sha256:17b43aa0bd46e97c368ccd8a4c8fef2719ca121b6d39ce4be9d9e0143832479a",
- "sha256:a7f9cc1b44a5f3096a216cbd130b650c7a6b2c9f8005b000ae97f329239a7c00"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.7.0"
- },
"jinja2": {
"hashes": [
"sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8",
@@ -395,14 +287,6 @@
"markers": "python_version >= '3.6'",
"version": "==3.0.3"
},
- "jmespath": {
- "hashes": [
- "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9",
- "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"
- ],
- "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==0.10.0"
- },
"ldap3": {
"hashes": [
"sha256:2bc966556fc4d4fa9f445a1c31dc484ee81d44a51ab0e2d0fd05b62cac75daa6",
@@ -514,19 +398,11 @@
},
"minikerberos": {
"hashes": [
- "sha256:eba89d5c649241a3367839ebd1c0333b9a9e4fe514746e246a6a1f2cb7bde26e",
- "sha256:f556a6015904147c3302e9038b49f766c975df6aeb1725027cd7fc68ba993864"
+ "sha256:a1596916c93910910e65ab43e2b0e770c9af0d2da77505c089ed8bc3ee40e872",
+ "sha256:ca83d44f0a6c93cc2298df435c5173e99262d6d234b8055c7c08b9062c2c7c93"
],
"markers": "python_version >= '3.6'",
- "version": "==0.2.16"
- },
- "more-itertools": {
- "hashes": [
- "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b",
- "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==8.12.0"
+ "version": "==0.2.17"
},
"msldap": {
"hashes": [
@@ -536,13 +412,6 @@
"markers": "python_version >= '3.7'",
"version": "==0.3.30"
},
- "netaddr": {
- "hashes": [
- "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac",
- "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"
- ],
- "version": "==0.8.0"
- },
"netifaces": {
"hashes": [
"sha256:043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32",
@@ -608,28 +477,20 @@
],
"version": "==1.7.4"
},
- "policyuniverse": {
+ "pefile": {
"hashes": [
- "sha256:116b808554d7ea75efc97b4cb904085546db45934ef315175cb4755c7a4489de",
- "sha256:7440ac520bb791e0318e3d99f9b0e76b7b2b604e7160f1d8341ded060f9ff1cd"
+ "sha256:344a49e40a94e10849f0fe34dddc80f773a12b40675bf2f7be4b8be578bdd94a"
],
- "version": "==1.4.0.20220110"
- },
- "portend": {
- "hashes": [
- "sha256:239e3116045ea823f6df87d6168107ad75ccc0590e37242af0cc1e98c5d224e4",
- "sha256:9e735cee3a5c1961f09e3f3ba6dc498198c2d70b473d98d0d1504b8d1e7a3d61"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.1.0"
+ "markers": "sys_platform == 'win32'",
+ "version": "==2021.9.3"
},
"prompt-toolkit": {
"hashes": [
- "sha256:4bcf119be2200c17ed0d518872ef922f1de336eb6d1ddbd1e089ceb6447d97c6",
- "sha256:a51d41a6a45fd9def54365bca8f0402c8f182f2b6f7e29c74d55faeb9fb38ac4"
+ "sha256:cb7dae7d2c59188c85a1d6c944fad19aded6a26bd9c8ae115a4e1c20eb90b713",
+ "sha256:f2b6a8067a4fb959d3677d1ed764cc4e63e0f6f565b9a4fc7edc2b18bf80217b"
],
"markers": "python_full_version >= '3.6.2'",
- "version": "==3.0.26"
+ "version": "==3.0.27"
},
"psutil": {
"hashes": [
@@ -715,39 +576,36 @@
},
"pycryptodomex": {
"hashes": [
- "sha256:00eb17ee2b8eb9d84df37d54bc7070ff45903b90535558c2e0ddb5e6957521d3",
- "sha256:05b36726ce5521ce0feb25ea11e866261089edd7fad44df4ced9f7f45a9d4c3b",
- "sha256:110b319189915a66d14df13d233a2dbb54f00df21f3167de1cad340bf4dd88bd",
- "sha256:15e6f5b4a81109eb8e9a02c954fe119f6c57836fd55a9891ba703ddfbd690587",
- "sha256:1b07a13ed73d00a97af7c3733b807007d2249cd236a33955a7dec1939c232b28",
- "sha256:2040a22a30780da743835c7c71307558688065d6c22e18ac3e44082dc3323d8f",
- "sha256:264a701bb6e8aedf4b71bcb9eb83b93020041e96112ccfe873a16964d41ade74",
- "sha256:2d8bda8f949b79b78b293706aa7fc1e5c171c62661252bfdd5d12c70acd03282",
- "sha256:2e2da1eabb426cbeb4922c981bb843f36427f8365ef7e46bc581a55d7ea67643",
- "sha256:3ad75e24a0e25396901273a9a2aaba0286fa74703e5b61731942f6914a1e1cbe",
- "sha256:3c06abf17c68cf87c4e81e1745f0afbe4427413684a122a9d044a8a1d3c6d959",
- "sha256:3c195eecd43e48d0a06267df6945958f5f566eef160a5b01c519434cfa6d368a",
- "sha256:3c9ee5e77dd9cb19fe09765b6c02e3784cdbd2e5ecfbc67c8e9628073f79b981",
- "sha256:484ad0f50fd49bec4d2b8c0e5a3ad70e278ed3390bfd5c4515dc896f31b45d6c",
- "sha256:4b046c3d50fe4bb57386567ff47a588b1bbe1ddf3d9e2b23aede09fa97511f5f",
- "sha256:50684f16b12f1dcca8018d2711fb87044c74038ce9322d36f6ee9d09fcda7e6f",
- "sha256:6940b6730bab7128c993b562abf018560aa5b861da92854cf050b5f96d4713df",
- "sha256:76fe9ad943480507952cd7c96c20f6c8af78145f944cb66bbba63f2872d9988e",
- "sha256:7bcc5d3904abe5cfac5acc67679e330b0402473e839f94b59e13efdc2c2945d5",
- "sha256:8310782ac84fa1df93703081af6791549451a380ad88670c2484f75e26c6485f",
- "sha256:88eb239d6af71ba2098a4cfea516add37881d55b76b38d9e297f77a65bb9a8cf",
- "sha256:9afea78c31f3714b06673d2c5b8874f31c19c03258645733546a320da2e6df23",
- "sha256:a11884621c2a5fe241ccf2adf34e4fdde162e91fbc3207f0a0db122ad2b7a061",
- "sha256:b0277a201196b7825b21a405e0a70167f277b8d5666031e65c9af7a715cb0833",
- "sha256:b5ff95687c4008f76091849e5333692e6a54a93399cd8fda7e1ba523734136f4",
- "sha256:c565b89fb91ecb60273b2dcedb5149b48a1ec4227cef8c63fd77ec0f33eaf75a",
- "sha256:d689b368ca8b3ec1e60cc609eae14d4e352d10fe807ca9906f77f0712ab05a37",
- "sha256:f3bb1e722ad57de1999c8db54b58507b47771de4a294115c00f785f1d5913ec1",
- "sha256:fbff384c2080106b3f5f7cfa96728f02e627be7f7cd1657d9cf63300a16d0864",
- "sha256:fd2657134b633523db551b96b095387083a459d77e93b9cc888c9f13edb7a6f6"
+ "sha256:1ca8e1b4c62038bb2da55451385246f51f412c5f5eabd64812c01766a5989b4a",
+ "sha256:298c00ea41a81a491d5b244d295d18369e5aac4b61b77b2de5b249ca61cd6659",
+ "sha256:2aa887683eee493e015545bd69d3d21ac8d5ad582674ec98f4af84511e353e45",
+ "sha256:2ce76ed0081fd6ac8c74edc75b9d14eca2064173af79843c24fa62573263c1f2",
+ "sha256:3da13c2535b7aea94cc2a6d1b1b37746814c74b6e80790daddd55ca5c120a489",
+ "sha256:406ec8cfe0c098fadb18d597dc2ee6de4428d640c0ccafa453f3d9b2e58d29e2",
+ "sha256:4d0db8df9ffae36f416897ad184608d9d7a8c2b46c4612c6bc759b26c073f750",
+ "sha256:530756d2faa40af4c1f74123e1d889bd07feae45bac2fd32f259a35f7aa74151",
+ "sha256:77931df40bb5ce5e13f4de2bfc982b2ddc0198971fbd947776c8bb5050896eb2",
+ "sha256:797a36bd1f69df9e2798e33edb4bd04e5a30478efc08f9428c087f17f65a7045",
+ "sha256:8085bd0ad2034352eee4d4f3e2da985c2749cb7344b939f4d95ead38c2520859",
+ "sha256:8536bc08d130cae6dcba1ea689f2913dfd332d06113904d171f2f56da6228e89",
+ "sha256:a4d412eba5679ede84b41dbe48b1bed8f33131ab9db06c238a235334733acc5e",
+ "sha256:aebecde2adc4a6847094d3bd6a8a9538ef3438a5ea84ac1983fcb167db614461",
+ "sha256:b276cc4deb4a80f9dfd47a41ebb464b1fe91efd8b1b8620cf5ccf8b824b850d6",
+ "sha256:b5a185ae79f899b01ca49f365bdf15a45d78d9856f09b0de1a41b92afce1a07f",
+ "sha256:c4d8977ccda886d88dc3ca789de2f1adc714df912ff3934b3d0a3f3d777deafb",
+ "sha256:c5dd3ffa663c982d7f1be9eb494a8924f6d40e2e2f7d1d27384cfab1b2ac0662",
+ "sha256:ca88f2f7020002638276439a01ffbb0355634907d1aa5ca91f3dc0c2e44e8f3b",
+ "sha256:d2cce1c82a7845d7e2e8a0956c6b7ed3f1661c9acf18eb120fc71e098ab5c6fe",
+ "sha256:d709572d64825d8d59ea112e11cc7faf6007f294e9951324b7574af4251e4de8",
+ "sha256:da8db8374295fb532b4b0c467e66800ef17d100e4d5faa2bbbd6df35502da125",
+ "sha256:e36c7e3b5382cd5669cf199c4a04a0279a43b2a3bdd77627e9b89778ac9ec08c",
+ "sha256:e95a4a6c54d27a84a4624d2af8bb9ee178111604653194ca6880c98dcad92f48",
+ "sha256:ee835def05622e0c8b1435a906491760a43d0c462f065ec9143ec4b8d79f8bff",
+ "sha256:f75009715dcf4a3d680c2338ab19dac5498f8121173a929872950f4fb3a48fbf",
+ "sha256:f8524b8bc89470cec7ac51734907818d3620fb1637f8f8b542d650ebec42a126"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==3.14.0"
+ "version": "==3.14.1"
},
"pyinstaller": {
"hashes": [
@@ -871,20 +729,30 @@
"markers": "python_version >= '3.6'",
"version": "==0.3.1"
},
- "python-dateutil": {
+ "pywin32": {
"hashes": [
- "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
- "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
+ "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559",
+ "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51",
+ "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b",
+ "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb",
+ "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba",
+ "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34",
+ "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352",
+ "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9",
+ "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e",
+ "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca",
+ "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee",
+ "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==2.8.0"
+ "version": "==303"
},
- "pytz": {
+ "pywin32-ctypes": {
"hashes": [
- "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c",
- "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"
+ "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942",
+ "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"
],
- "version": "==2021.3"
+ "markers": "sys_platform == 'win32'",
+ "version": "==0.2.0"
},
"requests": {
"hashes": [
@@ -894,18 +762,6 @@
"index": "pypi",
"version": "==2.27.1"
},
- "s3transfer": {
- "hashes": [
- "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f",
- "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==0.5.1"
- },
- "scoutsuite": {
- "git": "git://github.com/guardicode/ScoutSuite",
- "ref": "eac33ac5b0a84e4a2e29682cf3568271eb595003"
- },
"service-identity": {
"hashes": [
"sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34",
@@ -929,20 +785,6 @@
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
},
- "sqlitedict": {
- "hashes": [
- "sha256:2affcc301aacd4da7511692601ecbde392294205af418498f7d6d3ec0dbcad56"
- ],
- "version": "==1.7.0"
- },
- "tempora": {
- "hashes": [
- "sha256:cba0f197a64883bf3e73657efbc0324d5bf17179e7769b1385b4d75d26cd9127",
- "sha256:fbca6a229af666ea4ea8b2f9f80ac9a074f7cf53a97987855b1d15b6e93fd63b"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==5.0.1"
- },
"tqdm": {
"hashes": [
"sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c",
@@ -956,11 +798,29 @@
"tls"
],
"hashes": [
- "sha256:13c1d1d2421ae556d91e81e66cf0d4f4e4e1e4a36a0486933bee4305c6a4fb9b",
- "sha256:2cd652542463277378b0d349f47c62f20d9306e57d1247baabd6d1d38a109006"
+ "sha256:b7971ec9805b0f80e1dcb1a3721d7bfad636d5f909de687430ce373979d67b61",
+ "sha256:ccd638110d9ccfdc003042aa3e1b6d6af272eaca45d36e083359560549e3e848"
],
"markers": "python_full_version >= '3.6.7'",
- "version": "==21.7.0"
+ "version": "==22.1.0"
+ },
+ "twisted-iocpsupport": {
+ "hashes": [
+ "sha256:306becd6e22ab6e8e4f36b6bdafd9c92e867c98a5ce517b27fdd27760ee7ae41",
+ "sha256:3c61742cb0bc6c1ac117a7e5f422c129832f0c295af49e01d8a6066df8cfc04d",
+ "sha256:72068b206ee809c9c596b57b5287259ea41ddb4774d86725b19f35bf56aa32a9",
+ "sha256:7d972cfa8439bdcb35a7be78b7ef86d73b34b808c74be56dfa785c8a93b851bf",
+ "sha256:81b3abe3527b367da0220482820cb12a16c661672b7bcfcde328902890d63323",
+ "sha256:851b3735ca7e8102e661872390e3bce88f8901bece95c25a0c8bb9ecb8a23d32",
+ "sha256:985c06a33f5c0dae92c71a036d1ea63872ee86a21dd9b01e1f287486f15524b4",
+ "sha256:9dbb8823b49f06d4de52721b47de4d3b3026064ef4788ce62b1a21c57c3fff6f",
+ "sha256:b435857b9efcbfc12f8c326ef0383f26416272260455bbca2cd8d8eca470c546",
+ "sha256:b76b4eed9b27fd63ddb0877efdd2d15835fdcb6baa745cb85b66e5d016ac2878",
+ "sha256:b9fed67cf0f951573f06d560ac2f10f2a4bbdc6697770113a2fc396ea2cb2565",
+ "sha256:bf4133139d77fc706d8f572e6b7d82871d82ec7ef25d685c2351bdacfb701415"
+ ],
+ "markers": "platform_system == 'Windows'",
+ "version": "==1.0.2"
},
"typing-extensions": {
"hashes": [
@@ -987,11 +847,11 @@
},
"werkzeug": {
"hashes": [
- "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f",
- "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a"
+ "sha256:1421ebfc7648a39a5c58c601b154165d05cf47a3cd0ccb70857cbdacf6c8f2b8",
+ "sha256:b863f8ff057c522164b6067c9e28b041161b4be5ba4d0daceeaa50a163822d3c"
],
"markers": "python_version >= '3.6'",
- "version": "==2.0.2"
+ "version": "==2.0.3"
},
"winacl": {
"hashes": [
@@ -1021,16 +881,10 @@
"sha256:1d6b085e5c445141c475476000b661f60fff1aaa19f76bf82b7abb92e0ff4942",
"sha256:b6a6be5711b1b6c8d55bda7a8befd75c48c12b770b9d227d31c1737dbf0d40a6"
],
+ "index": "pypi",
"markers": "sys_platform == 'win32'",
"version": "==1.5.1"
},
- "zc.lockfile": {
- "hashes": [
- "sha256:307ad78227e48be260e64896ec8886edc7eae22d8ec53e4d528ab5537a83203b",
- "sha256:cc33599b549f0c8a248cb72f3bf32d77712de1ff7ee8814312eb6456b42c015f"
- ],
- "version": "==2.0"
- },
"zipp": {
"hashes": [
"sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index 3f6461f22..2d767c8c2 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -5,13 +5,10 @@ import sys
-from PyInstaller.utils.hooks import collect_data_files
-
block_cipher = None
def main():
- print(collect_data_files('policyuniverse'))
a = Analysis(['main.py'],
pathex=['..'],
hiddenimports=get_hidden_imports(),
diff --git a/monkey/infection_monkey/network/tools.py b/monkey/infection_monkey/network/tools.py
index d43fed12e..1a1981616 100644
--- a/monkey/infection_monkey/network/tools.py
+++ b/monkey/infection_monkey/network/tools.py
@@ -4,9 +4,7 @@ import socket
import struct
import sys
-from common.network.network_utils import get_host_from_network_location
-from infection_monkey.config import WormConfiguration
-from infection_monkey.network.info import get_routes, local_ips
+from infection_monkey.network.info import get_routes
DEFAULT_TIMEOUT = 10
BANNER_READ = 1024
@@ -117,13 +115,3 @@ def get_interface_to_target(dst):
paths.sort()
ret = paths[-1][1]
return ret[1]
-
-
-def is_running_on_island():
- current_server_without_port = get_host_from_network_location(WormConfiguration.current_server)
- running_on_island = is_running_on_server(current_server_without_port)
- return running_on_island and WormConfiguration.depth == WormConfiguration.max_depth
-
-
-def is_running_on_server(ip: str) -> bool:
- return ip in local_ips()
diff --git a/monkey/infection_monkey/system_info/collectors/aws_collector.py b/monkey/infection_monkey/system_info/collectors/aws_collector.py
index 074d19cc1..8cbf26976 100644
--- a/monkey/infection_monkey/system_info/collectors/aws_collector.py
+++ b/monkey/infection_monkey/system_info/collectors/aws_collector.py
@@ -1,12 +1,7 @@
import logging
from common.cloud.aws.aws_instance import AwsInstance
-from common.cloud.scoutsuite_consts import CloudProviders
from common.common_consts.system_info_collectors_names import AWS_COLLECTOR
-from infection_monkey.network.tools import is_running_on_island
-from infection_monkey.system_info.collectors.scoutsuite_collector.scoutsuite_collector import (
- scan_cloud_security,
-)
from infection_monkey.system_info.system_info_collector import SystemInfoCollector
logger = logging.getLogger(__name__)
@@ -22,11 +17,6 @@ class AwsCollector(SystemInfoCollector):
def collect(self) -> dict:
logger.info("Collecting AWS info")
- if is_running_on_island():
- logger.info("Attempting to scan AWS security with ScoutSuite.")
- scan_cloud_security(cloud_type=CloudProviders.AWS)
- else:
- logger.info("Didn't scan AWS security with ScoutSuite, because not on island.")
aws = AwsInstance()
info = {}
if aws.is_instance():
diff --git a/monkey/infection_monkey/system_info/collectors/scoutsuite_collector/scoutsuite_collector.py b/monkey/infection_monkey/system_info/collectors/scoutsuite_collector/scoutsuite_collector.py
deleted file mode 100644
index ec8a5e488..000000000
--- a/monkey/infection_monkey/system_info/collectors/scoutsuite_collector/scoutsuite_collector.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import logging
-from typing import Union
-
-import ScoutSuite.api_run
-from ScoutSuite.providers.base.provider import BaseProvider
-
-from common.cloud.scoutsuite_consts import CloudProviders
-from common.utils.exceptions import ScoutSuiteScanError
-from infection_monkey.config import WormConfiguration
-from infection_monkey.telemetry.scoutsuite_telem import ScoutSuiteTelem
-
-logger = logging.getLogger(__name__)
-
-
-def scan_cloud_security(cloud_type: CloudProviders):
- try:
- results = run_scoutsuite(cloud_type.value)
- if isinstance(results, dict) and "error" in results and results["error"]:
- raise ScoutSuiteScanError(results["error"])
- send_scoutsuite_run_results(results)
- except (Exception, ScoutSuiteScanError) as e:
- logger.error(f"ScoutSuite didn't scan {cloud_type.value} security because: {e}")
-
-
-def run_scoutsuite(cloud_type: str) -> Union[BaseProvider, dict]:
- return ScoutSuite.api_run.run(
- provider=cloud_type,
- aws_access_key_id=WormConfiguration.aws_access_key_id,
- aws_secret_access_key=WormConfiguration.aws_secret_access_key,
- aws_session_token=WormConfiguration.aws_session_token,
- )
-
-
-def send_scoutsuite_run_results(run_results: BaseProvider):
- ScoutSuiteTelem(run_results).send()
diff --git a/monkey/infection_monkey/telemetry/scoutsuite_telem.py b/monkey/infection_monkey/telemetry/scoutsuite_telem.py
deleted file mode 100644
index 91b26f69d..000000000
--- a/monkey/infection_monkey/telemetry/scoutsuite_telem.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from ScoutSuite.output.result_encoder import ScoutJsonEncoder
-from ScoutSuite.providers.base.provider import BaseProvider
-
-from common.common_consts.telem_categories import TelemCategoryEnum
-from infection_monkey.telemetry.base_telem import BaseTelem
-
-
-class ScoutSuiteTelem(BaseTelem):
- def __init__(self, provider: BaseProvider):
- super().__init__()
- self.provider_data = provider
-
- json_encoder = ScoutJsonEncoder
- telem_category = TelemCategoryEnum.SCOUTSUITE
-
- def get_data(self):
- return {"data": self.provider_data}
diff --git a/monkey/monkey_island/Pipfile b/monkey/monkey_island/Pipfile
index cd6b3c612..fc02c2f75 100644
--- a/monkey/monkey_island/Pipfile
+++ b/monkey/monkey_island/Pipfile
@@ -22,7 +22,6 @@ Flask-PyMongo = ">=2.3.0"
Flask-RESTful = ">=0.3.8"
Flask = ">=1.1"
Werkzeug = ">=1.0.1"
-ScoutSuite = {git = "https://github.com/guardicode/ScoutSuite"}
pyaescrypt = "*"
python-dateutil = "*"
cffi = "*" # Without explicit install: ModuleNotFoundError: No module named '_cffi_backend'
diff --git a/monkey/monkey_island/Pipfile.lock b/monkey/monkey_island/Pipfile.lock
index e0dd12e35..4733e8fb9 100644
--- a/monkey/monkey_island/Pipfile.lock
+++ b/monkey/monkey_island/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "8345ad78df24e68e7934b863857570fdd2f80cbcc2e9525ac13a7660c40720c7"
+ "sha256": "a3718be25739d7397df87a723009b2ccb3fd67927cb5eb335c3937b4e60cdd60"
},
"pipfile-spec": 6,
"requires": {
@@ -30,27 +30,23 @@
],
"version": "==9.0.1"
},
- "asyncio-throttle": {
- "hashes": [
- "sha256:a01a56f3671e961253cf262918f3e0741e222fc50d57d981ba5c801f284eccfe"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==0.1.1"
- },
"attrs": {
"hashes": [
- "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1",
- "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"
+ "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
+ "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==21.2.0"
+ "version": "==21.4.0"
},
"bcrypt": {
"hashes": [
+ "sha256:56e5da069a76470679f312a7d3d23deb3ac4519991a0361abc11da837087b61d",
"sha256:5b93c1726e50a93a033c36e5ca7fdcd29a5c7395af50a6892f5d9e7c6cfbfb29",
"sha256:63d4e3ff96188e5898779b6057878fecf3f11cfe6ec3b313ea09955d587ec7a7",
"sha256:81fec756feff5b6818ea7ab031205e1d323d8943d237303baca2c5f9c7846f34",
+ "sha256:a0584a92329210fcd75eb8a3250c5a941633f8bfaf2a18f81009b097732839b7",
"sha256:a67fb841b35c28a59cebed05fbd3e80eea26e6d75851f0574a9273c80f3e9b55",
+ "sha256:b589229207630484aefe5899122fb938a5b017b0f4349f769b8c13e78d99a8fd",
"sha256:c95d4cbebffafcdd28bd28bb4e25b31c50f6da605c81ffd9ad8a3d1b2ab7b1b6",
"sha256:cd1ea2ff3038509ea95f687256c46b79f5fc382ad0aa3664d200047546d511d1",
"sha256:cdcdcb3972027f83fe24a48b1e90ea4b584d35f1cc279d76de6fc4b13376239d"
@@ -139,35 +135,11 @@
},
"charset-normalizer": {
"hashes": [
- "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0",
- "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"
+ "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45",
+ "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"
],
"markers": "python_version >= '3'",
- "version": "==2.0.7"
- },
- "cheroot": {
- "hashes": [
- "sha256:7ba11294a83468a27be6f06066df8a0f17d954ad05945f28d228aa3f4cd1b03c",
- "sha256:f137d03fd5155b1364bea557a7c98168665c239f6c8cedd8f80e81cdfac01567"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==8.5.2"
- },
- "cherrypy": {
- "hashes": [
- "sha256:55659e6f012d374898d6d9d581e17cc1477b6a14710218e64f187b9227bea038",
- "sha256:f33e87286e7b3e309e04e7225d8e49382d9d7773e6092241d7f613893c563495"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==18.6.1"
- },
- "cherrypy-cors": {
- "hashes": [
- "sha256:eb512e20fa9e478abd1868b1417814a4e9240ed0c403472a2c624460e49ab0d5",
- "sha256:f7fb75f6e617ce29c9ec3fdd8b1ff6ec64fec2c56371182525e22bcf4c180513"
- ],
- "markers": "python_version >= '2.7'",
- "version": "==1.6"
+ "version": "==2.0.11"
},
"click": {
"hashes": [
@@ -182,50 +154,42 @@
"sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b",
"sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"
],
- "markers": "sys_platform == 'win32' and platform_system == 'Windows'",
+ "markers": "platform_system == 'Windows'",
"version": "==0.4.4"
},
- "coloredlogs": {
- "hashes": [
- "sha256:34fad2e342d5a559c31b6c889e8d14f97cb62c47d9a2ae7b5ed14ea10a79eff8",
- "sha256:b869a2dda3fa88154b9dd850e27828d8755bfab5a838a1c97fbc850c6e377c36"
- ],
- "version": "==10.0"
- },
"cryptography": {
"hashes": [
- "sha256:2049f8b87f449fc6190350de443ee0c1dd631f2ce4fa99efad2984de81031681",
- "sha256:231c4a69b11f6af79c1495a0e5a85909686ea8db946935224b7825cfb53827ed",
- "sha256:24469d9d33217ffd0ce4582dfcf2a76671af115663a95328f63c99ec7ece61a4",
- "sha256:2deab5ec05d83ddcf9b0916319674d3dae88b0e7ee18f8962642d3cde0496568",
- "sha256:494106e9cd945c2cadfce5374fa44c94cfadf01d4566a3b13bb487d2e6c7959e",
- "sha256:4c702855cd3174666ef0d2d13dcc879090aa9c6c38f5578896407a7028f75b9f",
- "sha256:52f769ecb4ef39865719aedc67b4b7eae167bafa48dbc2a26dd36fa56460507f",
- "sha256:5c49c9e8fb26a567a2b3fa0343c89f5d325447956cc2fc7231c943b29a973712",
- "sha256:684993ff6f67000a56454b41bdc7e015429732d65a52d06385b6e9de6181c71e",
- "sha256:6fbbbb8aab4053fa018984bb0e95a16faeb051dd8cca15add2a27e267ba02b58",
- "sha256:8982c19bb90a4fa2aad3d635c6d71814e38b643649b4000a8419f8691f20ac44",
- "sha256:9511416e85e449fe1de73f7f99b21b3aa04fba4c4d335d30c486ba3756e3a2a6",
- "sha256:97199a13b772e74cdcdb03760c32109c808aff7cd49c29e9cf4b7754bb725d1d",
- "sha256:a776bae1629c8d7198396fd93ec0265f8dd2341c553dc32b976168aaf0e6a636",
- "sha256:aa94d617a4cd4cdf4af9b5af65100c036bce22280ebb15d8b5262e8273ebc6ba",
- "sha256:b17d83b3d1610e571fedac21b2eb36b816654d6f7496004d6a0d32f99d1d8120",
- "sha256:d73e3a96c38173e0aa5646c31bf8473bc3564837977dd480f5cbeacf1d7ef3a3",
- "sha256:d91bc9f535599bed58f6d2e21a2724cb0c3895bf41c6403fe881391d29096f1d",
- "sha256:ef216d13ac8d24d9cd851776662f75f8d29c9f2d05cdcc2d34a18d32463a9b0b",
- "sha256:f6a5a85beb33e57998dc605b9dbe7deaa806385fdf5c4810fb849fcd04640c81",
- "sha256:f92556f94e476c1b616e6daec5f7ddded2c082efa7cee7f31c7aeda615906ed8"
+ "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3",
+ "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31",
+ "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac",
+ "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf",
+ "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316",
+ "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca",
+ "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638",
+ "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94",
+ "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12",
+ "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173",
+ "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b",
+ "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a",
+ "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f",
+ "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2",
+ "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9",
+ "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46",
+ "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903",
+ "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3",
+ "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1",
+ "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"
],
"markers": "python_version >= '3.6'",
- "version": "==36.0.0"
+ "version": "==36.0.1"
},
"dpath": {
"hashes": [
- "sha256:e7813fd8a9dd0d4c7cd4014533ce955eff712bcb2e8189be79bb893890a9db01",
- "sha256:ef74321b01479653c812fee69c53922364614d266a8e804d22058c5c02e5674e"
+ "sha256:5a1ddae52233fbc8ef81b15fb85073a81126bb43698d3f3a1b6aaf561a46cdc0",
+ "sha256:8c439bb1c3b3222427e9b8812701cd99a0ef3415ddbb7c03a2379f6989a03965"
],
"index": "pypi",
- "version": "==2.0.5"
+ "version": "==2.0.6"
},
"flask": {
"hashes": [
@@ -268,38 +232,46 @@
},
"gevent": {
"hashes": [
- "sha256:02d1e8ca227d0ab0b7917fd7e411f9a534475e0a41fb6f434e9264b20155201a",
- "sha256:0c7b4763514fec74c9fe6ad10c3de62d8fe7b926d520b1e35eb6887181b954ff",
- "sha256:1c9c87b15f792af80edc950a83ab8ef4f3ba3889712211c2c42740ddb57b5492",
- "sha256:23077d87d1589ac141c22923fd76853d2cc5b7e3c5e1f1f9cdf6ff23bc9790fc",
- "sha256:37a469a99e6000b42dd0b9bbd9d716dbd66cdc6e5738f136f6a266c29b90ee99",
- "sha256:3b600145dc0c5b39c6f89c2e91ec6c55eb0dd52dc8148228479ca42cded358e4",
- "sha256:3f5ba654bdd3c774079b553fef535ede5b52c7abd224cb235a15da90ae36251b",
- "sha256:43e93e1a4738c922a2416baf33f0afb0a20b22d3dba886720bc037cd02a98575",
- "sha256:473f918bdf7d2096e391f66bd8ce1e969639aa235e710aaf750a37774bb585bd",
- "sha256:4c94d27be9f0439b28eb8bd0f879e6142918c62092fda7fb96b6d06f01886b94",
- "sha256:55ede95f41b74e7506fab293ad04cc7fc2b6f662b42281e9f2d668ad3817b574",
- "sha256:6cad37a55e904879beef2a7e7c57c57d62fde2331fef1bec7f2b2a7ef14da6a2",
- "sha256:72d4c2a8e65bbc702db76456841c7ddd6de2d9ab544a24aa74ad9c2b6411a269",
- "sha256:75c29ed5148c916021d39d2fac90ccc0e19adf854626a34eaee012aa6b1fcb67",
- "sha256:84e1af2dfb4ea9495cb914b00b6303ca0d54bf0a92e688a17e60f6b033873df2",
- "sha256:8d8655ce581368b7e1ab42c8a3a166c0b43ea04e59970efbade9448864585e99",
- "sha256:90131877d3ce1a05da1b718631860815b89ff44e93c42d168c9c9e8893b26318",
- "sha256:9d46bea8644048ceac5737950c08fc89c37a66c34a56a6c9e3648726e60cb767",
- "sha256:a8656d6e02bf47d7fa47728cf7a7cbf408f77ef1fad12afd9e0e3246c5de1707",
- "sha256:aaf1451cd0d9c32f65a50e461084a0540be52b8ea05c18669c95b42e1f71592a",
- "sha256:afc877ff4f277d0e51a1206d748fdab8c1e0256f7a05e1b1067abbed71c64da9",
- "sha256:b10c3326edb76ec3049646dc5131608d6d3733b5adfc75d34852028ecc67c52c",
- "sha256:ceec7c5f15fb2f9b767b194daa55246830db6c7c3c2f0b1c7e9e90cb4d01f3f9",
- "sha256:e00dc0450f79253b7a3a7f2a28e6ca959c8d0d47c0f9fa2c57894c7974d5965f",
- "sha256:e91632fdcf1c9a33e97e35f96edcbdf0b10e36cf53b58caa946dca4836bb688c",
- "sha256:f39d5defda9443b5fb99a185050e94782fe7ac38f34f751b491142216ad23bc7"
+ "sha256:0082d8a5d23c35812ce0e716a91ede597f6dd2c5ff508a02a998f73598c59397",
+ "sha256:01928770972181ad8866ee37ea3504f1824587b188fcab782ef1619ce7538766",
+ "sha256:05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692",
+ "sha256:08b4c17064e28f4eb85604486abc89f442c7407d2aed249cf54544ce5c9baee6",
+ "sha256:177f93a3a90f46a5009e0841fef561601e5c637ba4332ab8572edd96af650101",
+ "sha256:22ce1f38fdfe2149ffe8ec2131ca45281791c1e464db34b3b4321ae9d8d2efbb",
+ "sha256:24d3550fbaeef5fddd794819c2853bca45a86c3d64a056a2c268d981518220d1",
+ "sha256:2afa3f3ad528155433f6ac8bd64fa5cc303855b97004416ec719a6b1ca179481",
+ "sha256:2bcec9f80196c751fdcf389ca9f7141e7b0db960d8465ed79be5e685bfcad682",
+ "sha256:2cfff82f05f14b7f5d9ed53ccb7a609ae8604df522bb05c971bca78ec9d8b2b9",
+ "sha256:3baeeccc4791ba3f8db27179dff11855a8f9210ddd754f6c9b48e0d2561c2aea",
+ "sha256:3c012c73e6c61f13c75e3a4869dbe6a2ffa025f103421a6de9c85e627e7477b1",
+ "sha256:3dad62f55fad839d498c801e139481348991cee6e1c7706041b5fe096cb6a279",
+ "sha256:542ae891e2aa217d2cf6d8446538fcd2f3263a40eec123b970b899bac391c47a",
+ "sha256:6a02a88723ed3f0fd92cbf1df3c4cd2fbd87d82b0a4bac3e36a8875923115214",
+ "sha256:74fc1ef16b86616cfddcc74f7292642b0f72dde4dd95aebf4c45bb236744be54",
+ "sha256:7909780f0cf18a1fc32aafd8c8e130cdd93c6e285b11263f7f2d1a0f3678bc50",
+ "sha256:7ccffcf708094564e442ac6fde46f0ae9e40015cb69d995f4b39cc29a7643881",
+ "sha256:8c21cb5c9f4e14d75b3fe0b143ec875d7dbd1495fad6d49704b00e57e781ee0f",
+ "sha256:973749bacb7bc4f4181a8fb2a7e0e2ff44038de56d08e856dd54a5ac1d7331b4",
+ "sha256:9d86438ede1cbe0fde6ef4cc3f72bf2f1ecc9630d8b633ff344a3aeeca272cdd",
+ "sha256:9f9652d1e4062d4b5b5a0a49ff679fa890430b5f76969d35dccb2df114c55e0f",
+ "sha256:a5ad4ed8afa0a71e1927623589f06a9b5e8b5e77810be3125cb4d93050d3fd1f",
+ "sha256:b7709c64afa8bb3000c28bb91ec42c79594a7cb0f322e20427d57f9762366a5b",
+ "sha256:bb5cb8db753469c7a9a0b8a972d2660fe851aa06eee699a1ca42988afb0aaa02",
+ "sha256:c43f081cbca41d27fd8fef9c6a32cf83cb979345b20abc07bf68df165cdadb24",
+ "sha256:cc2fef0f98ee180704cf95ec84f2bc2d86c6c3711bb6b6740d74e0afe708b62c",
+ "sha256:da8d2d51a49b2a5beb02ad619ca9ddbef806ef4870ba04e5ac7b8b41a5b61db3",
+ "sha256:e1899b921219fc8959ff9afb94dae36be82e0769ed13d330a393594d478a0b3a",
+ "sha256:eae3c46f9484eaacd67ffcdf4eaf6ca830f587edd543613b0f5c4eb3c11d052d",
+ "sha256:ec21f9eaaa6a7b1e62da786132d6788675b314f25f98d9541f1bf00584ed4749",
+ "sha256:f289fae643a3f1c3b909d6b033e6921b05234a4907e9c9c8c3f1fe403e6ac452",
+ "sha256:f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e"
],
"index": "pypi",
- "version": "==21.8.0"
+ "version": "==21.12.0"
},
"greenlet": {
"hashes": [
+ "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3",
"sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711",
"sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd",
"sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073",
@@ -309,6 +281,7 @@
"sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1",
"sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08",
"sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd",
+ "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2",
"sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa",
"sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8",
"sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40",
@@ -321,6 +294,7 @@
"sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3",
"sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d",
"sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d",
+ "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe",
"sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28",
"sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3",
"sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e",
@@ -334,6 +308,8 @@
"sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a",
"sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06",
"sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88",
+ "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965",
+ "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f",
"sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4",
"sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5",
"sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c",
@@ -354,20 +330,6 @@
"markers": "platform_python_implementation == 'CPython'",
"version": "==1.1.2"
},
- "httpagentparser": {
- "hashes": [
- "sha256:ef763d31993dd761825acee6c8b34be32b95cf1675d1c73c3cd35f9e52831b26"
- ],
- "version": "==1.9.1"
- },
- "humanfriendly": {
- "hashes": [
- "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477",
- "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==10.0"
- },
"idna": {
"hashes": [
"sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
@@ -378,19 +340,11 @@
},
"importlib-metadata": {
"hashes": [
- "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100",
- "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"
+ "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6",
+ "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"
],
"markers": "python_version < '3.8'",
- "version": "==4.8.2"
- },
- "importlib-resources": {
- "hashes": [
- "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45",
- "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"
- ],
- "markers": "python_version < '3.9'",
- "version": "==5.4.0"
+ "version": "==4.10.1"
},
"ipaddress": {
"hashes": [
@@ -408,38 +362,6 @@
"markers": "python_version >= '3.6'",
"version": "==2.0.1"
},
- "jaraco.classes": {
- "hashes": [
- "sha256:22ac35313cf4b145bf7b217cc51be2d98a3d2db1c8558a30ca259d9f0b9c0b7d",
- "sha256:ed54b728af1937dc16b7236fbaf34ba561ba1ace572b03fffa5486ed363ecf34"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.2.1"
- },
- "jaraco.collections": {
- "hashes": [
- "sha256:344d14769d716e7496af879ac71b3c6ebdd46abc64bd9ec21d15248365aa3ac9",
- "sha256:6fdf48b6268d44b589a9d7359849f5c4ea6447b59845e489da261996fbc41b79"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.4.0"
- },
- "jaraco.functools": {
- "hashes": [
- "sha256:0e02358b3d86fab7963b0afa2181211dfa478ced708b057dba9b277bde9142bb",
- "sha256:659a64743047d00c6ae2a2aa60573c62cfc0b4b70eaa14fa50c80360ada32aa8"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.4.0"
- },
- "jaraco.text": {
- "hashes": [
- "sha256:901d3468eaaa04f1d8a8f141f54b8887bfd943ccba311fc1c1de62c66604dfe0",
- "sha256:d1506dec6485fbaaaedf98b678f1228f639c8d50fbfa12ffc2594cfc495a2476"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.6.0"
- },
"jinja2": {
"hashes": [
"sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8",
@@ -547,21 +469,6 @@
"index": "pypi",
"version": "==0.20"
},
- "more-itertools": {
- "hashes": [
- "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b",
- "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"
- ],
- "markers": "python_version >= '3.5'",
- "version": "==8.12.0"
- },
- "netaddr": {
- "hashes": [
- "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac",
- "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"
- ],
- "version": "==0.8.0"
- },
"netifaces": {
"hashes": [
"sha256:043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32",
@@ -605,21 +512,6 @@
"markers": "python_version >= '3.6'",
"version": "==2021.9.3"
},
- "policyuniverse": {
- "hashes": [
- "sha256:184f854fc716754ff07cd9f601923d1ce30a6826617e7c2b252abebe76746b6d",
- "sha256:44145447d473c37ff2776667b5e1018a00c0a493c16a0a489399521b3786a8be"
- ],
- "version": "==1.4.0.20210819"
- },
- "portend": {
- "hashes": [
- "sha256:4c5a5a05fb31e5df7b73e08e96d55928d8a7f4ae6b4724de3777b06d0e8de693",
- "sha256:df891766ee4fd887d83051b5ee9524aaad95a626f56faf5790682b6250ef03b9"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==3.0.0"
- },
"pyaescrypt": {
"hashes": [
"sha256:a26731960fb24b80bd3c77dbff781cab20e77715906699837f73c9fcb2f44a57",
@@ -693,159 +585,150 @@
},
"pymongo": {
"hashes": [
- "sha256:02e0c088f189ca69fac094cb5f851b43bbbd7cec42114495777d4d8f297f7f8a",
- "sha256:138248c542051eb462f88b50b0267bd5286d6661064bab06faa0ef6ac30cdb4b",
- "sha256:13a7c6d055af58a1e9c505e736da8b6a2e95ccc8cec10b008143f7a536e5de8a",
- "sha256:13d74bf3435c1e58d8fafccc0d5e87f246ae2c6e9cbef4b35e32a1c3759e354f",
- "sha256:15dae01341571d0af51526b7a21648ca575e9375e16ba045c9860848dfa8952f",
- "sha256:17238115e6d37f5423b046cb829f1ca02c4ea7edb163f5b8b88e0c975dc3fec9",
- "sha256:180b405e17b90a877ea5dbc5efe7f4c171af4c89323148e100c0f12cedb86f12",
- "sha256:1821ce4e5a293313947fd017bbd2d2535aa6309680fa29b33d0442d15da296ec",
- "sha256:1a7b138a04fdd17849930dc8bf664002e17db38448850bfb96d200c9c5a8b3a1",
- "sha256:1c4e51a3b69789b6f468a8e881a13f2d1e8f5e99e41f80fd44845e6ec0f701e1",
- "sha256:1d55982e5335925c55e2b87467043866ce72bd30ea7e7e3eeed6ec3d95a806d4",
- "sha256:1fa6f08ddb6975371777f97592d35c771e713ee2250e55618148a5e57e260aff",
- "sha256:2174d3279b8e2b6d7613b338f684cd78ff7adf1e7ec5b7b7bde5609a129c9898",
- "sha256:2462a68f6675da548e333fa299d8e9807e00f95a4d198cfe9194d7be69f40c9b",
- "sha256:25fd76deabe9ea37c8360c362b32f702cc095a208dd1c5328189938ca7685847",
- "sha256:287c2a0063267c1458c4ddf528b44063ce7f376a6436eea5bccd7f625bbc3b5e",
- "sha256:2d3abe548a280b49269c7907d5b71199882510c484d680a5ea7860f30c4a695f",
- "sha256:2fa101bb23619120673899694a65b094364269e597f551a87c4bdae3a474d726",
- "sha256:2fda3b3fb5c0d159195ab834b322a23808f1b059bcc7e475765abeddee6a2529",
- "sha256:303531649fa45f96b694054c1aa02f79bda32ef57affe42c5c339336717eed74",
- "sha256:36806ee53a85c3ba73939652f2ced2961e6a77cfbae385cd83f2e24cd97964b7",
- "sha256:37a63da5ee623acdf98e6d511171c8a5827a6106b0712c18af4441ef4f11e6be",
- "sha256:3a2fcbd04273a509fa85285d9eccf17ab65ce440bd4f5e5a58c978e563cd9e9a",
- "sha256:3b40e36d3036bfe69ba63ec8e746a390721f75467085a0384b528e1dda532c69",
- "sha256:4168b6c425d783e81723fc3dc382d374a228ff29530436a472a36d9f27593e73",
- "sha256:444c00ebc20f2f9dc62e34f7dc9453dc2f5f5a72419c8dccad6e26d546c35712",
- "sha256:45d6b47d70ed44e3c40bef618ed61866c48176e7e5dff80d06d8b1a6192e8584",
- "sha256:460bdaa3f65ddb5b7474ae08589a1763b5da1a78b8348351b9ba1c63b459d67d",
- "sha256:47ed77f62c8417a86f9ad158b803f3459a636386cb9d3d4e9e7d6a82d051f907",
- "sha256:48722e91981bb22a16b0431ea01da3e1cc5b96805634d3b8d3c2a5315c1ce7f1",
- "sha256:49b0d92724d3fce1174fd30b0b428595072d5c6b14d6203e46a9ea347ae7b439",
- "sha256:4a2d73a9281faefb273a5448f6d25f44ebd311ada9eb79b6801ae890508fe231",
- "sha256:4f4bc64fe9cbd70d46f519f1e88c9e4677f7af18ab9cd4942abce2bcfa7549c3",
- "sha256:5067c04d3b19c820faac6342854d887ade58e8d38c3db79b68c2a102bbb100e7",
- "sha256:51437c77030bed72d57d8a61e22758e3c389b13fea7787c808030002bb05ca39",
- "sha256:515e4708d6567901ffc06476a38abe2c9093733f52638235d9f149579c1d3de0",
- "sha256:5183b698d6542219e4135de583b57bc6286bd37df7f645b688278eb919bfa785",
- "sha256:56feb80ea1f5334ccab9bd16a5161571ab70392e51fcc752fb8a1dc67125f663",
- "sha256:573e2387d0686976642142c50740dfc4d3494cc627e2a7d22782b99f70879055",
- "sha256:58a67b3800476232f9989e533d0244060309451b436d46670a53e6d189f1a7e7",
- "sha256:5e3833c001a04aa06a28c6fd9628256862a654c09b0f81c07734b5629bc014ab",
- "sha256:5f5fe59328838fa28958cc06ecf94be585726b97d637012f168bc3c7abe4fd81",
- "sha256:6235bf2157aa46e53568ed79b70603aa8874baa202d5d1de82fa0eb917696e73",
- "sha256:63be03f7ae1e15e72a234637ec7941ef229c7ab252c9ff6af48bba1e5418961c",
- "sha256:65f159c445761cab04b665fc448b3fc008aebc98e54fdcbfd1aff195ef1b1408",
- "sha256:67e0b2ad3692f6d0335ae231a40de55ec395b6c2e971ad6f55b162244d1ec542",
- "sha256:68409171ab2aa7ccd6e8e839233e4b8ddeec246383c9a3698614e814739356f9",
- "sha256:6a96c04ce39d66df60d9ce89f4c254c4967bc7d9e2e2c52adc58f47be826ee96",
- "sha256:6ead0126fb4424c6c6a4fdc603d699a9db7c03cdb8eac374c352a75fec8a820a",
- "sha256:6eb6789f26c398c383225e1313c8e75a7d290d323b8eaf65f3f3ddd0eb8a5a3c",
- "sha256:6f07888e3b73c0dfa46f12d098760494f5f23fd66923a6615edfe486e6a7649c",
- "sha256:6f0f0a10f128ea0898e607d351ebfabf70941494fc94e87f12c76e2894d8e6c4",
- "sha256:704879b6a54c45ad76cea7c6789c1ae7185050acea7afd15b58318fa1932ed45",
- "sha256:7117bfd8827cfe550f65a3c399dcd6e02226197a91c6d11a3540c3e8efc686d6",
- "sha256:712de1876608fd5d76abc3fc8ec55077278dd5044073fbe9492631c9a2c58351",
- "sha256:75c7ef67b4b8ec070e7a4740764f6c03ec9246b59d95e2ae45c029d41cb9efa1",
- "sha256:77dddf596fb065de29fb39992fbc81301f7fd0003be649b7fa7448c77ca53bed",
- "sha256:7abc87e45b572eb6d17a50422e69a9e5d6f13e691e821fe2312df512500faa50",
- "sha256:7d8cdd2f070c71366e64990653522cce84b08dc26ab0d1fa19aa8d14ee0cf9ba",
- "sha256:81ce5f871f5d8e82615c8bd0b34b68a9650204c8b1a04ce7890d58c98eb66e39",
- "sha256:837cdef094f39c6f4a2967abc646a412999c2540fbf5d3cce1dd3b671f4b876c",
- "sha256:849e641cfed05c75d772f9e9018f42c5fbd00655d43d52da1b9c56346fd3e4cc",
- "sha256:87114b995506e7584cf3daf891e419b5f6e7e383e7df6267494da3a76312aa22",
- "sha256:87db421c9eb915b8d9a9a13c5b2ee338350e36ee83e26ff0adfc48abc5db3ac3",
- "sha256:8851544168703fb519e95556e3b463fca4beeef7ed3f731d81a68c8268515d9d",
- "sha256:891f541c7ed29b95799da0cd249ae1db1842777b564e8205a197b038c5df6135",
- "sha256:8f87f53c9cd89010ae45490ec2c963ff18b31f5f290dc08b04151709589fe8d9",
- "sha256:9641be893ccce7d192a0094efd0a0d9f1783a1ebf314b4128f8a27bfadb8a77c",
- "sha256:979e34db4f3dc5710c18db437aaf282f691092b352e708cb2afd4df287698c76",
- "sha256:9b62d84478f471fdb0dcea3876acff38f146bd23cbdbed15074fb4622064ec2e",
- "sha256:a472ca3d43d33e596ff5836c6cc71c3e61be33f44fe1cfdab4a1100f4af60333",
- "sha256:a5dbeeea6a375fbd79448b48a54c46fc9351611a03ef8398d2a40b684ce46194",
- "sha256:a7430f3987d232e782304c109be1d0e6fff46ca6405cb2479e4d8d08cd29541e",
- "sha256:a81e52dbf95f236a0c89a5abcd2b6e1331da0c0312f471c73fae76c79d2acf6b",
- "sha256:aa434534cc91f51a85e3099dc257ee8034b3d2be77f2ca58fb335a686e3a681f",
- "sha256:ab27d6d7d41a66d9e54269a290d27cd5c74f08e9add0054a754b4821026c4f42",
- "sha256:adb37bf22d25a51b84d989a2a5c770d4514ac590201eea1cb50ce8c9c5257f1d",
- "sha256:afb16330ab6efbbf995375ad94e970fa2f89bb46bd10d854b7047620fdb0d67d",
- "sha256:b1b06038c9940a49c73db0aeb0f6809b308e198da1326171768cf68d843af521",
- "sha256:b1e6d1cf4bd6552b5f519432cce1530c09e6b0aab98d44803b991f7e880bd332",
- "sha256:bf2d9d62178bb5c05e77d40becf89c309b1966fbcfb5c306238f81bf1ec2d6a2",
- "sha256:bfd073fea04061019a103a288847846b5ef40dfa2f73b940ed61e399ca95314f",
- "sha256:c04e84ccf590933a266180286d8b6a5fc844078a5d934432628301bd8b5f9ca7",
- "sha256:c0947d7be30335cb4c3d5d0983d8ebc8294ae52503cf1d596c926f7e7183900b",
- "sha256:c2a17752f97a942bdb4ff4a0516a67c5ade1658ebe1ab2edacdec0b42e39fa75",
- "sha256:c4653830375ab019b86d218c749ad38908b74182b2863d09936aa8d7f990d30e",
- "sha256:c660fd1e4a4b52f79f7d134a3d31d452948477b7f46ff5061074a534c5805ba6",
- "sha256:cb48ff6cc6109190e1ccf8ea1fc71cc244c9185813ce7d1c415dce991cfb8709",
- "sha256:cef2675004d85d85a4ccc24730b73a99931547368d18ceeed1259a2d9fcddbc1",
- "sha256:d1b98539b0de822b6f717498e59ae3e5ae2e7f564370ab513e6d0c060753e447",
- "sha256:d6c6989c10008ac70c2bb2ad2b940fcfe883712746c89f7e3308c14c213a70d7",
- "sha256:db3efec9dcecd96555d752215797816da40315d61878f90ca39c8e269791bf17",
- "sha256:dc4749c230a71b34db50ac2481d9008bb17b67c92671c443c3b40e192fbea78e",
- "sha256:dcf906c1f7a33e4222e4bff18da1554d69323bc4dd95fe867a6fa80709ee5f93",
- "sha256:e2bccadbe313b11704160aaba5eec95d2da1aa663f02f41d2d1520d02bbbdcd5",
- "sha256:e30cce3cc86d6082c8596b3fbee0d4f54bc4d337a4fa1bf536920e2e319e24f0",
- "sha256:e5d6428b8b422ba5205140e8be11722fa7292a0bedaa8bc80fb34c92eb19ba45",
- "sha256:e841695b5dbea38909ab2dbf17e91e9a823412d8d88d1ef77f1b94a7bc551c0f",
- "sha256:eb65ec0255a0fccc47c87d44e505ef5180bfd71690bd5f84161b1f23949fb209",
- "sha256:ed20ec5a01c43254f6047c5d8124b70d28e39f128c8ad960b437644fe94e1827",
- "sha256:ed751a20840a31242e7bea566fcf93ba75bc11b33afe2777bbf46069c1af5094",
- "sha256:ef8b927813c27c3bdfc82c55682d7767403bcdadfd9f9c0fc49f4be4553a877b",
- "sha256:f43cacda46fc188f998e6d308afe1c61ff41dcb300949f4cbf731e9a0a5eb2d3",
- "sha256:f44bea60fd2178d7153deef9621c4b526a93939da30010bba24d3408a98b0f79",
- "sha256:fcc021530b7c71069132fe4846d95a3cdd74d143adc2f7e398d5fabf610f111c",
- "sha256:fe16517b275031d61261a4e3941c411fb7c46a9cd012f02381b56e7907cc9e06",
- "sha256:fe3ae4294d593da54862f0140fdcc89d1aeeb94258ca97f094119ed7f0e5882d"
+ "sha256:06b64cdf5121f86b78a84e61b8f899b6988732a8d304b503ea1f94a676221c06",
+ "sha256:07398d8a03545b98282f459f2603a6bb271f4448d484ed7f411121a519a7ea48",
+ "sha256:0a02313e71b7c370c43056f6b16c45effbb2d29a44d24403a3d5ba6ed322fa3f",
+ "sha256:0a89cadc0062a5e53664dde043f6c097172b8c1c5f0094490095282ff9995a5f",
+ "sha256:0be605bfb8461384a4cb81e80f51eb5ca1b89851f2d0e69a75458c788a7263a4",
+ "sha256:0d52a70350ec3dfc39b513df12b03b7f4c8f8ec6873bbf958299999db7b05eb1",
+ "sha256:0e7a5d0b9077e8c3e57727f797ee8adf12e1d5e7534642230d98980d160d1320",
+ "sha256:145d78c345a38011497e55aff22c0f8edd40ee676a6810f7e69563d68a125e83",
+ "sha256:14dee106a10b77224bba5efeeb6aee025aabe88eb87a2b850c46d3ee55bdab4a",
+ "sha256:176fdca18391e1206c32fb1d8265628a84d28333c20ad19468d91e3e98312cd1",
+ "sha256:1b4c535f524c9d8c86c3afd71d199025daa070859a2bdaf94a298120b0de16db",
+ "sha256:1b5cb75d2642ff7db823f509641f143f752c0d1ab03166cafea1e42e50469834",
+ "sha256:1c6c71e198b36f0f0dfe354f06d3655ecfa30d69493a1da125a9a54668aad652",
+ "sha256:1c771f1a8b3cd2d697baaf57e9cfa4ae42371cacfbea42ea01d9577c06d92f96",
+ "sha256:208a61db8b8b647fb5b1ff3b52b4ed6dbced01eac3b61009958adb203596ee99",
+ "sha256:2157d68f85c28688e8b723bbe70c8013e0aba5570e08c48b3562f74d33fc05c4",
+ "sha256:2301051701b27aff2cbdf83fae22b7ca883c9563dfd088033267291b46196643",
+ "sha256:2567885ff0c8c7c0887ba6cefe4ae4af96364a66a7069f924ce0cd12eb971d04",
+ "sha256:2577b8161eeae4dd376d13100b2137d883c10bb457dd08935f60c9f9d4b5c5f6",
+ "sha256:27e5ea64332385385b75414888ce9d1a9806be8616d7cef4ef409f4f256c6d06",
+ "sha256:28bfd5244d32faf3e49b5a8d1fab0631e922c26e8add089312e4be19fb05af50",
+ "sha256:295a5beaecb7bf054c1c6a28749ed72b19f4d4b61edcd8a0815d892424baf780",
+ "sha256:2c46a0afef69d61938a6fe32c3afd75b91dec3ab3056085dc72abbeedcc94166",
+ "sha256:3100a2352bdded6232b385ceda0c0a4624598c517d52c2d8cf014b7abbebd84d",
+ "sha256:320a1fe403dd83a35709fcf01083d14bc1462e9789b711201349a9158db3a87e",
+ "sha256:320f8734553c50cffe8a8e1ae36dfc7d7be1941c047489db20a814d2a170d7b5",
+ "sha256:33ab8c031f788609924e329003088831045f683931932a52a361d4a955b7dce2",
+ "sha256:3492ae1f97209c66af70e863e6420e6301cecb0a51a5efa701058aa73a8ca29e",
+ "sha256:351a2efe1c9566c348ad0076f4bf541f4905a0ebe2d271f112f60852575f3c16",
+ "sha256:3f0ac6e0203bd88863649e6ed9c7cfe53afab304bc8225f2597c4c0a74e4d1f0",
+ "sha256:3fedad05147b40ff8a93fcd016c421e6c159f149a2a481cfa0b94bfa3e473bab",
+ "sha256:4294f2c1cd069b793e31c2e6d7ac44b121cf7cedccd03ebcc30f3fc3417b314a",
+ "sha256:463b974b7f49d65a16ca1435bc1c25a681bb7d630509dd23b2e819ed36da0b7f",
+ "sha256:4e0a3ea7fd01cf0a36509f320226bd8491e0f448f00b8cb89f601c109f6874e1",
+ "sha256:514e78d20d8382d5b97f32b20c83d1d0452c302c9a135f0a9022236eb9940fda",
+ "sha256:517b09b1dd842390a965a896d1327c55dfe78199c9f5840595d40facbcd81854",
+ "sha256:51d1d061df3995c2332ae78f036492cc188cb3da8ef122caeab3631a67bb477e",
+ "sha256:5296669bff390135528001b4e48d33a7acaffcd361d98659628ece7f282f11aa",
+ "sha256:5296e5e69243ffd76bd919854c4da6630ae52e46175c804bc4c0e050d937b705",
+ "sha256:58db209da08a502ce6948841d522dcec80921d714024354153d00b054571993c",
+ "sha256:5b779e87300635b8075e8d5cfd4fdf7f46078cd7610c381d956bca5556bb8f97",
+ "sha256:5cf113a46d81cff0559d57aa66ffa473d57d1a9496f97426318b6b5b14fdec1c",
+ "sha256:5d20072d81cbfdd8e15e6a0c91fc7e3a4948c71e0adebfc67d3b4bcbe8602711",
+ "sha256:5d67dbc8da2dac1644d71c1839d12d12aa333e266a9964d5b1a49feed036bc94",
+ "sha256:5f530f35e1a57d4360eddcbed6945aecdaee2a491cd3f17025e7b5f2eea88ee7",
+ "sha256:5fdffb0cfeb4dc8646a5381d32ec981ae8472f29c695bf09e8f7a8edb2db12ca",
+ "sha256:602284e652bb56ca8760f8e88a5280636c5b63d7946fca1c2fe0f83c37dffc64",
+ "sha256:648fcfd8e019b122b7be0e26830a3a2224d57c3e934f19c1e53a77b8380e6675",
+ "sha256:64b9122be1c404ce4eb367ad609b590394587a676d84bfed8e03c3ce76d70560",
+ "sha256:6526933760ee1e6090db808f1690a111ec409699c1990efc96f134d26925c37f",
+ "sha256:6632b1c63d58cddc72f43ab9f17267354ddce563dd5e11eadabd222dcc808808",
+ "sha256:6f93dbfa5a461107bc3f5026e0d5180499e13379e9404f07a9f79eb5e9e1303d",
+ "sha256:71c0db2c313ea8a80825fb61b7826b8015874aec29ee6364ade5cb774fe4511b",
+ "sha256:71c5c200fd37a5322706080b09c3ec8907cf01c377a7187f354fc9e9e13abc73",
+ "sha256:7738147cd9dbd6d18d5593b3491b4620e13b61de975fd737283e4ad6c255c273",
+ "sha256:7a6e4dccae8ef5dd76052647d78f02d5d0ffaff1856277d951666c54aeba3ad2",
+ "sha256:7b4a9fcd95e978cd3c96cdc2096aa54705266551422cf0883c12a4044def31c6",
+ "sha256:80710d7591d579442c67a3bc7ae9dcba9ff95ea8414ac98001198d894fc4ff46",
+ "sha256:81a3ebc33b1367f301d1c8eda57eec4868e951504986d5d3fe437479dcdac5b2",
+ "sha256:8455176fd1b86de97d859fed4ae0ef867bf998581f584c7a1a591246dfec330f",
+ "sha256:845b178bd127bb074835d2eac635b980c58ec5e700ebadc8355062df708d5a71",
+ "sha256:87e18f29bac4a6be76a30e74de9c9005475e27100acf0830679420ce1fd9a6fd",
+ "sha256:89d7baa847383b9814de640c6f1a8553d125ec65e2761ad146ea2e75a7ad197c",
+ "sha256:8c7ad5cab282f53b9d78d51504330d1c88c83fbe187e472c07e6908a0293142e",
+ "sha256:8d92c6bb9174d47c2257528f64645a00bbc6324a9ff45a626192797aff01dc14",
+ "sha256:9252c991e8176b5a2fa574c5ab9a841679e315f6e576eb7cf0bd958f3e39b0ad",
+ "sha256:93111fd4e08fa889c126aa8baf5c009a941880a539c87672e04583286517450a",
+ "sha256:95d15cf81cd2fb926f2a6151a9f94c7aacc102b415e72bc0e040e29332b6731c",
+ "sha256:9d5b66d457d2c5739c184a777455c8fde7ab3600a56d8bbebecf64f7c55169e1",
+ "sha256:a055d29f1302892a9389a382bed10a3f77708bcf3e49bfb76f7712fa5f391cc6",
+ "sha256:a1ba93be779a9b8e5e44f5c133dc1db4313661cead8a2fd27661e6cb8d942ee9",
+ "sha256:a283425e6a474facd73072d8968812d1d9058490a5781e022ccf8895500b83ce",
+ "sha256:a351986d6c9006308f163c359ced40f80b6cffb42069f3e569b979829951038d",
+ "sha256:a766157b195a897c64945d4ff87b050bb0e763bb78f3964e996378621c703b00",
+ "sha256:a8a3540e21213cb8ce232e68a7d0ee49cdd35194856c50b8bd87eeb572fadd42",
+ "sha256:a8e0a086dbbee406cc6f603931dfe54d1cb2fba585758e06a2de01037784b737",
+ "sha256:ab23b0545ec71ea346bf50a5d376d674f56205b729980eaa62cdb7871805014b",
+ "sha256:b0db9a4691074c347f5d7ee830ab3529bc5ad860939de21c1f9c403daf1eda9a",
+ "sha256:b1b5be40ebf52c3c67ee547e2c4435ed5bc6352f38d23e394520b686641a6be4",
+ "sha256:b3e08aef4ea05afbc0a70cd23c13684e7f5e074f02450964ec5cfa1c759d33d2",
+ "sha256:b7df0d99e189b7027d417d4bfd9b8c53c9c7ed5a0a1495d26a6f547d820eca88",
+ "sha256:be1f10145f7ea76e3e836fdc5c8429c605675bdcddb0bca9725ee6e26874c00c",
+ "sha256:bf254a1a95e95fdf4eaa25faa1ea450a6533ed7a997f9f8e49ab971b61ea514d",
+ "sha256:bfc2d763d05ec7211313a06e8571236017d3e61d5fef97fcf34ec4b36c0b6556",
+ "sha256:c164eda0be9048f83c24b9b2656900041e069ddf72de81c17d874d0c32f6079f",
+ "sha256:c22591cff80188dd8543be0b559d0c807f7288bd353dc0bcfe539b4588b3a5cd",
+ "sha256:c5f83bb59d0ff60c6fdb1f8a7b0288fbc4640b1f0fd56f5ae2387749c35d34e3",
+ "sha256:c7e8221278e5f9e2b6d3893cfc3a3e46c017161a57bb0e6f244826e4cee97916",
+ "sha256:c8d6bf6fcd42cde2f02efb8126812a010c297eacefcd090a609639d2aeda6185",
+ "sha256:c8f7dd025cb0bf19e2f60a64dfc24b513c8330e0cfe4a34ccf941eafd6194d9e",
+ "sha256:c9d212e2af72d5c8d082775a43eb726520e95bf1c84826440f74225843975136",
+ "sha256:cebb3d8bcac4a6b48be65ebbc5c9881ed4a738e27bb96c86d9d7580a1fb09e05",
+ "sha256:d3082e5c4d7b388792124f5e805b469109e58f1ab1eb1fbd8b998e8ab766ffb7",
+ "sha256:d81047341ab56061aa4b6823c54d4632579c3b16e675089e8f520e9b918a133b",
+ "sha256:d81299f63dc33cc172c26faf59cc54dd795fc6dd5821a7676cca112a5ee8bbd6",
+ "sha256:dfa217bf8cf3ff6b30c8e6a89014e0c0e7b50941af787b970060ae5ba04a4ce5",
+ "sha256:dfec57f15f53d677b8e4535695ff3f37df7f8fe431f2efa8c3c8c4025b53d1eb",
+ "sha256:e099b79ccf7c40f18b149a64d3d10639980035f9ceb223169dd806ff1bb0d9cc",
+ "sha256:e1fc4d3985868860b6585376e511bb32403c5ffb58b0ed913496c27fd791deea",
+ "sha256:e2b4c95c47fb81b19ea77dc1c50d23af3eba87c9628fcc2e03d44124a3d336ea",
+ "sha256:e4e5d163e6644c2bc84dd9f67bfa89288c23af26983d08fefcc2cbc22f6e57e6",
+ "sha256:e66b3c9f8b89d4fd58a59c04fdbf10602a17c914fbaaa5e6ea593f1d54b06362",
+ "sha256:ed7d11330e443aeecab23866055e08a5a536c95d2c25333aeb441af2dbac38d2",
+ "sha256:f340a2a908644ea6cccd399be0fb308c66e05d2800107345f9f0f0d59e1731c4",
+ "sha256:f38b35ecd2628bf0267761ed659e48af7e620a7fcccfccf5774e7308fb18325c",
+ "sha256:f6d5443104f89a840250087863c91484a72f254574848e951d1bdd7d8b2ce7c9",
+ "sha256:fc2048d13ff427605fea328cbe5369dce549b8c7657b0e22051a5b8831170af6"
],
- "version": "==3.12.1"
- },
- "pyreadline": {
- "hashes": [
- "sha256:4530592fc2e85b25b1a9f79664433da09237c1a270e4d78ea5aa3a2c7229e2d1",
- "sha256:65540c21bfe14405a3a77e4c085ecfce88724743a4ead47c66b84defcf82c32e",
- "sha256:9ce5fa65b8992dfa373bddc5b6e0864ead8f291c94fbfec05fbd5c836162e67b"
- ],
- "markers": "python_version < '3.8' and sys_platform == 'win32'",
- "version": "==2.1"
+ "version": "==3.12.3"
},
"pyrsistent": {
"hashes": [
- "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2",
- "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7",
- "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea",
- "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426",
- "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710",
- "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1",
- "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396",
- "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2",
- "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680",
- "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35",
- "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427",
- "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b",
- "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b",
- "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f",
- "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef",
- "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c",
- "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4",
- "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d",
- "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78",
- "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b",
- "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"
+ "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c",
+ "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc",
+ "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e",
+ "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26",
+ "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec",
+ "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286",
+ "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045",
+ "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec",
+ "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8",
+ "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c",
+ "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca",
+ "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22",
+ "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a",
+ "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96",
+ "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc",
+ "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1",
+ "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07",
+ "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6",
+ "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b",
+ "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5",
+ "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"
],
- "markers": "python_version >= '3.6'",
- "version": "==0.18.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==0.18.1"
},
"python-dateutil": {
"hashes": [
- "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
- "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
+ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
+ "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"index": "pypi",
- "version": "==2.8.0"
+ "version": "==2.8.2"
},
"pytz": {
"hashes": [
@@ -854,22 +737,6 @@
],
"version": "==2021.3"
},
- "pywin32": {
- "hashes": [
- "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab",
- "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa",
- "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9",
- "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1",
- "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872",
- "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc",
- "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580",
- "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528",
- "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259",
- "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"
- ],
- "markers": "python_version < '3.10' and sys_platform == 'win32' and implementation_name == 'cpython'",
- "version": "==302"
- },
"pywin32-ctypes": {
"hashes": [
"sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942",
@@ -879,11 +746,11 @@
},
"requests": {
"hashes": [
- "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24",
- "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"
+ "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61",
+ "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
],
"index": "pypi",
- "version": "==2.26.0"
+ "version": "==2.27.1"
},
"ring": {
"hashes": [
@@ -894,15 +761,19 @@
},
"s3transfer": {
"hashes": [
- "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c",
- "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"
+ "sha256:25c140f5c66aa79e1ac60be50dcd45ddc59e83895f062a3aab263b870102911f",
+ "sha256:69d264d3e760e569b78aaa0f22c97e955891cd22e32b10c51f784eeda4d9d10a"
],
"markers": "python_version >= '3.6'",
- "version": "==0.5.0"
+ "version": "==0.5.1"
},
- "scoutsuite": {
- "git": "https://github.com/guardicode/ScoutSuite",
- "ref": "eac33ac5b0a84e4a2e29682cf3568271eb595003"
+ "setuptools": {
+ "hashes": [
+ "sha256:07e97e2f1e5607d240454e98c75c7004560ac8417ca5ae1dbaa50811cb6cc95c",
+ "sha256:23aad87cc27f4ae704079618c1d117a71bd43d41e355f0698c35f6b1c796d26c"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==60.8.1"
},
"six": {
"hashes": [
@@ -912,43 +783,29 @@
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
},
- "sqlitedict": {
- "hashes": [
- "sha256:2affcc301aacd4da7511692601ecbde392294205af418498f7d6d3ec0dbcad56"
- ],
- "version": "==1.7.0"
- },
- "tempora": {
- "hashes": [
- "sha256:746ed6fd3529883d81a811fff41b9910ea57067fa84641aa6ecbefffb8322f6d",
- "sha256:fd6cafd66b01390d53a760349cf0b3123844ec6ae3d1043d7190473ea9459138"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==4.1.2"
- },
"typing-extensions": {
"hashes": [
- "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed",
- "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"
+ "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e",
+ "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"
],
"markers": "python_version < '3.8'",
- "version": "==4.0.0"
+ "version": "==4.0.1"
},
"urllib3": {
"hashes": [
- "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece",
- "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"
+ "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed",
+ "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
- "version": "==1.26.7"
+ "version": "==1.26.8"
},
"werkzeug": {
"hashes": [
- "sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f",
- "sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a"
+ "sha256:1421ebfc7648a39a5c58c601b154165d05cf47a3cd0ccb70857cbdacf6c8f2b8",
+ "sha256:b863f8ff057c522164b6067c9e28b041161b4be5ba4d0daceeaa50a163822d3c"
],
"index": "pypi",
- "version": "==2.0.2"
+ "version": "==2.0.3"
},
"wirerope": {
"hashes": [
@@ -956,20 +813,13 @@
],
"version": "==0.4.5"
},
- "zc.lockfile": {
- "hashes": [
- "sha256:307ad78227e48be260e64896ec8886edc7eae22d8ec53e4d528ab5537a83203b",
- "sha256:cc33599b549f0c8a248cb72f3bf32d77712de1ff7ee8814312eb6456b42c015f"
- ],
- "version": "==2.0"
- },
"zipp": {
"hashes": [
- "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832",
- "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"
+ "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
+ "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"
],
- "markers": "python_version < '3.10'",
- "version": "==3.6.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==3.7.0"
},
"zope.event": {
"hashes": [
@@ -1054,19 +904,11 @@
},
"attrs": {
"hashes": [
- "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1",
- "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"
+ "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
+ "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==21.2.0"
- },
- "backports.entry-points-selectable": {
- "hashes": [
- "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b",
- "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"
- ],
- "markers": "python_version >= '2.7'",
- "version": "==1.1.1"
+ "version": "==21.4.0"
},
"black": {
"hashes": [
@@ -1084,11 +926,11 @@
},
"charset-normalizer": {
"hashes": [
- "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0",
- "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"
+ "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45",
+ "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"
],
"markers": "python_version >= '3'",
- "version": "==2.0.7"
+ "version": "==2.0.11"
},
"click": {
"hashes": [
@@ -1103,71 +945,63 @@
"sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b",
"sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"
],
- "markers": "sys_platform == 'win32' and platform_system == 'Windows'",
+ "markers": "platform_system == 'Windows'",
"version": "==0.4.4"
},
"coverage": {
- "extras": [
- "toml"
- ],
+ "extras": [],
"hashes": [
- "sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954",
- "sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0",
- "sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193",
- "sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052",
- "sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e",
- "sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c",
- "sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d",
- "sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4",
- "sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186",
- "sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d",
- "sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696",
- "sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13",
- "sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2",
- "sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c",
- "sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388",
- "sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9",
- "sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59",
- "sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225",
- "sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e",
- "sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b",
- "sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a",
- "sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f",
- "sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93",
- "sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758",
- "sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b",
- "sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b",
- "sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204",
- "sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71",
- "sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd",
- "sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373",
- "sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4",
- "sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc",
- "sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266",
- "sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263",
- "sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf",
- "sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c",
- "sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c",
- "sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc",
- "sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c",
- "sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649",
- "sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972",
- "sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f",
- "sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929",
- "sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d",
- "sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de",
- "sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091",
- "sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab"
+ "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c",
+ "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0",
+ "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554",
+ "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb",
+ "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2",
+ "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b",
+ "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8",
+ "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba",
+ "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734",
+ "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2",
+ "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f",
+ "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0",
+ "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1",
+ "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd",
+ "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687",
+ "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1",
+ "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c",
+ "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa",
+ "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8",
+ "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38",
+ "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8",
+ "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167",
+ "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27",
+ "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145",
+ "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa",
+ "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a",
+ "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed",
+ "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793",
+ "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4",
+ "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217",
+ "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e",
+ "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6",
+ "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d",
+ "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320",
+ "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f",
+ "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce",
+ "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975",
+ "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10",
+ "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525",
+ "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda",
+ "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"
],
"index": "pypi",
- "version": "==6.1.2"
+ "version": "==6.3.1"
},
"distlib": {
"hashes": [
- "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31",
- "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"
+ "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b",
+ "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"
],
- "version": "==0.3.3"
+ "version": "==0.3.4"
},
"dlint": {
"hashes": [
@@ -1178,11 +1012,11 @@
},
"filelock": {
"hashes": [
- "sha256:2e139a228bcf56dd8b2274a65174d005c4a6b68540ee0bdbb92c76f43f29f7e8",
- "sha256:93d512b32a23baf4cac44ffd72ccf70732aeff7b8050fcaf6d3ec406d954baf4"
+ "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80",
+ "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"
],
- "markers": "python_version >= '3.6'",
- "version": "==3.4.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==3.4.2"
},
"flake8": {
"hashes": [
@@ -1202,11 +1036,11 @@
},
"importlib-metadata": {
"hashes": [
- "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100",
- "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"
+ "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6",
+ "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"
],
"markers": "python_version < '3.8'",
- "version": "==4.8.2"
+ "version": "==4.10.1"
},
"iniconfig": {
"hashes": [
@@ -1262,11 +1096,11 @@
},
"platformdirs": {
"hashes": [
- "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2",
- "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"
+ "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca",
+ "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"
],
- "markers": "python_version >= '3.6'",
- "version": "==2.4.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==2.4.1"
},
"pluggy": {
"hashes": [
@@ -1302,19 +1136,19 @@
},
"pyparsing": {
"hashes": [
- "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4",
- "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"
+ "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea",
+ "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"
],
"markers": "python_version >= '3.6'",
- "version": "==3.0.6"
+ "version": "==3.0.7"
},
"pytest": {
"hashes": [
- "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89",
- "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"
+ "sha256:42901e6bd4bd4a0e533358a86e848427a49005a3256f657c5c8f8dd35ef137a9",
+ "sha256:dad48ffda394e5ad9aa3b7d7ddf339ed502e5e365b1350e0af65f4a602344b11"
],
"index": "pypi",
- "version": "==6.2.5"
+ "version": "==7.0.0"
},
"pytest-cov": {
"hashes": [
@@ -1326,65 +1160,90 @@
},
"regex": {
"hashes": [
- "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f",
- "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc",
- "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4",
- "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4",
- "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8",
- "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f",
- "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a",
- "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef",
- "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f",
- "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc",
- "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50",
- "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d",
- "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d",
- "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733",
- "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36",
- "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345",
- "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0",
- "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12",
- "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646",
- "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667",
- "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244",
- "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29",
- "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec",
- "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf",
- "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4",
- "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449",
- "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a",
- "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d",
- "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb",
- "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e",
- "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83",
- "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e",
- "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a",
- "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94",
- "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc",
- "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e",
- "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965",
- "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0",
- "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36",
- "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec",
- "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23",
- "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7",
- "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe",
- "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6",
- "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b",
- "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb",
- "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b",
- "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30",
- "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"
+ "sha256:04611cc0f627fc4a50bc4a9a2e6178a974c6a6a4aa9c1cca921635d2c47b9c87",
+ "sha256:0b5d6f9aed3153487252d00a18e53f19b7f52a1651bc1d0c4b5844bc286dfa52",
+ "sha256:0d2f5c3f7057530afd7b739ed42eb04f1011203bc5e4663e1e1d01bb50f813e3",
+ "sha256:11772be1eb1748e0e197a40ffb82fb8fd0d6914cd147d841d9703e2bef24d288",
+ "sha256:1333b3ce73269f986b1fa4d5d395643810074dc2de5b9d262eb258daf37dc98f",
+ "sha256:16f81025bb3556eccb0681d7946e2b35ff254f9f888cff7d2120e8826330315c",
+ "sha256:1a171eaac36a08964d023eeff740b18a415f79aeb212169080c170ec42dd5184",
+ "sha256:1d6301f5288e9bdca65fab3de6b7de17362c5016d6bf8ee4ba4cbe833b2eda0f",
+ "sha256:1e031899cb2bc92c0cf4d45389eff5b078d1936860a1be3aa8c94fa25fb46ed8",
+ "sha256:1f8c0ae0a0de4e19fddaaff036f508db175f6f03db318c80bbc239a1def62d02",
+ "sha256:2245441445099411b528379dee83e56eadf449db924648e5feb9b747473f42e3",
+ "sha256:22709d701e7037e64dae2a04855021b62efd64a66c3ceed99dfd684bfef09e38",
+ "sha256:24c89346734a4e4d60ecf9b27cac4c1fee3431a413f7aa00be7c4d7bbacc2c4d",
+ "sha256:25716aa70a0d153cd844fe861d4f3315a6ccafce22b39d8aadbf7fcadff2b633",
+ "sha256:2dacb3dae6b8cc579637a7b72f008bff50a94cde5e36e432352f4ca57b9e54c4",
+ "sha256:34316bf693b1d2d29c087ee7e4bb10cdfa39da5f9c50fa15b07489b4ab93a1b5",
+ "sha256:36b2d700a27e168fa96272b42d28c7ac3ff72030c67b32f37c05616ebd22a202",
+ "sha256:37978254d9d00cda01acc1997513f786b6b971e57b778fbe7c20e30ae81a97f3",
+ "sha256:38289f1690a7e27aacd049e420769b996826f3728756859420eeee21cc857118",
+ "sha256:385ccf6d011b97768a640e9d4de25412204fbe8d6b9ae39ff115d4ff03f6fe5d",
+ "sha256:3c7ea86b9ca83e30fa4d4cd0eaf01db3ebcc7b2726a25990966627e39577d729",
+ "sha256:49810f907dfe6de8da5da7d2b238d343e6add62f01a15d03e2195afc180059ed",
+ "sha256:519c0b3a6fbb68afaa0febf0d28f6c4b0a1074aefc484802ecb9709faf181607",
+ "sha256:51f02ca184518702975b56affde6c573ebad4e411599005ce4468b1014b4786c",
+ "sha256:552a39987ac6655dad4bf6f17dd2b55c7b0c6e949d933b8846d2e312ee80005a",
+ "sha256:596f5ae2eeddb79b595583c2e0285312b2783b0ec759930c272dbf02f851ff75",
+ "sha256:6014038f52b4b2ac1fa41a58d439a8a00f015b5c0735a0cd4b09afe344c94899",
+ "sha256:61ebbcd208d78658b09e19c78920f1ad38936a0aa0f9c459c46c197d11c580a0",
+ "sha256:6213713ac743b190ecbf3f316d6e41d099e774812d470422b3a0f137ea635832",
+ "sha256:637e27ea1ebe4a561db75a880ac659ff439dec7f55588212e71700bb1ddd5af9",
+ "sha256:6aa427c55a0abec450bca10b64446331b5ca8f79b648531138f357569705bc4a",
+ "sha256:6ca45359d7a21644793de0e29de497ef7f1ae7268e346c4faf87b421fea364e6",
+ "sha256:6db1b52c6f2c04fafc8da17ea506608e6be7086715dab498570c3e55e4f8fbd1",
+ "sha256:752e7ddfb743344d447367baa85bccd3629c2c3940f70506eb5f01abce98ee68",
+ "sha256:760c54ad1b8a9b81951030a7e8e7c3ec0964c1cb9fee585a03ff53d9e531bb8e",
+ "sha256:768632fd8172ae03852e3245f11c8a425d95f65ff444ce46b3e673ae5b057b74",
+ "sha256:7a0b9f6a1a15d494b35f25ed07abda03209fa76c33564c09c9e81d34f4b919d7",
+ "sha256:7e070d3aef50ac3856f2ef5ec7214798453da878bb5e5a16c16a61edf1817cc3",
+ "sha256:7e12949e5071c20ec49ef00c75121ed2b076972132fc1913ddf5f76cae8d10b4",
+ "sha256:7e26eac9e52e8ce86f915fd33380f1b6896a2b51994e40bb094841e5003429b4",
+ "sha256:85ffd6b1cb0dfb037ede50ff3bef80d9bf7fa60515d192403af6745524524f3b",
+ "sha256:8618d9213a863c468a865e9d2ec50221015f7abf52221bc927152ef26c484b4c",
+ "sha256:8acef4d8a4353f6678fd1035422a937c2170de58a2b29f7da045d5249e934101",
+ "sha256:8d2f355a951f60f0843f2368b39970e4667517e54e86b1508e76f92b44811a8a",
+ "sha256:90b6840b6448203228a9d8464a7a0d99aa8fa9f027ef95fe230579abaf8a6ee1",
+ "sha256:9187500d83fd0cef4669385cbb0961e227a41c0c9bc39219044e35810793edf7",
+ "sha256:93c20777a72cae8620203ac11c4010365706062aa13aaedd1a21bb07adbb9d5d",
+ "sha256:93cce7d422a0093cfb3606beae38a8e47a25232eea0f292c878af580a9dc7605",
+ "sha256:94c623c331a48a5ccc7d25271399aff29729fa202c737ae3b4b28b89d2b0976d",
+ "sha256:97f32dc03a8054a4c4a5ab5d761ed4861e828b2c200febd4e46857069a483916",
+ "sha256:9a2bf98ac92f58777c0fafc772bf0493e67fcf677302e0c0a630ee517a43b949",
+ "sha256:a602bdc8607c99eb5b391592d58c92618dcd1537fdd87df1813f03fed49957a6",
+ "sha256:a9d24b03daf7415f78abc2d25a208f234e2c585e5e6f92f0204d2ab7b9ab48e3",
+ "sha256:abfcb0ef78df0ee9df4ea81f03beea41849340ce33a4c4bd4dbb99e23ec781b6",
+ "sha256:b013f759cd69cb0a62de954d6d2096d648bc210034b79b1881406b07ed0a83f9",
+ "sha256:b02e3e72665cd02afafb933453b0c9f6c59ff6e3708bd28d0d8580450e7e88af",
+ "sha256:b52cc45e71657bc4743a5606d9023459de929b2a198d545868e11898ba1c3f59",
+ "sha256:ba37f11e1d020969e8a779c06b4af866ffb6b854d7229db63c5fdddfceaa917f",
+ "sha256:bb804c7d0bfbd7e3f33924ff49757de9106c44e27979e2492819c16972ec0da2",
+ "sha256:bf594cc7cc9d528338d66674c10a5b25e3cde7dd75c3e96784df8f371d77a298",
+ "sha256:c38baee6bdb7fe1b110b6b3aaa555e6e872d322206b7245aa39572d3fc991ee4",
+ "sha256:c73d2166e4b210b73d1429c4f1ca97cea9cc090e5302df2a7a0a96ce55373f1c",
+ "sha256:c9099bf89078675c372339011ccfc9ec310310bf6c292b413c013eb90ffdcafc",
+ "sha256:cf0db26a1f76aa6b3aa314a74b8facd586b7a5457d05b64f8082a62c9c49582a",
+ "sha256:d19a34f8a3429bd536996ad53597b805c10352a8561d8382e05830df389d2b43",
+ "sha256:da80047524eac2acf7c04c18ac7a7da05a9136241f642dd2ed94269ef0d0a45a",
+ "sha256:de2923886b5d3214be951bc2ce3f6b8ac0d6dfd4a0d0e2a4d2e5523d8046fdfb",
+ "sha256:defa0652696ff0ba48c8aff5a1fac1eef1ca6ac9c660b047fc8e7623c4eb5093",
+ "sha256:e54a1eb9fd38f2779e973d2f8958fd575b532fe26013405d1afb9ee2374e7ab8",
+ "sha256:e5c31d70a478b0ca22a9d2d76d520ae996214019d39ed7dd93af872c7f301e52",
+ "sha256:ebaeb93f90c0903233b11ce913a7cb8f6ee069158406e056f884854c737d2442",
+ "sha256:ecfe51abf7f045e0b9cdde71ca9e153d11238679ef7b5da6c82093874adf3338",
+ "sha256:f99112aed4fb7cee00c7f77e8b964a9b10f69488cdff626ffd797d02e2e4484f",
+ "sha256:fd914db437ec25bfa410f8aa0aa2f3ba87cdfc04d9919d608d02330947afaeab"
],
- "version": "==2021.11.10"
+ "version": "==2022.1.18"
},
"requests": {
"hashes": [
- "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24",
- "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"
+ "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61",
+ "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
],
"index": "pypi",
- "version": "==2.26.0"
+ "version": "==2.27.1"
},
"requests-mock": {
"hashes": [
@@ -1418,59 +1277,65 @@
},
"tomli": {
"hashes": [
- "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee",
- "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade"
+ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
+ "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
- "version": "==1.2.2"
+ "markers": "python_version >= '3.7'",
+ "version": "==2.0.1"
},
"typed-ast": {
"hashes": [
- "sha256:14fed8820114a389a2b7e91624db5f85f3f6682fda09fe0268a59aabd28fe5f5",
- "sha256:155b74b078be842d2eb630dd30a280025eca0a5383c7d45853c27afee65f278f",
- "sha256:224afecb8b39739f5c9562794a7c98325cb9d972712e1a98b6989a4720219541",
- "sha256:361b9e5d27bd8e3ccb6ea6ad6c4f3c0be322a1a0f8177db6d56264fa0ae40410",
- "sha256:37ba2ab65a0028b1a4f2b61a8fe77f12d242731977d274a03d68ebb751271508",
- "sha256:49af5b8f6f03ed1eb89ee06c1d7c2e7c8e743d720c3746a5857609a1abc94c94",
- "sha256:51040bf45aacefa44fa67fb9ebcd1f2bec73182b99a532c2394eea7dabd18e24",
- "sha256:52ca2b2b524d770bed7a393371a38e91943f9160a190141e0df911586066ecda",
- "sha256:618912cbc7e17b4aeba86ffe071698c6e2d292acbd6d1d5ec1ee724b8c4ae450",
- "sha256:65c81abbabda7d760df7304d843cc9dbe7ef5d485504ca59a46ae2d1731d2428",
- "sha256:7b310a207ee9fde3f46ba327989e6cba4195bc0c8c70a158456e7b10233e6bed",
- "sha256:7e6731044f748340ef68dcadb5172a4b1f40847a2983fe3983b2a66445fbc8e6",
- "sha256:806e0c7346b9b4af8c62d9a29053f484599921a4448c37fbbcbbf15c25138570",
- "sha256:a67fd5914603e2165e075f1b12f5a8356bfb9557e8bfb74511108cfbab0f51ed",
- "sha256:e4374a76e61399a173137e7984a1d7e356038cf844f24fd8aea46c8029a2f712",
- "sha256:e8a9b9c87801cecaad3b4c2b8876387115d1a14caa602c1618cedbb0cb2a14e6",
- "sha256:ea517c2bb11c5e4ba7a83a91482a2837041181d57d3ed0749a6c382a2b6b7086",
- "sha256:ec184dfb5d3d11e82841dbb973e7092b75f306b625fad7b2e665b64c5d60ab3f",
- "sha256:ff4ad88271aa7a55f19b6a161ed44e088c393846d954729549e3cde8257747bb"
+ "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e",
+ "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344",
+ "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266",
+ "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a",
+ "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd",
+ "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d",
+ "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837",
+ "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098",
+ "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e",
+ "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27",
+ "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b",
+ "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596",
+ "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76",
+ "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30",
+ "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4",
+ "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78",
+ "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca",
+ "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985",
+ "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb",
+ "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88",
+ "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7",
+ "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5",
+ "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e",
+ "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"
],
"markers": "python_version >= '3.6'",
- "version": "==1.5.0"
+ "version": "==1.5.2"
},
"typing-extensions": {
"hashes": [
- "sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed",
- "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"
+ "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e",
+ "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"
],
"markers": "python_version < '3.8'",
- "version": "==4.0.0"
+ "version": "==4.0.1"
},
"urllib3": {
"hashes": [
- "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece",
- "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"
+ "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed",
+ "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
- "version": "==1.26.7"
+ "version": "==1.26.8"
},
"virtualenv": {
"hashes": [
- "sha256:4b02e52a624336eece99c96e3ab7111f469c24ba226a53ec474e8e787b365814",
- "sha256:576d05b46eace16a9c348085f7d0dc8ef28713a2cabaa1cf0aea41e8f12c9218"
+ "sha256:45e1d053cad4cd453181ae877c4ffc053546ae99e7dd049b9ff1d9be7491abf7",
+ "sha256:e0621bcbf4160e4e1030f05065c8834b4e93f4fcc223255db2a823440aca9c14"
],
"index": "pypi",
- "version": "==20.10.0"
+ "version": "==20.13.1"
},
"vulture": {
"hashes": [
@@ -1482,11 +1347,11 @@
},
"zipp": {
"hashes": [
- "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832",
- "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"
+ "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
+ "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"
],
- "markers": "python_version < '3.10'",
- "version": "==3.6.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==3.7.0"
}
}
}
diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py
index ead2ec327..d7a8227fb 100644
--- a/monkey/monkey_island/cc/app.py
+++ b/monkey/monkey_island/cc/app.py
@@ -46,8 +46,6 @@ from monkey_island.cc.resources.telemetry import Telemetry
from monkey_island.cc.resources.telemetry_feed import TelemetryFeed
from monkey_island.cc.resources.version_update import VersionUpdate
from monkey_island.cc.resources.zero_trust.finding_event import ZeroTrustFindingEvent
-from monkey_island.cc.resources.zero_trust.scoutsuite_auth.aws_keys import AWSKeys
-from monkey_island.cc.resources.zero_trust.scoutsuite_auth.scoutsuite_auth import ScoutSuiteAuth
from monkey_island.cc.resources.zero_trust.zero_trust_report import ZeroTrustReport
from monkey_island.cc.server_utils.consts import MONKEY_ISLAND_ABS_PATH
from monkey_island.cc.server_utils.custom_json_encoder import CustomJSONEncoder
@@ -168,8 +166,6 @@ def init_api_resources(api):
api.add_resource(VersionUpdate, "/api/version-update")
api.add_resource(StopAgentCheck, "/api/monkey_control/needs-to-stop/")
api.add_resource(StopAllAgents, "/api/monkey_control/stop-all-agents")
- api.add_resource(ScoutSuiteAuth, "/api/scoutsuite_auth/")
- api.add_resource(AWSKeys, "/api/aws_keys")
# Resources used by black box tests
api.add_resource(MonkeyBlackboxEndpoint, "/api/test/monkey")
diff --git a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_data_json.py b/monkey/monkey_island/cc/models/zero_trust/scoutsuite_data_json.py
deleted file mode 100644
index 166c247bf..000000000
--- a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_data_json.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from mongoengine import Document, DynamicField
-
-
-class ScoutSuiteRawDataJson(Document):
- """
- This model is a container for ScoutSuite report data dump.
- """
-
- # SCHEMA
- scoutsuite_data = DynamicField(required=True)
-
- # LOGIC
- @staticmethod
- def add_scoutsuite_data(scoutsuite_data: str) -> None:
- try:
- current_data = ScoutSuiteRawDataJson.objects()[0]
- except IndexError:
- current_data = ScoutSuiteRawDataJson()
- current_data.scoutsuite_data = scoutsuite_data
- current_data.save()
diff --git a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding.py b/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding.py
deleted file mode 100644
index 174a68db7..000000000
--- a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from mongoengine import LazyReferenceField
-
-from monkey_island.cc.models.zero_trust.finding import Finding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding_details import ScoutSuiteFindingDetails
-
-
-class ScoutSuiteFinding(Finding):
- # We put additional info into a lazy reference field, because this info should be only
- # pulled when explicitly needed due to performance
- details = LazyReferenceField(ScoutSuiteFindingDetails, required=True)
-
- @staticmethod
- def save_finding(
- test: str, status: str, detail_ref: ScoutSuiteFindingDetails
- ) -> ScoutSuiteFinding:
- finding = ScoutSuiteFinding(test=test, status=status, details=detail_ref)
- finding.save()
- return finding
diff --git a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding_details.py b/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding_details.py
deleted file mode 100644
index 9f2b24d9d..000000000
--- a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_finding_details.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from mongoengine import Document, EmbeddedDocumentListField
-
-from monkey_island.cc.models.zero_trust.scoutsuite_rule import ScoutSuiteRule
-
-
-class ScoutSuiteFindingDetails(Document):
- # SCHEMA
- scoutsuite_rules = EmbeddedDocumentListField(document_type=ScoutSuiteRule, required=False)
-
- def add_rule(self, rule: ScoutSuiteRule) -> None:
- if rule not in self.scoutsuite_rules:
- self.scoutsuite_rules.append(rule)
- self.save()
diff --git a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py b/monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py
deleted file mode 100644
index fcf09df9c..000000000
--- a/monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from mongoengine import DynamicField, EmbeddedDocument, IntField, ListField, StringField
-
-from monkey_island.cc.services.zero_trust.scoutsuite.consts import rule_consts
-
-
-class ScoutSuiteRule(EmbeddedDocument):
- """
- This model represents ScoutSuite security rule check results:
- how many resources break the security rule
- security rule description and remediation and etc.
- """
-
- # SCHEMA
- description = StringField(required=True)
- path = StringField(required=True)
- level = StringField(required=True, options=rule_consts.RULE_LEVELS)
- items = ListField()
- dashboard_name = StringField(required=True)
- checked_items = IntField(min_value=0)
- flagged_items = IntField(min_value=0)
- service = StringField(required=True)
- rationale = StringField(required=True)
- remediation = StringField(required=False)
- compliance = DynamicField(required=False)
- references = ListField(required=False)
diff --git a/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/aws_keys.py b/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/aws_keys.py
deleted file mode 100644
index 174e02843..000000000
--- a/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/aws_keys.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import flask_restful
-
-from monkey_island.cc.resources.auth.auth import jwt_required
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_auth_service import get_aws_keys
-
-
-class AWSKeys(flask_restful.Resource):
- @jwt_required
- def get(self):
- return get_aws_keys()
diff --git a/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/scoutsuite_auth.py b/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/scoutsuite_auth.py
deleted file mode 100644
index 5197b1972..000000000
--- a/monkey/monkey_island/cc/resources/zero_trust/scoutsuite_auth/scoutsuite_auth.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import json
-
-import flask_restful
-from flask import request
-
-from common.cloud.scoutsuite_consts import CloudProviders
-from common.utils.exceptions import InvalidAWSKeys
-from monkey_island.cc.resources.auth.auth import jwt_required
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_auth_service import (
- is_cloud_authentication_setup,
- set_aws_keys,
-)
-
-
-class ScoutSuiteAuth(flask_restful.Resource):
- @jwt_required
- def get(self, provider: CloudProviders):
- if provider == CloudProviders.AWS.value:
- is_setup, message = is_cloud_authentication_setup(provider)
- return {"is_setup": is_setup, "message": message}
- else:
- return {"is_setup": False, "message": ""}
-
- @jwt_required
- def post(self, provider: CloudProviders):
- key_info = json.loads(request.data)
- error_msg = ""
- if provider == CloudProviders.AWS.value:
- try:
- set_aws_keys(
- access_key_id=key_info["accessKeyId"],
- secret_access_key=key_info["secretAccessKey"],
- session_token=key_info["sessionToken"],
- )
- except InvalidAWSKeys as e:
- error_msg = str(e)
- return {"error_msg": error_msg}
diff --git a/monkey/monkey_island/cc/resources/zero_trust/zero_trust_report.py b/monkey/monkey_island/cc/resources/zero_trust/zero_trust_report.py
index 8b3ce9419..491b109dc 100644
--- a/monkey/monkey_island/cc/resources/zero_trust/zero_trust_report.py
+++ b/monkey/monkey_island/cc/resources/zero_trust/zero_trust_report.py
@@ -1,7 +1,7 @@
import http.client
import flask_restful
-from flask import Response, jsonify
+from flask import jsonify
from monkey_island.cc.resources.auth.auth import jwt_required
from monkey_island.cc.services.zero_trust.zero_trust_report.finding_service import FindingService
@@ -9,14 +9,10 @@ from monkey_island.cc.services.zero_trust.zero_trust_report.pillar_service impor
from monkey_island.cc.services.zero_trust.zero_trust_report.principle_service import (
PrincipleService,
)
-from monkey_island.cc.services.zero_trust.zero_trust_report.scoutsuite_raw_data_service import (
- ScoutSuiteRawDataService,
-)
REPORT_DATA_PILLARS = "pillars"
REPORT_DATA_FINDINGS = "findings"
REPORT_DATA_PRINCIPLES_STATUS = "principles"
-REPORT_DATA_SCOUTSUITE = "scoutsuite"
class ZeroTrustReport(flask_restful.Resource):
@@ -28,10 +24,5 @@ class ZeroTrustReport(flask_restful.Resource):
return jsonify(PrincipleService.get_principles_status())
elif report_data == REPORT_DATA_FINDINGS:
return jsonify(FindingService.get_all_findings_for_ui())
- elif report_data == REPORT_DATA_SCOUTSUITE:
- # Raw ScoutSuite data is already solved as json, no need to jsonify
- return Response(
- ScoutSuiteRawDataService.get_scoutsuite_data_json(), mimetype="application/json"
- )
flask_restful.abort(http.client.NOT_FOUND)
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/processing.py b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
index 667928d3c..4b38c237c 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/processing.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
@@ -4,7 +4,6 @@ from common.common_consts.telem_categories import TelemCategoryEnum
from monkey_island.cc.services.telemetry.processing.exploit import process_exploit_telemetry
from monkey_island.cc.services.telemetry.processing.post_breach import process_post_breach_telemetry
from monkey_island.cc.services.telemetry.processing.scan import process_scan_telemetry
-from monkey_island.cc.services.telemetry.processing.scoutsuite import process_scoutsuite_telemetry
from monkey_island.cc.services.telemetry.processing.state import process_state_telemetry
from monkey_island.cc.services.telemetry.processing.system_info import process_system_info_telemetry
from monkey_island.cc.services.telemetry.processing.tunnel import process_tunnel_telemetry
@@ -18,7 +17,6 @@ TELEMETRY_CATEGORY_TO_PROCESSING_FUNC = {
TelemCategoryEnum.SCAN: process_scan_telemetry,
TelemCategoryEnum.SYSTEM_INFO: process_system_info_telemetry,
TelemCategoryEnum.POST_BREACH: process_post_breach_telemetry,
- TelemCategoryEnum.SCOUTSUITE: process_scoutsuite_telemetry,
# `lambda *args, **kwargs: None` is a no-op.
TelemCategoryEnum.TRACE: lambda *args, **kwargs: None,
TelemCategoryEnum.ATTACK: lambda *args, **kwargs: None,
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/scoutsuite.py b/monkey/monkey_island/cc/services/telemetry/processing/scoutsuite.py
deleted file mode 100644
index 5f2677bcb..000000000
--- a/monkey/monkey_island/cc/services/telemetry/processing/scoutsuite.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import json
-
-from monkey_island.cc.database import mongo
-from monkey_island.cc.models.zero_trust.scoutsuite_data_json import ScoutSuiteRawDataJson
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.scoutsuite_findings_list import (
- SCOUTSUITE_FINDINGS,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_parser import RuleParser
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_rule_service import (
- ScoutSuiteRuleService,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_zt_finding_service import (
- ScoutSuiteZTFindingService,
-)
-
-
-def process_scoutsuite_telemetry(telemetry_json):
- # Encode data to json, because mongo can't save it as document (invalid document keys)
- telemetry_json["data"] = json.dumps(telemetry_json["data"])
- ScoutSuiteRawDataJson.add_scoutsuite_data(telemetry_json["data"])
- scoutsuite_data = json.loads(telemetry_json["data"])["data"]
- create_scoutsuite_findings(scoutsuite_data[SERVICES])
- update_data(telemetry_json)
-
-
-def create_scoutsuite_findings(cloud_services: dict):
- for finding in SCOUTSUITE_FINDINGS:
- for rule in finding.rules:
- rule_data = RuleParser.get_rule_data(cloud_services, rule)
- rule = ScoutSuiteRuleService.get_rule_from_rule_data(rule_data)
- ScoutSuiteZTFindingService.process_rule(finding, rule)
-
-
-def update_data(telemetry_json):
- mongo.db.scoutsuite.insert_one(
- {"guid": telemetry_json["monkey_guid"]}, {"results": telemetry_json["data"]}
- )
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_consts.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_consts.py
deleted file mode 100644
index 08d6600a9..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_consts.py
+++ /dev/null
@@ -1,4 +0,0 @@
-RULE_LEVEL_DANGER = "danger"
-RULE_LEVEL_WARNING = "warning"
-
-RULE_LEVELS = (RULE_LEVEL_DANGER, RULE_LEVEL_WARNING)
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudformation_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudformation_rules.py
deleted file mode 100644
index c8dbffb46..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudformation_rules.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class CloudformationRules(RuleNameEnum):
- # Service Security
- CLOUDFORMATION_STACK_WITH_ROLE = "cloudformation-stack-with-role"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudtrail_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudtrail_rules.py
deleted file mode 100644
index 04d1599dd..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudtrail_rules.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class CloudTrailRules(RuleNameEnum):
- # Logging
- CLOUDTRAIL_DUPLICATED_GLOBAL_SERVICES_LOGGING = "cloudtrail-duplicated-global-services-logging"
- CLOUDTRAIL_NO_DATA_LOGGING = "cloudtrail-no-data-logging"
- CLOUDTRAIL_NO_GLOBAL_SERVICES_LOGGING = "cloudtrail-no-global-services-logging"
- CLOUDTRAIL_NO_LOG_FILE_VALIDATION = "cloudtrail-no-log-file-validation"
- CLOUDTRAIL_NO_LOGGING = "cloudtrail-no-logging"
- CLOUDTRAIL_NOT_CONFIGURED = "cloudtrail-not-configured"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudwatch_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudwatch_rules.py
deleted file mode 100644
index 954e6fc11..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/cloudwatch_rules.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class CloudWatchRules(RuleNameEnum):
- # Logging
- CLOUDWATCH_ALARM_WITHOUT_ACTIONS = "cloudwatch-alarm-without-actions"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/config_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/config_rules.py
deleted file mode 100644
index 6487bda99..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/config_rules.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class ConfigRules(RuleNameEnum):
- # Logging
- CONFIG_RECORDER_NOT_CONFIGURED = "config-recorder-not-configured"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ec2_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ec2_rules.py
deleted file mode 100644
index 648fbed61..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ec2_rules.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class EC2Rules(RuleNameEnum):
- # Permissive firewall rules
- SECURITY_GROUP_ALL_PORTS_TO_ALL = "ec2-security-group-opens-all-ports-to-all"
- SECURITY_GROUP_OPENS_TCP_PORT_TO_ALL = "ec2-security-group-opens-TCP-port-to-all"
- SECURITY_GROUP_OPENS_UDP_PORT_TO_ALL = "ec2-security-group-opens-UDP-port-to-all"
- SECURITY_GROUP_OPENS_RDP_PORT_TO_ALL = "ec2-security-group-opens-RDP-port-to-all"
- SECURITY_GROUP_OPENS_SSH_PORT_TO_ALL = "ec2-security-group-opens-SSH-port-to-all"
- SECURITY_GROUP_OPENS_MYSQL_PORT_TO_ALL = "ec2-security-group-opens-MySQL-port-to-all"
- SECURITY_GROUP_OPENS_MSSQL_PORT_TO_ALL = "ec2-security-group-opens-MsSQL-port-to-all"
- SECURITY_GROUP_OPENS_MONGODB_PORT_TO_ALL = "ec2-security-group-opens-MongoDB-port-to-all"
- SECURITY_GROUP_OPENS_ORACLE_DB_PORT_TO_ALL = "ec2-security-group-opens-Oracle DB-port-to-all"
- SECURITY_GROUP_OPENS_POSTGRESQL_PORT_TO_ALL = "ec2-security-group-opens-PostgreSQL-port-to-all"
- SECURITY_GROUP_OPENS_NFS_PORT_TO_ALL = "ec2-security-group-opens-NFS-port-to-all"
- SECURITY_GROUP_OPENS_SMTP_PORT_TO_ALL = "ec2-security-group-opens-SMTP-port-to-all"
- SECURITY_GROUP_OPENS_DNS_PORT_TO_ALL = "ec2-security-group-opens-DNS-port-to-all"
- SECURITY_GROUP_OPENS_ALL_PORTS_TO_SELF = "ec2-security-group-opens-all-ports-to-self"
- SECURITY_GROUP_OPENS_ALL_PORTS = "ec2-security-group-opens-all-ports"
- SECURITY_GROUP_OPENS_PLAINTEXT_PORT_FTP = "ec2-security-group-opens-plaintext-port-FTP"
- SECURITY_GROUP_OPENS_PLAINTEXT_PORT_TELNET = "ec2-security-group-opens-plaintext-port-Telnet"
- SECURITY_GROUP_OPENS_PORT_RANGE = "ec2-security-group-opens-port-range"
- EC2_SECURITY_GROUP_WHITELISTS_AWS = "ec2-security-group-whitelists-aws"
-
- # Encryption
- EBS_SNAPSHOT_NOT_ENCRYPTED = "ec2-ebs-snapshot-not-encrypted"
- EBS_VOLUME_NOT_ENCRYPTED = "ec2-ebs-volume-not-encrypted"
- EC2_INSTANCE_WITH_USER_DATA_SECRETS = "ec2-instance-with-user-data-secrets"
-
- # Permissive policies
- AMI_PUBLIC = "ec2-ami-public"
- EC2_DEFAULT_SECURITY_GROUP_IN_USE = "ec2-default-security-group-in-use"
- EC2_DEFAULT_SECURITY_GROUP_WITH_RULES = "ec2-default-security-group-with-rules"
- EC2_EBS_SNAPSHOT_PUBLIC = "ec2-ebs-snapshot-public"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elb_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elb_rules.py
deleted file mode 100644
index c4fad62ec..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elb_rules.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class ELBRules(RuleNameEnum):
- # Logging
- ELB_NO_ACCESS_LOGS = "elb-no-access-logs"
-
- # Encryption
- ELB_LISTENER_ALLOWING_CLEARTEXT = "elb-listener-allowing-cleartext"
- ELB_OLDER_SSL_POLICY = "elb-older-ssl-policy"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elbv2_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elbv2_rules.py
deleted file mode 100644
index 90590a651..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/elbv2_rules.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class ELBv2Rules(RuleNameEnum):
- # Encryption
- ELBV2_LISTENER_ALLOWING_CLEARTEXT = "elbv2-listener-allowing-cleartext"
- ELBV2_OLDER_SSL_POLICY = "elbv2-older-ssl-policy"
-
- # Logging
- ELBV2_NO_ACCESS_LOGS = "elbv2-no-access-logs"
-
- # Data loss prevention
- ELBV2_NO_DELETION_PROTECTION = "elbv2-no-deletion-protection"
-
- # Service security
- ELBV2_HTTP_REQUEST_SMUGGLING = "elbv2-http-request-smuggling"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/iam_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/iam_rules.py
deleted file mode 100644
index 8589446bb..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/iam_rules.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class IAMRules(RuleNameEnum):
- # Authentication/authorization
- IAM_USER_NO_ACTIVE_KEY_ROTATION = "iam-user-no-Active-key-rotation"
- IAM_PASSWORD_POLICY_MINIMUM_LENGTH = "iam-password-policy-minimum-length"
- IAM_PASSWORD_POLICY_NO_EXPIRATION = "iam-password-policy-no-expiration"
- IAM_PASSWORD_POLICY_REUSE_ENABLED = "iam-password-policy-reuse-enabled"
- IAM_USER_WITH_PASSWORD_AND_KEY = "iam-user-with-password-and-key"
- IAM_ASSUME_ROLE_LACKS_EXTERNAL_ID_AND_MFA = "iam-assume-role-lacks-external-id-and-mfa"
- IAM_USER_WITHOUT_MFA = "iam-user-without-mfa"
- IAM_ROOT_ACCOUNT_NO_MFA = "iam-root-account-no-mfa"
- IAM_ROOT_ACCOUNT_WITH_ACTIVE_KEYS = "iam-root-account-with-active-keys"
- IAM_USER_NO_INACTIVE_KEY_ROTATION = "iam-user-no-Inactive-key-rotation"
- IAM_USER_WITH_MULTIPLE_ACCESS_KEYS = "iam-user-with-multiple-access-keys"
-
- # Least privilege
- IAM_ASSUME_ROLE_POLICY_ALLOWS_ALL = "iam-assume-role-policy-allows-all"
- IAM_EC2_ROLE_WITHOUT_INSTANCES = "iam-ec2-role-without-instances"
- IAM_GROUP_WITH_INLINE_POLICIES = "iam-group-with-inline-policies"
- IAM_GROUP_WITH_NO_USERS = "iam-group-with-no-users"
- IAM_INLINE_GROUP_POLICY_ALLOWS_IAM_PASSROLE = "iam-inline-group-policy-allows-iam-PassRole"
- IAM_INLINE_GROUP_POLICY_ALLOWS_NOTACTIONS = "iam-inline-group-policy-allows-NotActions"
- IAM_INLINE_GROUP_POLICY_ALLOWS_STS_ASSUMEROLE = "iam-inline-group-policy-allows-sts-AssumeRole"
- IAM_INLINE_ROLE_POLICY_ALLOWS_IAM_PASSROLE = "iam-inline-role-policy-allows-iam-PassRole"
- IAM_INLINE_ROLE_POLICY_ALLOWS_NOTACTIONS = "iam-inline-role-policy-allows-NotActions"
- IAM_INLINE_ROLE_POLICY_ALLOWS_STS_ASSUMEROLE = "iam-inline-role-policy-allows-sts-AssumeRole"
- IAM_INLINE_USER_POLICY_ALLOWS_IAM_PASSROLE = "iam-inline-user-policy-allows-iam-PassRole"
- IAM_INLINE_USER_POLICY_ALLOWS_NOTACTIONS = "iam-inline-user-policy-allows-NotActions"
- IAM_INLINE_USER_POLICY_ALLOWS_STS_ASSUMEROLE = "iam-inline-user-policy-allows-sts-AssumeRole"
- IAM_MANAGED_POLICY_ALLOWS_IAM_PASSROLE = "iam-managed-policy-allows-iam-PassRole"
- IAM_MANAGED_POLICY_ALLOWS_NOTACTIONS = "iam-managed-policy-allows-NotActions"
- IAM_MANAGED_POLICY_ALLOWS_STS_ASSUMEROLE = "iam-managed-policy-allows-sts-AssumeRole"
- IAM_MANAGED_POLICY_NO_ATTACHMENTS = "iam-managed-policy-no-attachments"
- IAM_ROLE_WITH_INLINE_POLICIES = "iam-role-with-inline-policies"
- IAM_ROOT_ACCOUNT_USED_RECENTLY = "iam-root-account-used-recently"
- IAM_ROOT_ACCOUNT_WITH_ACTIVE_CERTS = "iam-root-account-with-active-certs"
- IAM_USER_WITH_INLINE_POLICIES = "iam-user-with-inline-policies"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rds_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rds_rules.py
deleted file mode 100644
index db8e2602b..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rds_rules.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class RDSRules(RuleNameEnum):
- # Encryption
- RDS_INSTANCE_STORAGE_NOT_ENCRYPTED = "rds-instance-storage-not-encrypted"
-
- # Data loss prevention
- RDS_INSTANCE_BACKUP_DISABLED = "rds-instance-backup-disabled"
- RDS_INSTANCE_SHORT_BACKUP_RETENTION_PERIOD = "rds-instance-short-backup-retention-period"
- RDS_INSTANCE_SINGLE_AZ = "rds-instance-single-az"
-
- # Firewalls
- RDS_SECURITY_GROUP_ALLOWS_ALL = "rds-security-group-allows-all"
- RDS_SNAPSHOT_PUBLIC = "rds-snapshot-public"
-
- # Service security
- RDS_INSTANCE_CA_CERTIFICATE_DEPRECATED = "rds-instance-ca-certificate-deprecated"
- RDS_INSTANCE_NO_MINOR_UPGRADE = "rds-instance-no-minor-upgrade"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/redshift_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/redshift_rules.py
deleted file mode 100644
index 20fa6337d..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/redshift_rules.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class RedshiftRules(RuleNameEnum):
- # Encryption
- REDSHIFT_CLUSTER_DATABASE_NOT_ENCRYPTED = "redshift-cluster-database-not-encrypted"
- REDSHIFT_PARAMETER_GROUP_SSL_NOT_REQUIRED = "redshift-parameter-group-ssl-not-required"
-
- # Firewalls
- REDSHIFT_SECURITY_GROUP_WHITELISTS_ALL = "redshift-security-group-whitelists-all"
-
- # Restrictive Policies
- REDSHIFT_CLUSTER_PUBLICLY_ACCESSIBLE = "redshift-cluster-publicly-accessible"
-
- # Logging
- REDSHIFT_PARAMETER_GROUP_LOGGING_DISABLED = "redshift-parameter-group-logging-disabled"
-
- # Service security
- REDSHIFT_CLUSTER_NO_VERSION_UPGRADE = "redshift-cluster-no-version-upgrade"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rule_name_enum.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rule_name_enum.py
deleted file mode 100644
index 5ad382c3d..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rule_name_enum.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from enum import Enum
-
-
-class RuleNameEnum(Enum):
- pass
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/s3_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/s3_rules.py
deleted file mode 100644
index a57d95f7c..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/s3_rules.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class S3Rules(RuleNameEnum):
- # Encryption
- S3_BUCKET_ALLOWING_CLEARTEXT = "s3-bucket-allowing-cleartext"
- S3_BUCKET_NO_DEFAULT_ENCRYPTION = "s3-bucket-no-default-encryption"
-
- # Data loss prevention
- S3_BUCKET_NO_MFA_DELETE = "s3-bucket-no-mfa-delete"
- S3_BUCKET_NO_VERSIONING = "s3-bucket-no-versioning"
-
- # Logging
- S3_BUCKET_NO_LOGGING = "s3-bucket-no-logging"
-
- # Permissive access rules
- S3_BUCKET_AUTHENTICATEDUSERS_WRITE_ACP = "s3-bucket-AuthenticatedUsers-write_acp"
- S3_BUCKET_AUTHENTICATEDUSERS_WRITE = "s3-bucket-AuthenticatedUsers-write"
- S3_BUCKET_AUTHENTICATEDUSERS_READ_ACP = "s3-bucket-AuthenticatedUsers-read_acp"
- S3_BUCKET_AUTHENTICATEDUSERS_READ = "s3-bucket-AuthenticatedUsers-read"
- S3_BUCKET_ALLUSERS_WRITE_ACP = "s3-bucket-AllUsers-write_acp"
- S3_BUCKET_ALLUSERS_WRITE = "s3-bucket-AllUsers-write"
- S3_BUCKET_ALLUSERS_READ_ACP = "s3-bucket-AllUsers-read_acp"
- S3_BUCKET_ALLUSERS_READ = "s3-bucket-AllUsers-read"
- S3_BUCKET_WORLD_PUT_POLICY = "s3-bucket-world-Put-policy"
- S3_BUCKET_WORLD_POLICY_STAR = "s3-bucket-world-policy-star"
- S3_BUCKET_WORLD_LIST_POLICY = "s3-bucket-world-List-policy"
- S3_BUCKET_WORLD_GET_POLICY = "s3-bucket-world-Get-policy"
- S3_BUCKET_WORLD_DELETE_POLICY = "s3-bucket-world-Delete-policy"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ses_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ses_rules.py
deleted file mode 100644
index a73e00478..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/ses_rules.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class SESRules(RuleNameEnum):
- # Permissive policies
- SES_IDENTITY_WORLD_SENDRAWEMAIL_POLICY = "ses-identity-world-SendRawEmail-policy"
- SES_IDENTITY_WORLD_SENDEMAIL_POLICY = "ses-identity-world-SendEmail-policy"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sns_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sns_rules.py
deleted file mode 100644
index 09d410239..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sns_rules.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class SNSRules(RuleNameEnum):
- # Permissive policies
- SNS_TOPIC_WORLD_SUBSCRIBE_POLICY = "sns-topic-world-Subscribe-policy"
- SNS_TOPIC_WORLD_SETTOPICATTRIBUTES_POLICY = "sns-topic-world-SetTopicAttributes-policy"
- SNS_TOPIC_WORLD_REMOVEPERMISSION_POLICY = "sns-topic-world-RemovePermission-policy"
- SNS_TOPIC_WORLD_RECEIVE_POLICY = "sns-topic-world-Receive-policy"
- SNS_TOPIC_WORLD_PUBLISH_POLICY = "sns-topic-world-Publish-policy"
- SNS_TOPIC_WORLD_DELETETOPIC_POLICY = "sns-topic-world-DeleteTopic-policy"
- SNS_TOPIC_WORLD_ADDPERMISSION_POLICY = "sns-topic-world-AddPermission-policy"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sqs_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sqs_rules.py
deleted file mode 100644
index 44e666f96..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/sqs_rules.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class SQSRules(RuleNameEnum):
- # Permissive policies
- SQS_QUEUE_WORLD_SENDMESSAGE_POLICY = "sqs-queue-world-SendMessage-policy"
- SQS_QUEUE_WORLD_RECEIVEMESSAGE_POLICY = "sqs-queue-world-ReceiveMessage-policy"
- SQS_QUEUE_WORLD_PURGEQUEUE_POLICY = "sqs-queue-world-PurgeQueue-policy"
- SQS_QUEUE_WORLD_GETQUEUEURL_POLICY = "sqs-queue-world-GetQueueUrl-policy"
- SQS_QUEUE_WORLD_GETQUEUEATTRIBUTES_POLICY = "sqs-queue-world-GetQueueAttributes-policy"
- SQS_QUEUE_WORLD_DELETEMESSAGE_POLICY = "sqs-queue-world-DeleteMessage-policy"
- SQS_QUEUE_WORLD_CHANGEMESSAGEVISIBILITY_POLICY = (
- "sqs-queue-world-ChangeMessageVisibility-policy"
- )
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/vpc_rules.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/vpc_rules.py
deleted file mode 100644
index f4ecba532..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/vpc_rules.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-
-
-class VPCRules(RuleNameEnum):
- # Logging
- SUBNET_WITHOUT_FLOW_LOG = "vpc-subnet-without-flow-log"
-
- # Firewalls
- SUBNET_WITH_ALLOW_ALL_INGRESS_ACLS = "vpc-subnet-with-allow-all-ingress-acls"
- SUBNET_WITH_ALLOW_ALL_EGRESS_ACLS = "vpc-subnet-with-allow-all-egress-acls"
- NETWORK_ACL_NOT_USED = "vpc-network-acl-not-used"
- DEFAULT_NETWORK_ACLS_ALLOW_ALL_INGRESS = "vpc-default-network-acls-allow-all-ingress"
- DEFAULT_NETWORK_ACLS_ALLOW_ALL_EGRESS = "vpc-default-network-acls-allow-all-egress"
- CUSTOM_NETWORK_ACLS_ALLOW_ALL_INGRESS = "vpc-custom-network-acls-allow-all-ingress"
- CUSTOM_NETWORK_ACLS_ALLOW_ALL_EGRESS = "vpc-custom-network-acls-allow-all-egress"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_finding_maps.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_finding_maps.py
deleted file mode 100644
index ddab1cfd6..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_finding_maps.py
+++ /dev/null
@@ -1,224 +0,0 @@
-from abc import ABC, abstractmethod
-from typing import List
-
-from common.common_consts import zero_trust_consts
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudformation_rules import (
- CloudformationRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudtrail_rules import (
- CloudTrailRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudwatch_rules import (
- CloudWatchRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.config_rules import (
- ConfigRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.ec2_rules import EC2Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.elb_rules import ELBRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.elbv2_rules import ELBv2Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.iam_rules import IAMRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rds_rules import RDSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.redshift_rules import (
- RedshiftRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.s3_rules import S3Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.ses_rules import SESRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.sns_rules import SNSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.sqs_rules import SQSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.vpc_rules import VPCRules
-
-
-# Class which links ZT tests and rules to ScoutSuite finding
-class ScoutSuiteFindingMap(ABC):
- @property
- @abstractmethod
- def rules(self) -> List[RuleNameEnum]:
- pass
-
- @property
- @abstractmethod
- def test(self) -> str:
- pass
-
-
-class PermissiveFirewallRules(ScoutSuiteFindingMap):
- rules = [
- EC2Rules.SECURITY_GROUP_ALL_PORTS_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_TCP_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_UDP_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_RDP_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_SSH_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_MYSQL_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_MSSQL_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_MONGODB_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_ORACLE_DB_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_POSTGRESQL_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_NFS_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_SMTP_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_DNS_PORT_TO_ALL,
- EC2Rules.SECURITY_GROUP_OPENS_ALL_PORTS_TO_SELF,
- EC2Rules.SECURITY_GROUP_OPENS_ALL_PORTS,
- EC2Rules.SECURITY_GROUP_OPENS_PLAINTEXT_PORT_FTP,
- EC2Rules.SECURITY_GROUP_OPENS_PLAINTEXT_PORT_TELNET,
- EC2Rules.SECURITY_GROUP_OPENS_PORT_RANGE,
- EC2Rules.EC2_SECURITY_GROUP_WHITELISTS_AWS,
- VPCRules.SUBNET_WITH_ALLOW_ALL_INGRESS_ACLS,
- VPCRules.SUBNET_WITH_ALLOW_ALL_EGRESS_ACLS,
- VPCRules.NETWORK_ACL_NOT_USED,
- VPCRules.DEFAULT_NETWORK_ACLS_ALLOW_ALL_INGRESS,
- VPCRules.DEFAULT_NETWORK_ACLS_ALLOW_ALL_EGRESS,
- VPCRules.CUSTOM_NETWORK_ACLS_ALLOW_ALL_INGRESS,
- VPCRules.CUSTOM_NETWORK_ACLS_ALLOW_ALL_EGRESS,
- RDSRules.RDS_SECURITY_GROUP_ALLOWS_ALL,
- RedshiftRules.REDSHIFT_SECURITY_GROUP_WHITELISTS_ALL,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_PERMISSIVE_FIREWALL_RULES
-
-
-class UnencryptedData(ScoutSuiteFindingMap):
- rules = [
- EC2Rules.EBS_SNAPSHOT_NOT_ENCRYPTED,
- EC2Rules.EBS_VOLUME_NOT_ENCRYPTED,
- EC2Rules.EC2_INSTANCE_WITH_USER_DATA_SECRETS,
- ELBv2Rules.ELBV2_LISTENER_ALLOWING_CLEARTEXT,
- ELBv2Rules.ELBV2_OLDER_SSL_POLICY,
- RDSRules.RDS_INSTANCE_STORAGE_NOT_ENCRYPTED,
- RedshiftRules.REDSHIFT_CLUSTER_DATABASE_NOT_ENCRYPTED,
- RedshiftRules.REDSHIFT_PARAMETER_GROUP_SSL_NOT_REQUIRED,
- S3Rules.S3_BUCKET_ALLOWING_CLEARTEXT,
- S3Rules.S3_BUCKET_NO_DEFAULT_ENCRYPTION,
- ELBRules.ELB_LISTENER_ALLOWING_CLEARTEXT,
- ELBRules.ELB_OLDER_SSL_POLICY,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_UNENCRYPTED_DATA
-
-
-class DataLossPrevention(ScoutSuiteFindingMap):
- rules = [
- RDSRules.RDS_INSTANCE_BACKUP_DISABLED,
- RDSRules.RDS_INSTANCE_SHORT_BACKUP_RETENTION_PERIOD,
- RDSRules.RDS_INSTANCE_SINGLE_AZ,
- S3Rules.S3_BUCKET_NO_MFA_DELETE,
- S3Rules.S3_BUCKET_NO_VERSIONING,
- ELBv2Rules.ELBV2_NO_DELETION_PROTECTION,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_DATA_LOSS_PREVENTION
-
-
-class SecureAuthentication(ScoutSuiteFindingMap):
- rules = [
- IAMRules.IAM_USER_NO_ACTIVE_KEY_ROTATION,
- IAMRules.IAM_PASSWORD_POLICY_MINIMUM_LENGTH,
- IAMRules.IAM_PASSWORD_POLICY_NO_EXPIRATION,
- IAMRules.IAM_PASSWORD_POLICY_REUSE_ENABLED,
- IAMRules.IAM_USER_WITH_PASSWORD_AND_KEY,
- IAMRules.IAM_ASSUME_ROLE_LACKS_EXTERNAL_ID_AND_MFA,
- IAMRules.IAM_USER_WITHOUT_MFA,
- IAMRules.IAM_ROOT_ACCOUNT_NO_MFA,
- IAMRules.IAM_ROOT_ACCOUNT_WITH_ACTIVE_KEYS,
- IAMRules.IAM_USER_NO_INACTIVE_KEY_ROTATION,
- IAMRules.IAM_USER_WITH_MULTIPLE_ACCESS_KEYS,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_SECURE_AUTHENTICATION
-
-
-class RestrictivePolicies(ScoutSuiteFindingMap):
- rules = [
- IAMRules.IAM_ASSUME_ROLE_POLICY_ALLOWS_ALL,
- IAMRules.IAM_EC2_ROLE_WITHOUT_INSTANCES,
- IAMRules.IAM_GROUP_WITH_INLINE_POLICIES,
- IAMRules.IAM_GROUP_WITH_NO_USERS,
- IAMRules.IAM_INLINE_GROUP_POLICY_ALLOWS_IAM_PASSROLE,
- IAMRules.IAM_INLINE_GROUP_POLICY_ALLOWS_NOTACTIONS,
- IAMRules.IAM_INLINE_GROUP_POLICY_ALLOWS_STS_ASSUMEROLE,
- IAMRules.IAM_INLINE_ROLE_POLICY_ALLOWS_IAM_PASSROLE,
- IAMRules.IAM_INLINE_ROLE_POLICY_ALLOWS_NOTACTIONS,
- IAMRules.IAM_INLINE_ROLE_POLICY_ALLOWS_STS_ASSUMEROLE,
- IAMRules.IAM_INLINE_USER_POLICY_ALLOWS_IAM_PASSROLE,
- IAMRules.IAM_INLINE_USER_POLICY_ALLOWS_NOTACTIONS,
- IAMRules.IAM_INLINE_USER_POLICY_ALLOWS_STS_ASSUMEROLE,
- IAMRules.IAM_MANAGED_POLICY_ALLOWS_IAM_PASSROLE,
- IAMRules.IAM_MANAGED_POLICY_ALLOWS_NOTACTIONS,
- IAMRules.IAM_MANAGED_POLICY_ALLOWS_STS_ASSUMEROLE,
- IAMRules.IAM_MANAGED_POLICY_NO_ATTACHMENTS,
- IAMRules.IAM_ROLE_WITH_INLINE_POLICIES,
- IAMRules.IAM_ROOT_ACCOUNT_USED_RECENTLY,
- IAMRules.IAM_ROOT_ACCOUNT_WITH_ACTIVE_CERTS,
- IAMRules.IAM_USER_WITH_INLINE_POLICIES,
- EC2Rules.AMI_PUBLIC,
- S3Rules.S3_BUCKET_AUTHENTICATEDUSERS_WRITE_ACP,
- S3Rules.S3_BUCKET_AUTHENTICATEDUSERS_WRITE,
- S3Rules.S3_BUCKET_AUTHENTICATEDUSERS_READ_ACP,
- S3Rules.S3_BUCKET_AUTHENTICATEDUSERS_READ,
- S3Rules.S3_BUCKET_ALLUSERS_WRITE_ACP,
- S3Rules.S3_BUCKET_ALLUSERS_WRITE,
- S3Rules.S3_BUCKET_ALLUSERS_READ_ACP,
- S3Rules.S3_BUCKET_ALLUSERS_READ,
- S3Rules.S3_BUCKET_WORLD_PUT_POLICY,
- S3Rules.S3_BUCKET_WORLD_POLICY_STAR,
- S3Rules.S3_BUCKET_WORLD_LIST_POLICY,
- S3Rules.S3_BUCKET_WORLD_GET_POLICY,
- S3Rules.S3_BUCKET_WORLD_DELETE_POLICY,
- EC2Rules.EC2_DEFAULT_SECURITY_GROUP_IN_USE,
- EC2Rules.EC2_DEFAULT_SECURITY_GROUP_WITH_RULES,
- EC2Rules.EC2_EBS_SNAPSHOT_PUBLIC,
- SQSRules.SQS_QUEUE_WORLD_SENDMESSAGE_POLICY,
- SQSRules.SQS_QUEUE_WORLD_RECEIVEMESSAGE_POLICY,
- SQSRules.SQS_QUEUE_WORLD_PURGEQUEUE_POLICY,
- SQSRules.SQS_QUEUE_WORLD_GETQUEUEURL_POLICY,
- SQSRules.SQS_QUEUE_WORLD_GETQUEUEATTRIBUTES_POLICY,
- SQSRules.SQS_QUEUE_WORLD_DELETEMESSAGE_POLICY,
- SQSRules.SQS_QUEUE_WORLD_CHANGEMESSAGEVISIBILITY_POLICY,
- SNSRules.SNS_TOPIC_WORLD_SUBSCRIBE_POLICY,
- SNSRules.SNS_TOPIC_WORLD_SETTOPICATTRIBUTES_POLICY,
- SNSRules.SNS_TOPIC_WORLD_REMOVEPERMISSION_POLICY,
- SNSRules.SNS_TOPIC_WORLD_RECEIVE_POLICY,
- SNSRules.SNS_TOPIC_WORLD_PUBLISH_POLICY,
- SNSRules.SNS_TOPIC_WORLD_DELETETOPIC_POLICY,
- SNSRules.SNS_TOPIC_WORLD_ADDPERMISSION_POLICY,
- SESRules.SES_IDENTITY_WORLD_SENDRAWEMAIL_POLICY,
- SESRules.SES_IDENTITY_WORLD_SENDEMAIL_POLICY,
- RedshiftRules.REDSHIFT_CLUSTER_PUBLICLY_ACCESSIBLE,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_RESTRICTIVE_POLICIES
-
-
-class Logging(ScoutSuiteFindingMap):
- rules = [
- CloudTrailRules.CLOUDTRAIL_DUPLICATED_GLOBAL_SERVICES_LOGGING,
- CloudTrailRules.CLOUDTRAIL_NO_DATA_LOGGING,
- CloudTrailRules.CLOUDTRAIL_NO_GLOBAL_SERVICES_LOGGING,
- CloudTrailRules.CLOUDTRAIL_NO_LOG_FILE_VALIDATION,
- CloudTrailRules.CLOUDTRAIL_NO_LOGGING,
- CloudTrailRules.CLOUDTRAIL_NOT_CONFIGURED,
- CloudWatchRules.CLOUDWATCH_ALARM_WITHOUT_ACTIONS,
- ELBRules.ELB_NO_ACCESS_LOGS,
- S3Rules.S3_BUCKET_NO_LOGGING,
- ELBv2Rules.ELBV2_NO_ACCESS_LOGS,
- VPCRules.SUBNET_WITHOUT_FLOW_LOG,
- ConfigRules.CONFIG_RECORDER_NOT_CONFIGURED,
- RedshiftRules.REDSHIFT_PARAMETER_GROUP_LOGGING_DISABLED,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_LOGGING
-
-
-class ServiceSecurity(ScoutSuiteFindingMap):
- rules = [
- CloudformationRules.CLOUDFORMATION_STACK_WITH_ROLE,
- ELBv2Rules.ELBV2_HTTP_REQUEST_SMUGGLING,
- RDSRules.RDS_INSTANCE_CA_CERTIFICATE_DEPRECATED,
- RDSRules.RDS_INSTANCE_NO_MINOR_UPGRADE,
- RedshiftRules.REDSHIFT_CLUSTER_NO_VERSION_UPGRADE,
- ]
-
- test = zero_trust_consts.TEST_SCOUTSUITE_SERVICE_SECURITY
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_findings_list.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_findings_list.py
deleted file mode 100644
index 65f85aa9d..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/scoutsuite_findings_list.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.scoutsuite_finding_maps import (
- DataLossPrevention,
- Logging,
- PermissiveFirewallRules,
- RestrictivePolicies,
- SecureAuthentication,
- ServiceSecurity,
- UnencryptedData,
-)
-
-SCOUTSUITE_FINDINGS = [
- PermissiveFirewallRules,
- UnencryptedData,
- DataLossPrevention,
- SecureAuthentication,
- RestrictivePolicies,
- Logging,
- ServiceSecurity,
-]
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py
deleted file mode 100644
index abbd48164..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from enum import Enum
-
-SERVICES = "services"
-FINDINGS = "findings"
-
-
-class SERVICE_TYPES(Enum):
- ACM = "acm"
- AWSLAMBDA = "awslambda"
- CLOUDFORMATION = "cloudformation"
- CLOUDTRAIL = "cloudtrail"
- CLOUDWATCH = "cloudwatch"
- CONFIG = "config"
- DIRECTCONNECT = "directconnect"
- EC2 = "ec2"
- EFS = "efs"
- ELASTICACHE = "elasticache"
- ELB = "elb"
- ELB_V2 = "elbv2"
- EMR = "emr"
- IAM = "iam"
- KMS = "kms"
- RDS = "rds"
- REDSHIFT = "redshift"
- ROUTE53 = "route53"
- S3 = "s3"
- SES = "ses"
- SNS = "sns"
- SQS = "sqs"
- VPC = "vpc"
- SECRETSMANAGER = "secretsmanager"
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_parser.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_parser.py
deleted file mode 100644
index 7db9a5988..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_parser.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from enum import Enum
-
-from common.utils.code_utils import get_value_from_dict
-from common.utils.exceptions import RulePathCreatorNotFound
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators_list import ( # noqa: E501
- RULE_PATH_CREATORS_LIST,
-)
-
-
-def __build_rule_to_rule_path_creator_hashmap():
- hashmap = {}
- for rule_path_creator in RULE_PATH_CREATORS_LIST:
- for rule_name in rule_path_creator.supported_rules:
- hashmap[rule_name] = rule_path_creator
- return hashmap
-
-
-RULE_TO_RULE_PATH_CREATOR_HASHMAP = __build_rule_to_rule_path_creator_hashmap()
-
-
-class RuleParser:
- @staticmethod
- def get_rule_data(scoutsuite_data: dict, rule_name: Enum) -> dict:
- rule_path = RuleParser._get_rule_path(rule_name)
- return get_value_from_dict(scoutsuite_data, rule_path)
-
- @staticmethod
- def _get_rule_path(rule_name: Enum):
- creator = RuleParser._get_rule_path_creator(rule_name)
- return creator.build_rule_path(rule_name)
-
- @staticmethod
- def _get_rule_path_creator(rule_name: Enum):
- try:
- return RULE_TO_RULE_PATH_CREATOR_HASHMAP[rule_name]
- except KeyError:
- raise RulePathCreatorNotFound(
- f"Rule path creator not found for rule {rule_name.value}. Make sure to assign"
- f"this rule to any rule path creators."
- )
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/abstract_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/abstract_rule_path_creator.py
deleted file mode 100644
index 56734e1a0..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/abstract_rule_path_creator.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from abc import ABC, abstractmethod
-from enum import Enum
-from typing import List, Type
-
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rule_name_enum import (
- RuleNameEnum,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import (
- FINDINGS,
- SERVICE_TYPES,
-)
-
-
-class AbstractRulePathCreator(ABC):
- @property
- @abstractmethod
- def service_type(self) -> SERVICE_TYPES:
- pass
-
- @property
- @abstractmethod
- def supported_rules(self) -> Type[RuleNameEnum]:
- pass
-
- @classmethod
- def build_rule_path(cls, rule_name: Enum) -> List[str]:
- assert rule_name in cls.supported_rules
- return [cls.service_type.value, FINDINGS, rule_name.value]
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudformation_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudformation_rule_path_creator.py
deleted file mode 100644
index 55f718608..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudformation_rule_path_creator.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudformation_rules import (
- CloudformationRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class CloudformationRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.CLOUDFORMATION
- supported_rules = CloudformationRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudtrail_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudtrail_rule_path_creator.py
deleted file mode 100644
index 1f764ec8b..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudtrail_rule_path_creator.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudtrail_rules import (
- CloudTrailRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class CloudTrailRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.CLOUDTRAIL
- supported_rules = CloudTrailRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudwatch_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudwatch_rule_path_creator.py
deleted file mode 100644
index 573d129ee..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/cloudwatch_rule_path_creator.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.cloudwatch_rules import (
- CloudWatchRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class CloudWatchRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.CLOUDWATCH
- supported_rules = CloudWatchRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/config_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/config_rule_path_creator.py
deleted file mode 100644
index 45cc2e3d6..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/config_rule_path_creator.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.config_rules import (
- ConfigRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class ConfigRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.CONFIG
- supported_rules = ConfigRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ec2_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ec2_rule_path_creator.py
deleted file mode 100644
index 41e42180b..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ec2_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.ec2_rules import EC2Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class EC2RulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.EC2
- supported_rules = EC2Rules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elb_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elb_rule_path_creator.py
deleted file mode 100644
index 65b320292..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elb_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.elb_rules import ELBRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class ELBRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.ELB
- supported_rules = ELBRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elbv2_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elbv2_rule_path_creator.py
deleted file mode 100644
index 8a560f401..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/elbv2_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.elbv2_rules import ELBv2Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class ELBv2RulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.ELB_V2
- supported_rules = ELBv2Rules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/iam_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/iam_rule_path_creator.py
deleted file mode 100644
index 0ab9e686f..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/iam_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.iam_rules import IAMRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class IAMRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.IAM
- supported_rules = IAMRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/rds_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/rds_rule_path_creator.py
deleted file mode 100644
index 56252a3f6..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/rds_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.rds_rules import RDSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class RDSRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.RDS
- supported_rules = RDSRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/redshift_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/redshift_rule_path_creator.py
deleted file mode 100644
index 90ba44308..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/redshift_rule_path_creator.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.redshift_rules import (
- RedshiftRules,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class RedshiftRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.REDSHIFT
- supported_rules = RedshiftRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/s3_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/s3_rule_path_creator.py
deleted file mode 100644
index aa6f101aa..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/s3_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.s3_rules import S3Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class S3RulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.S3
- supported_rules = S3Rules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ses_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ses_rule_path_creator.py
deleted file mode 100644
index 4530aa097..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/ses_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.ses_rules import SESRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class SESRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.SES
- supported_rules = SESRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sns_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sns_rule_path_creator.py
deleted file mode 100644
index bb619f92f..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sns_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.sns_rules import SNSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class SNSRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.SNS
- supported_rules = SNSRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sqs_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sqs_rule_path_creator.py
deleted file mode 100644
index 19229c1d6..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/sqs_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.sqs_rules import SQSRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class SQSRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.SQS
- supported_rules = SQSRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/vpc_rule_path_creator.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/vpc_rule_path_creator.py
deleted file mode 100644
index 7f3cfecde..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators/vpc_rule_path_creator.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.vpc_rules import VPCRules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICE_TYPES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.abstract_rule_path_creator import ( # noqa: E501
- AbstractRulePathCreator,
-)
-
-
-class VPCRulePathCreator(AbstractRulePathCreator):
- service_type = SERVICE_TYPES.VPC
- supported_rules = VPCRules
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators_list.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators_list.py
deleted file mode 100644
index d724ca584..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/rule_path_building/rule_path_creators_list.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.cloudformation_rule_path_creator import ( # noqa: E501
- CloudformationRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.cloudtrail_rule_path_creator import ( # noqa: E501
- CloudTrailRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.cloudwatch_rule_path_creator import ( # noqa: E501
- CloudWatchRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.config_rule_path_creator import ( # noqa: E501
- ConfigRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.ec2_rule_path_creator import ( # noqa: E501
- EC2RulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.elb_rule_path_creator import ( # noqa: E501
- ELBRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.elbv2_rule_path_creator import ( # noqa: E501
- ELBv2RulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.iam_rule_path_creator import ( # noqa: E501
- IAMRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.rds_rule_path_creator import ( # noqa: E501
- RDSRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.redshift_rule_path_creator import ( # noqa: E501
- RedshiftRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.s3_rule_path_creator import ( # noqa: E501
- S3RulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.ses_rule_path_creator import ( # noqa: E501
- SESRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.sns_rule_path_creator import ( # noqa: E501
- SNSRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.sqs_rule_path_creator import ( # noqa: E501
- SQSRulePathCreator,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_path_building.rule_path_creators.vpc_rule_path_creator import ( # noqa: E501
- VPCRulePathCreator,
-)
-
-RULE_PATH_CREATORS_LIST = [
- EC2RulePathCreator,
- ELBv2RulePathCreator,
- RDSRulePathCreator,
- RedshiftRulePathCreator,
- S3RulePathCreator,
- IAMRulePathCreator,
- CloudTrailRulePathCreator,
- ELBRulePathCreator,
- VPCRulePathCreator,
- CloudWatchRulePathCreator,
- SQSRulePathCreator,
- SNSRulePathCreator,
- SESRulePathCreator,
- ConfigRulePathCreator,
- CloudformationRulePathCreator,
-]
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_auth_service.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_auth_service.py
deleted file mode 100644
index b54b3252c..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_auth_service.py
+++ /dev/null
@@ -1,58 +0,0 @@
-from typing import Tuple
-
-from ScoutSuite.providers.base.authentication_strategy import AuthenticationException
-
-from common.cloud.scoutsuite_consts import CloudProviders
-from common.config_value_paths import AWS_KEYS_PATH
-from common.utils.exceptions import InvalidAWSKeys
-from monkey_island.cc.server_utils.encryption import get_datastore_encryptor
-from monkey_island.cc.services.config import ConfigService
-
-
-def is_cloud_authentication_setup(provider: CloudProviders) -> Tuple[bool, str]:
- if provider == CloudProviders.AWS.value:
- if is_aws_keys_setup():
- return True, "AWS keys already setup."
-
- import ScoutSuite.providers.aws.authentication_strategy as auth_strategy
-
- try:
- profile = auth_strategy.AWSAuthenticationStrategy().authenticate()
- return True, f' Profile "{profile.session.profile_name}" is already setup. '
- except AuthenticationException:
- return False, ""
-
-
-def is_aws_keys_setup():
- return ConfigService.get_config_value(
- AWS_KEYS_PATH + ["aws_access_key_id"]
- ) and ConfigService.get_config_value(AWS_KEYS_PATH + ["aws_secret_access_key"])
-
-
-def set_aws_keys(access_key_id: str, secret_access_key: str, session_token: str):
- if not access_key_id or not secret_access_key:
- raise InvalidAWSKeys(
- "Missing some of the following fields: access key ID, secret access key."
- )
- _set_aws_key("aws_access_key_id", access_key_id)
- _set_aws_key("aws_secret_access_key", secret_access_key)
- _set_aws_key("aws_session_token", session_token)
-
-
-def _set_aws_key(key_type: str, key_value: str):
- path_to_keys = AWS_KEYS_PATH
- encrypted_key = get_datastore_encryptor().encrypt(key_value)
- ConfigService.set_config_value(path_to_keys + [key_type], encrypted_key)
-
-
-def get_aws_keys():
- return {
- "access_key_id": _get_aws_key("aws_access_key_id"),
- "secret_access_key": _get_aws_key("aws_secret_access_key"),
- "session_token": _get_aws_key("aws_session_token"),
- }
-
-
-def _get_aws_key(key_type: str):
- path_to_keys = AWS_KEYS_PATH
- return ConfigService.get_config_value(config_key_as_arr=path_to_keys + [key_type])
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py
deleted file mode 100644
index a97a1a2c8..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from monkey_island.cc.models.zero_trust.scoutsuite_rule import ScoutSuiteRule
-from monkey_island.cc.services.zero_trust.scoutsuite.consts import rule_consts
-
-
-class ScoutSuiteRuleService:
- @staticmethod
- def get_rule_from_rule_data(rule_data: dict) -> ScoutSuiteRule:
- rule = ScoutSuiteRule()
- rule.description = rule_data["description"]
- rule.path = rule_data["path"]
- rule.level = rule_data["level"]
- rule.items = rule_data["items"]
- rule.dashboard_name = rule_data["dashboard_name"]
- rule.checked_items = rule_data["checked_items"]
- rule.flagged_items = rule_data["flagged_items"]
- rule.service = rule_data["service"]
- rule.rationale = rule_data["rationale"]
- rule.remediation = rule_data["remediation"]
- rule.compliance = rule_data["compliance"]
- rule.references = rule_data["references"]
- return rule
-
- @staticmethod
- def is_rule_dangerous(rule: ScoutSuiteRule):
- return rule.level == rule_consts.RULE_LEVEL_DANGER and len(rule.items) != 0
-
- @staticmethod
- def is_rule_warning(rule: ScoutSuiteRule):
- return rule.level == rule_consts.RULE_LEVEL_WARNING and len(rule.items) != 0
diff --git a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_zt_finding_service.py b/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_zt_finding_service.py
deleted file mode 100644
index 3d0cf8413..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_zt_finding_service.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from typing import List
-
-from common.common_consts import zero_trust_consts
-from monkey_island.cc.models.zero_trust.scoutsuite_finding import ScoutSuiteFinding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding_details import ScoutSuiteFindingDetails
-from monkey_island.cc.models.zero_trust.scoutsuite_rule import ScoutSuiteRule
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.scoutsuite_finding_maps import (
- ScoutSuiteFindingMap,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_rule_service import (
- ScoutSuiteRuleService,
-)
-
-
-class ScoutSuiteZTFindingService:
- @staticmethod
- def process_rule(finding: ScoutSuiteFindingMap, rule: ScoutSuiteRule):
- existing_findings = ScoutSuiteFinding.objects(test=finding.test)
- assert len(existing_findings) < 2, "More than one finding exists for {}".format(
- finding.test
- )
-
- if len(existing_findings) == 0:
- ScoutSuiteZTFindingService._create_new_finding_from_rule(finding, rule)
- else:
- ScoutSuiteZTFindingService.add_rule(existing_findings[0], rule)
-
- @staticmethod
- def _create_new_finding_from_rule(finding: ScoutSuiteFindingMap, rule: ScoutSuiteRule):
- details = ScoutSuiteFindingDetails()
- details.scoutsuite_rules = [rule]
- details.save()
- status = ScoutSuiteZTFindingService.get_finding_status_from_rules(details.scoutsuite_rules)
- ScoutSuiteFinding.save_finding(finding.test, status, details)
-
- @staticmethod
- def get_finding_status_from_rules(rules: List[ScoutSuiteRule]) -> str:
- if len(rules) == 0:
- return zero_trust_consts.STATUS_UNEXECUTED
- elif filter(lambda x: ScoutSuiteRuleService.is_rule_dangerous(x), rules):
- return zero_trust_consts.STATUS_FAILED
- elif filter(lambda x: ScoutSuiteRuleService.is_rule_warning(x), rules):
- return zero_trust_consts.STATUS_VERIFY
- else:
- return zero_trust_consts.STATUS_PASSED
-
- @staticmethod
- def add_rule(finding: ScoutSuiteFinding, rule: ScoutSuiteRule):
- ScoutSuiteZTFindingService.change_finding_status_by_rule(finding, rule)
- finding.save()
- finding.details.fetch().add_rule(rule)
-
- @staticmethod
- def change_finding_status_by_rule(finding: ScoutSuiteFinding, rule: ScoutSuiteRule):
- rule_status = ScoutSuiteZTFindingService.get_finding_status_from_rules([rule])
- finding_status = finding.status
- new_finding_status = ScoutSuiteZTFindingService.get_finding_status_from_rule_status(
- finding_status, rule_status
- )
- if finding_status != new_finding_status:
- finding.status = new_finding_status
-
- @staticmethod
- def get_finding_status_from_rule_status(finding_status: str, rule_status: str) -> str:
- if (
- finding_status == zero_trust_consts.STATUS_FAILED
- or rule_status == zero_trust_consts.STATUS_FAILED
- ):
- return zero_trust_consts.STATUS_FAILED
- elif (
- finding_status == zero_trust_consts.STATUS_VERIFY
- or rule_status == zero_trust_consts.STATUS_VERIFY
- ):
- return zero_trust_consts.STATUS_VERIFY
- elif (
- finding_status == zero_trust_consts.STATUS_PASSED
- or rule_status == zero_trust_consts.STATUS_PASSED
- ):
- return zero_trust_consts.STATUS_PASSED
- else:
- return zero_trust_consts.STATUS_UNEXECUTED
diff --git a/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/finding_service.py b/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/finding_service.py
index cf65819df..8c70130c7 100644
--- a/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/finding_service.py
+++ b/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/finding_service.py
@@ -7,7 +7,6 @@ from common.common_consts import zero_trust_consts
from common.utils.exceptions import UnknownFindingError
from monkey_island.cc.models.zero_trust.finding import Finding
from monkey_island.cc.models.zero_trust.monkey_finding import MonkeyFinding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding import ScoutSuiteFinding
from monkey_island.cc.services.zero_trust.monkey_findings.monkey_zt_details_service import (
MonkeyZTDetailsService,
)
@@ -55,7 +54,5 @@ class FindingService:
def _get_finding_details(finding: Finding) -> Union[dict, SON]:
if type(finding) == MonkeyFinding:
return MonkeyZTDetailsService.fetch_details_for_display(finding.details.id)
- elif type(finding) == ScoutSuiteFinding:
- return finding.details.fetch().to_mongo()
else:
raise UnknownFindingError(f"Unknown finding type {str(type(finding))}")
diff --git a/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/scoutsuite_raw_data_service.py b/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/scoutsuite_raw_data_service.py
deleted file mode 100644
index 3a3c06452..000000000
--- a/monkey/monkey_island/cc/services/zero_trust/zero_trust_report/scoutsuite_raw_data_service.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from monkey_island.cc.models.zero_trust.scoutsuite_data_json import ScoutSuiteRawDataJson
-
-
-class ScoutSuiteRawDataService:
-
- # Return unparsed json of ScoutSuite results,
- # so that UI can pick out values it needs for report
- @staticmethod
- def get_scoutsuite_data_json() -> str:
- try:
- return ScoutSuiteRawDataJson.objects.get().scoutsuite_data
- except Exception:
- return "{}"
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
index 65707574e..85f02873a 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
@@ -71,7 +71,7 @@ class ReportPageComponent extends AuthComponent {
}
getZeroTrustReportFromServer = async () => {
- let ztReport = {findings: {}, principles: {}, pillars: {}, scoutsuite_data: {}};
+ let ztReport = {findings: {}, principles: {}, pillars: {}};
await this.authFetch('/api/report/zero-trust/findings')
.then(res => res.json())
.then(res => {
@@ -87,11 +87,6 @@ class ReportPageComponent extends AuthComponent {
.then(res => {
ztReport.pillars = res;
});
- await this.authFetch('/api/report/zero-trust/scoutsuite')
- .then(res => res.json())
- .then(res => {
- ztReport.scoutsuite_data = res;
- });
return ztReport
};
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOptions.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOptions.js
index 1cc2aed7b..7c099f224 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOptions.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOptions.js
@@ -8,7 +8,6 @@ import {cloneDeep} from 'lodash';
import {faCloud, faExpandArrowsAlt} from '@fortawesome/free-solid-svg-icons';
import RunOnIslandButton from './RunOnIslandButton';
import AWSRunButton from './RunOnAWS/AWSRunButton';
-import CloudOptions from './scoutsuite-setup/CloudOptions';
const CONFIG_URL = '/api/configuration/island';
@@ -56,7 +55,7 @@ function RunOptions(props) {
return InlineSelection(defaultContents, newProps);
}
- function shouldShowScoutsuite(islandMode){
+ function isNotRansomwareMode(islandMode){
return islandMode !== 'ransomware';
}
@@ -73,15 +72,7 @@ function RunOptions(props) {
setComponent(LocalManualRunOptions,
{ips: ips, setComponent: setComponent})
}}/>
- {shouldShowScoutsuite(props.islandMode) && }
- {shouldShowScoutsuite(props.islandMode) && {
- setComponent(CloudOptions,
- {ips: ips, setComponent: setComponent})
- }}/>
- }
+ {isNotRansomwareMode(props.islandMode) && }
>
);
}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSCLISetup.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSCLISetup.js
deleted file mode 100644
index 178c60d8b..000000000
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSCLISetup.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import {Button} from 'react-bootstrap';
-import React from 'react';
-import InlineSelection from '../../../../ui-components/inline-selection/InlineSelection';
-import {COLUMN_SIZES} from '../../../../ui-components/inline-selection/utils';
-import '../../../../../styles/components/scoutsuite/AWSSetup.scss';
-import AWSSetupOptions from './AWSSetupOptions';
-
-
-export default function AWSCLISetup(props) {
- return InlineSelection(getContents, {
- ...props,
- collumnSize: COLUMN_SIZES.LARGE,
- onBackButtonClick: () => {
- props.setComponent(AWSSetupOptions, props);
- }
- })
-}
-
-
-const getContents = (props) => {
- return (
-
-
AWS CLI configuration for scan
-
To assess your AWS infrastructure's security do the following:
-
- -
- 1. Configure AWS CLI on Monkey Island Server (if you already have a configured CLI you can skip this step).
-
- -
- a. Download and
- install it on the Monkey Island server (machine running this page).
-
- -
- b. Run
aws configure
. It's important to configure credentials as it
- allows ScoutSuite to get information about your cloud configuration. The simplest way to do so is to
- provide
- .
-
-
-
- -
- 2. If you change the configuration, make sure not to disable AWS system info collector.
-
- -
- 3. Go
- and run Monkey on the Island server.
-
- -
- 4. Assess results in Zero Trust report.
-
-
-
- );
-}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSKeySetup.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSKeySetup.js
deleted file mode 100644
index 04a1f490b..000000000
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSKeySetup.js
+++ /dev/null
@@ -1,179 +0,0 @@
-import React, {useEffect, useState} from 'react';
-import InlineSelection from '../../../../ui-components/inline-selection/InlineSelection';
-import {COLUMN_SIZES} from '../../../../ui-components/inline-selection/utils';
-import AWSSetupOptions from './AWSSetupOptions';
-import {Button, Col, Form, Row} from 'react-bootstrap';
-import AuthComponent from '../../../../AuthComponent';
-import '../../../../../styles/components/scoutsuite/AWSSetup.scss';
-import {PROVIDERS} from '../ProvidersEnum';
-import classNames from 'classnames';
-import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
-import {faChevronDown} from '@fortawesome/free-solid-svg-icons/faChevronDown';
-import {faChevronUp} from '@fortawesome/free-solid-svg-icons/faChevronUp';
-import {faQuestion} from '@fortawesome/free-solid-svg-icons';
-import Collapse from '@kunukn/react-collapse/dist/Collapse.umd';
-import keySetupForAnyUserImage from '../../../../../images/aws_keys_tutorial-any-user.png';
-import keySetupForCurrentUserImage from '../../../../../images/aws_keys_tutorial-current-user.png';
-import ImageModal from '../../../../ui-components/ImageModal';
-
-
-export default function AWSCLISetup(props) {
- return InlineSelection(getContents, {
- ...props,
- collumnSize: COLUMN_SIZES.LARGE,
- onBackButtonClick: () => {
- props.setComponent(AWSSetupOptions, props);
- }
- })
-}
-
-const authComponent = new AuthComponent({})
-
-const getContents = (props) => {
-
- const [accessKeyId, setAccessKeyId] = useState('');
- const [secretAccessKey, setSecretAccessKey] = useState('');
- const [sessionToken, setSessionToken] = useState('');
- const [errorMessage, setErrorMessage] = useState('');
- const [successMessage, setSuccessMessage] = useState('');
- const [docCollapseOpen, setDocCollapseOpen] = useState(false);
-
- function submitKeys(event) {
- event.preventDefault();
- setSuccessMessage('');
- setErrorMessage('');
- authComponent.authFetch(
- '/api/scoutsuite_auth/' + PROVIDERS.AWS,
- {
- 'method': 'POST',
- 'body': JSON.stringify({
- 'accessKeyId': accessKeyId,
- 'secretAccessKey': secretAccessKey,
- 'sessionToken': sessionToken
- })
- })
- .then(res => res.json())
- .then(res => {
- if (res['error_msg'] === '') {
- setSuccessMessage('AWS keys saved!');
- } else if (res['message'] === 'Internal Server Error') {
- setErrorMessage('Something went wrong, double check keys and contact support if problem persists.');
- } else {
- setErrorMessage(res['error_msg']);
- }
- });
- }
-
- useEffect(() => {
- authComponent.authFetch('/api/aws_keys')
- .then(res => res.json())
- .then(res => {
- setAccessKeyId(res['access_key_id']);
- setSecretAccessKey(res['secret_access_key']);
- setSessionToken(res['session_token']);
- });
- }, [props]);
-
-
- // TODO separate into standalone component
- function getKeyCreationDocsContent() {
- return (
-
-
Tips
-
Consider creating a new user account just for this activity. Assign only ReadOnlyAccess and
- SecurityAudit policies.
-
-
Keys for custom user
-
1. Open the IAM console at https://console.aws.amazon.com/iam/.
-
2. In the navigation pane, choose Users.
-
3. Choose the name of the user whose access keys you want to create, and then choose the Security credentials
- tab.
-
4. In the Access keys section, choose Create Access key.
-
To view the new access key pair, choose Show. Your credentials will look something like this:
-
Access key ID: AKIAIOSFODNN7EXAMPLE
-
Secret access key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
-
-
-
-
-
-
-
Keys for current user
-
1. Click on your username in the upper right corner.
-
2. Click on "My security credentials".
-
3. In the Access keys section, choose Create Access key.
-
To view the new Access key pair, choose Show. Your credentials will look something like this:
-
Access key ID: AKIAIOSFODNN7EXAMPLE
-
Secret access key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
-
-
-
-
-
-
);
- }
-
- function getKeyCreationDocs() {
- return (
-
-
-
- );
- }
-
- return (
-
- {getKeyCreationDocs()}
-
setAccessKeyId(evt.target.value)}
- type='text'
- placeholder='Access key ID'
- value={accessKeyId}/>
- setSecretAccessKey(evt.target.value)}
- type='password'
- placeholder='Secret access key'
- value={secretAccessKey}/>
- setSessionToken(evt.target.value)}
- type='text'
- placeholder='Session token (optional, only for temp. keys)'
- value={sessionToken}/>
- {
- errorMessage ?
- {errorMessage}
- :
- ''
- }
- {
- successMessage ?
- {successMessage}
- Go back and
- to start AWS scan!
- :
- ''
- }
-
-
-
-
-
-
-
- );
-}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSSetupOptions.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSSetupOptions.js
deleted file mode 100644
index a66a893d8..000000000
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/AWSConfiguration/AWSSetupOptions.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react';
-import InlineSelection from '../../../../ui-components/inline-selection/InlineSelection';
-import NextSelectionButton from '../../../../ui-components/inline-selection/NextSelectionButton';
-import {faKey, faTerminal} from '@fortawesome/free-solid-svg-icons';
-import AWSCLISetup from './AWSCLISetup';
-import CloudOptions from '../CloudOptions';
-import AWSKeySetup from './AWSKeySetup';
-
-
-const AWSSetupOptions = (props) => {
- return InlineSelection(getContents, {
- ...props,
- onBackButtonClick: () => {
- props.setComponent(CloudOptions, props);
- }
- })
-}
-
-const getContents = (props) => {
- return (
- <>
- {
- props.setComponent(AWSKeySetup,
- {setComponent: props.setComponent})
- }}/>
- {
- props.setComponent(AWSCLISetup,
- {setComponent: props.setComponent})
- }}/>
- >
- )
-}
-
-export default AWSSetupOptions;
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/CloudOptions.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/CloudOptions.js
deleted file mode 100644
index bd9c83f04..000000000
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/CloudOptions.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import React, {useEffect, useState} from 'react';
-import InlineSelection from '../../../ui-components/inline-selection/InlineSelection';
-import NextSelectionButton from '../../../ui-components/inline-selection/NextSelectionButton';
-import {faCheck, faCloud, faSync} from '@fortawesome/free-solid-svg-icons';
-import AWSSetupOptions from './AWSConfiguration/AWSSetupOptions';
-import {PROVIDERS} from './ProvidersEnum';
-import AuthComponent from '../../../AuthComponent';
-
-
-const CloudOptions = (props) => {
- return InlineSelection(getContents, {
- ...props,
- onBackButtonClick: () => {
- props.setComponent()
- }
- })
-}
-
-const authComponent = new AuthComponent({})
-
-const getContents = (props) => {
-
- const [description, setDescription] = useState('Loading...');
- const [iconType, setIconType] = useState('spinning-icon');
- const [icon, setIcon] = useState(faSync);
-
- useEffect(() => {
- authComponent.authFetch('/api/scoutsuite_auth/' + PROVIDERS.AWS)
- .then(res => res.json())
- .then(res => {
- if(res.is_setup){
- setDescription(getDescription(res.message));
- setIconType('icon-success');
- setIcon(faCheck);
- } else {
- setDescription('Setup Amazon Web Services infrastructure scan.');
- setIconType('')
- setIcon(faCloud);
- }
- });
- }, [props]);
-
- function getDescription(message){
- return (
- <>
- {message} Run from the Island to start the scan. Click next to change the configuration.
- >
- )
- }
-
- return (
- <>
- {
- props.setComponent(AWSSetupOptions,
- {setComponent: props.setComponent})
- }}/>
- >
- )
-}
-
-export default CloudOptions;
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/ProvidersEnum.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/ProvidersEnum.js
deleted file mode 100644
index 26bb87860..000000000
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/scoutsuite-setup/ProvidersEnum.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Should match enum in monkey/common/cloud/scoutsuite_consts.py
-
-export const PROVIDERS = {
- AWS : 'aws',
- AZURE : 'azure',
- GCP : 'gcp',
- ALIBABA : 'aliyun',
- ORACLE : 'oci'
-}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js b/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js
index b400b3418..b4140df14 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js
@@ -30,8 +30,7 @@ class ZeroTrustReportPageComponent extends AuthComponent {
+ findings={this.state.findings}/>
;
}
@@ -59,8 +58,7 @@ class ZeroTrustReportPageComponent extends AuthComponent {
stillLoadingDataFromServer() {
return typeof this.state.findings === 'undefined'
|| typeof this.state.pillars === 'undefined'
- || typeof this.state.principles === 'undefined'
- || typeof this.state.scoutsuite_data === 'undefined';
+ || typeof this.state.principles === 'undefined';
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsSection.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsSection.js
index eb8231441..8147d4910 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsSection.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsSection.js
@@ -33,13 +33,10 @@ class FindingsSection extends Component {
);
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsTable.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsTable.js
index 657ad741e..d62316f71 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/FindingsTable.js
@@ -4,7 +4,6 @@ import PaginatedTable from '../common/PaginatedTable';
import * as PropTypes from 'prop-types';
import PillarLabel from './PillarLabel';
import EventsButton from './EventsButton';
-import ScoutSuiteRuleButton from './scoutsuite/ScoutSuiteRuleButton';
const EVENTS_COLUMN_MAX_WIDTH = 180;
const PILLARS_COLUMN_MAX_WIDTH = 260;
@@ -36,16 +35,11 @@ export class FindingsTable extends Component {
];
getFindingDetails(finding) {
- if ('scoutsuite_rules' in finding.details) {
- return ;
- } else {
- return ;
- }
+ return ;
}
getFindingPillars(finding) {
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ResourceDropdown.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ResourceDropdown.js
deleted file mode 100644
index 81aee324e..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ResourceDropdown.js
+++ /dev/null
@@ -1,84 +0,0 @@
-import React, {useState} from 'react';
-import * as PropTypes from 'prop-types';
-import '../../../../styles/components/scoutsuite/RuleDisplay.scss'
-import classNames from 'classnames';
-import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
-import {faChevronDown} from '@fortawesome/free-solid-svg-icons/faChevronDown';
-import {faChevronUp} from '@fortawesome/free-solid-svg-icons/faChevronUp';
-import ScoutSuiteDataParser from './ScoutSuiteDataParser';
-import Collapse from '@kunukn/react-collapse';
-import {faArrowRight} from '@fortawesome/free-solid-svg-icons';
-
-export default function ResourceDropdown(props) {
-
- const [isCollapseOpen, setIsCollapseOpen] = useState(false);
- let parser = new ScoutSuiteDataParser(props.scoutsuite_data.data.services);
- let resource_value = parser.getResourceValue(props.resource_path, props.template_path);
-
- function getResourceDropdown() {
- return (
-
-
-
-
- );
- }
-
- function replacePathDotsWithArrows(resourcePath) {
- let path_vars = resourcePath.split('.')
- let display_path = []
- for (let i = 0; i < path_vars.length; i++) {
- display_path.push(path_vars[i])
- if (i !== path_vars.length - 1) {
- display_path.push()
- }
- }
- return display_path;
- }
-
- function prettyPrintJson(data) {
- return JSON.stringify(data, null, 4);
- }
-
- function getResourceValueDisplay() {
- return (
-
-
Value:
-
{prettyPrintJson(resource_value)}
-
- );
- }
-
- function getResourceDropdownContents() {
- return (
-
-
-
Path:
-
{replacePathDotsWithArrows(props.resource_path)}
-
- {getResourceValueDisplay()}
-
- );
- }
-
- return getResourceDropdown();
-}
-
-ResourceDropdown.propTypes = {
- template_path: PropTypes.string,
- resource_path: PropTypes.string,
- scoutsuite_data: PropTypes.object
-};
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/RuleDisplay.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/RuleDisplay.js
deleted file mode 100644
index dc81ff183..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/RuleDisplay.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import React from 'react';
-import * as PropTypes from 'prop-types';
-import '../../../../styles/components/scoutsuite/RuleDisplay.scss'
-import ResourceDropdown from './ResourceDropdown';
-
-export default function RuleDisplay(props) {
-
- return (
-
-
-
{props.rule.description}({props.rule.service})
-
-
-
-
Resources checked:
-
{props.rule.checked_items}
-
- {getReferences()}
- {getResources()}
-
);
-
- function getReferences() {
- let references = []
- props.rule.references.forEach(reference => {
- references.push({reference})
- })
- if (references.length) {
- return (
-
-
References:
- {references}
-
)
- } else {
- return null;
- }
- }
-
- function getResources() {
- let resources = []
- for (let i = 0; i < props.rule.items.length; i++) {
- let item = props.rule.items[i];
- let template_path = Object.prototype.hasOwnProperty.call(props.rule, 'display_path')
- ? props.rule.display_path : props.rule.path;
- resources.push()
- }
- if (resources.length) {
- return (
-
-
Flagged resources ({props.rule.flagged_items}):
- {resources}
-
)
- } else {
- return null;
- }
- }
-}
-
-RuleDisplay.propTypes = {
- rule: PropTypes.object,
- scoutsuite_data: PropTypes.object
-};
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteDataParser.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteDataParser.js
deleted file mode 100644
index be5599d99..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteDataParser.js
+++ /dev/null
@@ -1,118 +0,0 @@
-export default class ScoutSuiteDataParser {
- constructor(runResults) {
- this.runResults = runResults
- }
-
- /**
- * Gets value of cloud resource based on path of specific checked field and more abstract template path,
- * which describes the scope of resource values.
- * @param itemPath contains path to a specific value e.g. s3.buckets.da1e7081077ce92.secure_transport_enabled
- * @param templatePath contains a template path for resource we would want to display e.g. s3.buckets.id
- * @returns {*[]|*} resource value e.g. {'bucket_id': 123, 'bucket_max_size': '123GB'}
- */
- getResourceValue(itemPath, templatePath) {
- let resourcePath = this.fillTemplatePath(itemPath, templatePath);
- return this.getObjectValueByPath(resourcePath, this.runResults);
- }
-
- /**
- * Replaces id's in template path with id's from item path to form actual path to the object
- * @param itemPath e.g. s3.buckets.da1e7081077ce92.secure_transport_enabled
- * @param templatePath e.g. s3.buckets.id
- * @returns {*} e.g. s3.buckets.da1e7081077ce92
- */
- fillTemplatePath(itemPath, templatePath) {
- let itemPathArray = itemPath.split('.');
- let templatePathArray = templatePath.split('.');
- let resourcePathArray = templatePathArray.map((val, i) => {
- return val === 'id' ? itemPathArray[i] : val
- })
- return resourcePathArray.join('.');
- }
-
- /**
- * Retrieves value from ScoutSuite data object based on path, provided in the rule
- * @param path E.g. a.id.c.id.e
- * @param source E.g. {a: {b: {c: {d: {e: [{result1: 'result1'}, {result2: 'result2'}]}}}}}
- * @returns {*[]|*} E.g. ['result1', 'result2']
- */
- getObjectValueByPath(path, source) {
- let key;
-
- while (path) {
- key = this.getNextKeyInPath(path);
- source = this.getValueForKey(key, path, source);
- path = this.trimFirstKey(path);
- }
-
- return source;
- }
-
- /**
- * Gets next key from the path
- * @param path e.g. s3.buckets.id
- * @returns {string|*} s3
- */
- getNextKeyInPath(path) {
- if (path.indexOf('.') !== -1) {
- return path.substr(0, path.indexOf('.'));
- } else {
- return path;
- }
- }
-
- /**
- * Returns value from object, based on path and current key
- * @param key E.g. "a"
- * @param path E.g. "a.b.c"
- * @param source E.g. {a: {b: {c: 'result'}}}
- * @returns {[]|*} E.g. {b: {c: 'result'}}
- */
- getValueForKey(key, path, source) {
- if (key === 'id') {
- return this.getValueByReplacingUnknownKey(path, source);
- } else {
- return source[key];
- }
- }
-
- /**
- * Gets value from object if first key in path doesn't match source object
- * @param path unknown.b.c
- * @param source {a: {b: {c: [{result:'result'}]}}}
- * @returns {[]} 'result'
- */
- getValueByReplacingUnknownKey(path, source) {
- let value = [];
- for (let key in source) {
- value = this.getObjectValueByPath(this.replaceFirstKey(path, key), source);
- value = value.concat(Object.values(value));
- }
- return value;
- }
-
- /**
- * Replaces first key in path
- * @param path E.g. "one.two.three"
- * @param replacement E.g. "four"
- * @returns string E.g. "four.two.three"
- */
- replaceFirstKey(path, replacement) {
- return replacement + path.substr(path.indexOf('.'), path.length);
- }
-
- /**
- * Trims the first key from dot separated path.
- * @param path E.g. "one.two.three"
- * @returns {string|boolean} E.g. "two.three"
- */
- trimFirstKey(path) {
- if (path.indexOf('.') !== -1) {
- return path.substr(path.indexOf('.') + 1, path.length);
- } else {
- return false;
- }
- }
-
-
-}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleButton.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleButton.js
deleted file mode 100644
index 7ab5925a5..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleButton.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import React, {Component} from 'react';
-import {Button} from 'react-bootstrap';
-import * as PropTypes from 'prop-types';
-
-import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
-import {faList} from '@fortawesome/free-solid-svg-icons/faList';
-import ScoutSuiteRuleModal from './ScoutSuiteRuleModal';
-import CountBadge from '../../../ui-components/CountBadge';
-
-export default class ScoutSuiteRuleButton extends Component {
- constructor(props) {
- super(props);
- this.state = {
- isModalOpen: false
- }
- }
-
- toggleModal = () => {
- this.setState({isModalOpen: !this.state.isModalOpen});
- };
-
- render() {
- return (
- <>
-
-
-
-
- >);
- }
-
- createRuleCountBadge() {
-
- }
-}
-
-ScoutSuiteRuleButton.propTypes = {
- scoutsuite_rules: PropTypes.array,
- scoutsuite_data: PropTypes.object
-};
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleModal.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleModal.js
deleted file mode 100644
index fd7fa3851..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteRuleModal.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import React, {useState} from 'react';
-import {Modal} from 'react-bootstrap';
-import * as PropTypes from 'prop-types';
-import Pluralize from 'pluralize';
-import ScoutSuiteSingleRuleDropdown from './ScoutSuiteSingleRuleDropdown';
-import '../../../../styles/components/scoutsuite/RuleModal.scss';
-import STATUSES from '../../common/consts/StatusConsts';
-import {getRuleCountByStatus, sortRules} from './rule-parsing/ParsingUtils';
-
-
-export default function ScoutSuiteRuleModal(props) {
- const [openRuleId, setOpenRuleId] = useState(null)
-
- function toggleRuleDropdown(ruleId) {
- let ruleIdToSet = (openRuleId === ruleId) ? null : ruleId;
- setOpenRuleId(ruleIdToSet);
- }
-
- function renderRuleDropdowns() {
- let dropdowns = [];
- let rules = sortRules(props.scoutsuite_rules);
- rules.forEach(rule => {
- let dropdown = ( toggleRuleDropdown(rule.description)}
- rule={rule}
- scoutsuite_data={props.scoutsuite_data}
- key={rule.description + rule.path}/>)
- dropdowns.push(dropdown)
- });
- return dropdowns;
- }
-
- function getGeneralRuleOverview() {
- return <>
- There {Pluralize('is', props.scoutsuite_rules.length)}
- {props.scoutsuite_rules.length}
- ScoutSuite {Pluralize('rule', props.scoutsuite_rules.length)} associated with this finding.
- >
- }
-
- function getFailedRuleOverview() {
- let failedRuleCnt = getRuleCountByStatus(props.scoutsuite_rules, STATUSES.STATUS_FAILED) +
- + getRuleCountByStatus(props.scoutsuite_rules, STATUSES.STATUS_VERIFY);
- return <>
- {failedRuleCnt}
- failed security {Pluralize('rule', failedRuleCnt)}.
- >
- }
-
- function getPassedRuleOverview() {
- let passedRuleCnt = getRuleCountByStatus(props.scoutsuite_rules, STATUSES.STATUS_PASSED);
- return <>
- {passedRuleCnt}
- passed security {Pluralize('rule', passedRuleCnt)}.
- >
- }
-
- function getUnexecutedRuleOverview() {
- let unexecutedRuleCnt = getRuleCountByStatus(props.scoutsuite_rules, STATUSES.STATUS_UNEXECUTED);
- return <>
- {unexecutedRuleCnt}
- {Pluralize('rule', unexecutedRuleCnt)} {Pluralize('was', unexecutedRuleCnt)} not
- checked (no relevant resources for the rule).
- >
- }
-
- return (
-
-
props.hideCallback()} className={'scoutsuite-rule-modal'}>
-
-
-
ScoutSuite rules
-
-
-
- {getGeneralRuleOverview()}
- {getFailedRuleOverview()}
- {getPassedRuleOverview()}
- {getUnexecutedRuleOverview()}
-
- {renderRuleDropdowns()}
-
-
-
- );
-
-}
-
-ScoutSuiteRuleModal.propTypes = {
- isModalOpen: PropTypes.bool,
- scoutsuite_rules: PropTypes.array,
- scoutsuite_data: PropTypes.object,
- hideCallback: PropTypes.func
-};
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteSingleRuleDropdown.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteSingleRuleDropdown.js
deleted file mode 100644
index c396066b4..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/ScoutSuiteSingleRuleDropdown.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react';
-import Collapse from '@kunukn/react-collapse';
-import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'
-import {faChevronUp} from '@fortawesome/free-solid-svg-icons/faChevronUp'
-import {faChevronDown} from '@fortawesome/free-solid-svg-icons/faChevronDown'
-
-import classNames from 'classnames';
-import * as PropTypes from 'prop-types';
-import STATUSES from '../../common/consts/StatusConsts';
-import {faCheckCircle, faCircle, faExclamationCircle} from '@fortawesome/free-solid-svg-icons';
-import RuleDisplay from './RuleDisplay';
-import {getRuleStatus} from './rule-parsing/ParsingUtils';
-
-export default function ScoutSuiteSingleRuleDropdown(props) {
-
- function getRuleCollapse() {
- return (
-
-
-
-
- );
- }
-
- function getRuleIcon() {
- let ruleStatus = getRuleStatus(props.rule);
- switch (ruleStatus) {
- case STATUSES.STATUS_PASSED:
- return faCheckCircle;
- case STATUSES.STATUS_VERIFY:
- return faExclamationCircle;
- case STATUSES.STATUS_FAILED:
- return faExclamationCircle;
- case STATUSES.STATUS_UNEXECUTED:
- return faCircle;
- }
- }
-
- function getDropdownClass() {
- let ruleStatus = getRuleStatus(props.rule);
- switch (ruleStatus) {
- case STATUSES.STATUS_PASSED:
- return 'collapse-success';
- case STATUSES.STATUS_VERIFY:
- return 'collapse-danger';
- case STATUSES.STATUS_FAILED:
- return 'collapse-danger';
- case STATUSES.STATUS_UNEXECUTED:
- return 'collapse-default';
- }
- }
-
- function renderRule() {
- return
- }
-
- return getRuleCollapse();
-}
-
-
-ScoutSuiteSingleRuleDropdown.propTypes = {
- isCollapseOpen: PropTypes.bool,
- rule: PropTypes.object,
- scoutsuite_data: PropTypes.object,
- toggleCallback: PropTypes.func
-};
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/rule-parsing/ParsingUtils.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/rule-parsing/ParsingUtils.js
deleted file mode 100644
index da1417d1b..000000000
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/scoutsuite/rule-parsing/ParsingUtils.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import STATUSES from '../../../common/consts/StatusConsts';
-import RULE_LEVELS from '../../../common/consts/ScoutSuiteConsts/RuleLevels';
-
-export function getRuleStatus(rule) {
- if (rule.checked_items === 0) {
- return STATUSES.STATUS_UNEXECUTED
- } else if (rule.items.length === 0) {
- return STATUSES.STATUS_PASSED
- } else if (rule.level === RULE_LEVELS.LEVEL_WARNING) {
- return STATUSES.STATUS_VERIFY
- } else {
- return STATUSES.STATUS_FAILED
- }
-}
-
-export function getRuleCountByStatus(rules, status) {
- return rules.filter(rule => getRuleStatus(rule) === status).length;
-}
-
-export function sortRules(rules) {
- rules.sort(compareRules);
- return rules;
-}
-
-function compareRules(firstRule, secondRule) {
- let firstStatus = getRuleStatus(firstRule);
- let secondStatus = getRuleStatus(secondRule);
- return compareRuleStatuses(firstStatus, secondStatus);
-}
-
-function compareRuleStatuses(ruleStatusOne, ruleStatusTwo) {
- const severity_order = {
- [STATUSES.STATUS_FAILED]: 1,
- [STATUSES.STATUS_VERIFY]: 2,
- [STATUSES.STATUS_PASSED]: 3,
- [STATUSES.STATUS_UNEXECUTED]: 4
- }
-
- return severity_order[ruleStatusOne] - severity_order[ruleStatusTwo]
-}
diff --git a/monkey/monkey_island/cc/ui/src/styles/Main.scss b/monkey/monkey_island/cc/ui/src/styles/Main.scss
index 1609dffca..96f59895a 100644
--- a/monkey/monkey_island/cc/ui/src/styles/Main.scss
+++ b/monkey/monkey_island/cc/ui/src/styles/Main.scss
@@ -13,7 +13,6 @@
@import 'components/PreviewPane';
@import 'components/AdvancedMultiSelect';
@import 'components/particle-component/ParticleBackground';
-@import 'components/scoutsuite/ResourceDropdown';
@import 'components/ImageModal';
@import 'components/Icons';
@import 'components/inline-selection/InlineSelection';
diff --git a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/AWSSetup.scss b/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/AWSSetup.scss
deleted file mode 100644
index 8be9d1956..000000000
--- a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/AWSSetup.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-.aws-scoutsuite-configuration a {
- display: inline-block;
- padding: 0 0 3px 0;
-}
-
-.aws-scoutsuite-configuration ol {
- padding-left: 15px;
- margin-bottom: 30px;
-}
-
-.aws-scoutsuite-configuration ol.nested-ol {
- margin-bottom: 0;
-}
-
-.aws-scoutsuite-configuration li {
- margin-bottom: 0;
-}
-
-.aws-scoutsuite-configuration h2 {
- margin-bottom: 20px;
-}
-
-.aws-scoutsuite-configuration p {
- margin-bottom: 5px;
-}
-
-.aws-scoutsuite-configuration .cli-link {
- padding: 0 0 4px 0;
-}
-
-.monkey-submit-button {
- margin-bottom: 15px;
-}
-
-.aws-scoutsuite-key-configuration .collapse-item {
- padding: 0;
- margin-bottom: 15px;
-}
-
-.aws-scoutsuite-key-configuration .collapse-item .btn-collapse .question-icon {
- display: inline-block;
- margin-right: 7px;
- margin-bottom: 1px;
-}
-
-.aws-scoutsuite-key-configuration .collapse-item .btn-collapse p {
- display: inline-block;
- margin-bottom: 0;
- font-size: 1.2em;
- margin-left: 5px
-}
-
-.aws-scoutsuite-key-configuration .key-creation-tutorial {
- padding-bottom: 10px;
-}
-
-.aws-scoutsuite-key-configuration .key-creation-tutorial p {
- margin-bottom: 2px;
- font-weight: 400;
-}
-
-.aws-scoutsuite-key-configuration .key-creation-tutorial h5 {
- margin-top: 15px;
- font-weight: 600;
-}
-
-.aws-scoutsuite-key-configuration .key-creation-tutorial p:first-child {
- margin-top: 15px;
-}
-
-.aws-scoutsuite-key-configuration .image-modal {
- margin-top: 5px;
-}
-
-.aws-scoutsuite-key-configuration .key-creation-tutorial img {
- max-width: 100%;
- max-height: 100%;
- border: 1px solid black;
-}
-
-.link-in-success-message {
- padding: 0 !important;
- vertical-align: initial !important;
-}
-
-
diff --git a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/ResourceDropdown.scss b/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/ResourceDropdown.scss
deleted file mode 100644
index e09ad922c..000000000
--- a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/ResourceDropdown.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-.resource-display {
- margin-top: 10px;
-}
-
-.resource-display .resource-value-json {
- background-color: $gray-200;
- padding: 4px;
-}
-
-.resource-display .resource-path-contents svg {
- margin-left: 5px;
- margin-right: 5px;
- width: 10px;
-}
-
-.resource-display .resource-value-title,
-.resource-display .resource-path-title {
- margin-right:5px;
- font-weight: 500;
- margin-bottom: 0;
-}
diff --git a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleDisplay.scss b/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleDisplay.scss
deleted file mode 100644
index 703e27370..000000000
--- a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleDisplay.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-.scoutsuite-rule-display .description h3{
- font-size: 1.2em;
- margin-top: 10px;
-}
-
-.scoutsuite-rule-display p{
- display: inline-block;
-}
-
-.scoutsuite-rule-display .checked-resources-title,
-.scoutsuite-rule-display .flagged-resources-title,
-.scoutsuite-rule-display .reference-list-title{
- font-weight: 500;
- margin-right: 5px;
- margin-bottom: 0;
-}
-
-.scoutsuite-rule-display .reference-list a {
- display: block;
- margin-left: 10px;
-}
diff --git a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleModal.scss b/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleModal.scss
deleted file mode 100644
index 970f0422a..000000000
--- a/monkey/monkey_island/cc/ui/src/styles/components/scoutsuite/RuleModal.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-.scoutsuite-rule-modal .modal-dialog {
- max-width: 1000px;
- top: 0;
- padding: 30px;
-}
-
-.collapse-item.rule-collapse button > span:nth-child(2) {
- flex: 1
-}
diff --git a/monkey/tests/unit_tests/common/network/test_network_utils.py b/monkey/tests/unit_tests/common/network/test_network_utils.py
index e7d82e649..969837ee5 100644
--- a/monkey/tests/unit_tests/common/network/test_network_utils.py
+++ b/monkey/tests/unit_tests/common/network/test_network_utils.py
@@ -1,20 +1,9 @@
from unittest import TestCase
-from common.network.network_utils import (
- address_to_ip_port,
- get_host_from_network_location,
- remove_port,
-)
+from common.network.network_utils import address_to_ip_port, remove_port
class TestNetworkUtils(TestCase):
- def test_get_host_from_network_location(self):
- assert get_host_from_network_location("127.0.0.1:12345") == "127.0.0.1"
- assert get_host_from_network_location("127.0.0.1:12345") == "127.0.0.1"
- assert get_host_from_network_location("127.0.0.1") == "127.0.0.1"
- assert get_host_from_network_location("www.google.com:8080") == "www.google.com"
- assert get_host_from_network_location("user:password@host:8080") == "host"
-
def test_remove_port_from_url(self):
assert remove_port("https://google.com:80") == "https://google.com"
assert remove_port("https://8.8.8.8:65336") == "https://8.8.8.8"
diff --git a/monkey/tests/unit_tests/monkey_island/cc/models/zero_trust/test_scoutsuite_finding.py b/monkey/tests/unit_tests/monkey_island/cc/models/zero_trust/test_scoutsuite_finding.py
deleted file mode 100644
index 952d87289..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/models/zero_trust/test_scoutsuite_finding.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import pytest
-from mongoengine import ValidationError
-from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.scoutsuite_finding_data import ( # noqa: E501
- RULES,
-)
-
-import common.common_consts.zero_trust_consts as zero_trust_consts
-from monkey_island.cc.models.zero_trust.finding import Finding
-from monkey_island.cc.models.zero_trust.monkey_finding_details import MonkeyFindingDetails
-from monkey_island.cc.models.zero_trust.scoutsuite_finding import ScoutSuiteFinding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding_details import ScoutSuiteFindingDetails
-
-MONKEY_FINDING_DETAIL_MOCK = MonkeyFindingDetails()
-MONKEY_FINDING_DETAIL_MOCK.events = ["mock1", "mock2"]
-SCOUTSUITE_FINDING_DETAIL_MOCK = ScoutSuiteFindingDetails()
-SCOUTSUITE_FINDING_DETAIL_MOCK.scoutsuite_rules = []
-
-
-class TestScoutSuiteFinding:
- @pytest.mark.usefixtures("uses_database")
- def test_save_finding_validation(self):
- with pytest.raises(ValidationError):
- _ = ScoutSuiteFinding.save_finding(
- test=zero_trust_consts.TEST_SEGMENTATION,
- status="bla bla",
- detail_ref=SCOUTSUITE_FINDING_DETAIL_MOCK,
- )
-
- @pytest.mark.usefixtures("uses_database")
- def test_save_finding_sanity(self):
- assert len(Finding.objects(test=zero_trust_consts.TEST_SEGMENTATION)) == 0
-
- rule_example = RULES[0]
- scoutsuite_details_example = ScoutSuiteFindingDetails()
- scoutsuite_details_example.scoutsuite_rules.append(rule_example)
- scoutsuite_details_example.save()
- ScoutSuiteFinding.save_finding(
- test=zero_trust_consts.TEST_SEGMENTATION,
- status=zero_trust_consts.STATUS_FAILED,
- detail_ref=scoutsuite_details_example,
- )
-
- assert len(ScoutSuiteFinding.objects(test=zero_trust_consts.TEST_SEGMENTATION)) == 1
- assert len(ScoutSuiteFinding.objects(status=zero_trust_consts.STATUS_FAILED)) == 1
- assert len(Finding.objects(status=zero_trust_consts.STATUS_FAILED)) == 1
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/raw_scoutsute_data.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/raw_scoutsute_data.py
deleted file mode 100644
index 9905868af..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/raw_scoutsute_data.py
+++ /dev/null
@@ -1,169 +0,0 @@
-# This is what our codebase receives after running ScoutSuite module.
-# Object '...': {'...': '...'} represents continuation of similar objects as above
-RAW_SCOUTSUITE_DATA = {
- "sg_map": {
- "sg-abc": {"region": "ap-northeast-1", "vpc_id": "vpc-abc"},
- "sg-abcd": {"region": "ap-northeast-2", "vpc_id": "vpc-abc"},
- "...": {"...": "..."},
- },
- "subnet_map": {
- "subnet-abc": {"region": "ap-northeast-1", "vpc_id": "vpc-abc"},
- "subnet-abcd": {"region": "ap-northeast-1", "vpc_id": "vpc-abc"},
- "...": {"...": "..."},
- },
- "provider_code": "aws",
- "provider_name": "Amazon Web Services",
- "environment": None,
- "result_format": "json",
- "partition": "aws",
- "account_id": "125686982355",
- "last_run": {
- "time": "2021-02-05 16:03:04+0200",
- "run_parameters": {
- "services": [],
- "skipped_services": [],
- "regions": [],
- "excluded_regions": [],
- },
- "version": "5.10.0",
- "ruleset_name": "default",
- "ruleset_about": "This ruleset",
- "summary": {
- "ec2": {
- "checked_items": 3747,
- "flagged_items": 262,
- "max_level": "warning",
- "rules_count": 28,
- "resources_count": 176,
- },
- "s3": {
- "checked_items": 88,
- "flagged_items": 25,
- "max_level": "danger",
- "rules_count": 18,
- "resources_count": 5,
- },
- "...": {"...": "..."},
- },
- },
- "metadata": {
- "compute": {
- "summaries": {
- "external attack surface": {
- "cols": 1,
- "path": "service_groups.compute.summaries.external_attack_surface",
- "callbacks": [["merge", {"attribute": "external_attack_surface"}]],
- }
- },
- "...": {"...": "..."},
- },
- "...": {"...": "..."},
- },
- # This is the important part, which we parse to get resources
- "services": {
- "ec2": {
- "regions": {
- "ap-northeast-1": {
- "vpcs": {
- "vpc-abc": {
- "id": "vpc-abc",
- "security_groups": {
- "sg-abc": {
- "name": "default",
- "rules": {
- "ingress": {
- "protocols": {
- "ALL": {
- "ports": {
- "1-65535": {
- "cidrs": [{"CIDR": "0.0.0.0/0"}]
- }
- }
- }
- },
- "count": 1,
- },
- "egress": {
- "protocols": {
- "ALL": {
- "ports": {
- "1-65535": {
- "cidrs": [{"CIDR": "0.0.0.0/0"}]
- }
- }
- }
- },
- "count": 1,
- },
- },
- }
- },
- }
- },
- "...": {"...": "..."},
- }
- },
- # Interesting info, maybe could be used somewhere in the report
- "external_attack_surface": {
- "52.52.52.52": {
- "protocols": {"TCP": {"ports": {"22": {"cidrs": [{"CIDR": "0.0.0.0/0"}]}}}},
- "InstanceName": "InstanceName",
- "PublicDnsName": "ec2-52-52-52-52.eu-central-1.compute.amazonaws.com",
- }
- },
- # We parse these into ScoutSuite security rules
- "findings": {
- "ec2-security-group-opens-all-ports-to-all": {
- "description": "Security Group Opens All Ports to All",
- "path": "ec2.regions.id.vpcs.id.security_groups"
- ".id.rules.id.protocols.id.ports.id.cidrs.id.CIDR",
- "level": "danger",
- "display_path": "ec2.regions.id.vpcs.id.security_groups.id",
- "items": [
- "ec2.regions.ap-northeast-1.vpcs.vpc-abc.security_groups"
- ".sg-abc.rules.ingress.protocols.ALL.ports.1-65535.cidrs.0.CIDR"
- ],
- "dashboard_name": "Rules",
- "checked_items": 179,
- "flagged_items": 2,
- "service": "EC2",
- "rationale": "It was detected that all ports in the security group are "
- "open <...>",
- "remediation": None,
- "compliance": None,
- "references": None,
- },
- "...": {"...": "..."},
- },
- },
- "...": {"...": "..."},
- },
- "service_list": [
- "acm",
- "awslambda",
- "cloudformation",
- "cloudtrail",
- "cloudwatch",
- "config",
- "directconnect",
- "dynamodb",
- "ec2",
- "efs",
- "elasticache",
- "elb",
- "elbv2",
- "emr",
- "iam",
- "kms",
- "rds",
- "redshift",
- "route53",
- "s3",
- "ses",
- "sns",
- "sqs",
- "vpc",
- "secretsmanager",
- ],
- "service_groups": {"...": {"...": "..."}},
-}
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/test_rule_parser.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/test_rule_parser.py
deleted file mode 100644
index 819d6fe76..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/data_parsing/test_rule_parser.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from enum import Enum
-
-import pytest
-from tests.unit_tests.monkey_island.cc.services.zero_trust.raw_scoutsute_data import (
- RAW_SCOUTSUITE_DATA,
-)
-
-from common.utils.exceptions import RulePathCreatorNotFound
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_names.ec2_rules import EC2Rules
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.service_consts import SERVICES
-from monkey_island.cc.services.zero_trust.scoutsuite.data_parsing.rule_parser import RuleParser
-
-
-class ExampleRules(Enum):
- NON_EXSISTENT_RULE = "bogus_rule"
-
-
-ALL_PORTS_OPEN = EC2Rules.SECURITY_GROUP_ALL_PORTS_TO_ALL
-
-EXPECTED_RESULT = {
- "description": "Security Group Opens All Ports to All",
- "path": "ec2.regions.id.vpcs.id.security_groups.id.rules.id.protocols.id.ports.id"
- ".cidrs.id.CIDR",
- "level": "danger",
- "display_path": "ec2.regions.id.vpcs.id.security_groups.id",
- "items": [
- "ec2.regions.ap-northeast-1.vpcs.vpc-abc.security_groups."
- "sg-abc.rules.ingress.protocols.ALL.ports.1-65535.cidrs.0.CIDR"
- ],
- "dashboard_name": "Rules",
- "checked_items": 179,
- "flagged_items": 2,
- "service": "EC2",
- "rationale": "It was detected that all ports in the security group are open <...>",
- "remediation": None,
- "compliance": None,
- "references": None,
-}
-
-
-def test_get_rule_data():
- # Test proper parsing of the raw data to rule
- results = RuleParser.get_rule_data(RAW_SCOUTSUITE_DATA[SERVICES], ALL_PORTS_OPEN)
- assert results == EXPECTED_RESULT
-
- with pytest.raises(RulePathCreatorNotFound):
- RuleParser.get_rule_data(RAW_SCOUTSUITE_DATA[SERVICES], ExampleRules.NON_EXSISTENT_RULE)
- pass
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_auth_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_auth_service.py
deleted file mode 100644
index 39dfd7ae5..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_auth_service.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from unittest.mock import MagicMock
-
-import dpath.util
-import pytest
-
-from common.config_value_paths import AWS_KEYS_PATH
-from monkey_island.cc.database import mongo
-from monkey_island.cc.server_utils.encryption import get_datastore_encryptor
-from monkey_island.cc.services.config import ConfigService
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_auth_service import (
- is_aws_keys_setup,
-)
-
-
-class MockObject:
- pass
-
-
-@pytest.mark.slow
-@pytest.mark.usefixtures("uses_database", "uses_encryptor")
-def test_is_aws_keys_setup(tmp_path):
- # Mock default configuration
- ConfigService.init_default_config()
- mongo.db = MockObject()
- mongo.db.config = MockObject()
- ConfigService.encrypt_config(ConfigService.default_config)
- mongo.db.config.find_one = MagicMock(return_value=ConfigService.default_config)
- assert not is_aws_keys_setup()
-
- bogus_key_value = get_datastore_encryptor().encrypt("bogus_aws_key")
- dpath.util.set(
- ConfigService.default_config, AWS_KEYS_PATH + ["aws_secret_access_key"], bogus_key_value
- )
- dpath.util.set(
- ConfigService.default_config, AWS_KEYS_PATH + ["aws_access_key_id"], bogus_key_value
- )
-
- assert is_aws_keys_setup()
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_rule_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_rule_service.py
deleted file mode 100644
index d389ce904..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_rule_service.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from copy import deepcopy
-
-from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.scoutsuite_finding_data import ( # noqa: E501
- RULES,
-)
-
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.rule_consts import (
- RULE_LEVEL_DANGER,
- RULE_LEVEL_WARNING,
-)
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_rule_service import (
- ScoutSuiteRuleService,
-)
-
-example_scoutsuite_data = {
- "checked_items": 179,
- "compliance": None,
- "dashboard_name": "Rules",
- "description": "Security Group Opens All Ports to All",
- "flagged_items": 2,
- "items": [
- "ec2.regions.eu-central-1.vpcs.vpc-0ee259b1a13c50229.security_groups.sg-035779fe5c293fc72"
- ".rules.ingress.protocols.ALL.ports.1-65535.cidrs.2.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-00015526b6695f9aa.security_groups.sg-019eb67135ec81e65"
- ".rules.ingress.protocols.ALL.ports.1-65535.cidrs.0.CIDR",
- ],
- "level": "danger",
- "path": "ec2.regions.id.vpcs.id.security_groups.id.rules.id.protocols.id.ports.id"
- ".cidrs.id.CIDR",
- "rationale": "It was detected that all ports in the security group are open, "
- "and any source IP address"
- " could send traffic to these ports, which creates a wider attack surface "
- "for resources "
- "assigned to it. Open ports should be reduced to the minimum needed to "
- "correctly",
- "references": [],
- "remediation": None,
- "service": "EC2",
-}
-
-
-def test_get_rule_from_rule_data():
- assert ScoutSuiteRuleService.get_rule_from_rule_data(example_scoutsuite_data) == RULES[0]
-
-
-def test_is_rule_dangerous():
- test_rule = deepcopy(RULES[0])
- assert ScoutSuiteRuleService.is_rule_dangerous(test_rule)
-
- test_rule.level = RULE_LEVEL_WARNING
- assert not ScoutSuiteRuleService.is_rule_dangerous(test_rule)
-
- test_rule.level = RULE_LEVEL_DANGER
- test_rule.items = []
- assert not ScoutSuiteRuleService.is_rule_dangerous(test_rule)
-
-
-def test_is_rule_warning():
- test_rule = deepcopy(RULES[0])
- assert not ScoutSuiteRuleService.is_rule_warning(test_rule)
-
- test_rule.level = RULE_LEVEL_WARNING
- assert ScoutSuiteRuleService.is_rule_warning(test_rule)
-
- test_rule.items = []
- assert not ScoutSuiteRuleService.is_rule_warning(test_rule)
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_zt_finding_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_zt_finding_service.py
deleted file mode 100644
index 33e9fd34b..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/scoutsuite/test_scoutsuite_zt_finding_service.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import pytest
-from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.scoutsuite_finding_data import ( # noqa: E501
- RULES,
- SCOUTSUITE_FINDINGS,
-)
-
-from monkey_island.cc.models.zero_trust.finding import Finding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding import ScoutSuiteFinding
-from monkey_island.cc.services.zero_trust.scoutsuite.scoutsuite_zt_finding_service import (
- ScoutSuiteZTFindingService,
-)
-
-
-class TestScoutSuiteZTFindingService:
- @pytest.mark.usefixtures("uses_database")
- def test_process_rule(self):
- # Creates new PermissiveFirewallRules finding with a rule
- ScoutSuiteZTFindingService.process_rule(SCOUTSUITE_FINDINGS[0], RULES[0])
- findings = list(Finding.objects())
- assert len(findings) == 1
- assert type(findings[0]) == ScoutSuiteFinding
- # Assert that details were created properly
- details = findings[0].details.fetch()
- assert len(details.scoutsuite_rules) == 1
- assert details.scoutsuite_rules[0] == RULES[0]
-
- # Rule processing should add rule to an already existing finding
- ScoutSuiteZTFindingService.process_rule(SCOUTSUITE_FINDINGS[0], RULES[1])
- findings = list(ScoutSuiteFinding.objects())
- assert len(findings) == 1
- assert type(findings[0]) == ScoutSuiteFinding
- # Assert that details were created properly
- details = findings[0].details.fetch()
- assert len(details.scoutsuite_rules) == 2
- assert details.scoutsuite_rules[1] == RULES[1]
-
- # New finding created
- ScoutSuiteZTFindingService.process_rule(SCOUTSUITE_FINDINGS[1], RULES[1])
- findings = list(Finding.objects())
- assert len(findings) == 2
- assert type(findings[0]) == ScoutSuiteFinding
- # Assert that details were created properly
- details = findings[1].details.fetch()
- assert len(details.scoutsuite_rules) == 1
- assert details.scoutsuite_rules[0] == RULES[1]
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/example_finding_data.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/example_finding_data.py
index 31cd709b9..5f40f9a42 100644
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/example_finding_data.py
+++ b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/example_finding_data.py
@@ -1,35 +1,17 @@
from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.finding_data import (
get_monkey_finding_dto,
- get_scoutsuite_finding_dto,
)
from common.common_consts import zero_trust_consts
def save_example_findings():
- # devices passed = 1
- _save_finding_with_status(
- "scoutsuite",
- zero_trust_consts.TEST_ENDPOINT_SECURITY_EXISTS,
- zero_trust_consts.STATUS_PASSED,
- )
- # devices passed = 2
- _save_finding_with_status(
- "scoutsuite",
- zero_trust_consts.TEST_ENDPOINT_SECURITY_EXISTS,
- zero_trust_consts.STATUS_PASSED,
- )
# devices failed = 1
_save_finding_with_status(
"monkey", zero_trust_consts.TEST_ENDPOINT_SECURITY_EXISTS, zero_trust_consts.STATUS_FAILED
)
# people verify = 1
# networks verify = 1
- _save_finding_with_status(
- "scoutsuite", zero_trust_consts.TEST_SCHEDULED_EXECUTION, zero_trust_consts.STATUS_VERIFY
- )
- # people verify = 2
- # networks verify = 2
_save_finding_with_status(
"monkey", zero_trust_consts.TEST_SCHEDULED_EXECUTION, zero_trust_consts.STATUS_VERIFY
)
@@ -39,24 +21,12 @@ def save_example_findings():
)
# data failed 2
_save_finding_with_status(
- "scoutsuite",
- zero_trust_consts.TEST_SCOUTSUITE_UNENCRYPTED_DATA,
- zero_trust_consts.STATUS_FAILED,
+ "monkey", zero_trust_consts.TEST_DATA_ENDPOINT_HTTP, zero_trust_consts.STATUS_FAILED
)
# data failed 3
_save_finding_with_status(
"monkey", zero_trust_consts.TEST_DATA_ENDPOINT_HTTP, zero_trust_consts.STATUS_FAILED
)
- # data failed 4
- _save_finding_with_status(
- "monkey", zero_trust_consts.TEST_DATA_ENDPOINT_HTTP, zero_trust_consts.STATUS_FAILED
- )
- # data failed 5
- _save_finding_with_status(
- "scoutsuite",
- zero_trust_consts.TEST_SCOUTSUITE_UNENCRYPTED_DATA,
- zero_trust_consts.STATUS_FAILED,
- )
# data verify 1
_save_finding_with_status(
"monkey", zero_trust_consts.TEST_DATA_ENDPOINT_HTTP, zero_trust_consts.STATUS_VERIFY
@@ -65,19 +35,10 @@ def save_example_findings():
_save_finding_with_status(
"monkey", zero_trust_consts.TEST_DATA_ENDPOINT_HTTP, zero_trust_consts.STATUS_VERIFY
)
- # data passed 1
- _save_finding_with_status(
- "scoutsuite",
- zero_trust_consts.TEST_SCOUTSUITE_UNENCRYPTED_DATA,
- zero_trust_consts.STATUS_PASSED,
- )
def _save_finding_with_status(finding_type: str, test: str, status: str):
- if finding_type == "scoutsuite":
- finding = get_scoutsuite_finding_dto()
- else:
- finding = get_monkey_finding_dto()
+ finding = get_monkey_finding_dto()
finding.test = test
finding.status = status
finding.save()
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/finding_data.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/finding_data.py
index 838035cbf..0304b8523 100644
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/finding_data.py
+++ b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/finding_data.py
@@ -1,27 +1,14 @@
from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.monkey_finding_data import (
get_monkey_details_dto,
)
-from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.scoutsuite_finding_data import ( # noqa: E501
- get_scoutsuite_details_dto,
-)
from common.common_consts.zero_trust_consts import (
STATUS_FAILED,
STATUS_PASSED,
TEST_ENDPOINT_SECURITY_EXISTS,
- TEST_SCOUTSUITE_SERVICE_SECURITY,
)
from monkey_island.cc.models.zero_trust.finding import Finding
from monkey_island.cc.models.zero_trust.monkey_finding import MonkeyFinding
-from monkey_island.cc.models.zero_trust.scoutsuite_finding import ScoutSuiteFinding
-
-
-def get_scoutsuite_finding_dto() -> Finding:
- scoutsuite_details = get_scoutsuite_details_dto()
- scoutsuite_details.save()
- return ScoutSuiteFinding(
- test=TEST_SCOUTSUITE_SERVICE_SECURITY, status=STATUS_FAILED, details=scoutsuite_details
- )
def get_monkey_finding_dto() -> Finding:
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/scoutsuite_finding_data.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/scoutsuite_finding_data.py
deleted file mode 100644
index 2302b68e9..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/test_common/scoutsuite_finding_data.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from monkey_island.cc.models.zero_trust.scoutsuite_finding_details import ScoutSuiteFindingDetails
-from monkey_island.cc.models.zero_trust.scoutsuite_rule import ScoutSuiteRule
-from monkey_island.cc.services.zero_trust.scoutsuite.consts.scoutsuite_finding_maps import (
- PermissiveFirewallRules,
- UnencryptedData,
-)
-
-SCOUTSUITE_FINDINGS = [PermissiveFirewallRules, UnencryptedData]
-
-RULES = [
- ScoutSuiteRule(
- checked_items=179,
- compliance=None,
- dashboard_name="Rules",
- description="Security Group Opens All Ports to All",
- flagged_items=2,
- items=[
- "ec2.regions.eu-central-1.vpcs.vpc-0ee259b1a13c50229.security_groups.sg"
- "-035779fe5c293fc72"
- ".rules.ingress.protocols.ALL.ports.1-65535.cidrs.2.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-00015526b6695f9aa.security_groups.sg"
- "-019eb67135ec81e65"
- ".rules.ingress.protocols.ALL.ports.1-65535.cidrs.0.CIDR",
- ],
- level="danger",
- path="ec2.regions.id.vpcs.id.security_groups.id.rules.id.protocols.id.ports.id.cidrs"
- ".id.CIDR",
- rationale="It was detected that all ports in the security group are open, "
- "and any source IP address"
- " could send traffic to these ports, which creates a wider attack surface "
- "for resources "
- "assigned to it. Open ports should be reduced to the minimum needed to "
- "correctly",
- references=[],
- remediation=None,
- service="EC2",
- ),
- ScoutSuiteRule(
- checked_items=179,
- compliance=[
- {"name": "CIS Amazon Web Services Foundations", "version": "1.0.0", "reference": "4.1"},
- {"name": "CIS Amazon Web Services Foundations", "version": "1.0.0", "reference": "4.2"},
- {"name": "CIS Amazon Web Services Foundations", "version": "1.1.0", "reference": "4.1"},
- {"name": "CIS Amazon Web Services Foundations", "version": "1.1.0", "reference": "4.2"},
- {"name": "CIS Amazon Web Services Foundations", "version": "1.2.0", "reference": "4.1"},
- {"name": "CIS Amazon Web Services Foundations", "version": "1.2.0", "reference": "4.2"},
- ],
- dashboard_name="Rules",
- description="Security Group Opens RDP Port to All",
- flagged_items=7,
- items=[
- "ec2.regions.eu-central-1.vpcs.vpc-076500a2138ee09da.security_groups.sg"
- "-00bdef5951797199c"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-d33026b8.security_groups.sg-007931ba8a364e330"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-d33026b8.security_groups.sg-05014daf996b042dd"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-d33026b8.security_groups.sg-0c745fe56c66335b2"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.eu-central-1.vpcs.vpc-d33026b8.security_groups.sg-0f99b85cfad63d1b1"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.us-east-1.vpcs.vpc-9e56cae4.security_groups.sg-0dc253aa79062835a"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- "ec2.regions.us-east-1.vpcs.vpc-002d543353cd4e97d.security_groups.sg"
- "-01902f153d4f938da"
- ".rules.ingress.protocols.TCP.ports.3389.cidrs.0.CIDR",
- ],
- level="danger",
- path="ec2.regions.id.vpcs.id.security_groups.id.rules.id.protocols.id.ports.id.cidrs"
- ".id.CIDR",
- rationale="The security group was found to be exposing a well-known port to all "
- "source addresses."
- " Well-known ports are commonly probed by automated scanning tools, "
- "and could be an indicator "
- "of sensitive services exposed to Internet. If such services need to be "
- "expos",
- references=[],
- remediation="Remove the inbound rules that expose open ports",
- service="EC2",
- ),
-]
-
-
-def get_scoutsuite_details_dto() -> ScoutSuiteFindingDetails:
- scoutsuite_details = ScoutSuiteFindingDetails()
- scoutsuite_details.scoutsuite_rules.append(RULES[0])
- scoutsuite_details.scoutsuite_rules.append(RULES[1])
- return scoutsuite_details
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_finding_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_finding_service.py
deleted file mode 100644
index 4c2c1527f..000000000
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_finding_service.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from unittest.mock import MagicMock
-
-import pytest
-from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.finding_data import (
- get_monkey_finding_dto,
- get_scoutsuite_finding_dto,
-)
-
-from common.common_consts.zero_trust_consts import (
- DEVICES,
- NETWORKS,
- STATUS_FAILED,
- STATUS_PASSED,
- TEST_ENDPOINT_SECURITY_EXISTS,
- TEST_SCOUTSUITE_SERVICE_SECURITY,
- TESTS_MAP,
-)
-from monkey_island.cc.services.zero_trust.monkey_findings.monkey_zt_details_service import (
- MonkeyZTDetailsService,
-)
-from monkey_island.cc.services.zero_trust.zero_trust_report.finding_service import (
- EnrichedFinding,
- FindingService,
-)
-
-
-@pytest.mark.usefixtures("uses_database")
-def test_get_all_findings():
- get_scoutsuite_finding_dto().save()
- get_monkey_finding_dto().save()
-
- # This method fails due to mongomock not being able to simulate $unset, so don't test details
- MonkeyZTDetailsService.fetch_details_for_display = MagicMock(return_value=None)
-
- findings = FindingService.get_all_findings_for_ui()
-
- description = TESTS_MAP[TEST_SCOUTSUITE_SERVICE_SECURITY]["finding_explanation"][STATUS_FAILED]
- expected_finding0 = EnrichedFinding(
- finding_id=findings[0].finding_id,
- pillars=[DEVICES, NETWORKS],
- status=STATUS_FAILED,
- test=description,
- test_key=TEST_SCOUTSUITE_SERVICE_SECURITY,
- details=None,
- )
-
- description = TESTS_MAP[TEST_ENDPOINT_SECURITY_EXISTS]["finding_explanation"][STATUS_PASSED]
- expected_finding1 = EnrichedFinding(
- finding_id=findings[1].finding_id,
- pillars=[DEVICES],
- status=STATUS_PASSED,
- test=description,
- test_key=TEST_ENDPOINT_SECURITY_EXISTS,
- details=None,
- )
-
- # Don't test details
- details = []
- for finding in findings:
- details.append(finding.details)
- finding.details = None
-
- assert findings[0] == expected_finding0
- assert findings[1] == expected_finding1
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_pillar_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_pillar_service.py
index 1be9f2fcb..39913a17c 100644
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_pillar_service.py
+++ b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_pillar_service.py
@@ -29,34 +29,34 @@ def test_get_pillars_grades():
def _get_expected_pillar_grades() -> List[dict]:
return [
{
- zero_trust_consts.STATUS_FAILED: 5,
+ zero_trust_consts.STATUS_FAILED: 3,
zero_trust_consts.STATUS_VERIFY: 2,
- zero_trust_consts.STATUS_PASSED: 1,
- # 2 different tests of DATA pillar were executed in _save_findings()
- zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(DATA) - 2,
+ zero_trust_consts.STATUS_PASSED: 0,
+ # 1 test of DATA pillar was executed in save_example_findings()
+ zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(DATA) - 1,
"pillar": "Data",
},
{
zero_trust_consts.STATUS_FAILED: 0,
- zero_trust_consts.STATUS_VERIFY: 2,
+ zero_trust_consts.STATUS_VERIFY: 1,
zero_trust_consts.STATUS_PASSED: 0,
- # 1 test of PEOPLE pillar were executed in _save_findings()
+ # 1 test of PEOPLE pillar was executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(PEOPLE) - 1,
"pillar": "People",
},
{
zero_trust_consts.STATUS_FAILED: 0,
- zero_trust_consts.STATUS_VERIFY: 2,
+ zero_trust_consts.STATUS_VERIFY: 1,
zero_trust_consts.STATUS_PASSED: 0,
- # 1 different tests of NETWORKS pillar were executed in _save_findings()
+ # 1 test of NETWORKS pillar was executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(NETWORKS) - 1,
"pillar": "Networks",
},
{
zero_trust_consts.STATUS_FAILED: 1,
zero_trust_consts.STATUS_VERIFY: 0,
- zero_trust_consts.STATUS_PASSED: 2,
- # 1 different tests of DEVICES pillar were executed in _save_findings()
+ zero_trust_consts.STATUS_PASSED: 0,
+ # 1 test of DEVICES pillar was executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(DEVICES) - 1,
"pillar": "Devices",
},
@@ -64,7 +64,7 @@ def _get_expected_pillar_grades() -> List[dict]:
zero_trust_consts.STATUS_FAILED: 0,
zero_trust_consts.STATUS_VERIFY: 0,
zero_trust_consts.STATUS_PASSED: 0,
- # 0 different tests of WORKLOADS pillar were executed in _save_findings()
+ # 0 tests of WORKLOADS pillar were executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(WORKLOADS),
"pillar": "Workloads",
},
@@ -72,7 +72,7 @@ def _get_expected_pillar_grades() -> List[dict]:
zero_trust_consts.STATUS_FAILED: 0,
zero_trust_consts.STATUS_VERIFY: 0,
zero_trust_consts.STATUS_PASSED: 0,
- # 0 different tests of VISIBILITY_ANALYTICS pillar were executed in _save_findings()
+ # 0 tests of VISIBILITY_ANALYTICS pillar were executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(VISIBILITY_ANALYTICS),
"pillar": "Visibility & Analytics",
},
@@ -80,7 +80,7 @@ def _get_expected_pillar_grades() -> List[dict]:
zero_trust_consts.STATUS_FAILED: 0,
zero_trust_consts.STATUS_VERIFY: 0,
zero_trust_consts.STATUS_PASSED: 0,
- # 0 different tests of AUTOMATION_ORCHESTRATION pillar were executed in _save_findings()
+ # 0 tests of AUTOMATION_ORCHESTRATION pillar were executed in save_example_findings()
zero_trust_consts.STATUS_UNEXECUTED: _get_cnt_of_tests_in_pillar(
AUTOMATION_ORCHESTRATION
),
diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_principle_service.py b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_principle_service.py
index 7bd2b01c7..c1639b9d8 100644
--- a/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_principle_service.py
+++ b/monkey/tests/unit_tests/monkey_island/cc/services/zero_trust/zero_trust_report/test_principle_service.py
@@ -1,7 +1,6 @@
import pytest
from tests.unit_tests.monkey_island.cc.services.zero_trust.test_common.finding_data import (
get_monkey_finding_dto,
- get_scoutsuite_finding_dto,
)
from common.common_consts import zero_trust_consts
@@ -13,10 +12,9 @@ EXPECTED_DICT = {
"test_pillar1": [
{
"principle": "Test principle description2",
- "status": zero_trust_consts.STATUS_FAILED,
+ "status": zero_trust_consts.STATUS_PASSED,
"tests": [
{"status": zero_trust_consts.STATUS_PASSED, "test": "You ran a test2"},
- {"status": zero_trust_consts.STATUS_FAILED, "test": "You ran a test3"},
],
}
],
@@ -28,10 +26,9 @@ EXPECTED_DICT = {
},
{
"principle": "Test principle description2",
- "status": zero_trust_consts.STATUS_FAILED,
+ "status": zero_trust_consts.STATUS_PASSED,
"tests": [
{"status": zero_trust_consts.STATUS_PASSED, "test": "You ran a test2"},
- {"status": zero_trust_consts.STATUS_FAILED, "test": "You ran a test3"},
],
},
],
@@ -46,7 +43,7 @@ def test_get_principles_status():
principles_to_tests = {
"network_policies": ["segmentation"],
- "endpoint_security": ["tunneling", "scoutsuite_service_security"],
+ "endpoint_security": ["tunneling"],
}
zero_trust_consts.PRINCIPLES_TO_TESTS = principles_to_tests
@@ -65,7 +62,6 @@ def test_get_principles_status():
tests_map = {
"segmentation": {"explanation": "You ran a test1"},
"tunneling": {"explanation": "You ran a test2"},
- "scoutsuite_service_security": {"explanation": "You ran a test3"},
}
zero_trust_consts.TESTS_MAP = tests_map
@@ -77,10 +73,6 @@ def test_get_principles_status():
monkey_finding.test = "tunneling"
monkey_finding.save()
- scoutsuite_finding = get_scoutsuite_finding_dto()
- scoutsuite_finding.test = "scoutsuite_service_security"
- scoutsuite_finding.save()
-
expected = dict(EXPECTED_DICT) # new mutable
result = PrincipleService.get_principles_status()
diff --git a/vulture_allowlist.py b/vulture_allowlist.py
index d9ae1d8af..1cb2e426c 100644
--- a/vulture_allowlist.py
+++ b/vulture_allowlist.py
@@ -136,32 +136,6 @@ pytest_addoption # unused function (envs/os_compatibility/conftest.py:4)
pytest_addoption # unused function (envs/monkey_zoo/blackbox/conftest.py:4)
pytest_runtest_setup # unused function (envs/monkey_zoo/blackbox/conftest.py:47)
config_value_list # unused variable (envs/monkey_zoo/blackbox/config_templates/smb_pth.py:10)
-_.dashboard_name # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:13)
-_.checked_items # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:14)
-_.flagged_items # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:15)
-_.rationale # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:17)
-_.remediation # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:18)
-_.compliance # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:19)
-_.references # unused attribute (monkey/monkey_island/cc/services/zero_trust/scoutsuite/scoutsuite_rule_service.py:20)
-ACM # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:8)
-AWSLAMBDA # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:9)
-DIRECTCONNECT # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:14)
-EFS # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:16)
-ELASTICACHE # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:17)
-EMR # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:20)
-KMS # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:22)
-ROUTE53 # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:25)
-SECRETSMANAGER # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/service_consts.py:31)
-RDS_SNAPSHOT_PUBLIC # unused variable (monkey/monkey_island/cc/services/zero_trust/scoutsuite/consts/rule_names/rds_rules.py:17)
-dashboard_name # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:18)
-checked_items # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:19)
-flagged_items # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:20)
-rationale # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:22)
-remediation # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:23)
-compliance # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:24)
-references # unused variable (monkey/monkey_island/cc/models/zero_trust/scoutsuite_rule.py:25)
-ALIBABA # unused variable (monkey/common/cloud/scoutsuite_consts.py:8)
-ORACLE # unused variable (monkey/common/cloud/scoutsuite_consts.py:9)
ALIBABA # unused variable (monkey/common/cloud/environment_names.py:10)
IBM # unused variable (monkey/common/cloud/environment_names.py:11)
DigitalOcean # unused variable (monkey/common/cloud/environment_names.py:12)