heimdall_tools 1.3.40 → 1.3.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a306a3ebf9a2755760b9cc825f1123a62291723d92d215c03d3e9d958d22497
4
- data.tar.gz: 5e551876a20872c32126a6c96d08e3c6cd6acdf73bc31abf1ba918693764d4e9
3
+ metadata.gz: 87936a7488cf8da17690bb3c35d5138a2e9442d8d4c48b307307f4d44423b987
4
+ data.tar.gz: 28f172cc25391e697910bb1b2b79fea29c82956cbca953f1e7978080b4e1d646
5
5
  SHA512:
6
- metadata.gz: 4ed8a026a5fbbd63d3da4ebb4211d8ee8cc371ae29e57f4deb10f9e188491af29b2988e17524aa5ab4c064f62a44349edfa9b626641c89d6a958ff040df39e40
7
- data.tar.gz: 2874bbd8f062e601ed1fb65b53ec53ee5267d7c17457cef91f936dd28936bac6f35b4387c3d452c301c593cdb13e01ea6d587c1885a88b1a6f025ac3ee38bdaa
6
+ metadata.gz: bf394cd989527e58e45755881a01ad5d91761201f0a054e5a92a69ae3ac9b943569ef400298d31afee4514b72f3f7b77212b8bcc189107e355c45e1c2758e41d
7
+ data.tar.gz: 54c1a3447b631b28c024f0bc77559834464bccc518463a2fee0313d7b19f6252db9d624058eda3118423178f736e080ccffa5601b2cc7ec2daa98332a90d1e8f
data/README.md CHANGED
@@ -17,6 +17,21 @@ HeimdallTools supplies several methods to convert output from various tools to "
17
17
  - **aws_config_mapper** - assess, audit, and evaluate AWS resources
18
18
  - **netsparker_mapper** - web application security scanner
19
19
 
