diff --git a/ScoutSuite/__main__.py b/ScoutSuite/__main__.py
index df04aa049..9fdb4234e 100755
--- a/ScoutSuite/__main__.py
+++ b/ScoutSuite/__main__.py
@@ -19,7 +19,6 @@
from ScoutSuite.providers import get_provider
from ScoutSuite.providers.base.authentication_strategy_factory import get_authentication_strategy
-
def run_from_cli():
parser = ScoutSuiteArgumentParser()
args = parser.parse_args()
@@ -53,6 +52,8 @@ def run_from_cli():
organization_id=args.get('organization_id'), all_projects=args.get('all_projects'),
# Aliyun
access_key_id=args.get('access_key_id'), access_key_secret=args.get('access_key_secret'),
+ # Outscale
+ access=args.get('access'),
# General
report_name=args.get('report_name'), report_dir=args.get('report_dir'),
timestamp=args.get('timestamp'),
@@ -99,6 +100,8 @@ def run(provider,
project_id=None, folder_id=None, organization_id=None, all_projects=False,
# Aliyun
access_key_id=None, access_key_secret=None,
+ # Outscale
+ access=None,
# General
report_name=None, report_dir=None,
timestamp=False,
@@ -151,6 +154,8 @@ async def _run(provider,
project_id, folder_id, organization_id, all_projects,
# Aliyun
access_key_id, access_key_secret,
+ # Outscale
+ access,
# General
report_name, report_dir,
timestamp,
@@ -197,6 +202,7 @@ async def _run(provider,
client_secret=client_secret,
username=username,
password=password,
+ access=access,
access_key_id=access_key_id,
access_key_secret=access_key_secret)
diff --git a/ScoutSuite/core/cli_parser.py b/ScoutSuite/core/cli_parser.py
index a6481d3bf..031f3794d 100755
--- a/ScoutSuite/core/cli_parser.py
+++ b/ScoutSuite/core/cli_parser.py
@@ -23,12 +23,12 @@ def __init__(self):
dest="provider")
self._init_common_args_parser()
-
self._init_aws_parser()
self._init_gcp_parser()
self._init_azure_parser()
self._init_aliyun_parser()
self._init_oci_parser()
+ self._init_osc_parser()
def _init_aws_parser(self):
parser = self.subparsers.add_parser("aws",
@@ -372,6 +372,26 @@ def _init_common_args_parser(self):
default=8000,
help="[EXPERIMENTAL FEATURE] Port on which you want the server to listen. Defaults to 8000.")
+ def _init_osc_parser(self):
+ parser = self.subparsers.add_parser("osc",
+ parents=[self.common_providers_args_parser],
+ help="Run Scout against an Outsccale account")
+
+ osc_parser = parser.add_argument_group('Authentication modes')
+
+ osc_parser.add_argument('-p',
+ '--profile',
+ dest='profile',
+ default=None,
+ help='Run with a named profile')
+
+ osc_parser.add_argument('--access',
+ dest='access',
+ nargs='+',
+ default=None,
+ help='Run with access keys')
+
+
def parse_args(self, args=None):
args = self.parser.parse_args(args)
diff --git a/ScoutSuite/output/data/html/partials/osc/left_menu_for_region.html b/ScoutSuite/output/data/html/partials/osc/left_menu_for_region.html
new file mode 100755
index 000000000..bc7e796c5
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/left_menu_for_region.html
@@ -0,0 +1,34 @@
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/left_menu_for_vpc.html b/ScoutSuite/output/data/html/partials/osc/left_menu_for_vpc.html
new file mode 100755
index 000000000..98a3e7c74
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/left_menu_for_vpc.html
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.acm.regions.id.certificates.html b/ScoutSuite/output/data/html/partials/osc/services.acm.regions.id.certificates.html
new file mode 100755
index 000000000..35e2da561
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.acm.regions.id.certificates.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.awslambda.regions.id.functions.html b/ScoutSuite/output/data/html/partials/osc/services.awslambda.regions.id.functions.html
new file mode 100755
index 000000000..4fe3b8b43
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.awslambda.regions.id.functions.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.cloudformation.regions.id.stacks.html b/ScoutSuite/output/data/html/partials/osc/services.cloudformation.regions.id.stacks.html
new file mode 100755
index 000000000..35543762e
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.cloudformation.regions.id.stacks.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.html b/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.html
new file mode 100755
index 000000000..07356891b
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.html
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.id.trails.html b/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.id.trails.html
new file mode 100755
index 000000000..802499383
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.cloudtrail.regions.id.trails.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.cloudwatch.regions.id.alarms.html b/ScoutSuite/output/data/html/partials/osc/services.cloudwatch.regions.id.alarms.html
new file mode 100755
index 000000000..90f7071b8
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.cloudwatch.regions.id.alarms.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.config.regions.html b/ScoutSuite/output/data/html/partials/osc/services.config.regions.html
new file mode 100755
index 000000000..9c59be20b
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.config.regions.html
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.recorders.html b/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.recorders.html
new file mode 100755
index 000000000..6173551b3
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.recorders.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.rules.html b/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.rules.html
new file mode 100755
index 000000000..a68a077fc
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.config.regions.id.rules.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.snapshots.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.snapshots.html
new file mode 100755
index 000000000..bf03d8966
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.snapshots.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.volumes.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.volumes.html
new file mode 100755
index 000000000..c1e6a113c
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.volumes.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.images.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.images.html
new file mode 100755
index 000000000..5053fe8d5
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.images.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.instances.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.instances.html
new file mode 100755
index 000000000..1ec325fc5
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.instances.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.security_groups.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.security_groups.html
new file mode 100755
index 000000000..903ca2f17
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.id.vpcs.id.security_groups.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.resource_list.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.resource_list.html
new file mode 100755
index 000000000..a55a94856
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.resource_list.html
@@ -0,0 +1,33 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.rule_list.html b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.rule_list.html
new file mode 100755
index 000000000..7fc22077a
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ec2.regions.vpcs.security_groups.rule_list.html
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.parameter_groups.html
new file mode 100755
index 000000000..90590d477
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.parameter_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.security_groups.html b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.security_groups.html
new file mode 100755
index 000000000..d10d0cebb
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.security_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.subnet_groups.html b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.subnet_groups.html
new file mode 100755
index 000000000..d362bf2fa
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.subnet_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..f8f176eb1
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elasticache.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.elb_policies.html b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.elb_policies.html
new file mode 100755
index 000000000..0cac00d38
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.elb_policies.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.html b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.html
new file mode 100755
index 000000000..e197e1978
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html
new file mode 100755
index 000000000..fb0d63843
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.listener.html b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.listener.html
new file mode 100755
index 000000000..800062038
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcs.id.elbs.listener.html
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html
new file mode 100755
index 000000000..d6e4ecb47
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.elbv2.regions.id.vpcs.id.lbs.html b/ScoutSuite/output/data/html/partials/osc/services.elbv2.regions.id.vpcs.id.lbs.html
new file mode 100755
index 000000000..c13169c71
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.elbv2.regions.id.vpcs.id.lbs.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.emr.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/partials/osc/services.emr.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..40fd32370
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.emr.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.credential_reports.html b/ScoutSuite/output/data/html/partials/osc/services.iam.credential_reports.html
new file mode 100755
index 000000000..7751382dc
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.credential_reports.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.groups.html b/ScoutSuite/output/data/html/partials/osc/services.iam.groups.html
new file mode 100755
index 000000000..33cffce72
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.groups.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.inline_policies.html b/ScoutSuite/output/data/html/partials/osc/services.iam.inline_policies.html
new file mode 100755
index 000000000..1f9168586
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.inline_policies.html
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies.html b/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies.html
new file mode 100755
index 000000000..401554aee
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies_list.html b/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies_list.html
new file mode 100755
index 000000000..9c1387309
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.managed_policies_list.html
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.roles.html b/ScoutSuite/output/data/html/partials/osc/services.iam.roles.html
new file mode 100755
index 000000000..685fb67b5
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.roles.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.iam.users.html b/ScoutSuite/output/data/html/partials/osc/services.iam.users.html
new file mode 100755
index 000000000..f92b7450b
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.iam.users.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.kms.regions.id.keys.html b/ScoutSuite/output/data/html/partials/osc/services.kms.regions.id.keys.html
new file mode 100755
index 000000000..a6d1cd8e4
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.kms.regions.id.keys.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.parameter_groups.html
new file mode 100755
index 000000000..4ce74d21d
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.parameter_groups.html
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.security_groups.html b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.security_groups.html
new file mode 100755
index 000000000..dae872a30
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.security_groups.html
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.instances.html b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.instances.html
new file mode 100755
index 000000000..b94d5945d
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.instances.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.snapshots.html b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.snapshots.html
new file mode 100755
index 000000000..2a47efa8a
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.snapshots.html
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.subnet_groups.html b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.subnet_groups.html
new file mode 100755
index 000000000..48d3f619d
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.rds.regions.id.vpcs.id.subnet_groups.html
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.parameter_groups.html
new file mode 100755
index 000000000..db86abf53
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.parameter_groups.html
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..d29ce9e93
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.security_groups.html b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.security_groups.html
new file mode 100755
index 000000000..1fddd79b8
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.id.vpcs.id.security_groups.html
@@ -0,0 +1,35 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.vpcs.cluster_nodes.html b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.vpcs.cluster_nodes.html
new file mode 100755
index 000000000..d635a3a2b
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.redshift.regions.vpcs.cluster_nodes.html
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.domains.html b/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.domains.html
new file mode 100755
index 000000000..b07936879
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.domains.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.hosted_zones.html b/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.hosted_zones.html
new file mode 100755
index 000000000..52cd2d86e
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.route53.regions.id.hosted_zones.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.s3.acls.html b/ScoutSuite/output/data/html/partials/osc/services.s3.acls.html
new file mode 100755
index 000000000..5c189875e
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.s3.acls.html
@@ -0,0 +1,58 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.s3.bucket_iam_policies.html b/ScoutSuite/output/data/html/partials/osc/services.s3.bucket_iam_policies.html
new file mode 100755
index 000000000..ba663aa65
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.s3.bucket_iam_policies.html
@@ -0,0 +1,55 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.html b/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.html
new file mode 100755
index 000000000..fcd20f393
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.objects.html b/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.objects.html
new file mode 100755
index 000000000..66bd76a30
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.s3.buckets.objects.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.s3.public_access_block_configuration.html b/ScoutSuite/output/data/html/partials/osc/services.s3.public_access_block_configuration.html
new file mode 100644
index 000000000..df0787325
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.s3.public_access_block_configuration.html
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.secretsmanager.regions.id.secrets.html b/ScoutSuite/output/data/html/partials/osc/services.secretsmanager.regions.id.secrets.html
new file mode 100755
index 000000000..caab24cb8
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.secretsmanager.regions.id.secrets.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.ses.regions.id.identities.html b/ScoutSuite/output/data/html/partials/osc/services.ses.regions.id.identities.html
new file mode 100755
index 000000000..279e34961
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.ses.regions.id.identities.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.sns.regions.id.topics.html b/ScoutSuite/output/data/html/partials/osc/services.sns.regions.id.topics.html
new file mode 100755
index 000000000..08c907ef1
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.sns.regions.id.topics.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.sqs.regions.id.queues.html b/ScoutSuite/output/data/html/partials/osc/services.sqs.regions.id.queues.html
new file mode 100755
index 000000000..5390681b1
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.sqs.regions.id.queues.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.stackdriverlogging.sinks.html b/ScoutSuite/output/data/html/partials/osc/services.stackdriverlogging.sinks.html
new file mode 100755
index 000000000..7ea2a9306
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.stackdriverlogging.sinks.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.peering_connections.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.peering_connections.html
new file mode 100755
index 000000000..95acfd63e
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.peering_connections.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.html
new file mode 100755
index 000000000..023de9a0c
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.flow_logs.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.flow_logs.html
new file mode 100755
index 000000000..12cabd25f
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.flow_logs.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.network_acls.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.network_acls.html
new file mode 100755
index 000000000..13aa84089
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.network_acls.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.peering_connections.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.peering_connections.html
new file mode 100755
index 000000000..b5622fb43
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.peering_connections.html
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.subnets.html b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.subnets.html
new file mode 100755
index 000000000..345b4404c
--- /dev/null
+++ b/ScoutSuite/output/data/html/partials/osc/services.vpc.regions.id.vpcs.id.subnets.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/left_menu_for_region.html b/ScoutSuite/output/data/html/summaries/osc/left_menu_for_region.html
new file mode 100755
index 000000000..bc7e796c5
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/left_menu_for_region.html
@@ -0,0 +1,34 @@
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/left_menu_for_vpc.html b/ScoutSuite/output/data/html/summaries/osc/left_menu_for_vpc.html
new file mode 100755
index 000000000..98a3e7c74
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/left_menu_for_vpc.html
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.acm.regions.id.certificates.html b/ScoutSuite/output/data/html/summaries/osc/services.acm.regions.id.certificates.html
new file mode 100755
index 000000000..35e2da561
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.acm.regions.id.certificates.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.awslambda.regions.id.functions.html b/ScoutSuite/output/data/html/summaries/osc/services.awslambda.regions.id.functions.html
new file mode 100755
index 000000000..4fe3b8b43
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.awslambda.regions.id.functions.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.cloudformation.regions.id.stacks.html b/ScoutSuite/output/data/html/summaries/osc/services.cloudformation.regions.id.stacks.html
new file mode 100755
index 000000000..35543762e
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.cloudformation.regions.id.stacks.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.html b/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.html
new file mode 100755
index 000000000..07356891b
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.html
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.id.trails.html b/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.id.trails.html
new file mode 100755
index 000000000..802499383
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.cloudtrail.regions.id.trails.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.cloudwatch.regions.id.alarms.html b/ScoutSuite/output/data/html/summaries/osc/services.cloudwatch.regions.id.alarms.html
new file mode 100755
index 000000000..90f7071b8
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.cloudwatch.regions.id.alarms.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.config.regions.html b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.html
new file mode 100755
index 000000000..9c59be20b
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.html
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.recorders.html b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.recorders.html
new file mode 100755
index 000000000..6173551b3
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.recorders.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.rules.html b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.rules.html
new file mode 100755
index 000000000..a68a077fc
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.config.regions.id.rules.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.snapshots.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.snapshots.html
new file mode 100755
index 000000000..bf03d8966
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.snapshots.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.volumes.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.volumes.html
new file mode 100755
index 000000000..c1e6a113c
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.volumes.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.images.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.images.html
new file mode 100755
index 000000000..5053fe8d5
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.images.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.instances.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.instances.html
new file mode 100755
index 000000000..1ec325fc5
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.instances.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.security_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.security_groups.html
new file mode 100755
index 000000000..903ca2f17
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.id.vpcs.id.security_groups.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.resource_list.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.resource_list.html
new file mode 100755
index 000000000..a55a94856
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.resource_list.html
@@ -0,0 +1,33 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.rule_list.html b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.rule_list.html
new file mode 100755
index 000000000..7fc22077a
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ec2.regions.vpcs.security_groups.rule_list.html
@@ -0,0 +1,46 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.parameter_groups.html
new file mode 100755
index 000000000..90590d477
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.parameter_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.security_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.security_groups.html
new file mode 100755
index 000000000..d10d0cebb
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.security_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.subnet_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.subnet_groups.html
new file mode 100755
index 000000000..d362bf2fa
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.subnet_groups.html
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..f8f176eb1
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elasticache.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.elb_policies.html b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.elb_policies.html
new file mode 100755
index 000000000..0cac00d38
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.elb_policies.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.html b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.html
new file mode 100755
index 000000000..e197e1978
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html
new file mode 100755
index 000000000..fb0d63843
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.linked_resources.html
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.listener.html b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.listener.html
new file mode 100755
index 000000000..800062038
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcs.id.elbs.listener.html
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html
new file mode 100755
index 000000000..d6e4ecb47
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elb.regions.id.vpcsid.elbs.linked_policy.html
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.elbv2.regions.id.vpcs.id.lbs.html b/ScoutSuite/output/data/html/summaries/osc/services.elbv2.regions.id.vpcs.id.lbs.html
new file mode 100755
index 000000000..c13169c71
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.elbv2.regions.id.vpcs.id.lbs.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.emr.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/summaries/osc/services.emr.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..40fd32370
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.emr.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.credential_reports.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.credential_reports.html
new file mode 100755
index 000000000..7751382dc
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.credential_reports.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.groups.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.groups.html
new file mode 100755
index 000000000..33cffce72
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.groups.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.inline_policies.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.inline_policies.html
new file mode 100755
index 000000000..1f9168586
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.inline_policies.html
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies.html
new file mode 100755
index 000000000..401554aee
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies_list.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies_list.html
new file mode 100755
index 000000000..9c1387309
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.managed_policies_list.html
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.roles.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.roles.html
new file mode 100755
index 000000000..685fb67b5
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.roles.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.iam.users.html b/ScoutSuite/output/data/html/summaries/osc/services.iam.users.html
new file mode 100755
index 000000000..f92b7450b
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.iam.users.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.kms.regions.id.keys.html b/ScoutSuite/output/data/html/summaries/osc/services.kms.regions.id.keys.html
new file mode 100755
index 000000000..a6d1cd8e4
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.kms.regions.id.keys.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.parameter_groups.html
new file mode 100755
index 000000000..4ce74d21d
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.parameter_groups.html
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.security_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.security_groups.html
new file mode 100755
index 000000000..dae872a30
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.security_groups.html
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.instances.html b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.instances.html
new file mode 100755
index 000000000..b94d5945d
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.instances.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.snapshots.html b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.snapshots.html
new file mode 100755
index 000000000..2a47efa8a
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.snapshots.html
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.subnet_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.subnet_groups.html
new file mode 100755
index 000000000..48d3f619d
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.rds.regions.id.vpcs.id.subnet_groups.html
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.parameter_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.parameter_groups.html
new file mode 100755
index 000000000..db86abf53
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.parameter_groups.html
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.clusters.html b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.clusters.html
new file mode 100755
index 000000000..d29ce9e93
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.clusters.html
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.security_groups.html b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.security_groups.html
new file mode 100755
index 000000000..1fddd79b8
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.id.vpcs.id.security_groups.html
@@ -0,0 +1,35 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.vpcs.cluster_nodes.html b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.vpcs.cluster_nodes.html
new file mode 100755
index 000000000..d635a3a2b
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.redshift.regions.vpcs.cluster_nodes.html
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.domains.html b/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.domains.html
new file mode 100755
index 000000000..b07936879
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.domains.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.hosted_zones.html b/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.hosted_zones.html
new file mode 100755
index 000000000..52cd2d86e
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.route53.regions.id.hosted_zones.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.s3.acls.html b/ScoutSuite/output/data/html/summaries/osc/services.s3.acls.html
new file mode 100755
index 000000000..5c189875e
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.s3.acls.html
@@ -0,0 +1,58 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.s3.bucket_iam_policies.html b/ScoutSuite/output/data/html/summaries/osc/services.s3.bucket_iam_policies.html
new file mode 100755
index 000000000..ba663aa65
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.s3.bucket_iam_policies.html
@@ -0,0 +1,55 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.html b/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.html
new file mode 100755
index 000000000..fcd20f393
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.objects.html b/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.objects.html
new file mode 100755
index 000000000..66bd76a30
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.s3.buckets.objects.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.s3.public_access_block_configuration.html b/ScoutSuite/output/data/html/summaries/osc/services.s3.public_access_block_configuration.html
new file mode 100644
index 000000000..df0787325
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.s3.public_access_block_configuration.html
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.secretsmanager.regions.id.secrets.html b/ScoutSuite/output/data/html/summaries/osc/services.secretsmanager.regions.id.secrets.html
new file mode 100755
index 000000000..caab24cb8
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.secretsmanager.regions.id.secrets.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.ses.regions.id.identities.html b/ScoutSuite/output/data/html/summaries/osc/services.ses.regions.id.identities.html
new file mode 100755
index 000000000..279e34961
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.ses.regions.id.identities.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.sns.regions.id.topics.html b/ScoutSuite/output/data/html/summaries/osc/services.sns.regions.id.topics.html
new file mode 100755
index 000000000..08c907ef1
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.sns.regions.id.topics.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.sqs.regions.id.queues.html b/ScoutSuite/output/data/html/summaries/osc/services.sqs.regions.id.queues.html
new file mode 100755
index 000000000..5390681b1
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.sqs.regions.id.queues.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.stackdriverlogging.sinks.html b/ScoutSuite/output/data/html/summaries/osc/services.stackdriverlogging.sinks.html
new file mode 100755
index 000000000..7ea2a9306
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.stackdriverlogging.sinks.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.peering_connections.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.peering_connections.html
new file mode 100755
index 000000000..95acfd63e
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.peering_connections.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.html
new file mode 100755
index 000000000..023de9a0c
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.flow_logs.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.flow_logs.html
new file mode 100755
index 000000000..12cabd25f
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.flow_logs.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.network_acls.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.network_acls.html
new file mode 100755
index 000000000..13aa84089
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.network_acls.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.peering_connections.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.peering_connections.html
new file mode 100755
index 000000000..b5622fb43
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.peering_connections.html
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.subnets.html b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.subnets.html
new file mode 100755
index 000000000..345b4404c
--- /dev/null
+++ b/ScoutSuite/output/data/html/summaries/osc/services.vpc.regions.id.vpcs.id.subnets.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
diff --git a/ScoutSuite/providers/__init__.py b/ScoutSuite/providers/__init__.py
index abee8205a..686b2e150 100755
--- a/ScoutSuite/providers/__init__.py
+++ b/ScoutSuite/providers/__init__.py
@@ -1,8 +1,11 @@
+import logging
+
providers_dict = {'aws': 'AWSProvider',
'gcp': 'GCPProvider',
'azure': 'AzureProvider',
'aliyun': 'AliyunProvider',
- 'oci': 'OracleProvider'}
+ 'oci': 'OracleProvider',
+ 'osc': 'OutscaleProvider'}
def get_provider_object(provider):
diff --git a/ScoutSuite/providers/base/authentication_strategy_factory.py b/ScoutSuite/providers/base/authentication_strategy_factory.py
index 25e786153..93c395766 100755
--- a/ScoutSuite/providers/base/authentication_strategy_factory.py
+++ b/ScoutSuite/providers/base/authentication_strategy_factory.py
@@ -3,7 +3,8 @@
'gcp': 'GCPAuthenticationStrategy',
'azure': 'AzureAuthenticationStrategy',
'aliyun': 'AliyunAuthenticationStrategy',
- 'oci': 'OracleAuthenticationStrategy'
+ 'oci': 'OracleAuthenticationStrategy',
+ 'osc': 'OutscaleAuthenticationStrategy'
}
diff --git a/ScoutSuite/providers/osc/__init__.py b/ScoutSuite/providers/osc/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ScoutSuite/providers/osc/authentication_strategy.py b/ScoutSuite/providers/osc/authentication_strategy.py
new file mode 100644
index 000000000..c2dbe2024
--- /dev/null
+++ b/ScoutSuite/providers/osc/authentication_strategy.py
@@ -0,0 +1,39 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from ScoutSuite.providers.base.authentication_strategy import AuthenticationStrategy, AuthenticationException
+from osc_sdk_python import Gateway
+
+
+class OutscaleAuthenticationStrategy(AuthenticationStrategy):
+ def authenticate(self, profile=None, access=None, **kwargs):
+ if profile:
+ try:
+ session = Gateway(**{"profile": profile})
+ session.ReadVms()
+ except Exception as e:
+ raise AuthenticationException(e)
+ elif access:
+ session = Gateway({"custom": {
+ "access_key": access[0],
+ "secret_key": access[1],
+ "region": "eu-west-2"
+ }})
+ else:
+ try:
+ session = Gateway()
+ except Exception as e:
+ raise AuthenticationException(e)
+ return session
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/facade/__init__.py b/ScoutSuite/providers/osc/facade/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ScoutSuite/providers/osc/facade/base.py b/ScoutSuite/providers/osc/facade/base.py
new file mode 100644
index 000000000..309724de5
--- /dev/null
+++ b/ScoutSuite/providers/osc/facade/base.py
@@ -0,0 +1,32 @@
+from ScoutSuite.providers.osc.facade.basefacade import OSCBaseFacade
+from ScoutSuite.providers.osc.facade.fcu import FCUFacade
+import requests
+
+
+class OSCFacade(OSCBaseFacade):
+ def __init__(self, credentials=None):
+ super(OSCFacade, self).__init__()
+ self.session = credentials
+ self._instantiate_facades()
+
+ async def build_region_list(self, chosen_regions=None, excluded_regions=None):
+ regions = requests.post(
+ "https://api.eu-west-2.outscale.com/api/latest/ReadRegions").json()["Regions"]
+ regions_list = []
+ for region in regions:
+ regions_list.append(region["RegionName"])
+
+ not_opted_in_regions = []
+ # TODO
+
+ if chosen_regions:
+ regions = [r for r in regions if r in chosen_regions]
+ if excluded_regions:
+ regions = [r for r in regions if r not in excluded_regions]
+ if not_opted_in_regions:
+ regions = [r for r in regions if r not in not_opted_in_regions]
+ return regions
+
+ def _instantiate_facades(self):
+ # self.api = ApiFacade(self.session)
+ self.fcu = FCUFacade(self.session)
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/facade/basefacade.py b/ScoutSuite/providers/osc/facade/basefacade.py
new file mode 100644
index 000000000..9c5eb4cd0
--- /dev/null
+++ b/ScoutSuite/providers/osc/facade/basefacade.py
@@ -0,0 +1,5 @@
+from osc_sdk_python import Gateway
+
+class OSCBaseFacade(object):
+ def __init__(self, session: Gateway = None):
+ self.session = session
diff --git a/ScoutSuite/providers/osc/facade/fcu.py b/ScoutSuite/providers/osc/facade/fcu.py
new file mode 100644
index 000000000..a5105cdd2
--- /dev/null
+++ b/ScoutSuite/providers/osc/facade/fcu.py
@@ -0,0 +1,27 @@
+from osc_sdk_python import Gateway
+
+from ScoutSuite.core.console import print_exception
+from ScoutSuite.providers.osc.facade.basefacade import OSCBaseFacade
+from ScoutSuite.providers.osc.facade.utils import OSCFacadeUtils
+
+
+class FCUFacade(OSCBaseFacade):
+ def __init__(self, session: Gateway):
+ self.session = session
+ super(FCUFacade, self).__init__(session)
+
+ async def get_security_groups(self, region: str, vpc: str = None):
+ try:
+ security_groups = await OSCFacadeUtils.get_all_security_groups(self.session)
+ return security_groups
+ except Exception as e:
+ print_exception('Failed to describe FCU security groups: {}'.format(e))
+ return []
+
+ async def get_volumes(self):
+ try:
+ volumes = await OSCFacadeUtils.get_all_volumes(self.session)
+ return volumes
+ except Exception as e:
+ print_exception('Failed to describe FCU volumes: {}'.format(e))
+ return []
diff --git a/ScoutSuite/providers/osc/facade/utils.py b/ScoutSuite/providers/osc/facade/utils.py
new file mode 100644
index 000000000..7630e37fa
--- /dev/null
+++ b/ScoutSuite/providers/osc/facade/utils.py
@@ -0,0 +1,30 @@
+from osc_sdk_python import Gateway
+
+
+class OSCFacadeUtils:
+ @staticmethod
+ async def get_all_security_groups(session: Gateway):
+ response = session.ReadSecurityGroups()
+ security_groups = []
+ if 'SecurityGroups' in response:
+ for security_group in response['SecurityGroups']:
+ security_groups.append(security_group)
+ return security_groups
+
+ @staticmethod
+ async def get_all_volumes(session: Gateway):
+ response = session.ReadVolumes()
+ volumes = []
+ if 'Volumes' in response:
+ for volume in response['Volumes']:
+ volumes.append(volume)
+ return volumes
+
+
+ @staticmethod
+ def _get_outscale_endpoint(region, version, action):
+ return "https://api.{}.outscale.com/api/{}/{}".format(
+ region,
+ version,
+ action
+ )
diff --git a/ScoutSuite/providers/osc/metadata.json b/ScoutSuite/providers/osc/metadata.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/ScoutSuite/providers/osc/metadata.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/provider.py b/ScoutSuite/providers/osc/provider.py
new file mode 100644
index 000000000..4acb2e1cf
--- /dev/null
+++ b/ScoutSuite/providers/osc/provider.py
@@ -0,0 +1,35 @@
+import os
+
+from ScoutSuite.providers.base.provider import BaseProvider
+from ScoutSuite.providers.osc.services import OSCServicesConfig
+#from ScoutSuite.providers.osc.utils import get_partition_name
+
+
+class OutscaleProvider(BaseProvider):
+ """
+ Implements provider for Outscale
+ """
+
+ def __init__(self, profile='default', report_dir=None, timestamp=None,
+ services=None, skipped_services=None, result_format='json', **kwargs):
+ services = [] if services is None else services
+ skipped_services = [] if skipped_services is None else skipped_services
+
+ self.metadata_path = '%s/metadata.json' % os.path.split(os.path.abspath(__file__))[0]
+
+ self.sg_map = {}
+ self.subnet_map = {}
+
+ self.profile = profile
+ self.services_config = OSCServicesConfig
+
+ self.provider_code = 'osc'
+ self.provider_name = 'Outscale API'
+ self.environment = self.profile
+ self.result_format = result_format
+
+ self.credentials = kwargs['credentials']
+ self.account_id = ""
+ super(OutscaleProvider, self).__init__(report_dir, timestamp,
+ services, skipped_services,
+ result_format)
diff --git a/ScoutSuite/providers/osc/resources/__init__.py b/ScoutSuite/providers/osc/resources/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ScoutSuite/providers/osc/resources/base.py b/ScoutSuite/providers/osc/resources/base.py
new file mode 100644
index 000000000..4fd2f0298
--- /dev/null
+++ b/ScoutSuite/providers/osc/resources/base.py
@@ -0,0 +1,13 @@
+
+import abc
+
+from ScoutSuite.providers.base.resources.base import Resources, CompositeResources
+
+
+class OSCResources(Resources, metaclass=abc.ABCMeta):
+ """This is the base class for OSC resources."""
+ pass
+
+
+class OSCCompositeResources(OSCResources, CompositeResources, metaclass=abc.ABCMeta):
+ pass
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/resources/fcu/__init__.py b/ScoutSuite/providers/osc/resources/fcu/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/ScoutSuite/providers/osc/resources/fcu/base.py b/ScoutSuite/providers/osc/resources/fcu/base.py
new file mode 100644
index 000000000..d049696a9
--- /dev/null
+++ b/ScoutSuite/providers/osc/resources/fcu/base.py
@@ -0,0 +1,22 @@
+from ScoutSuite.providers.osc.resources.fcu.securitygroups import SecurityGroups
+from ScoutSuite.providers.osc.resources.regions import Regions
+from ScoutSuite.providers.osc.resources.fcu.volumes import Volumes
+
+
+class FCU(Regions):
+ _children = [
+ (SecurityGroups, 'security_groups')
+ # (Volumes, 'volumes')
+ ]
+
+ def __init__(self, facade):
+ super(FCU, self).__init__('fcu', facade)
+
+ async def fetch_all(self, regions=None, excluded_regions=None, partition_name='osc', **kwargs):
+ await super(FCU, self).fetch_all(regions, excluded_regions)
+ for region in self['regions']:
+ self['regions'][region]['security_groups_count'] =\
+ sum([len(sg) for sg in self['regions'][region]['security_groups'].values()])
+ self['regions'][region]['volumes_count'] =\
+ sum([len(volumes['volumes']) for volumes in self['regions'][region]['volumes'].values()])
+ self['security_groups_count'] = sum([region['security_groups_count'] for region in self['regions'].values()])
diff --git a/ScoutSuite/providers/osc/resources/fcu/securitygroups.py b/ScoutSuite/providers/osc/resources/fcu/securitygroups.py
new file mode 100644
index 000000000..b827c3f68
--- /dev/null
+++ b/ScoutSuite/providers/osc/resources/fcu/securitygroups.py
@@ -0,0 +1,92 @@
+from ScoutSuite.providers.osc.resources.base import OSCResources
+from ScoutSuite.providers.osc.facade.base import OSCFacade
+from ScoutSuite.utils import manage_dictionary
+
+import logging
+
+class SecurityGroups(OSCResources):
+ def __init__(self, facade: OSCFacade, region: str, vpc: str = None):
+ super(SecurityGroups, self).__init__(facade)
+ self.region = region
+ self.vpc = vpc
+
+ async def fetch_all(self):
+ try:
+ raw_security_groups = await self.facade.fcu.get_security_groups(self.region)
+ for raw_security_group in raw_security_groups:
+ name, resource = self._parse_security_group(raw_security_group)
+ self[name] = resource
+ except Exception as e:
+ logging.getLogger("scout").critical(f"OSC ::: SecurityGroups _fecth_all() Exception {e}\n\n\n")
+
+ def _parse_security_group(self, raw_security_group):
+ security_group = {}
+ security_group['name'] = raw_security_group['SecurityGroupName']
+ security_group['id'] = raw_security_group['SecurityGroupId']
+ security_group['description'] = raw_security_group['Description']
+ security_group['owner_id'] = raw_security_group['AccountId']
+
+ if 'Tags' in raw_security_group:
+ pass # TODO
+ security_group['rules'] = {'ingress': {}, 'egress': {}}
+ ingress_protocols, ingress_rules_count = self._parse_security_group_rules(
+ raw_security_group['InboundRules'])
+ security_group['rules']['ingress']['protocols'] = ingress_protocols
+ security_group['rules']['ingress']['count'] = ingress_rules_count
+ egress_protocols, egress_rules_count = self._parse_security_group_rules(
+ raw_security_group['OutboundRules'])
+ security_group['rules']['egress']['protocols'] = egress_protocols
+ security_group['rules']['egress']['count'] = egress_rules_count
+ return security_group['id'], security_group
+
+ def _parse_security_group_rules(self, rules):
+ protocols = {}
+ rules_count = 0
+ for rule in rules:
+ ip_protocol = rule['IpProtocol'].upper()
+ if ip_protocol == '-1':
+ ip_protocol = 'ALL'
+ protocols = manage_dictionary(protocols, ip_protocol, {})
+ protocols[ip_protocol] = manage_dictionary(
+ protocols[ip_protocol], 'ports', {})
+
+ # Save the port (single port or range)
+ port_value = '1-65535'
+ if 'FromPort' in rule and 'ToPort' in rule:
+ if ip_protocol == 'ICMP':
+ # FromPort with ICMP is the type of message
+ # port_value = self.icmp_message_types_dict[str(
+ # rule['FromPort'])]
+ # TODO
+ pass
+ elif rule['FromPort'] == rule['ToPort']:
+ port_value = str(rule['FromPort'])
+ else:
+ port_value = '%s-%s' % (rule['FromPort'], rule['ToPort'])
+ manage_dictionary(protocols[ip_protocol]['ports'], port_value, {})
+
+ # Save grants, values are either a CIDR or an EC2 security group
+ # TODO If Ouscale has something equivalent
+ # for grant in rule['UserIdGroupPairs']:
+ # manage_dictionary(
+ # protocols[ip_protocol]['ports'][port_value], 'security_groups', [])
+ # protocols[ip_protocol]['ports'][port_value]['security_groups'].append(
+ # grant)
+ # rules_count = rules_count + 1
+ # for grant in rule['IpRanges']:
+ # manage_dictionary(
+ # protocols[ip_protocol]['ports'][port_value], 'cidrs', [])
+ # protocols[ip_protocol]['ports'][port_value]['cidrs'].append(
+ # {'CIDR': grant['CidrIp']})
+ # rules_count = rules_count + 1
+
+ # IPv6
+ # TODO If Outscale has something equivalent
+ # for grant in rule['Ipv6Ranges']:
+ # manage_dictionary(
+ # protocols[ip_protocol]['ports'][port_value], 'cidrs', [])
+ # protocols[ip_protocol]['ports'][port_value]['cidrs'].append(
+ # {'CIDR': grant['CidrIpv6']})
+ # rules_count = rules_count + 1
+
+ return protocols, rules_count
diff --git a/ScoutSuite/providers/osc/resources/fcu/volumes.py b/ScoutSuite/providers/osc/resources/fcu/volumes.py
new file mode 100644
index 000000000..275c4d80d
--- /dev/null
+++ b/ScoutSuite/providers/osc/resources/fcu/volumes.py
@@ -0,0 +1,40 @@
+from ScoutSuite.providers.osc.resources.base import OSCResources
+from ScoutSuite.providers.osc.facade.base import OSCFacade
+from ScoutSuite.utils import manage_dictionary
+
+import logging
+
+
+class Volumes(OSCResources):
+ def __init__(self, facade: OSCFacade, region: str, vpc: str = None):
+ super(Volumes, self).__init__(facade)
+ self.region = region
+ self.vpc = vpc
+
+ async def fetch_all(self, regions=None, excluded_regions=None, partition_name='osc', **kwargs):
+ try:
+ raw_volumes = await self.facade.fcu.get_volumes()
+ for raw_volume in raw_volumes:
+ name, resource = self._parse_volumes(raw_volume)
+ self[name] = resource
+ except Exception as e:
+ logging.warning(e)
+
+ def _parse_volume(self, raw_volume):
+ volume = {}
+ volume['size'] = raw_volume['Size']
+ volume['id'] = raw_volume['VolumeId']
+ volume['type'] = raw_volume['VolumeType']
+ volume['snapshot_id'] = raw_volume['SnapshotId']
+ volume['state'] = raw_volume['State']
+ volume["rules"] = []
+ return volume['id'], volume
+
+ def _parse_volume_rules(self, rules):
+ protocols = {}
+ rules_count = 0
+ for rule in rules:
+ # @TODO find ome rule to put here
+ rules_count += 1
+
+ return protocols, rules_count
diff --git a/ScoutSuite/providers/osc/resources/regions.py b/ScoutSuite/providers/osc/resources/regions.py
new file mode 100644
index 000000000..33c212ddc
--- /dev/null
+++ b/ScoutSuite/providers/osc/resources/regions.py
@@ -0,0 +1,39 @@
+import abc
+
+from ScoutSuite.providers.osc.resources.base import OSCCompositeResources
+from ScoutSuite.providers.osc.facade.base import OSCFacade
+import logging
+
+class Regions(OSCCompositeResources, metaclass=abc.ABCMeta):
+
+ def __init__(self, service: str, facade: OSCFacade):
+ super(Regions, self).__init__(facade)
+ self.service = service
+
+ async def fetch_all(self, regions=None, excluded_regions=None, **kwargs):
+ try:
+ self['regions'] = {}
+ for region in await self.facade.build_region_list(regions, excluded_regions):
+ self['regions'][region['RegionName']] = {
+ 'id': region['RegionName'],
+ 'region': region,
+ 'name': region['RegionName'],
+ 'endpoint': region['Endpoint']
+ }
+ await self._fetch_children_of_all_resources(
+ resources=self['regions'],
+ scopes={region: {'region': region} for region in self['regions']}
+ )
+ self._set_counts()
+ except Exception as e:
+ logging.getLogger("scout").critical(f"OSC ::: Regions _fetch_all() Exception ::: {e}")
+
+
+ def _set_counts(self):
+ self['regions_count'] = len(self['regions'])
+
+ for _, key in self._children:
+ if key == 'vpcs':
+ continue
+
+ self[key + '_count'] = sum([region[key + '_count'] for region in self['regions'].values()])
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/rules/conditions/security-group-opens-all-ports.json b/ScoutSuite/providers/osc/rules/conditions/security-group-opens-all-ports.json
new file mode 100644
index 000000000..528be7fc6
--- /dev/null
+++ b/ScoutSuite/providers/osc/rules/conditions/security-group-opens-all-ports.json
@@ -0,0 +1,9 @@
+{
+ "conditions": [ "and",
+ [ "or",
+ [ "fcu.regions.id.security_groups.id.rules.id.protocols.id.ports.id", "equal", "1-65535" ],
+ [ "fcu.regions.id.security_groups.id.rules.id.protocols.id", "equal", "ALL" ]
+ ],
+ [ "fcu.regions.id.security_groups.id.rules.id", "equal", "ingress"]
+ ]
+}
diff --git a/ScoutSuite/providers/osc/rules/findings/fcu-security-group-opens-all-ports.json b/ScoutSuite/providers/osc/rules/findings/fcu-security-group-opens-all-ports.json
new file mode 100755
index 000000000..ccec791c9
--- /dev/null
+++ b/ScoutSuite/providers/osc/rules/findings/fcu-security-group-opens-all-ports.json
@@ -0,0 +1,15 @@
+{
+ "description": "Security Group Opens All Ports",
+ "rationale": "It was detected that all ports in the security group are open, which creates a wider attack surface for resources assigned to it. Open ports should be reduced to the minimum needed to correctly operate.",
+ "dashboard_name": "Rules",
+ "display_path": "fcu.regions.id.security_groups.id",
+ "path": "fcu.regions.id.security_groups.id.rules.id.protocols.id.ports.id",
+ "conditions": [
+ "and",
+ [
+ "_INCLUDE_(conditions/security-group-opens-all-ports.json)",
+ "",
+ ""
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/rules/rulesets/default.json b/ScoutSuite/providers/osc/rules/rulesets/default.json
new file mode 100644
index 000000000..93d36677f
--- /dev/null
+++ b/ScoutSuite/providers/osc/rules/rulesets/default.json
@@ -0,0 +1,11 @@
+{
+ "about": "This ruleset consists of numerous rules that are considered standard by NCC Group. The rules enabled range from violations of well-known security best practices to gaps resulting from less-known security implications of provider-specific mechanisms. Additional rules exist, some of them requiring extra-parameters to be configured, and some of them being applicable to a limited number of users.",
+ "rules": {
+ "fcu-security-group-opens-all-ports.json": [
+ {
+ "enabled": true,
+ "level": "danger"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/rules/rulesets/filters.json b/ScoutSuite/providers/osc/rules/rulesets/filters.json
new file mode 100644
index 000000000..156b33045
--- /dev/null
+++ b/ScoutSuite/providers/osc/rules/rulesets/filters.json
@@ -0,0 +1,4 @@
+{
+ "rules": {
+ }
+}
\ No newline at end of file
diff --git a/ScoutSuite/providers/osc/services.py b/ScoutSuite/providers/osc/services.py
new file mode 100644
index 000000000..43430fd8b
--- /dev/null
+++ b/ScoutSuite/providers/osc/services.py
@@ -0,0 +1,23 @@
+from ScoutSuite.providers.base.services import BaseServicesConfig
+# from ScoutSuite.providers.osc.resources.api.base import Api
+from ScoutSuite.providers.osc.facade.base import OSCFacade
+from ScoutSuite.providers.osc.resources.fcu.base import FCU
+
+class OSCServicesConfig(BaseServicesConfig):
+ """
+ Object that holds the necessary OSC configuration for all services in
+ scope.
+
+ :ivar api: API configuration
+ """
+ def __init__(self, credentials=None, **kwargs):
+
+ super(OSCServicesConfig, self).__init__(credentials)
+
+ facade = OSCFacade(credentials)
+
+ # self.api = Api(facade)
+ self.fcu = FCU(facade)
+
+ def _is_provider(self, provider_name):
+ return provider_name == 'osc'
diff --git a/requirements.txt b/requirements.txt
index a97848293..40289ef4d 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -61,3 +61,6 @@ oss2>=2.8.0
# Oracle Cloud Infrastructure Provider
oci>=2.2.4
+
+# Outscale API
+https://github.com/outscale/osc-sdk-python/releases/download/0.9.15/osc_sdk_python-0.9.15-py3-none-any.whl