
Detecting S3 Data Exfiltration Attempts
FreeIdentify unauthorized S3 data access and exfiltration.
Free · Opens the source repo
What Detecting S3 Data Exfiltration Attempts does
Detecting S3 Data Exfiltration Attempts is a skill designed for security professionals and cloud architects who need to monitor and analyze data access patterns in AWS S3 buckets. This skill leverages AWS CloudTrail, GuardDuty, and Amazon Macie to detect potential data exfiltration activities, such as unauthorized bulk downloads and cross-account data transfers. By analyzing S3 data events, VPC Flow Logs, and alerts from GuardDuty and Macie, users can gain insights into suspicious access behaviors that may indicate a data breach or compliance issue.
The skill operates by first ensuring that the necessary AWS services are configured correctly, including enabling CloudTrail for S3 data event logging and activating GuardDuty with S3 protection. Once set up, it provides a structured workflow for querying CloudTrail logs to identify anomalous access patterns, such as unusual IP addresses or high-volume downloads. Additionally, it reviews GuardDuty findings for specific threats related to S3 and correlates these with Macie alerts to assess the sensitivity of accessed data.
This skill is particularly useful in environments where sensitive data is stored in S3 buckets, and compliance mandates require thorough monitoring of data access. It assists in building detection rules for data loss prevention and responding to alerts about potential data exposure. Security teams can automate detection processes by creating CloudWatch alarms and EventBridge rules to ensure real-time awareness of potential exfiltration attempts.
While this skill is effective for monitoring and detecting exfiltration attempts, it is important to note that it does not prevent data exfiltration nor classify data sensitivity. Users should implement additional measures, such as S3 bucket policies and VPC endpoints, for comprehensive data protection.
When to use it
Use this skill when investigating suspicious S3 access patterns or responding to alerts about sensitive data access.
When not to use it
Do not use this skill for preventing data exfiltration or for data classification tasks; it is focused solely on detection.
What you can build with it
Investigating a Data Breach
Use this skill to analyze S3 access patterns when a data breach is suspected, helping to identify unauthorized access.
Compliance Monitoring
Implement this skill to ensure compliance with data access regulations by logging and monitoring S3 bucket access.
Threat Detection Automation
Set up automated detection rules using this skill to receive real-time alerts on potential data exfiltration activities.
How to install Detecting S3 Data Exfiltration Attempts
View source1. Install with the skills CLI
npx skills add mukul975/anthropic-cybersecurity-skills/detecting-s3-data-exfiltration-attempts --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by mukul975Detecting S3 Data Exfiltration Attempts
When to Use
- When GuardDuty detects anomalous S3 access patterns such as bulk downloads from unusual IPs
- When investigating suspected data breach involving S3-stored sensitive data
- When building detection rules for S3 data loss prevention monitoring
- When responding to Macie alerts about sensitive data being accessed or moved
- When compliance requires monitoring and logging of all access to classified data stores
Do not use for preventing data exfiltration (use S3 bucket policies, VPC endpoints, and SCPs), for data classification (use Amazon Macie discovery jobs), or for network-level exfiltration detection (use VPC Flow Logs with network analysis tools).
Prerequisites
- CloudTrail configured with S3 data event logging (
GetObject,PutObject,CopyObject) - GuardDuty enabled with S3 Protection feature activated
- Amazon Macie enabled for sensitive data discovery in target buckets
- CloudWatch Logs or Athena for querying CloudTrail logs at scale
- VPC endpoint policies configured for S3 access monitoring
Workflow
Step 1: Enable S3 Data Event Logging in CloudTrail
Configure CloudTrail to capture all S3 object-level operations for forensic analysis.
# Enable S3 data events on an existing trail
aws cloudtrail put-event-selectors \
--trail-name management-trail \
--event-selectors '[{
"ReadWriteType": "All",
"IncludeManagementEvents": true,
"DataResources": [{
"Type": "AWS::S3::Object",
"Values": ["arn:aws:s3:::sensitive-data-bucket/", "arn:aws:s3:::customer-records/"]
}]
}]'
# Verify data event configuration
aws cloudtrail get-event-selectors --trail-name management-trail \
--query 'EventSelectors[*].DataResources' --output json
# Enable GuardDuty S3 Protection
aws guardduty update-detector \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--data-sources '{"S3Logs":{"Enable":true}}'
Step 2: Query CloudTrail for Anomalous S3 Access Patterns
Analyze CloudTrail logs for bulk download activity, unusual access times, and unfamiliar source IPs.
# Athena query: Top S3 downloaders by volume in last 24 hours
cat << 'EOF'
SELECT
useridentity.arn as principal,
sourceipaddress,
COUNT(*) as request_count,
SUM(CAST(json_extract_scalar(requestparameters, '$.bytesTransferredOut') AS bigint)) as bytes_downloaded
FROM cloudtrail_logs
WHERE eventname = 'GetObject'
AND eventsource = 's3.amazonaws.com'
AND eventtime > date_add('hour', -24, now())
GROUP BY useridentity.arn, sourceipaddress
ORDER BY request_count DESC
LIMIT 50
EOF
# CloudWatch Logs Insights: S3 GetObject requests from unusual IPs
aws logs start-query \
--log-group-name cloudtrail-logs \
--start-time $(date -d "24 hours ago" +%s) \
--end-time $(date +%s) \
--query-string '
fields @timestamp, userIdentity.arn, sourceIPAddress, requestParameters.bucketName, requestParameters.key
| filter eventName = "GetObject"
| stats count() as requestCount by sourceIPAddress, userIdentity.arn
| sort requestCount desc
| limit 25
'
# Detect cross-account copies (potential exfiltration)
aws logs start-query \
--log-group-name cloudtrail-logs \
--start-time $(date -d "7 days ago" +%s) \
--end-time $(date +%s) \
--query-string '
fields @timestamp, userIdentity.arn, sourceIPAddress, requestParameters.bucketName
| filter eventName in ["CopyObject", "ReplicateObject", "UploadPart"]
| filter userIdentity.accountId != "OUR_ACCOUNT_ID"
| sort @timestamp desc
| limit 100
'
Step 3: Review GuardDuty S3 Findings
Check for GuardDuty S3-specific finding types that indicate exfiltration activity.
# List active S3 exfiltration-related findings
aws guardduty list-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-criteria '{
"Criterion": {
"type": {
"Eq": [
"Exfiltration:S3/MaliciousIPCaller",
"Exfiltration:S3/ObjectRead.Unusual",
"Discovery:S3/MaliciousIPCaller.Custom",
"Discovery:S3/BucketEnumeration.Unusual",
"UnauthorizedAccess:S3/MaliciousIPCaller.Custom",
"UnauthorizedAccess:S3/TorIPCaller",
"Impact:S3/AnomalousBehavior.Delete"
]
}
}
}' --output json
# Get detailed finding information
aws guardduty get-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-ids FINDING_IDS \
--query 'Findings[*].{Type:Type,Severity:Severity,Resource:Resource.S3BucketDetails[0].Name,Action:Service.Action}' \
--output table
Step 4: Analyze Macie Findings for Sensitive Data Access
Review Macie findings to correlate data sensitivity with access anomalies.
# List Macie findings for sensitive data exposure
aws macie2 list-findings \
--finding-criteria '{
"criterion": {
"category": {"eq": ["CLASSIFICATION"]},
"severity.description": {"eq": ["High", "Critical"]}
}
}' \
--sort-criteria '{"attributeName": "updatedAt", "orderBy": "DESC"}' \
--max-results 25
# Get detailed finding with data classification
aws macie2 get-findings \
--finding-ids FINDING_IDS \
--query 'findings[*].{Type:type,Severity:severity.description,Bucket:resourcesAffected.s3Bucket.name,SensitiveDataTypes:classificationDetails.result.sensitiveData[*].category}' \
--output table
# Run a sensitive data discovery job on target bucket
aws macie2 create-classification-job \
--job-type ONE_TIME \
--name "exfiltration-investigation" \
--s3-job-definition '{
"bucketDefinitions": [{
"accountId": "ACCOUNT_ID",
"buckets": ["sensitive-data-bucket"]
}]
}'
Step 5: Build Automated Detection Rules
Create CloudWatch alarms and EventBridge rules for real-time exfiltration detection.
# CloudWatch metric filter for high-volume S3 downloads
aws logs put-metric-filter \
--log-group-name cloudtrail-logs \
--filter-name s3-bulk-download \
--filter-pattern '{$.eventName = "GetObject" && $.eventSource = "s3.amazonaws.com"}' \
--metric-transformations '[{
"metricName": "S3GetObjectCount",
"metricNamespace": "SecurityMetrics",
"metricValue": "1",
"defaultValue": 0
}]'
# Alarm for anomalous download volume (>1000 objects/hour)
aws cloudwatch put-metric-alarm \
--alarm-name s3-exfiltration-alert \
--metric-name S3GetObjectCount \
--namespace SecurityMetrics \
--statistic Sum \
--period 3600 \
--threshold 1000 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--alarm-actions arn:aws:sns:us-east-1:ACCOUNT:security-alerts
# EventBridge rule for GuardDuty S3 findings
aws events put-rule \
--name guardduty-s3-exfiltration \
--event-pattern '{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {
"type": [{"prefix": "Exfiltration:S3/"}]
}
}'
Step 6: Implement Preventive Controls
Deploy bucket policies and VPC endpoint policies to restrict data movement paths.
# VPC endpoint policy restricting S3 access to specific buckets
aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id vpce-ENDPOINT_ID \
--policy-document '{
"Statement": [{
"Sid": "RestrictToOwnBuckets",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": ["arn:aws:s3:::approved-bucket-1/*", "arn:aws:s3:::approved-bucket-2/*"]
}]
}'
# Bucket policy denying access from outside the VPC
aws s3api put-bucket-policy --bucket sensitive-data-bucket --policy '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyNonVpcAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sensitive-data-bucket/*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-ENDPOINT_ID"
}
}
}]
}'
Key Concepts
| Term | Definition |
|---|---|
| S3 Data Events | CloudTrail object-level logging that captures GetObject, PutObject, DeleteObject, and CopyObject API calls with request details |
| GuardDuty S3 Protection | Threat detection feature analyzing CloudTrail S3 data events to identify anomalous access patterns and exfiltration attempts |
| Amazon Macie | Data security service that discovers and classifies sensitive data in S3 and generates findings for data exposure risks |
| VPC Endpoint Policy | Access control policy on an S3 VPC endpoint that restricts which buckets and actions can be accessed through the endpoint |
| Data Exfiltration | Unauthorized transfer of data from an organization's S3 storage to an external location controlled by an attacker |
| Anomalous Behavior Detection | Machine learning-based identification of S3 access patterns that deviate from established baselines for a principal |
Tools & Systems
- AWS CloudTrail: Audit logging of S3 object-level operations for forensic analysis and anomaly detection
- Amazon GuardDuty: ML-based threat detection with S3-specific finding types for exfiltration and unauthorized access
- Amazon Macie: Sensitive data discovery and classification for correlating access anomalies with data sensitivity
- Amazon Athena: SQL query engine for analyzing CloudTrail logs at scale to identify bulk download patterns
- CloudWatch Logs Insights: Real-time log analysis for building detection queries against CloudTrail data
Common Scenarios
Scenario: Compromised IAM Credentials Used for Bulk S3 Data Download
Context: GuardDuty reports an Exfiltration:S3/ObjectRead.Unusual finding indicating that a developer's access key is downloading thousands of objects from a sensitive data bucket at 3 AM from an IP address in a foreign country.
Approach:
- Immediately deactivate the compromised access key
- Query CloudTrail for all S3 actions by the compromised principal in the last 72 hours
- Identify which buckets and objects were accessed using Athena queries
- Cross-reference accessed objects with Macie classifications to assess data sensitivity
- Check for CopyObject calls to external accounts (cross-account exfiltration)
- Review how the credentials were compromised (TruffleHog scan, phishing investigation)
- Implement VPC endpoint policies to restrict future S3 access to approved network paths
Pitfalls: CloudTrail S3 data events can generate massive log volume. Use Athena with partitioned tables rather than CloudWatch Logs Insights for queries spanning more than 24 hours. GuardDuty baseline learning requires 7-14 days, so new accounts may generate false positives for normal access patterns.
Output Format
S3 Data Exfiltration Investigation Report
============================================
Account: 123456789012
Detection Source: GuardDuty Exfiltration:S3/ObjectRead.Unusual
Investigation Date: 2026-02-23
INCIDENT TIMELINE:
2026-02-23 02:47 UTC - First anomalous GetObject from 185.x.x.x
2026-02-23 02:47-04:12 UTC - 12,847 GetObject requests
2026-02-23 04:15 UTC - GuardDuty finding generated
2026-02-23 04:20 UTC - PagerDuty alert received by SOC
2026-02-23 04:25 UTC - Access key deactivated
COMPROMISED PRINCIPAL:
ARN: arn:aws:iam::123456789012:user/developer-jane
Access Key: AKIA...WXYZ
Source IP: 185.x.x.x (Tor exit node)
DATA IMPACT ASSESSMENT:
Buckets accessed: 3
Objects downloaded: 12,847
Total data volume: 4.7 GB
Sensitive data types: PII (SSN, email), Financial (credit card)
Macie severity: CRITICAL
CONTAINMENT ACTIONS:
[x] Access key deactivated
[x] User password reset and MFA re-enrolled
[x] VPC endpoint policy applied to sensitive buckets
[x] Bucket policy restricting to VPC-only access
[x] TruffleHog scan initiated on developer repositories
Frequently asked questions about Detecting S3 Data Exfiltration Attempts
Similar skills
Asset Criticality Scoring for Vulns
Prioritize vulnerabilities based on asset criticality.
Performing Alert Triage with Elastic SIEM
Streamline alert triage processes in Elastic Security.
Active Directory Vulnerability Assessment
Secure your Active Directory with comprehensive assessments.
Active Directory Investigation
Streamline your Active Directory compromise investigations.
Parsing Artifacts with Eric Zimmerman Tools
Efficiently parse Windows forensic artifacts for analysis.
Operationalizing MISP Threat Feeds
Enhance threat detection with curated MISP feeds.