20
+ ## Want to recommend a mapper for another tool? Please use these steps:
21
+ 1. Create an [issue](https://github.com/mitre/heimdall_tools/issues/new), and email saf@groups.mitre.org citing the issue link so we can help
22
+ 2. Provide a sample output, preferably the most detailed the tool can provide, and also preferably in a machine-readable format, such as xml, json, or csv - whichever is natively available. If it is sensitive we'll work that in #3. (If it's an API only, we'll also just talk about it in #3)
23
+ 3. Let's arrange a time to take a close look at the data it provides to get an idea of all it has to offer. We'll suggest an initial mapping of the HDF core elements. (see https://saf.mitre.org/#/normalize)
24
+ 4. Note: if the tool doesn't provide a NIST SP 800-53 reference, we've worked on mappings to other references such as CWE or OWASP Top 10:
25
+ https://github.com/mitre/heimdall_tools/tree/master/lib/data
26
+ https://github.com/mitre/heimdall_tools/blob/master/lib/data/cwe-nist-mapping.csv
27
+ https://github.com/mitre/heimdall_tools/blob/master/lib/data/owasp-nist-mapping.csv
28
+ 5. If the tool doesn't provide something for #4, or another core element such as impact, we'll help you identify a custom mapping approach.
29
+ 6. We'll help you decide how to preserve any other information (non-core elements) the tool provides to ensure that all of the original tool's intent comes through for the user when the data is viewed in Heimdall.
30
+ 7. Finally, We'll provide final peer review and support merging your pull request.
31
+ We appreciate your contributions, but we're here to help!
32
+
33
+ ## How to Install Heimdall Tools:
34
+
20
35
  Ruby 2.4 or higher (check using "ruby -v")
21
36
 
22
37
  If installation of Ruby is required, perform these steps:
@@ -1,107 +1,107 @@
1
- AwsConfigRuleName,NIST-ID,Rev
2
- secretsmanager-scheduled-rotation-success-check,AC-2(1)|AC-2(j),4
3
- iam-user-group-membership-check,AC-2(1)|AC-2(j)|AC-3|AC-6,4
4
- iam-password-policy,AC-2(1)|AC-2(f)|AC-2(j)|IA-2|IA-5(1)(a)(d)(e)|IA-5(4),4
5
- access-keys-rotated,AC-2(1)|AC-2(j),4
6
- iam-user-unused-credentials-check,AC-2(1)|AC-2(3)|AC-2(f)|AC-3|AC-6,4
7
- securityhub-enabled,AC-2(1)|AC-2(4)|AC-2(12)(a)|AC-2(g)|AC-17(1)|AU-6(1)(3)|CA-7(a)(b)|SA-10|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(16)|SI-4(a)(b)(c),4
8
- guardduty-enabled-centralized,AC-2(1)|AC-2(4)|AC-2(12)(a)|AC-2(g)|AC-17(1)|AU-6(1)(3)|CA-7(a)(b)|RA-5|SA-10|SI-4(1)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(16)|SI-4(a)(b)(c),4
9
- cloud-trail-cloud-watch-logs-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-6(1)(3)|AU-7(1)|AU-12(a)(c)|CA-7(a)(b)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(a)(b)(c),4
10
- cloudtrail-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
11
- multi-region-cloudtrail-enabled,AC-2(4)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
12
- rds-logging-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
13
- cloudwatch-alarm-action-check,AC-2(4)|AU-6(1)(3)|AU-7(1)|CA-7(a)(b)|IR-4(1)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(a)(b)(c),4
14
- redshift-cluster-configuration-check,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c)|SC-13|SC-28,4
15
- iam-root-access-key-check,AC-2(f)|AC-2(j)|AC-3|AC-6|AC-6(10),4
16
- s3-bucket-logging-enabled,AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
17
- cloudtrail-s3-dataevents-enabled,AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
18
- root-account-mfa-enabled,AC-2(j)|IA-2(1)(11),4
19
- emr-kerberos-enabled,AC-2(j)|AC-3|AC-5(c)|AC-6,4
20
- iam-group-has-users-check,AC-2(j)|AC-3|AC-5(c)|AC-6|SC-2,4
21
- iam-policy-no-statements-with-admin-access,AC-2(j)|AC-3|AC-5(c)|AC-6|SC-2,4
22
- iam-user-no-policies-check,AC-2(j)|AC-3|AC-5(c)|AC-6,4
23
- s3-bucket-public-write-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
24
- lambda-function-public-access-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
25
- rds-snapshots-public-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
26
- redshift-cluster-public-access-check,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
27
- s3-bucket-policy-grantee-check,AC-3|AC-6|SC-7|SC-7(3),4
28
- s3-bucket-public-read-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
29
- s3-account-level-public-access-blocks,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
30
- dms-replication-not-public,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
31
- ebs-snapshot-public-restorable-check,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
32
- sagemaker-notebook-no-direct-internet-access,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
33
- rds-instance-public-access-check,AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
34
- lambda-inside-vpc,AC-4|SC-7|SC-7(3),4
35
- ec2-instances-in-vpc,AC-4|SC-7|SC-7(3),4
36
- restricted-common-ports,AC-4|CM-2|SC-7|SC-7(3),4
37
- restricted-ssh,AC-4|SC-7|SC-7(3),4
38
- vpc-default-security-group-closed,AC-4|SC-7|SC-7(3),4
39
- vpc-sg-open-only-to-authorized-ports,AC-4|SC-7|SC-7(3),4
40
- acm-certificate-expiration-check,AC-4|AC-17(2)|SC-12,4
41
- ec2-instance-no-public-ip,AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
42
- elasticsearch-in-vpc-only,AC-4|SC-7|SC-7(3),4
43
- emr-master-no-public-ip,AC-4|AC-21(b)|SC-7|SC-7(3),4
44
- internet-gateway-authorized-vpc-only,AC-4|AC-17(3)|SC-7|SC-7(3),4
45
- codebuild-project-envvar-awscred-check,AC-6|IA-5(7)|SA-3(a),4
46
- ec2-imdsv2-check,AC-6,4
47
- iam-no-inline-policy-check,AC-6,4
48
- alb-http-to-https-redirection-check,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13|SC-23,4
49
- redshift-require-tls-ssl,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
50
- s3-bucket-ssl-requests-only,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
51
- elb-acm-certificate-required,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
52
- alb-http-drop-invalid-header-enabled,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-23,4
53
- elb-tls-https-listeners-only,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-23,4
54
- api-gw-execution-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
55
- elb-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
56
- vpc-flow-logs-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
57
- wafv2-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c)|SC-7|SI-4(a)(b)(c),4
58
- cloud-trail-encryption-enabled,AU-9|SC-13|SC-28,4
59
- cloudwatch-log-group-encrypted,AU-9|SC-13|SC-28,4
60
- s3-bucket-replication-enabled,AU-9(2)|CP-9(b)|CP-10|SC-5|SC-36,4
61
- cw-loggroup-retention-period-check,AU-11|SI-12,4
62
- ec2-instance-detailed-monitoring-enabled,CA-7(a)(b)|SI-4(2)|SI-4(a)(b)(c),4
63
- rds-enhanced-monitoring-enabled,CA-7(a)(b),4
64
- ec2-instance-managed-by-systems-manager,CM-2|CM-7(a)|CM-8(1)|CM-8(3)(a)|SA-3(a)|SA-10|SI-2(2)|SI-7(1),4
65
- ec2-managedinstance-association-compliance-status-check,CM-2|CM-7(a)|CM-8(3)(a)|SI-2(2),4
66
- ec2-stopped-instance,CM-2,4
67
- ec2-volume-inuse-check,CM-2|SC-4,4
68
- elb-deletion-protection-enabled,CM-2|CP-10,4
69
- cloudtrail-security-trail-enabled,CM-2,4
70
- ec2-managedinstance-patch-compliance-status-check,CM-8(3)(a)|SI-2(2)|SI-7(1),4
71
- db-instance-backup-enabled,CP-9(b)|CP-10|SI-12,4
72
- dynamodb-pitr-enabled,CP-9(b)|CP-10|SI-12,4
73
- elasticache-redis-cluster-automatic-backup-check,CP-9(b)|CP-10|SI-12,4
74
- dynamodb-in-backup-plan,CP-9(b)|CP-10|SI-12,4
75
- ebs-in-backup-plan,CP-9(b)|CP-10|SI-12,4
76
- efs-in-backup-plan,CP-9(b)|CP-10|SI-12,4
77
- rds-in-backup-plan,CP-9(b)|CP-10|SI-12,4
78
- dynamodb-autoscaling-enabled,CP-10|SC-5,4
79
- rds-multi-az-support,CP-10|SC-5|SC-36,4
80
- s3-bucket-versioning-enabled,CP-10|SI-12,4
81
- vpc-vpn-2-tunnels-up,CP-10,4
82
- elb-cross-zone-load-balancing-enabled,CP-10|SC-5,4
83
- root-account-hardware-mfa-enabled,IA-2(1)(11),4
84
- mfa-enabled-for-iam-console-access,IA-2(1)(2)(11),4
85
- iam-user-mfa-enabled,IA-2(1)(2)(11),4
86
- guardduty-non-archived-findings,IR-4(1)|IR-6(1)|IR-7(1)|RA-5|SA-10|SI-4(a)(b)(c),4
87
- codebuild-project-source-repo-url-check,SA-3(a),4
88
- autoscaling-group-elb-healthcheck-required,SC-5,4
89
- rds-instance-deletion-protection-enabled,SC-5,4
90
- alb-waf-enabled,SC-7|SI-4(a)(b)(c),4
91
- elasticsearch-node-to-node-encryption-check,SC-7|SC-8|SC-8(1),4
92
- cmk-backing-key-rotation-enabled,SC-12,4
93
- kms-cmk-not-scheduled-for-deletion,SC-12|SC-28,4
94
- api-gw-cache-enabled-and-encrypted,SC-13|SC-28,4
95
- efs-encrypted-check,SC-13|SC-28,4
96
- elasticsearch-encrypted-at-rest,SC-13|SC-28,4
97
- encrypted-volumes,SC-13|SC-28,4
98
- rds-storage-encrypted,SC-13|SC-28,4
99
- s3-bucket-server-side-encryption-enabled,SC-13|SC-28,4
100
- sagemaker-endpoint-configuration-kms-key-configured,SC-13|SC-28,4
101
- sagemaker-notebook-instance-kms-key-configured,SC-13|SC-28,4
102
- sns-encrypted-kms,SC-13|SC-28,4
103
- dynamodb-table-encrypted-kms,SC-13,4
104
- s3-bucket-default-lock-enabled,SC-28,4
105
- ec2-ebs-encryption-by-default,SC-28,4
106
- rds-snapshot-encrypted,SC-28,4
107
- cloud-trail-log-file-validation-enabled,SI-7|SI-7(1),4
1
+ AwsConfigRuleSourceIdentifier,AwsConfigRuleName,NIST-ID,Rev
2
+ SECRETSMANAGER_SCHEDULED_ROTATION_SUCCESS_CHECK,secretsmanager-scheduled-rotation-success-check,AC-2(1)|AC-2(j),4
3
+ IAM_USER_GROUP_MEMBERSHIP_CHECK,iam-user-group-membership-check,AC-2(1)|AC-2(j)|AC-3|AC-6,4
4
+ IAM_PASSWORD_POLICY,iam-password-policy,AC-2(1)|AC-2(f)|AC-2(j)|IA-2|IA-5(1)(a)(d)(e)|IA-5(4),4
5
+ ACCESS_KEYS_ROTATED,access-keys-rotated,AC-2(1)|AC-2(j),4
6
+ IAM_USER_UNUSED_CREDENTIALS_CHECK,iam-user-unused-credentials-check,AC-2(1)|AC-2(3)|AC-2(f)|AC-3|AC-6,4
7
+ SECURITYHUB_ENABLED,securityhub-enabled,AC-2(1)|AC-2(4)|AC-2(12)(a)|AC-2(g)|AC-17(1)|AU-6(1)(3)|CA-7(a)(b)|SA-10|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(16)|SI-4(a)(b)(c),4
8
+ GUARDDUTY_ENABLED_CENTRALIZED,guardduty-enabled-centralized,AC-2(1)|AC-2(4)|AC-2(12)(a)|AC-2(g)|AC-17(1)|AU-6(1)(3)|CA-7(a)(b)|RA-5|SA-10|SI-4(1)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(16)|SI-4(a)(b)(c),4
9
+ CLOUD_TRAIL_CLOUD_WATCH_LOGS_ENABLED,cloud-trail-cloud-watch-logs-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-6(1)(3)|AU-7(1)|AU-12(a)(c)|CA-7(a)(b)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(a)(b)(c),4
10
+ CLOUD_TRAIL_ENABLED,cloudtrail-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
11
+ MULTI_REGION_CLOUD_TRAIL_ENABLED,multi-region-cloudtrail-enabled,AC-2(4)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
12
+ RDS_LOGGING_ENABLED,rds-logging-enabled,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
13
+ CLOUDWATCH_ALARM_ACTION_CHECK,cloudwatch-alarm-action-check,AC-2(4)|AU-6(1)(3)|AU-7(1)|CA-7(a)(b)|IR-4(1)|SI-4(2)|SI-4(4)|SI-4(5)|SI-4(a)(b)(c),4
14
+ REDSHIFT_CLUSTER_CONFIGURATION_CHECK,redshift-cluster-configuration-check,AC-2(4)|AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c)|SC-13|SC-28,4
15
+ IAM_ROOT_ACCESS_KEY_CHECK,iam-root-access-key-check,AC-2(f)|AC-2(j)|AC-3|AC-6|AC-6(10),4
16
+ S3_BUCKET_LOGGING_ENABLED,s3-bucket-logging-enabled,AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
17
+ CLOUDTRAIL_S3_DATAEVENTS_ENABLED,cloudtrail-s3-dataevents-enabled,AC-2(g)|AU-2(a)(d)|AU-3|AU-12(a)(c),4
18
+ ROOT_ACCOUNT_MFA_ENABLED,root-account-mfa-enabled,AC-2(j)|IA-2(1)(11),4
19
+ EMR_KERBEROS_ENABLED,emr-kerberos-enabled,AC-2(j)|AC-3|AC-5(c)|AC-6,4
20
+ IAM_GROUP_HAS_USERS_CHECK,iam-group-has-users-check,AC-2(j)|AC-3|AC-5(c)|AC-6|SC-2,4
21
+ IAM_POLICY_NO_STATEMENTS_WITH_ADMIN_ACCESS,iam-policy-no-statements-with-admin-access,AC-2(j)|AC-3|AC-5(c)|AC-6|SC-2,4
22
+ IAM_USER_NO_POLICIES_CHECK,iam-user-no-policies-check,AC-2(j)|AC-3|AC-5(c)|AC-6,4
23
+ S3_BUCKET_PUBLIC_WRITE_PROHIBITED,s3-bucket-public-write-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
24
+ LAMBDA_FUNCTION_PUBLIC_ACCESS_PROHIBITED,lambda-function-public-access-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
25
+ RDS_SNAPSHOTS_PUBLIC_PROHIBITED,rds-snapshots-public-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
26
+ REDSHIFT_CLUSTER_PUBLIC_ACCESS_CHECK,redshift-cluster-public-access-check,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
27
+ S3_BUCKET_POLICY_GRANTEE_CHECK,s3-bucket-policy-grantee-check,AC-3|AC-6|SC-7|SC-7(3),4
28
+ S3_BUCKET_PUBLIC_READ_PROHIBITED,s3-bucket-public-read-prohibited,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
29
+ S3_ACCOUNT_LEVEL_PUBLIC_ACCESS_BLOCKS,s3-account-level-public-access-blocks,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
30
+ DMS_REPLICATION_NOT_PUBLIC,dms-replication-not-public,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
31
+ EBS_SNAPSHOT_PUBLIC_RESTORABLE_CHECK,ebs-snapshot-public-restorable-check,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
32
+ SAGEMAKER_NOTEBOOK_NO_DIRECT_INTERNET_ACCESS,sagemaker-notebook-no-direct-internet-access,AC-3|AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
33
+ RDS_INSTANCE_PUBLIC_ACCESS_CHECK,rds-instance-public-access-check,AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
34
+ LAMBDA_INSIDE_VPC,lambda-inside-vpc,AC-4|SC-7|SC-7(3),4
35
+ INSTANCES_IN_VPC,ec2-instances-in-vpc,AC-4|SC-7|SC-7(3),4
36
+ RESTRICTED_INCOMING_TRAFFIC,restricted-common-ports,AC-4|CM-2|SC-7|SC-7(3),4
37
+ INCOMING_SSH_DISABLED,restricted-ssh,AC-4|SC-7|SC-7(3),4
38
+ VPC_DEFAULT_SECURITY_GROUP_CLOSED,vpc-default-security-group-closed,AC-4|SC-7|SC-7(3),4
39
+ VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS,vpc-sg-open-only-to-authorized-ports,AC-4|SC-7|SC-7(3),4
40
+ ACM_CERTIFICATE_EXPIRATION_CHECK,acm-certificate-expiration-check,AC-4|AC-17(2)|SC-12,4
41
+ EC2_INSTANCE_NO_PUBLIC_IP,ec2-instance-no-public-ip,AC-4|AC-6|AC-21(b)|SC-7|SC-7(3),4
42
+ ELASTICSEARCH_IN_VPC_ONLY,elasticsearch-in-vpc-only,AC-4|SC-7|SC-7(3),4
43
+ EMR_MASTER_NO_PUBLIC_IP,emr-master-no-public-ip,AC-4|AC-21(b)|SC-7|SC-7(3),4
44
+ INTERNET_GATEWAY_AUTHORIZED_VPC_ONLY,internet-gateway-authorized-vpc-only,AC-4|AC-17(3)|SC-7|SC-7(3),4
45
+ CODEBUILD_PROJECT_ENVVAR_AWSCRED_CHECK,codebuild-project-envvar-awscred-check,AC-6|IA-5(7)|SA-3(a),4
46
+ EC2_IMDSV2_CHECK,ec2-imdsv2-check,AC-6,4
47
+ IAM_NO_INLINE_POLICY_CHECK,iam-no-inline-policy-check,AC-6,4
48
+ ALB_HTTP_TO_HTTPS_REDIRECTION_CHECK,alb-http-to-https-redirection-check,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13|SC-23,4
49
+ REDSHIFT_REQUIRE_TLS_SSL,redshift-require-tls-ssl,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
50
+ S3_BUCKET_SSL_REQUESTS_ONLY,s3-bucket-ssl-requests-only,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
51
+ ELB_ACM_CERTIFICATE_REQUIRED,elb-acm-certificate-required,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-13,4
52
+ ALB_HTTP_DROP_INVALID_HEADER_ENABLED,alb-http-drop-invalid-header-enabled,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-23,4
53
+ ELB_TLS_HTTPS_LISTENERS_ONLY,elb-tls-https-listeners-only,AC-17(2)|SC-7|SC-8|SC-8(1)|SC-23,4
54
+ API_GW_EXECUTION_LOGGING_ENABLED,api-gw-execution-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
55
+ ELB_LOGGING_ENABLED,elb-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
56
+ VPC_FLOW_LOGS_ENABLED,vpc-flow-logs-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c),4
57
+ WAFV2_LOGGING_ENABLED,wafv2-logging-enabled,AU-2(a)(d)|AU-3|AU-12(a)(c)|SC-7|SI-4(a)(b)(c),4
58
+ CLOUD_TRAIL_ENCRYPTION_ENABLED,cloud-trail-encryption-enabled,AU-9|SC-13|SC-28,4
59
+ CLOUDWATCH_LOG_GROUP_ENCRYPTED,cloudwatch-log-group-encrypted,AU-9|SC-13|SC-28,4
60
+ S3_BUCKET_REPLICATION_ENABLED,s3-bucket-replication-enabled,AU-9(2)|CP-9(b)|CP-10|SC-5|SC-36,4
61
+ CW_LOGGROUP_RETENTION_PERIOD_CHECK,cw-loggroup-retention-period-check,AU-11|SI-12,4
62
+ EC2_INSTANCE_DETAILED_MONITORING_ENABLED,ec2-instance-detailed-monitoring-enabled,CA-7(a)(b)|SI-4(2)|SI-4(a)(b)(c),4
63
+ RDS_ENHANCED_MONITORING_ENABLED,rds-enhanced-monitoring-enabled,CA-7(a)(b),4
64
+ EC2_INSTANCE_MANAGED_BY_SSM,ec2-instance-managed-by-systems-manager,CM-2|CM-7(a)|CM-8(1)|CM-8(3)(a)|SA-3(a)|SA-10|SI-2(2)|SI-7(1),4
65
+ EC2_MANAGEDINSTANCE_ASSOCIATION_COMPLIANCE_STATUS_CHECK,ec2-managedinstance-association-compliance-status-check,CM-2|CM-7(a)|CM-8(3)(a)|SI-2(2),4
66
+ EC2_STOPPED_INSTANCE,ec2-stopped-instance,CM-2,4
67
+ EC2_VOLUME_INUSE_CHECK,ec2-volume-inuse-check,CM-2|SC-4,4
68
+ ELB_DELETION_PROTECTION_ENABLED,elb-deletion-protection-enabled,CM-2|CP-10,4
69
+ CLOUDTRAIL_SECURITY_TRAIL_ENABLED,cloudtrail-security-trail-enabled,CM-2,4
70
+ EC2_MANAGEDINSTANCE_PATCH_COMPLIANCE_STATUS_CHECK,ec2-managedinstance-patch-compliance-status-check,CM-8(3)(a)|SI-2(2)|SI-7(1),4
71
+ DB_INSTANCE_BACKUP_ENABLED,db-instance-backup-enabled,CP-9(b)|CP-10|SI-12,4
72
+ DYNAMODB_PITR_ENABLED,dynamodb-pitr-enabled,CP-9(b)|CP-10|SI-12,4
73
+ ELASTICACHE_REDIS_CLUSTER_AUTOMATIC_BACKUP_CHECK,elasticache-redis-cluster-automatic-backup-check,CP-9(b)|CP-10|SI-12,4
74
+ DYNAMODB_IN_BACKUP_PLAN,dynamodb-in-backup-plan,CP-9(b)|CP-10|SI-12,4
75
+ EBS_IN_BACKUP_PLAN,ebs-in-backup-plan,CP-9(b)|CP-10|SI-12,4
76
+ EFS_IN_BACKUP_PLAN,efs-in-backup-plan,CP-9(b)|CP-10|SI-12,4
77
+ RDS_IN_BACKUP_PLAN,rds-in-backup-plan,CP-9(b)|CP-10|SI-12,4
78
+ DYNAMODB_AUTOSCALING_ENABLED,dynamodb-autoscaling-enabled,CP-10|SC-5,4
79
+ RDS_MULTI_AZ_SUPPORT,rds-multi-az-support,CP-10|SC-5|SC-36,4
80
+ S3_BUCKET_VERSIONING_ENABLED,s3-bucket-versioning-enabled,CP-10|SI-12,4
81
+ VPC_VPN_2_TUNNELS_UP,vpc-vpn-2-tunnels-up,CP-10,4
82
+ ELB_CROSS_ZONE_LOAD_BALANCING_ENABLED,elb-cross-zone-load-balancing-enabled,CP-10|SC-5,4
83
+ ROOT_ACCOUNT_HARDWARE_MFA_ENABLED,root-account-hardware-mfa-enabled,IA-2(1)(11),4
84
+ MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS,mfa-enabled-for-iam-console-access,IA-2(1)(2)(11),4
85
+ IAM_USER_MFA_ENABLED,iam-user-mfa-enabled,IA-2(1)(2)(11),4
86
+ GUARDDUTY_NON_ARCHIVED_FINDINGS,guardduty-non-archived-findings,IR-4(1)|IR-6(1)|IR-7(1)|RA-5|SA-10|SI-4(a)(b)(c),4
87
+ CODEBUILD_PROJECT_SOURCE_REPO_URL_CHECK,codebuild-project-source-repo-url-check,SA-3(a),4
88
+ AUTOSCALING_GROUP_ELB_HEALTHCHECK_REQUIRED,autoscaling-group-elb-healthcheck-required,SC-5,4
89
+ RDS_INSTANCE_DELETION_PROTECTION_ENABLED,rds-instance-deletion-protection-enabled,SC-5,4
90
+ ALB_WAF_ENABLED,alb-waf-enabled,SC-7|SI-4(a)(b)(c),4
91
+ ELASTICSEARCH_NODE_TO_NODE_ENCRYPTION_CHECK,elasticsearch-node-to-node-encryption-check,SC-7|SC-8|SC-8(1),4
92
+ CMK_BACKING_KEY_ROTATION_ENABLED,cmk-backing-key-rotation-enabled,SC-12,4
93
+ KMS_CMK_NOT_SCHEDULED_FOR_DELETION,kms-cmk-not-scheduled-for-deletion,SC-12|SC-28,4
94
+ API_GW_CACHE_ENABLED_AND_ENCRYPTED,api-gw-cache-enabled-and-encrypted,SC-13|SC-28,4
95
+ EFS_ENCRYPTED_CHECK,efs-encrypted-check,SC-13|SC-28,4
96
+ ELASTICSEARCH_ENCRYPTED_AT_REST,elasticsearch-encrypted-at-rest,SC-13|SC-28,4
97
+ ENCRYPTED_VOLUMES,encrypted-volumes,SC-13|SC-28,4
98
+ RDS_STORAGE_ENCRYPTED,rds-storage-encrypted,SC-13|SC-28,4
99
+ S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED,s3-bucket-server-side-encryption-enabled,SC-13|SC-28,4
100
+ SAGEMAKER_ENDPOINT_CONFIGURATION_KMS_KEY_CONFIGURED,sagemaker-endpoint-configuration-kms-key-configured,SC-13|SC-28,4
101
+ SAGEMAKER_NOTEBOOK_INSTANCE_KMS_KEY_CONFIGURED,sagemaker-notebook-instance-kms-key-configured,SC-13|SC-28,4
102
+ SNS_ENCRYPTED_KMS,sns-encrypted-kms,SC-13|SC-28,4
103
+ DYNAMODB_TABLE_ENCRYPTED_KMS,dynamodb-table-encrypted-kms,SC-13,4
104
+ S3_BUCKET_DEFAULT_LOCK_ENABLED,s3-bucket-default-lock-enabled,SC-28,4
105
+ EC2_EBS_ENCRYPTION_BY_DEFAULT,ec2-ebs-encryption-by-default,SC-28,4
106
+ RDS_SNAPSHOT_ENCRYPTED,rds-snapshot-encrypted,SC-28,4
107
+ CLOUD_TRAIL_LOG_FILE_VALIDATION_ENABLED,cloud-trail-log-file-validation-enabled,SI-7|SI-7(1),4
@@ -13,17 +13,19 @@ INSUFFICIENT_DATA_MSG = 'Not enough data has been collectd to determine complian
13
13
  ##
