Detection rules › Panther
AWS CloudTrail Least Privilege Access
Users with permissions to disable or reconfigure CloudTrail should be limited.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Stealth | T1562 Impair Defenses |
Rule body yaml
AnalysisType: policy
Filename: aws_cloudtrail_least_privilege.py
PolicyID: "AWS.CloudTrail.LeastPrivilege"
DisplayName: "AWS CloudTrail Least Privilege Access"
Enabled: false
ResourceTypes:
- AWS.IAM.Group
Tags:
- AWS
- Configuration Required
- IAM
- Panther
- Defense Evasion:Impair Defenses
Reports:
MITRE ATT&CK:
- TA0005:T1562
Severity: Medium
Description: >
Users with permissions to disable or reconfigure CloudTrail should be limited.
Runbook: >
Remove the AWSCloudTrailFullAccess managed IAM policy from all but one user in the account.
Reference: https://amzn.to/2ZEUrKm
Tests:
- Name: Limited Membership to IAM Group with CloudTrail FullAccess Policy
ExpectedResult: true
Resource:
{
"Arn": "arn:aws:iam::123456789012:group/CloudTrailAdmins",
"CreateDate": "2019-01-01T00:00:00Z",
"GroupId": "ABCDEFGHIJKLMNOP",
"GroupName": "CloudTrailAdmins",
"Path": "/",
"InlinePolicies": [],
"ManagedPolicyARNs":
[
"arn:aws:iam::aws:policy/AWSCloudTrailFullAccess",
"arn:aws:iam::aws:policy/Readonly",
],
"Users":
[
{
"Arn": "arn:aws:iam::123456789012:user/Bobert",
"CreateDate": "2019-01-1T00:00:00Z",
"PasswordLastUsed": null,
"Path": "/",
"PermissionsBoundary": null,
"Tags": null,
"UserId": "ABCDEFGHIJKLMNOP",
"UserName": "Bobert",
},
],
}
- Name: More Than 2 Users in IAM Group with CloudTrail FullAccess Policy
ExpectedResult: false
Resource:
{
"Arn": "arn:aws:iam::123456789012:group/CloudTrailAdmins",
"CreateDate": "2019-01-01T00:00:00Z",
"GroupId": "ABCDEFGHIJKLMNOP",
"GroupName": "CloudTrailAdmins",
"Path": "/",
"InlinePolicies": [],
"ManagedPolicyARNs":
[
"arn:aws:iam::aws:policy/AWSCloudTrailFullAccess",
"arn:aws:iam::aws:policy/ReadOnly",
],
"Users":
[
{
"Arn": "arn:aws:iam::123456789012:user/Bobert",
"CreateDate": "2019-01-1T00:00:00Z",
"PasswordLastUsed": null,
"Path": "/",
"PermissionsBoundary": null,
"Tags": null,
"UserId": "ABCDEFGHIJKLMNOP",
"UserName": "Bobert",
},
{
"Arn": "arn:aws:iam::123456789012:user/Bobert2",
"CreateDate": "2019-01-1T00:00:00Z",
"PasswordLastUsed": null,
"Path": "/",
"PermissionsBoundary": null,
"Tags": null,
"UserId": "ABCDEFGHIJKLMNOP",
"UserName": "Bobert2",
},
{
"Arn": "arn:aws:iam::123456789012:user/Bobert3",
"CreateDate": "2019-01-1T00:00:00Z",
"PasswordLastUsed": null,
"Path": "/",
"PermissionsBoundary": null,
"Tags": null,
"UserId": "ABCDEFGHIJKLMNOP",
"UserName": "Bobert3",
},
],
}
Detection logic
Condition
not (ManagedPolicyARNs contains "arn:aws:iam::aws:policy/AWSCloudTrailFullAccess" and Users length_compare "2")
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
ManagedPolicyARNs | contains | arn:aws:iam::aws:policy/AWSCloudTrailFullAccess |
Users | length_compare | 2 |