Playbook: AWS S3 Compromise
ID: PB-21
ระดับความรุนแรง: สูง/วิกฤต | หมวดหมู่: ความปลอดภัยคลาวด์
MITRE ATT&CK: T1530 (Data from Cloud Storage)
ทริกเกอร์: AWS Config rule violation, GuardDuty S3 finding, Macie PII alert, CloudTrail anomaly
หลังเหตุการณ์ (Post-Incident)
ผังการตรวจจับ S3 Exposure
graph TD
Monitor["🔍 Monitoring"] --> Type{"📋 ประเภท?"}
Type -->|Public Access| Public["🌐 S3 สาธารณะ"]
Type -->|Unusual Download| Download["📥 Download ผิดปกติ"]
Type -->|PII Detected| PII["🔴 Macie: PII Found"]
Type -->|Policy Change| Policy["⚙️ Bucket Policy เปลี่ยน"]
Public --> Urgent["🔴 Block ทันที"]
Download --> Investigate["🔎 ตรวจ CloudTrail"]
PII --> Classify["📋 จำแนก + แจ้ง DPO"]
Policy --> Revert["↩️ Revert Policy"]
style Public fill:#e74c3c,color:#fff
style PII fill:#c0392b,color:#fff
ผังขั้นตอนหมุนเวียน Credentials
sequenceDiagram
participant SOC
participant IAM
participant App as Application
participant S3
SOC->>IAM: ปิด compromised access key
SOC->>IAM: สร้าง access key ใหม่
IAM-->>SOC: key ID + secret
SOC->>App: อัปเดต credentials
App->>S3: ทดสอบ access ใหม่
S3-->>App: ✅ สำเร็จ
SOC->>IAM: ลบ old access key
ผังการตัดสินใจ
graph TD
Alert["🚨 S3 Alert"] --> Type{"📋 สถานการณ์?"}
Type -->|Public Bucket| Pub["🌐 ข้อมูลเปิดสาธารณะ"]
Type -->|Policy Changed| Pol["⚙️ Policy ถูกเปลี่ยน"]
Type -->|External Download| DL["📥 ดาวน์โหลดจากภายนอก"]
Type -->|Ransomware/Delete| Ransom["🔴 S3 Ransomware"]
Pub --> Classify["📁 จำแนกข้อมูล"]
Pol --> Classify
DL --> Classify
Classify -->|PII / Secrets| Critical["🔴 บล็อกทันที"]
Ransom --> Critical
1. การวิเคราะห์
1.1 สถานการณ์ที่พบบ่อย
| สถานการณ์ |
ตัวบ่งชี้ |
ความรุนแรง |
| Public bucket + PII |
S3 ACL/Policy = public |
🔴 วิกฤต |
| Policy เปลี่ยนเป็น public |
CloudTrail PutBucketPolicy |
🔴 สูง |
| Download จาก external IP |
S3 access logs |
🔴 สูง |
| S3 ransomware |
ลบ objects + ransom note |
🔴 วิกฤต |
| Credentials ใน bucket |
Macie / TruffleHog |
🔴 วิกฤต |
1.2 รายการตรวจสอบ
| รายการ |
วิธีตรวจสอบ |
เสร็จ |
| Bucket name + region + owner tag |
AWS Console |
☐ |
| ข้อมูลอะไรใน bucket? จำแนกประเภท |
Macie / manual |
☐ |
| เปิดเป็น public? (Policy / ACL) |
aws s3api get-bucket-policy |
☐ |
| Block Public Access ปิดอยู่? |
aws s3api get-public-access-block |
☐ |
| ใครเปลี่ยน? เมื่อไหร่? |
CloudTrail |
☐ |
| มีข้อมูลถูก download จาก external IP? |
S3 access logs |
☐ |
| มี credentials/secrets อยู่ใน bucket? |
Secrets scanner |
☐ |
| Versioning เปิดอยู่? |
AWS Console |
☐ |
2. การควบคุม
2.1 การดำเนินการทันที
| # |
การดำเนินการ |
คำสั่ง |
เสร็จ |
| 1 |
Block Public Access |
aws s3api put-public-access-block --bucket <name> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true |
☐ |
| 2 |
เพิกถอน credentials ที่เก็บใน S3 |
IAM Console |
☐ |
| 3 |
เปิด versioning เก็บหลักฐาน |
aws s3api put-bucket-versioning --bucket <name> --versioning-configuration Status=Enabled |
☐ |
| 4 |
Tag Status: Compromised |
AWS Console |
☐ |
| 5 |
กู้คืน bucket policy จาก IaC |
Terraform / CFN |
☐ |
2.2 หาก Credentials ถูกเปิดเผย
| # |
การดำเนินการ |
เสร็จ |
| 1 |
หมุนเวียน API keys, access keys, tokens ทั้งหมด |
☐ |
| 2 |
ตรวจ CloudTrail ว่า credentials ถูกใช้หรือไม่ |
☐ |
| 3 |
หากถูกใช้ → ยกระดับไป PB-16 Cloud IAM |
☐ |
3. การกำจัด
| # |
การดำเนินการ |
เสร็จ |
| 1 |
คืนค่า bucket policy ที่ถูกต้อง (จาก IaC) |
☐ |
| 2 |
หมุนเวียน credentials ทั้งหมดที่อยู่ใน bucket |
☐ |
| 3 |
ตรวจสอบ IAM — จำกัดผู้ที่เปลี่ยน policy ได้ |
☐ |
| 4 |
หาก S3 ransomware → กู้คืนจาก versioning / backup |
☐ |
4. การฟื้นฟู
| # |
การดำเนินการ |
เสร็จ |
| 1 |
Block Public Access ระดับ account (SCP) |
☐ |
| 2 |
เปิด Macie สำหรับ data classification |
☐ |
| 3 |
เปิด AWS Config rules (s3-bucket-public-read/write-prohibited) |
☐ |
| 4 |
ใช้ Terraform/CloudFormation สำหรับ bucket policies |
☐ |
| 5 |
เปิด S3 Object Lock สำหรับ backup buckets |
☐ |
| 6 |
เปิด Server Access Logging ทุก bucket |
☐ |
5. เกณฑ์การยกระดับ
| เงื่อนไข |
ยกระดับไปยัง |
| PII / ข้อมูลลูกค้าถูกเข้าถึง |
Legal + DPO (PDPA 72 ชม.) |
| Credentials เปิดเผยและถูกใช้ |
CISO + PB-16 Cloud IAM |
| S3 ransomware (ลบ objects) |
PB-02 Ransomware + CISO |
| หลาย buckets/accounts |
Major Incident |
ผัง S3 Hardening Checklist
graph TD
S3["📦 S3 Bucket"] --> BPA["🔒 Block Public Access"]
S3 --> Encrypt["🔐 SSE-S3/KMS"]
S3 --> Version["📋 Versioning"]
S3 --> Logging["📊 Access Logging"]
S3 --> Lifecycle["♻️ Lifecycle Policy"]
BPA --> Audit["✅ Quarterly audit"]
Encrypt --> Audit
style S3 fill:#f39c12,color:#fff
style Audit fill:#27ae60,color:#fff
ผัง Bucket Policy Audit
sequenceDiagram
participant CSPM
participant SOC
participant AWS
participant Dev
CSPM->>SOC: 🚨 Public bucket detected
SOC->>AWS: Check bucket policy
AWS-->>SOC: Principal: * (public!)
SOC->>AWS: Enable BPA
SOC->>Dev: ตรวจสอบ application impact
Dev-->>SOC: ✅ No impact — app uses IAM role
กฎตรวจจับ (Sigma)
เอกสารที่เกี่ยวข้อง
S3 Security Assessment
| Check |
Finding |
Severity |
| Public access block |
Disabled |
Critical |
| Bucket policy |
Allow * |
Critical |
| ACL grants |
Public read/write |
Critical |
| Encryption |
Not enabled |
High |
| Versioning |
Disabled |
Medium |
| Logging |
Not enabled |
Medium |
S3 Incident Response Steps
| Step |
Action |
AWS CLI |
| 1 |
Block public access |
put-public-access-block |
| 2 |
Review bucket policy |
get-bucket-policy |
| 3 |
Check access logs |
S3 server access logs |
| 4 |
Identify exposed data |
list-objects-v2 |
| 5 |
Assess data sensitivity |
Manual review |
| 6 |
Enable encryption |
put-bucket-encryption |
S3 Monitoring Checklist
| Monitor |
Tool |
Frequency |
| Public access |
Config Rules |
Real-time |
| Data access patterns |
CloudTrail |
Daily review |
| Encryption status |
S3 inventory |
Weekly |
Data Exposure Impact
| Data Type |
Notification Required |
| PII |
PDPA + affected users |
| Credentials |
Rotate + notify owners |
| Internal docs |
Risk assessment only |
อ้างอิง