14
14
  # HDF mapper for use with AWS Config rules.
15
15
  #
16
- # Ruby AWS Ruby SDK for ConfigService:
16
+ # Ruby AWS Ruby SDK for ConfigService:
17
17
  # - https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ConfigService/Client.html
18
18
  #
19
- # rubocop:disable Metrics/AbcSize, Metrics/ClassLength
20
19
  module HeimdallTools
21
20
  class AwsConfigMapper
22
- def initialize(custom_mapping, verbose = false)
23
- @verbose = verbose
21
+ def initialize(custom_mapping, endpoint = nil)
24
22
  @default_mapping = get_rule_mapping(AWS_CONFIG_MAPPING_FILE)
25
23
  @custom_mapping = custom_mapping.nil? ? {} : get_rule_mapping(custom_mapping)
26
- @client = Aws::ConfigService::Client.new
24
+ if endpoint.nil?
25
+ @client = Aws::ConfigService::Client.new
26
+ else
27
+ @client = Aws::ConfigService::Client.new(endpoint: endpoint)
28
+ end
27
29
  @issues = get_all_config_rules
28
30
  end
29
31
 
@@ -35,8 +37,8 @@ module HeimdallTools
35
37
  def to_hdf
36
38
  controls = @issues.map do |issue|
37
39
  @item = {}
