Skip to content

Commit

Permalink
Merge pull request nccgroup#11 from tgn-outscale/osc_provider_auth
Browse files Browse the repository at this point in the history
Osc provider auth
  • Loading branch information
lmx-outscale committed Aug 7, 2020
2 parents 8291714 + 35bfc55 commit 7dc8bf7
Show file tree
Hide file tree
Showing 154 changed files with 5,460 additions and 4 deletions.
8 changes: 7 additions & 1 deletion ScoutSuite/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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'),
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)

Expand Down
22 changes: 21 additions & 1 deletion ScoutSuite/core/cli_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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)

Expand Down
34 changes: 34 additions & 0 deletions ScoutSuite/output/data/html/partials/osc/left_menu_for_region.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<!-- Generic left-menu link partial for region-then-resource -->
<script id="left_menu_for_region.partial" type="text/x-handlebars-template">
<div id="services.{{service_name}}.regions.id.{{resource_type}}.list">
<div class="list-group" >
<div class="list-group-item">
<a href="javascript:updateHash('services.{{service_name}}.regions.id.{{resource_type}}')">
Show all <span class="badge float-right btn-info">{{getValueAt 'metadata' service_group service_name 'resources' resource_type 'count'}}</span>
</a>
</div>
</div>
{{#each items}}
<div class="list-group" id="services.{{../service_name}}.regions.{{@key}}.{{../resource_type}}.list">
<div class="list-group-item active">
<a href="#services.{{../service_name}}.regions.{{@key}}.{{../resource_type}}">{{@key}}</a>
<span class="float-right"><a href="javascript:hideList('services.{{../service_name}}.regions.{{@key}}.{{../resource_type}}.list')"><i class="fa fa-times-circle"></i></a></span>
</div>
<div class="list-group-item list-sub-element">
{{#each (lookup . ../resource_type)}}
<div class="list-group-item-text" id="services.{{../../service_name}}.regions.{{@../key}}.{{../../resource_type}}.{{@key}}.link">
{{#if scout_link}}
<a href="#{{scout_link}}.view">{{name}}</a>
{{else}}
<a href="#services.{{../../../service_name}}.regions.{{@../key}}.{{../../../resource_type}}.{{@key}}.view">{{name}}</a>
{{/if}}
</div>
{{/each}}
</div>
</div>
{{/each}}
</div>
</script>
<script>
Handlebars.registerPartial("left_menu_for_region", $("#left_menu_for_region\\.partial").html());
</script>
40 changes: 40 additions & 0 deletions ScoutSuite/output/data/html/partials/osc/left_menu_for_vpc.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!-- Generic left-menu link partial for region-then-vpc-then-resource -->
<script id="left_menu_for_vpc.partial" type="text/x-handlebars-template">
<div id="services.{{service_name}}.regions.id.vpcs.id.{{resource_type}}.list">
<div class="list-group" >
<div class="list-group-item">
<a href="javascript:updateHash('services.{{service_name}}.regions.id.vpcs.id.{{resource_type}}')">
Show all <span class="badge float-right btn-info">{{getValueAt 'metadata' service_group service_name 'resources' resource_type 'count'}}</span>
</a>
</div>
</div>
{{#each items}}
<div class="list-group" id="services.{{../service_name}}.regions.{{@key}}.vpcs.id.{{../resource_type}}.list">
<div class="list-group-item active">
<a href="#services.{{../service_name}}.regions.{{@key}}.vpcs.id.{{../resource_type}}">{{@key}}</a>
<span class="float-right"><a href="javascript:hideList('services.{{../service_name}}.regions.{{@key}}.vpcs.id.{{../resource_type}}.list')"><i class="fa fa-times-circle"></i></a></span>
</div>
{{#each vpcs}}
<div class="list-group-item list-sub-element" id="services.{{../../service_name}}.regions.{{@../key}}.vpcs.{{@key}}.{{../../resource_type}}.list">
<a href="#services.{{../../service_name}}.regions.{{@../key}}.vpcs.{{@key}}.{{../../resource_type}}">
{{#if (getValueAt 'services.vpc.regions' @../key 'vpcs' @key 'name')}}
{{getValueAt 'services.vpc.regions' @../key 'vpcs' @key 'name'}}
{{else}}
{{@key}}
{{/if}}
</a>
{{#each (lookup . ../../resource_type)}}
<div class="list-group-item-text list-sub-element" id="services.{{../../../service_name}}.regions.{{@../../key}}.vpcs.{{@../key}}.{{../../../resource_type}}.{{@key}}.link">
<a href="#services.{{../../../service_name}}.regions.{{@../../key}}.vpcs.{{@../key}}.{{../../../resource_type}}.{{@key}}.view">{{name}}</a>
</div>
{{/each}}
</div>
{{/each}}
</div>
{{/each}}
</div>
</script>
<script>
Handlebars.registerPartial("left_menu_for_vpc", $("#left_menu_for_vpc\\.partial").html());
</script>

Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@

<!-- acm certificates -->
<script id="services.acm.regions.id.certificates.partial" type="text/x-handlebars-template">
<div id="resource-name" class="list-group-item active">
<h4 class="list-group-item-heading">{{name}}</h4>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">Information</h4>
<div class="list-group-item-text item-margin">ARN: <span id="acm.regions.{{region}}.certificates.{{@key}}.CertificateArn"><samp>{{value_or_none CertificateArn}}</samp></span></div>
<div class="list-group-item-text item-margin">Domain Name: <span id="acm.regions.{{region}}.certificates.{{@key}}.DomainName"><samp>{{value_or_none DomainName}}</samp></span></div>
<div class="list-group-item-text item-margin">Subject: <span id="acm.regions.{{region}}.certificates.{{@key}}.Subject"><samp>{{value_or_none Subject}}</samp></span></div>
<div class="list-group-item-text item-margin">
Subject Alternative Names:
<span id="acm.regions.{{region}}.certificates.{{@key}}.SubjectAlternativeNames">
<ul>
{{#each SubjectAlternativeNames}}
<li class="list-group-item-text"><samp>{{this}}</samp></li>
{{/each}}
</ul>
</span>
</div>
<div class="list-group-item-text item-margin">Status: <span id="acm.regions.{{region}}.certificates.{{@key}}.Status"><samp>{{value_or_none Status}}</samp></span></div>
<div class="list-group-item-text item-margin">Issuer: <span id="acm.regions.{{region}}.certificates.{{@key}}.Issuer"><samp>{{value_or_none Issuer}}</samp></span></div>
<div class="list-group-item-text item-margin">Type: <span id="acm.regions.{{region}}.certificates.{{@key}}.Type"><samp>{{value_or_none Type}}</samp></span></div>
<div class="list-group-item-text item-margin">Created: <span id="acm.regions.{{region}}.certificates.{{@key}}.CreatedAt">{{format_date CreatedAt}}</span></div>
<div class="list-group-item-text item-margin">Expiration: <span id="acm.regions.{{region}}.certificates.{{@key}}.NotAfter">{{format_date NotAfter}}</span></div>
<div class="list-group-item-text item-margin">Renewal Eligibility: <span id="acm.regions.{{region}}.certificates.{{@key}}.RenewalEligibility"><samp>{{value_or_none RenewalEligibility}}</samp></span></div>
<div class="list-group-item-text item-margin">Transparency Logging Preference: <span id="acm.regions.{{region}}.certificates.{{@key}}.CertificateTransparencyLoggingPreference"><samp>{{value_or_none Options.CertificateTransparencyLoggingPreference}}</samp></span></div>

<h4 class="list-group-item-heading">Validation</h4>
<div class="list-group-item-text item-margin">Domain Validation Options:
<span id="acm.regions.{{region}}.certificates.{{@key}}.DomainValidationOptions">
<ul>
{{#each DomainValidationOptions}}
<li class="list-group-item-text"><samp>{{DomainName}} - {{ValidationDomain}} - {{ValidationMethod}} - {{ValidationStatus}}</samp></li>
{{/each}}
</ul>
</span>
</div>

<h4 class="list-group-item-heading">Keys</h4>
<div class="list-group-item-text item-margin">Key Algorithm: <span id="acm.regions.{{region}}.certificates.{{@key}}.KeyAlgorithm"><samp>{{value_or_none KeyAlgorithm}}</samp></span></div>
<div class="list-group-item-text item-margin">Signature Algorithm: <span id="acm.regions.{{region}}.certificates.{{@key}}.SignatureAlgorithm"><samp>{{value_or_none SignatureAlgorithm}}</samp></span></div>
<div class="list-group-item-text item-margin">
Key Usages:
<span id="acm.regions.{{region}}.certificates.{{@key}}.KeyUsages">
<ul>
{{#each KeyUsages}}
<li class="list-group-item-text"><samp>{{Name}}</samp></li>
{{else}}
<li class="list-group-item-text"><samp>None</samp></li>
{{/each}}
</ul>
</span>
</div>
<div class="list-group-item-text item-margin">Extended Key Usages:
<span id="acm.regions.{{region}}.certificates.{{@key}}.ExtendedKeyUsages">
<ul>
{{#each KeyUsages}}
<li class="list-group-item-text"><samp>{{Name}} - {{OID}}</samp></li>
{{else}}
<li class="list-group-item-text"><samp>None</samp></li>
{{/each}}
</ul>
</span>
</div>
<div class="list-group-item-text item-margin">In Use By:
<span id="acm.regions.{{region}}.certificates.{{@key}}.InUseBy">
<ul>
{{#each InUseBys}}
<li class="list-group-item-text"><samp>{{this}}</samp></li>
{{else}}
<li class="list-group-item-text"><samp>None</samp></li>
{{/each}}
</ul>
</span>
</div>

</div>
</script>

<script>
Handlebars.registerPartial("services.acm.regions.id.certificates", $("#services\\.acm\\.regions\\.id\\.certificates\\.partial").html());
</script>

<!-- Single acm certificate template -->
<script id="single_acm_certificate-template" type="text/x-handlebars-template">
{{> modal-template template='services.acm.regions.id.certificates'}}
</script>
<script>
var single_acm_certificate_template = Handlebars.compile($("#single_acm_certificate-template").html());
</script>


Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!-- Lambda function partial -->
<script id="services.awslambda.regions.id.functions.partial" type="text/x-handlebars-template">
<div id="resource-name" class="list-group-item active">
<h4 class="list-group-item-heading">{{name}}</h4>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">Information</h4>
<div class="list-group-item-text item-margin">Description: <span id="awslambda.regions.{{region}}.functions.{{@key}}.description"><samp>{{value_or_none description}}</samp></span></div>
<div class="list-group-item-text item-margin">Last Modified: <span id="awslambda.regions.{{region}}.functions.{{@key}}.last_modified"><samp>{{format_date last_modified}}</samp></span></div>
<div class="list-group-item-text item-margin">Runtime: <span id="awslambda.regions.{{region}}.functions.{{@key}}.runtime"><samp>{{value_or_none runtime}}</samp></span></div>
<div class="list-group-item-text item-margin">Version: <span id="awslambda.regions.{{region}}.functions.{{@key}}.version"><samp>{{value_or_none version}}</samp></span></div>
<div class="list-group-item-text item-margin">Revision ID: <span id="awslambda.regions.{{region}}.functions.{{@key}}.revision_id"><samp>{{value_or_none revision_id}}</samp></span></div>
<div class="list-group-item-text item-margin">Execution Role: <a href="javascript:showObject('services.iam.roles.{{value_or_none execution_role.RoleId}}')">{{value_or_none execution_role.RoleName}}</a></div>
<div class="list-group-item-text item-margin">Handler: <span id="awslambda.regions.{{region}}.functions.{{@key}}.handler"><samp>{{value_or_none handler}}</samp></span></div>
<div class="list-group-item-text item-margin">Code Size: <span id="awslambda.regions.{{region}}.functions.{{@key}}.code_size"><samp>{{value_or_none code_size}}</samp></span></div>
<div class="list-group-item-text item-margin">Memory Size: <span id="awslambda.regions.{{region}}.functions.{{@key}}.memory_size"><samp>{{value_or_none memory_size}}</samp></span></div>
<div class="list-group-item-text item-margin">Timeout: <span id="awslambda.regions.{{region}}.functions.{{@key}}.timeout"><samp>{{value_or_none timeout}}</samp></span></div>
</div>
{{#if access_policy}}
<div class="list-group-item">
{{> accordion_policy name = 'Resource-Based Policy' policy_path = (concat 'awslambda.regions' region 'functions' @key 'access_policy') document = access_policy}}
</div>
{{/if}}
</script>

<script>
Handlebars.registerPartial("services.awslambda.regions.id.functions", $("#services\\.awslambda\\.regions\\.id\\.functions\\.partial").html());
</script>

<!-- Single awslambda function template -->
<script id="single_awslambda_function-template" type="text/x-handlebars-template">
{{> modal-template template='services.awslambda.regions.id.functions'}}
</script>
<script>
var single_awslambda_function_template = Handlebars.compile($("#single_awslambda_function-template").html());
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<!-- CloudFormation stack partial -->
<script id="services.cloudformation.regions.id.stacks.partial" type="text/x-handlebars-template">
<div id="resource-name" class="list-group-item active">
<h4 class="list-group-item-heading">{{name}}</h4>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">Description</h4>
<div class="list-group-item-text item-margin">{{Description}}</div>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">Information</h4>
<div class="list-group-item-text item-margin">Region: {{region}}</div>
<div class="list-group-item-text item-margin">Created on: {{CreationTime}}</div>
<div class="list-group-item-text item-margin" id="">Role:
{{#if iam_role}}
<a href="javascript:showObject('services.iam.roles.{{iam_role.id}}')">{{iam_role.name}}</a>
<span id="cloudformation.regions.{{region}}.stacks.{{name}}"><i class="fa fa-exclamation-triangle"></i></span>
{{else}}
None
{{/if}}
</div>
<div class="list-group-item-text item-margin">Termination protection enabled: <span id="cloudformation.regions.{{region}}.stacks.{{@key}}.cloudformation_stack_no_termination_protection">{{EnableTerminationProtection}}</span></div>
<div class="list-group-item-text item-margin">Configuration has drifted: <span id="cloudformation.regions.{{region}}.stacks.{{@key}}.cloudformation_stack_drifted">{{drifted}}</span></div>
<div class="list-group-item-text item-margin">Deletion policy: <span id="cloudformation.regions.{{region}}.stacks.{{@key}}.cloudformation_stack_no_deletion_policy">{{deletion_policy}}</span></div>
</div>
<div class="list-group-item">
<h4 class="list-group-item-heading">Capabilities {{> count_badge count=Capabilities.length}}</h4>
<ul>
{{#each Capabilities}}
<li class="list-group-item-text">
{{this}}
</li>
{{/each}}
</ul>
</div>
{{#if policy}}
<div class="list-group-item">
{{> accordion_policy name = 'Stack Policy' policy_path = (concat 'cloudformation.regions' region 'stacks' @key 'policy') document = policy}}
</div>
{{/if}}
</script>

<script>
Handlebars.registerPartial("services.cloudformation.regions.id.stacks", $("#services\\.cloudformation\\.regions\\.id\\.stacks\\.partial").html());
</script>

<!-- Single CloudFormation stack template -->
<script id="single_cloudformation_stack-template" type="text/x-handlebars-template">
{{> modal-template template='services.cloudformation.regions.id.stacks' }}
</script>

<script>
var single_cloudformation_stack_template = Handlebars.compile($("#single_cloudformation_stack-template").html());
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

<!-- Trail partial -->
<script id="services.cloudtrail.regions.partial" type="text/x-handlebars-template">
<div class="list-group-item active">
<h4 class="list-group-item-heading">{{name}}</h4>
</div>
<div class="list-group-item">
<h4>Information</h4>
<ul>
<li class="list-group-item-text">Configured:
<span id="cloudtrail.regions.{{name}}.NotConfigured">
{{#ifPositive trails_count}}true{{else}}false{{/ifPositive}}
</span>
</li>
</ul>
</div>
<div class="list-group-item">
<div class="accordion">
<h4 class="list-group-item-heading accordion-heading">Trails
{{> count_badge target=(concat '#cloudtrail.regions' name 'trails') count=trails_count}}
</h4>
<div id="cloudtrail.regions.{{name}}.trails" class="accordion-body">
<div class="accordion-inner">
<ul class="no-bullet">
{{#each this.trails}}
<li><a href="javascript:showObject('services.cloudtrail.regions.{{../name}}.trails.{{@key}}')">{{name}}</a></li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
</script>
<script>
Handlebars.registerPartial("services.cloudtrail.regions", $("#services\\.cloudtrail\\.regions\\.partial").html());
</script>

0 comments on commit 7dc8bf7

Please sign in to comment.