Lesson 1 of 5 · 20 min read

The Cloud Kill Chain — How Attacks Differ in AWS, Azure, and GCP

Cloud environments don’t have a network perimeter to defend. The attacker doesn’t need to break through a firewall — they need one valid credential. Everything that follows is API calls.


Why Cloud Changes the Attack Model

Traditional network-centric thinking fails in cloud for three reasons:

1. There is no “inside.” Every resource is accessed via authenticated API call — whether from within the cloud VPC or from the attacker’s laptop across the internet. Protecting the network edge does not protect cloud resources.

2. Misconfiguration is the vulnerability class. The most common cloud breaches don’t exploit software vulnerabilities — they exploit misconfigured S3 bucket policies, overpermissioned IAM roles, and publicly exposed storage. No CVE required.

3. Identity is the perimeter. Valid credentials grant resource access regardless of source IP. A stolen API key or OAuth token is equivalent to physical access in an on-prem model — the attacker is already “inside.”


The Cloud Kill Chain

┌─────────────────────────────────────────────────────────┐
│              CLOUD KILL CHAIN                           │
├─────────────────────────────────────────────────────────┤
│ 1. INITIAL ACCESS                                       │
│    Credential theft (leaked keys, phished tokens)       │
│    SSRF → metadata service credential theft             │
│    OAuth consent phishing                               │
├─────────────────────────────────────────────────────────┤
│ 2. DISCOVERY                                            │
│    Enumerate IAM permissions (GetCallerIdentity)        │
│    List accessible resources (S3, EC2, RDS, Secrets)    │
│    Identify high-privilege roles to target              │
├─────────────────────────────────────────────────────────┤
│ 3. PRIVILEGE ESCALATION                                 │
│    AssumeRole to more privileged role                   │
│    Create IAM user / attach AdministratorAccess         │
│    Exploit iam:PassRole or iam:CreatePolicy             │
├─────────────────────────────────────────────────────────┤
│ 4. PERSISTENCE                                          │
│    Create backdoor IAM user with long-lived credentials │
│    Add malicious Lambda trigger or EC2 user data        │
│    OAuth app persistent consent                         │
├─────────────────────────────────────────────────────────┤
│ 5. COLLECTION / IMPACT                                  │
│    Bulk download S3 buckets (T1530)                     │
│    Snapshot and export EBS volumes (data theft)         │
│    Encrypt resources for ransomware                     │
│    Cryptocurrency mining (resource hijack)              │
└─────────────────────────────────────────────────────────┘

Each step is an API call — and each API call (when control plane logging is enabled) appears in the log trail.


Log Sources: What You Have and What You Don’t

ProviderControl PlaneData PlaneIdentity/Auth
AWSCloudTrail (enabled by default in most orgs)S3 Server Access Logs, CloudFront (must enable)IAM Access Advisor, Access Analyzer
AzureActivity Log (retained 90 days)Storage Analytics, Diagnostic LogsAzure AD Sign-in Logs, Audit Logs
GCPCloud Audit Logs: Admin Activity (always on), Data Access (must enable)GCS access logs, BigQuery logsGoogle Workspace Admin, Login audit

The critical gap: data plane logging is often disabled by default due to cost and volume. An attacker who exfiltrates 10 TB from an S3 bucket leaves no trace if S3 access logging is off. Before hunting or writing detection rules for cloud data exfiltration, verify that data plane logging is enabled.


The Metadata Service: SSRF to Cloud Takeover

Web App on EC2 (IMDSv1)

         │ HTTP GET request
         │ (attacker-controlled URL)

http://169.254.169.254/latest/meta-data/iam/security-credentials/

         │ Returns:
         │ { AccessKeyId, SecretAccessKey, Token }

Attacker has temporary credentials for the EC2 instance's IAM role

AWS IMDSv2 requires a session token obtained via PUT request — SSRF using GET-only can’t obtain this token, breaking the attack path. Detection: CloudTrail event GetSessionToken or API calls from the instance’s role to unusual services or regions.


Cloud vs On-Prem Detection Comparison

DimensionOn-Prem DetectionCloud Detection
Primary log sourceEndpoint (Sysmon, WEL)Control plane (CloudTrail, Activity Log)
Key artifactProcess creation, file writeAPI call (action, principal, resource)
Privilege escalation signalToken impersonation, SUID abuseiam:CreateUser, iam:AttachUserPolicy
Lateral movement signalSMB traffic, PsExec, WinRMsts:AssumeRole, cross-account API calls
Persistence signalRegistry Run key, scheduled taskNew IAM user, Lambda trigger, OAuth grant
Exfiltration signalLarge outbound network transferS3 GetObject on bulk objects, snapshot export
Data source blind spotKernel-level rootkitsDisabled data plane logging

What Makes Cloud Detection Harder

Ephemeral resources. Lambda functions run for seconds. Container tasks spin up and down. By the time an alert fires, the resource may no longer exist — there’s no host to forensicate. Detection must operate on API call logs, not host artifacts.

Shared responsibility confusion. Cloud providers secure the infrastructure; the customer secures workloads and configurations. Misunderstanding the boundary leads to gaps — “the cloud provider handles security” is wrong; IAM misconfiguration is entirely the customer’s responsibility.

Multi-cloud blind spots. An organization using AWS, Azure, and GCP has three separate control plane log pipelines, three separate SIEM connectors, and three separate alert tuning queues. Attackers who move between clouds exploit the seams.

ATT&CK for Cloud Matrix— MITRE Cloud Security Docs— Community