38
- @item['id'] = issue[:config_rule_name]
39
- @item['title'] = issue[:config_rule_name]
40
+ @item['id'] = issue[:config_rule_id]
41
+ @item['title'] = "#{get_account_id(issue[:config_rule_arn])} - #{issue[:config_rule_name]}"
40
42
  @item['desc'] = issue[:description]
41
43
  @item['impact'] = 0.5
42
44
  @item['tags'] = hdf_tags(issue)
@@ -52,27 +54,42 @@ module HeimdallTools
52
54
  @item
53
55
  end
54
56
  end
57
+
55
58
  results = HeimdallDataFormat.new(
56
59
  profile_name: 'AWS Config',
57
60
  title: 'AWS Config',
58
61
  summary: 'AWS Config',
59
62
  controls: controls,
60
- statistics: { aws_config_sdk_version: Aws::ConfigService::GEM_VERSION }
61
- )
63
+ statistics: { aws_config_sdk_version: Aws::ConfigService::GEM_VERSION },
64
+ )
62
65
  results.to_hdf
63
66
  end
64
67
 
65
68
  private
66
69
 
70
+ ##
71
+ # Gets the account ID from a config rule ARN
72
+ #
73
+ # https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
74
+ # https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html
75
+ #
76
+ # Params:
77
+ # - arn: The ARN of the config rule
78
+ #
79
+ # Returns: The account ID portion of the ARN
80
+ def get_account_id(arn)
81
+ /:(\d{12}):config-rule/.match(arn)&.captures&.first || 'no-account-id'
82
+ end
83
+
67
84
  ##
