| name | conducting-cloud-incident-response |
| description | 响应云环境(AWS、Azure、GCP)中的安全事件,执行基于身份的遏制、云原生日志分析、资源隔离和针对临时云基础设施的取证证据采集。适用于云事件响应、AWS 安全事件、Azure 受攻陷、GCP 泄露、云取证或云身份受攻陷相关请求。
|
| domain | cybersecurity |
| subdomain | incident-response |
| tags | ["cloud-IR","AWS-forensics","Azure-incident-response","GCP-security","identity-containment"] |
| version | 1.0.0 |
| author | mahipal |
| license | Apache-2.0 |
云事件响应(Cloud Incident Response)
适用场景
- 云安全态势管理(CSPM)告警提示未授权资源变更
- CloudTrail、Azure 活动日志或 GCP 审计日志显示可疑 API 调用
- 疑似云访问密钥或服务主体(Service Principal)凭据受攻陷
- 检测到未授权的计算实例、存储桶或 IAM 变更
- 云托管应用遭受攻陷且攻击者活动跨越多个云服务
不适用于无云组件的纯本地事件;此类情况请使用标准企业 IR 流程。
前置条件
- 云原生日志已启用并集中管理:AWS CloudTrail(所有区域)、Azure 活动/登录日志、GCP Cloud Audit Logs
- 预先配置具有只读取证访问权限的 IR 专用云 IAM 角色
- 用于证据保全的隔离取证账号/订阅/项目
- 针对每个云服务商的云事件响应运行手册
- 云原生安全工具:AWS GuardDuty、Azure Defender for Cloud、GCP Security Command Center
- 网络流量日志:VPC Flow Logs(AWS/GCP)、NSG Flow Logs(Azure)
工作流程
步骤 1:检测并确认云事件
识别受攻陷的范围和性质:
AWS 指标:
待调查的 CloudTrail 可疑事件:
- 来自异常地理位置或 IP 的 ConsoleLogin(控制台登录)
- 为现有 IAM 用户创建 CreateAccessKey(持久化)
- 启动用于挖矿的 RunInstances(大型实例类型)
- PutBucketPolicy 使 S3 存储桶公开
- AssumeRole 切换至跨账号角色
- DeleteTrail 或 StopLogging(防御规避)
- CreateUser 或 AttachUserPolicy(权限提升)
Azure 指标:
待调查的 Azure 活动日志事件:
- 来自匿名 IP 或 TOR 出口节点的登录
- 添加服务主体凭据
- 角色分配变更(添加 Owner、Contributor)
- 在异常区域创建虚拟机
- 存储账号访问密钥重新生成
- 条件访问策略被修改或删除
- 用户账号 MFA 被禁用
GCP 指标:
待调查的 GCP 审计日志事件:
- SetIamPolicy 变更授予宽泛访问权限
- 为现有服务账号创建 CreateServiceAccountKey
- 在意外区域 InsertInstance
- SetBucketIamPolicy 设置 allUsers
- DeleteLog 或 UpdateSink(日志篡改)
步骤 2:遏制云身份受攻陷
云遏制主要是身份操作:
AWS 遏制:
aws iam update-access-key --user-name compromised-user \
--access-key-id AKIA... --status Inactive
aws iam attach-user-policy --user-name compromised-user \
--policy-arn arn:aws:iam::aws:policy/AWSDenyAll
aws iam put-role-policy --role-name compromised-role \
--policy-name RevokeOlderSessions --policy-document '{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Deny",
"Action":"*",
"Resource":"*",
"Condition":{"DateLessThan":
{"aws:TokenIssueTime":"2025-11-15T15:00:00Z"}}
}]
}'
aws ec2 modify-instance-attribute --instance-id i-0abc123 \
--groups sg-isolate-forensic
Azure 遏制:
# 禁用受攻陷用户
Set-AzureADUser -ObjectId "user@tenant.onmicrosoft.com" -AccountEnabled $false
# 撤销所有会话
Revoke-AzureADUserAllRefreshToken -ObjectId "user-object-id"
# 移除角色分配
Remove-AzRoleAssignment -ObjectId "sp-object-id" -RoleDefinitionName "Contributor"
# 使用 NSG 全拒绝规则隔离虚拟机
$nsg = New-AzNetworkSecurityGroup -Name "isolate-nsg" -ResourceGroupName "rg" -Location "eastus"
$nsg | Add-AzNetworkSecurityRuleConfig -Name "DenyAll" -Priority 100 -Direction Inbound `
-Access Deny -Protocol * -SourceAddressPrefix * -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange *
步骤 3:保全云证据
在临时资源终止或日志轮转前采集证据:
AWS 证据采集:
- 将 CloudTrail 事件导出到取证账号的 S3 存储桶
- 对受攻陷 EC2 实例的 EBS 卷创建快照
- 复制 S3 访问日志和对象版本
- 导出受影响 VPC 的 VPC Flow Logs
- 采集 IAM 凭据报告和访问顾问数据
Azure 证据采集:
- 导出 Azure 活动日志和登录日志(默认保留 90 天)
- 对受攻陷虚拟机的托管磁盘创建快照
- 导出 Azure AD 审计日志
- 采集 NSG 流日志
- 导出条件访问登录详情
GCP 证据采集:
- 将 Cloud Audit Logs 导出到取证存储桶
- 对受攻陷虚拟机的持久磁盘创建快照
- 导出 VPC Flow Logs
- 采集 IAM 策略快照
步骤 4:调查云特有攻击模式
分析日志以识别常见云攻击技术:
常见云攻击模式:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 凭据受攻陷 → IAM 权限提升 → 资源滥用
2. 公开 S3/Blob → 数据外泄
3. Web 应用 SSRF → IMDS 令牌窃取 → 横向移动
4. CI/CD 流水线受攻陷 → 恶意部署
5. 跨账号角色滥用 → 多账号跳转
6. Lambda/Function 滥用 → 挖矿或数据处理
IMDS 令牌窃取调查(AWS):
aws cloudtrail lookup-events --lookup-attributes \
AttributeKey=EventSource,AttributeValue=ec2.amazonaws.com \
--start-time 2025-11-14 --end-time 2025-11-16 \
| jq '.Events[] | select(.CloudTrailEvent | fromjson | .sourceIPAddress != "internal")'
步骤 5:根除并恢复
移除对手访问权限并恢复安全状态:
- 轮换所有受攻陷凭据(访问密钥、密码、服务主体密钥)
- 移除攻击者创建的未授权 IAM 用户、角色、策略和访问密钥
- 终止未授权计算实例(挖矿程序、C2 服务器)
- 将修改过的 S3 存储桶策略和存储访问策略恢复到事件前状态
- 重新启用被禁用的安全控制(CloudTrail、GuardDuty、Defender for Cloud)
- 审查并恢复条件访问策略和 MFA 配置
步骤 6:事件后云加固
实施控制措施以防止再次发生:
- 为所有 IAM 用户启用 MFA,并要求对敏感 API 调用强制 MFA
- 实施 SCP(AWS)或 Azure Policy 以防止禁用日志记录
- 启用 GuardDuty / Defender for Cloud / Security Command Center 并配置自动修复
- 利用访问分析器数据实施最小权限 IAM 策略
- 在所有 EC2 实例上启用 IMDSv2(需要令牌)以防止基于 SSRF 的令牌窃取
- 配置预算告警以检测挖矿导致的费用突增
核心概念
| 术语 | 定义 |
|---|
| IMDS(Instance Metadata Service,实例元数据服务) | 提供可从虚拟机内部访问的实例凭据的云服务;SSRF 攻击以 IMDS 为目标窃取令牌 |
| CloudTrail | 记录 AWS 账号中所有 API 调用的 AWS 服务;AWS 事件响应的主要证据来源 |
| 服务主体(Service Principal) | Azure AD 中供应用程序和服务使用的非人类身份;受攻陷后可实现持久 API 访问 |
| SCP(Service Control Policy,服务控制策略) | AWS Organizations 策略,限制账号可用的最大权限;用于设置安全护栏 |
| 临时基础设施(Ephemeral Infrastructure) | 可能在证据采集前终止的云资源(容器、函数、自动扩展实例) |
| 跨账号角色切换(Cross-Account Role Assumption) | AWS 机制允许一个账号临时访问另一个账号的资源;攻击者通过角色切换进行横向移动 |
工具与系统
- AWS CloudTrail / Azure Activity Logs / GCP Audit Logs:提供主要审计跟踪的云原生 API 日志服务
- Cado Response:用于自动从 AWS、Azure 和 GCP 采集证据的云原生取证平台
- Prowler(AWS)/ ScoutSuite(多云):用于事件后安全态势审查的开源云安全评估工具
- Steampipe:基于 SQL 查询云 API 以调查 IAM 配置和资源状态的开源工具
- Cartography(Lyft):用于映射云基础设施关系和识别攻击路径的开源工具
常见场景
场景:通过公开 GitHub 仓库泄露的 AWS 访问密钥
背景:AWS GuardDuty 告警显示某 IAM 用户的访问密钥被来自意外 IP 地址的 API 调用使用。该密钥在 4 小时前被意外提交到公开 GitHub 仓库。
处理方法:
- 立即通过 AWS IAM 禁用受攻陷的访问密钥
- 为受影响的 IAM 用户附加 AWSDenyAll 策略
- 查询 CloudTrail 中自密钥泄露以来使用受攻陷密钥发起的所有 API 调用
- 识别攻击者创建或修改的资源(用于挖矿的 EC2 实例、用于持久化的新 IAM 用户)
- 终止未授权资源并移除后门 IAM 实体
- 轮换受攻陷用户有权访问的所有凭据
- 启用 GitHub 密钥扫描以防止未来的凭据泄露
常见陷阱:
- 仅禁用访问密钥而未检查攻击者创建的新访问密钥或 IAM 用户(持久化)
- 未检查所有 AWS 区域是否存在攻击者创建的资源(挖矿程序部署在每个区域)
- 忘记撤销已切换角色的临时凭据(STS 令牌在到期前仍然有效)
- 未为保险索赔计算未授权资源使用的财务影响
输出格式
云事件响应报告
================================
事件: INC-2025-1705
云服务商: AWS(账号:123456789012)
检测日期: 2025-11-15T14:00:00Z
检测来源: GuardDuty - UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration
受攻陷摘要
初始访问: IAM 访问密钥泄露至公开 GitHub 仓库
受影响身份: iam-user: deploy-bot (AKIA...)
攻击者 IP: 203.0.113.42(VPN 出口节点,荷兰)
持续时间: 4 小时(10:00 UTC - 14:00 UTC)
攻击者活动(来自 CloudTrail)
10:15 UTC - DescribeInstances(侦察)
10:18 UTC - RunInstances x 12(c5.4xlarge,所有区域 - 挖矿)
10:22 UTC - CreateUser "backup-admin"(持久化)
10:23 UTC - CreateAccessKey for "backup-admin"
10:25 UTC - AttachUserPolicy - AdministratorAccess to "backup-admin"
10:30 UTC - PutBucketPolicy - s3://data-bucket 设为公开(外泄)
遏制措施
[x] 原始访问密钥已禁用
[x] 用户策略已设为 AWSDenyAll
[x] 后门 IAM 用户 "backup-admin" 已删除
[x] 12 个挖矿实例已终止(所有区域)
[x] S3 存储桶策略已恢复为私有
财务影响
未授权 EC2:$2,847(4 小时 x 12 x c5.4xlarge)
数据传输: $127(S3 公开访问数据出口)
合计: $2,974
事件后加固
1. GitHub 密钥扫描已启用
2. 访问密钥轮换策略已实施
3. 防止 CloudTrail 禁用的 SCP 已部署
4. GuardDuty 自动修复 Lambda 已配置