IAM PRIVILEGE ESCALATION
Common escalation paths in AWS:
iam:AttachUserPolicy — attaches a managed policy directly to a user
iam:PutUserPolicy — adds an inline policy to a user
iam:CreatePolicyVersion — creates a new version of an existing policy
iam:SetDefaultPolicyVersion — sets an older, more permissive version
iam:PassRole + ec2:RunInstances — run an EC2 with a privileged role
The simplest: AttachUserPolicy with AdministratorAccess.
CLOUDTRAIL KEY EVENTS
IAM:
AttachUserPolicy / DetachUserPolicy
CreateAccessKey / DeleteAccessKey
CreateUser / DeleteUser
AssumeRole / SwitchRole
S3:
GetObject (exfiltration)
PutBucketPolicy (permission change)
DeleteObject / DeleteBucket
EC2:
RunInstances (new compute)
TerminateInstances
CreateSecurityGroup
CloudTrail:
DeleteTrail (logging disruption)
StopLogging
GUARDDUTY FINDING TYPES
IAMUser/CredentialExposure — creds used from unusual location
IAMUser/AnomalousBehavior — unusual API call pattern
UnauthorizedAccess/IAMUser:* — API calls from known bad IP
Discovery:S3/BucketEnumeration — listing S3 buckets
Exfiltration:S3/ObjectRead — unusual S3 data access
CryptoCurrency:EC2/BitcoinTool — mining activity
IMMEDIATE CONTAINMENT
# Disable IAM user
aws iam update-login-profile --user-name dev-deploy --no-password-reset-required
aws iam delete-login-profile --user-name dev-deploy
# Revoke access keys
aws iam update-access-key --access-key-id AKIA... --status Inactive
aws iam delete-access-key --access-key-id AKIA...
# Detach escalated policy
aws iam detach-user-policy --user-name dev-deploy \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
# Terminate rogue instances
aws ec2 terminate-instances --instance-ids i-xxxxx