68
85
  # Read in a config rule -> 800-53 control mapping CSV.
69
86
  #
70
- # Params:
87
+ # Params:
71
88
  # - path: The file path to the CSV file
72
89
  #
73
90
  # Returns: A mapped version of the csv in the format { rule_name: row, ... }
74
91
  def get_rule_mapping(path)
75
- Hash[CSV.read(path, headers: true).map { |row| [row[0], row] }]
92
+ CSV.read(path, headers: true).map { |row| [row['AwsConfigRuleSourceIdentifier'], row] }.to_h
76
93
  end
77
94
 
78
95
  ##
@@ -142,7 +159,7 @@ module HeimdallTools
142
159
  end
143
160
 
144
161
  # Map based on name for easy lookup
145
- Hash[compliance_results.collect { |r| [r.config_rule_name, r.to_h] }]
162
+ compliance_results.collect { |r| [r.config_rule_name, r.to_h] }.to_h
146
163
  end
147
164
 
148
165
  ##
@@ -192,7 +209,7 @@ module HeimdallTools
192
209
  (result[:result_recorded_time] - result[:config_rule_invoked_time]).round(6)
193
210
  end
194
211
  # status
195
- hdf_result['status'] = case result.dig(:compliance_type)
212
+ hdf_result['status'] = case result[:compliance_type]
196
213
  when 'COMPLIANT'
197
214
  'passed'
198
215
  when 'NON_COMPLIANT'
@@ -209,19 +226,19 @@ module HeimdallTools
209
226
  when 'NOT_APPLICABLE'
210
227
  rule[:impact] = 0
211
228
  rule[:results] << {
212
- 'run_time': 0,
213
- 'code_desc': NOT_APPLICABLE_MSG,
214
- 'skip_message': NOT_APPLICABLE_MSG,
215
- 'start_time': DateTime.now.strftime('%Y-%m-%dT%H:%M:%S%:z'),
216
- 'status': 'skipped'
229
+ run_time: 0,
230
+ code_desc: NOT_APPLICABLE_MSG,
231
+ skip_message: NOT_APPLICABLE_MSG,
232
+ start_time: DateTime.now.strftime('%Y-%m-%dT%H:%M:%S%:z'),
233
+ status: 'skipped'
217
234
  }
218
235
  when 'INSUFFICIENT_DATA'
219
236
  rule[:results] << {
220
- 'run_time': 0,
221
- 'code_desc': INSUFFICIENT_DATA_MSG,
222
- 'skip_message': INSUFFICIENT_DATA_MSG,
223
- 'start_time': DateTime.now.strftime('%Y-%m-%dT%H:%M:%S%:z'),
224
- 'status': 'skipped'
237
+ run_time: 0,
238
+ code_desc: INSUFFICIENT_DATA_MSG,
239
+ skip_message: INSUFFICIENT_DATA_MSG,
240
+ start_time: DateTime.now.strftime('%Y-%m-%dT%H:%M:%S%:z'),
241
+ status: 'skipped'
225
242
  }
226
243
  end
227
244
  end
@@ -239,18 +256,17 @@ module HeimdallTools
239
256
  def hdf_tags(config_rule)
240
257
  result = {}
241
258
 
242
- @default_mapping
243
- @custom_mapping
259
+ source_identifier = config_rule.dig(:source, :source_identifier)
244
260
 
245
261
  # NIST tag
246
262
  result['nist'] = []
247
- default_mapping_match = @default_mapping[config_rule[:config_rule_name]]
248
-
249
- result['nist'] += default_mapping_match[1].split('|') unless default_mapping_match.nil?
263
+ default_mapping_match = @default_mapping[source_identifier]
264
+
265
+ result['nist'] += default_mapping_match['NIST-ID'].split('|') unless default_mapping_match.nil?
266
+
267
+ custom_mapping_match = @custom_mapping[source_identifier]
250
268
 
251
- custom_mapping_match = @custom_mapping[config_rule[:config_rule_name]]
252
-
253
- result['nist'] += custom_mapping_match[1].split('|').map { |name| "#{name} (user provided)" } unless custom_mapping_match.nil?
269
+ result['nist'] += custom_mapping_match['NIST-ID'].split('|').map { |name| "#{name} (user provided)" } unless custom_mapping_match.nil?
254
270
 
255
271
  result['nist'] = ['unmapped'] if result['nist'].empty?
256
272
 
@@ -258,8 +274,11 @@ module HeimdallTools
258
274
  end
259
275
 
260
276
  def check_text(config_rule)
261
- params = (JSON.parse(config_rule[:input_parameters]).map { |key, value| "#{key}: #{value}" }).join('<br/>')
262
- check_text = config_rule[:config_rule_arn]
277
+ # If no input parameters, then provide an empty JSON array to the JSON
278
+ # parser because passing nil to JSON.parse throws an exception.
279
+ params = (JSON.parse(config_rule[:input_parameters] || '[]').map { |key, value| "#{key}: #{value}" }).join('<br/>')
280
+ check_text = "ARN: #{config_rule[:config_rule_arn] || 'N/A'}"
281
+ check_text += "<br/>Source Identifier: #{config_rule.dig(:source, :source_identifier) || 'N/A'}"
263
282
  check_text += "<br/>#{params}" unless params.empty?
264
283
  check_text
265
284
  end
@@ -274,11 +293,10 @@ module HeimdallTools
274
293
  def hdf_descriptions(config_rule)
275
294
  [
276
295
  {
277
- 'label': 'check',
278
- 'data': check_text(config_rule)
279
- }
296
+ label: 'check',
297
+ data: check_text(config_rule)
298
+ },
280
299
  ]
281
300
  end
282
301
  end
283
302
  end
284
- # rubocop:enable Metrics/AbcSize, Metrics/ClassLength
@@ -16,15 +16,12 @@ IMPACT_MAPPING = {
16
16
 
17
17
  CWE_REGEX = 'CWE-(\d*):'.freeze
18
18
 
19
- DEFAULT_NIST_TAG = ["SA-11", "RA-5", "Rev_4"].freeze
20
-
21
- # rubocop:disable Metrics/AbcSize
19
+ DEFAULT_NIST_TAG = %w{SA-11 RA-5 Rev_4}.freeze
22
20
 
23
21
  module HeimdallTools
24
22
  class BurpSuiteMapper
25
- def initialize(burps_xml, name=nil, verbose = false)
23
+ def initialize(burps_xml, _name = nil)
26
24
  @burps_xml = burps_xml
27
- @verbose = verbose
28
25
 
29
26
  begin
30
27
  @cwe_nist_mapping = parse_mapper
@@ -33,11 +30,9 @@ module HeimdallTools
33
30
  @issues = data['issues']['issue']
34
31
  @burpVersion = data['issues']['burpVersion']
35
32
  @timestamp = data['issues']['exportTime']
36
-
37
33
  rescue StandardError => e
38
34
  raise "Invalid Burpsuite XML file provided Exception: #{e}"
39
35
  end
40
-
41
36
  end
42
37
 
43
38
  def parse_html(block)
@@ -86,17 +81,17 @@ module HeimdallTools
86
81
  end
87
82
 
88
83
  def desc_tags(data, label)
89
- { "data": data || NA_STRING, "label": label || NA_STRING }
84
+ { data: data || NA_STRING, label: label || NA_STRING }
90
85
  end
91
86
 
92
87
  # Burpsuite report could have multiple issue entries for multiple findings of same issue type.
93
- # The meta data is identical across entries
88
+ # The meta data is identical across entries
94
89
  # method collapse_duplicates return unique controls with applicable findings collapsed into it.
95
90
  def collapse_duplicates(controls)
96
91
  unique_controls = []
97
92
 
98
93
  controls.map { |x| x['id'] }.uniq.each do |id|
99
- collapsed_results = controls.select { |x| x['id'].eql?(id) }.map {|x| x['results']}
94
+ collapsed_results = controls.select { |x| x['id'].eql?(id) }.map { |x| x['results'] }
100
95
  unique_control = controls.find { |x| x['id'].eql?(id) }
101
96
  unique_control['results'] = collapsed_results.flatten
102
97
  unique_controls << unique_control
@@ -129,8 +124,8 @@ module HeimdallTools
129
124
  controls = collapse_duplicates(controls)
130
125
  results = HeimdallDataFormat.new(profile_name: 'BurpSuite Pro Scan',
131
126
  version: @burpVersion,
132
- title: "BurpSuite Pro Scan",
133
- summary: "BurpSuite Pro Scan",
127
+ title: 'BurpSuite Pro Scan',
128
+ summary: 'BurpSuite Pro Scan',
134
129
  controls: controls)
135
130
  results.to_hdf
136
131
  end