一、云安全体系架构1.1 什么是云计算云计算(Cloud Computing)是通过互联网按需提供可配置计算资源(服务器、存储、网络、数据库、应用等)的服务模式。它的核心特征可以概括为五个字:按需、弹性、计量。按需:用户需要 2 核 4G 就申请 2 核 4G,不需要提前购买物理服务器弹性:流量高峰期自动增加资源,低峰期自动缩减,按使用量付费计量:像水电一样按实际使用量计费,而不是固定月费对于渗透测试人员来说,云计算引入了一个新的攻击维度:配置错误。云平台提供了极其丰富的安全功能,但如果配置不当——比如将对象存储桶设置为公开访问、安全组允许 0.0.0.0/0 入站——安全功能形同虚设。根据 Gartner 的报告,到 2025 年,99% 的云安全故障将是用户的配置错误,而非云厂商的基础设施漏洞。1.2 三种服务模型与责任划分用户管理的范围越大,安全责任越重。这是云安全的第一原则——责任共担模型(Shared Responsibility Model)。IaaS(Infrastructure as a Service,基础设施即服务):提供最底层的计算、存储、网络资源。用户可以完全控制操作系统和应用。国内代表产品:阿里云 ECS(弹性云服务器)腾讯云 CVM(云虚拟机)华为云 ECS用户负责:操作系统安全补丁、应用安全、数据加密、访问控制、网络安全组配置。云厂商负责:物理安全、网络基础设施、虚拟化层的安全。PaaS(Platform as a Service,平台即服务):提供应用运行环境。用户只需上传代码,平台自动处理部署、扩展。国内代表产品:阿里云函数计算 FC(Serverless)腾讯云 CloudBase(云开发——微信小程序后端常用)用户负责:应用代码安全、数据安全。云厂商负责:运行环境、操作系统、网络。SaaS(Software as a Service,软件即服务):提供完整的、可直接使用的软件。用户通过浏览器或 App 访问。国内代表产品:钉钉、企业微信、飞书WPS 云文档用户负责:仅自己的数据(账号密码强度、文件权限设置)。云厂商负责:全部基础设施和应用安全。安全责任的"下限"和"上限":SaaS 用户的安全责任最轻——只需要管好自己的密码和数据分享权限。IaaS 用户的安全责任最重——需要管理操作系统、应用、网络、数据库的所有安全层面。配置错误是 IaaS 安全事件的头号原因。1.3 云安全主要威胁面威胁类别具体风险真实案例模式身份与访问管理(IAM)GitHub 泄露 AccessKey、权限策略用通配符 *、未启用 MFA最常见的云安全事故,占 60%+数据安全OSS/S3 存储桶公开读、数据库无密码、快照备份公开数据泄露事件头号原因网络安全安全组 0.0.0.0/0、SSH/RDP 对公网开放、VPC 设计有缺陷导致服务器被入侵、被挖矿配置管理使用默认密码、服务端口意外暴露、元数据服务未防护入门级但危害极大的错误二、公有云攻防2.1 IAM(身份与访问管理)安全IAM 是云平台的"看门人"。它决定了谁(身份)可以对什么(资源)执行哪些操作(权限)。国内云平台 IAM 对照:概念阿里云 RAM腾讯云 CAM用户RAM 用户CAM 用户/协作者角色RAM 角色CAM 角色策略权限策略策略凭据AccessKey(AK)SecretId + SecretKeyAccessKey 泄露:AccessKey(阿里云以 LTAI 开头)和 SecretKey 是访问云 API 的"用户名和密码"。泄露意味着攻击者可以使用该账号的全部权限。泄露途径:代码仓库:开发者不小心将包含 AccessKey 的配置文件提交到 GitHub/Gitee。攻击者使用自动化脚本持续扫描公开仓库前端 JS:在前端 JavaScript 代码中使用 AccessKey 调用云 API——前端代码对所有人可见APK 反编译:移动 App 中将 AccessKey 硬编码在代码中,反编译后泄露CI/CD 日志:构建日志中打印了环境变量,其中包含 AccessKey配置文件:.env、config.json 等配置文件未加入 .gitignore搜索泄露的 AccessKey:# GitHub/Gitee 代码搜索# 阿里云:LTAI + 16-20位字母数字# 腾讯云:AKID + 13-20位字母数字# 本地代码仓库搜索grep -rE "LTAI[0-9A-Za-z]{16,20}" .grep -rE "AKID[0-9A-Za-z]{13,20}" .权限过大判断:// 极度危险——对全部资源授予全部操作权限{ "Effect": "Allow", "Action": "*", "Resource": "*"}// 同样危险——虽然指定了资源,但 Action 通配{ "Effect": "Allow", "Action": ["oss:*", "ecs:*", "rds:*"], "Resource": "*"}安全的做法是遵循最小权限原则(Least Privilege):Action:只授予完成任务所需的具体操作(如 oss:GetObject),不放 *Resource:只授予需要访问的具体资源,不放 *2.2 元数据服务攻击元数据服务(Metadata Service)是云平台为每个云主机提供的特殊 HTTP 端点。云主机可以通过这个端点查询自身信息——包括动态分配的 IAM/RAM 角色临时凭据。各云平台元数据服务地址:云平台元数据服务地址阿里云http://100.100.100.200/latest/meta-data/腾讯云http://metadata.tencentyun.com/latest/meta-data/AWShttp://169.254.169.254/latest/meta-data/元数据服务返回的关键信息:# 阿里云——列出所有可用元数据路径curl http://100.100.100.200/latest/meta-data/# 返回示例:# dns-conf/ ← DNS 配置# eipv4 ← 公网 IP# hostname ← 主机名# image/ ← 镜像信息# instance/ ← 实例信息# mac ← MAC 地址# network/ ← 网络配置# ntp-conf/ ← NTP 配置# owner-account-id ← 阿里云账号 ID# private-ipv4 ← 内网 IP# ram/ ← RAM 角色相关!# region-id ← 地域 ID# serial-number ← 序列号# vpc-cidr-block ← VPC CIDR# vpc-id ← VPC ID# zone-id ← 可用区 ID# 查看 RAM 角色名curl http://100.100.100.200/latest/meta-data/ram/security-credentials/# 获取该角色的临时凭据(AccessKeyId、AccessKeySecret、SecurityToken、Expiration)curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<角色名>SSRF 攻击元数据服务:SSRF(Server-Side Request Forgery,服务端请求伪造)是指攻击者通过存在漏洞的 Web 应用,让服务器代为发起 HTTP 请求。如果应用没有对用户输入的 URL 做充分的限制,攻击者可以提供 http://100.100.100.200/latest/meta-data/,服务器会"替"攻击者请求元数据服务,从而泄露 RAM 角色凭据。防御措施:方法说明应用层过滤用户输入的 URL,禁止访问 100.100.100.200、10.0.0.0/8、127.0.0.0/8 等内网地址网络层安全组限制出站流量,只允许必要的出站连接RAM 角色使用最小权限原则——即使凭据泄露,攻击者也只能执行有限操作IMDSv2增强型元数据服务——需要先获取 Token 才能查询2.3 云存储安全对象存储(Object Storage)是云平台提供的海量、低成本、高可靠的文件存储服务。国内产品对照:阿里云腾讯云华为云OSS(对象存储服务)COS(对象存储)OBS(对象存储服务)访问权限类型:权限含义URL 直接访问结果私有(Private)仅授权用户可访问,默认值返回 AccessDenied公共读(Public Read)任何人可读取所有文件返回文件内容或文件列表公共读写(Public Read-Write)任何人可读写删除所有文件可上传、修改、删除文件测试存储桶权限:# 阿里云 OSScurl https://<bucket-name>.<region>.aliyuncs.com# 返回 XML 格式的文件列表 → 公共读或公共读写# 返回 AccessDenied → 私有# 腾讯云 COScurl https://<bucket-name>-<appid>.cos.<region>.myqcloud.com存储桶名称枚举:攻击者可通过字典爆破发现公开的存储桶。存储桶命名通常遵循可预测的模式:<公司名>-<环境> 例如:example-prod、example-test<项目名>-static 例如:myapp-static、myapp-upload<产品名>-<日期> 例如:myapp-20240101三、云主机攻防3.1 获取云主机权限后的信息收集当攻击者通过 Web 漏洞、弱密码或其他方式获得了云主机 Shell 后,下一步是收集凭据以实现横向移动。# 1. 确认当前环境whoami # 当前用户id # UID 和组uname -a # 内核版本cat /etc/os-release # 操作系统版本ifconfig 或 ip addr # 网络配置# 2. 搜索云平台凭据# 阿里云cat ~/.aliyun/config.json 2>/dev/nullenv | grep -i alibabaenv | grep ALIBABA_CLOUD# 腾讯云env | grep -i tencent# 3. 通用凭据搜索cat ~/.bash_history | grep -iE "password|secret|token|key|access"find / -maxdepth 3 -name "*.env" -o -name "*config*" -o -name "*.json" 2>/dev/null | head -30cat /proc/self/environ | tr ''\0'' ''\n'' | grep -iE "KEY|SECRET|TOKEN|PASSWORD"# 4. 检查元数据服务可达性curl http://100.100.100.200/latest/meta-data/ -m 2 # 阿里云curl http://metadata.tencentyun.com/latest/meta-data/ -m 2 # 腾讯云3.2 完整攻击链攻击链一:Web 漏洞 → 反弹 Shell → 凭据收集 → 云资源操作这是最常见的路径。攻击者利用应用漏洞(SQL 注入、文件上传、RCE)获得服务器 Shell,然后收集服务器上的 AccessKey,使用 CLI 工具操作云资源。# 使用泄露的阿里云 AccessKey 配置 CLIaliyun configure set --profile stolen# 输入 AccessKeyId 和 AccessKeySecret# 查看所有 OSS 存储桶aliyun oss ls# 查看所有 ECS 实例aliyun ecs DescribeInstances --RegionId cn-hangzhou# 连接 RDS 数据库(如果安全组允许)mysql -h <rds-endpoint> -u <user> -p<password>攻击链二:SSRF → 元数据服务 → 获取 RAM 角色凭据 → 云资源操作这个攻击链的关键前提是应用存在 SSRF 漏洞,且没有过滤内网地址。攻击者通过 SSRF 使服务器请求元数据服务,获取 RAM 角色的临时凭据。攻击链三:公开存储桶 → 源码泄露 → 提取数据库密码 → 连接数据库开发团队将源码备份或日志文件上传到公开的存储桶中。攻击者下载后,在源码中找到数据库连接字符串,直接连接云数据库。3.3 云主机加固加固项具体措施为什么重要SSH 强化密钥登录、禁用密码、改端口防止暴力破解安全组最小放行——仅开放 80/443 + 堡垒机 IP 的 22减少攻击面凭据管理使用 RAM 角色代替 AccessKey 硬编码避免凭据泄露补丁管理定期更新 OS 和应用修复已知漏洞日志审计开启 ActionTrail/CloudAudit事后追溯四、虚拟化安全4.1 容器 vs 虚拟机维度容器(Docker)虚拟机(KVM/VMware)架构共享宿主机内核拥有独立 Guest 内核隔离进程级(Namespace + Cgroups)硬件级(VT-x/AMD-V)启动秒级分钟级资源MB 级GB 级逃逸难度较低(本质上是内核漏洞利用)较高(需要虚拟化层零日)为什么容器更容易逃逸:容器共享宿主机的 Linux 内核。如果容器进程找到内核漏洞并利用成功,它在宿主机上就获得了代码执行能力——因为两者运行在同一个内核上。虚拟机有独立的 Guest 内核,即使 Guest 被攻破,攻击者仍被困在 Guest 中——还需要再突破虚拟化层(QEMU/KVM/VMware)的隔离才能到达 Host。4.2 Docker 容器逃逸条件 1:--privileged 特权容器。特权容器拥有全部 Capabilities,可以操作宿主机硬件。条件 2:挂载 Docker Socket(-v /var/run/docker.sock:/var/run/docker.sock)。容器内可直接控制宿主机的 Docker。条件 3:CAP_SYS_ADMIN + cgroup 可写。利用 cgroup notify_on_release 在宿主机执行命令。4.3 虚拟机逃逸虚拟机逃逸需要 Guest 内的代码执行 + 虚拟化层的已知漏洞。知名漏洞:CVE-2015-3456(VENOM):QEMU 虚拟软盘控制器缓冲区溢出CVE-2019-14835:KVM vhost-net 内核越界读写CVE-2020-14364:QEMU USB 模拟器越界读写判断当前是否在虚拟机中:systemd-detect-virt # 直接输出虚拟化平台名cat /proc/cpuinfo | grep hypervisor # 查看 CPU 标志dmidecode -s system-product-name # 查看系统产品名五、搭建实验环境5.1 阿里云免费套餐访问 https://free.aliyun.com,使用手机号注册 + 支付宝实名认证(无需信用卡):ECS 云服务器:1vCPU/2GB,免费试用 1 个月OSS 对象存储:5GB 免费存储5.2 Docker 本地靶场(零成本)docker pull vulnerables/web-dvwadocker run -d -p 80:80 vulnerables/web-dvwa5.3 VirtualBox + Ubuntu + KVMVirtualBox:https://www.virtualbox.org/Ubuntu Server:https://ubuntu.com/download/server在 VirtualBox 中创建 VM(启用嵌套虚拟化:设置 → 系统 → 处理器 → 启用 VT-x/AMD-V)安装 KVM:sudo apt install qemu-kvm libvirt-daemon-system核心要点主题核心服务模型IaaS/PaaS/SaaS,用户安全责任递减责任共担云厂商负责"云的安全",用户负责"云中的安全"IAMAccessKey 泄露是头号风险;*:*:* = 定时炸弹元数据服务SSRF 的关键跳板 → 可获取 RAM 角色临时凭据云存储公开读 = 数据泄露;公开读写 = 数据泄露+篡改容器逃逸privileged + docker.sock + CAP_SYS_ADMIN/cgroup虚拟机逃逸需 QEMU/KVM 虚拟化层漏洞(较罕见)国内实验阿里云免费套餐 + Docker 本地 = 零成本
一、云安全体系架构
1.1 什么是云计算
云计算(Cloud Computing)是通过互联网按需提供可配置计算资源(服务器、存储、网络、数据库、应用等)的服务模式。它的核心特征可以概括为五个字:按需、弹性、计量。
对于渗透测试人员来说,云计算引入了一个新的攻击维度:配置错误。云平台提供了极其丰富的安全功能,但如果配置不当——比如将对象存储桶设置为公开访问、安全组允许 0.0.0.0/0 入站——安全功能形同虚设。根据 Gartner 的报告,到 2025 年,99% 的云安全故障将是用户的配置错误,而非云厂商的基础设施漏洞。
1.2 三种服务模型与责任划分
用户管理的范围越大,安全责任越重。这是云安全的第一原则——责任共担模型(Shared Responsibility Model)。
IaaS(Infrastructure as a Service,基础设施即服务):
提供最底层的计算、存储、网络资源。用户可以完全控制操作系统和应用。国内代表产品:
用户负责:操作系统安全补丁、应用安全、数据加密、访问控制、网络安全组配置。
云厂商负责:物理安全、网络基础设施、虚拟化层的安全。
PaaS(Platform as a Service,平台即服务):
提供应用运行环境。用户只需上传代码,平台自动处理部署、扩展。国内代表产品:
用户负责:应用代码安全、数据安全。
云厂商负责:运行环境、操作系统、网络。
SaaS(Software as a Service,软件即服务):
提供完整的、可直接使用的软件。用户通过浏览器或 App 访问。国内代表产品:
用户负责:仅自己的数据(账号密码强度、文件权限设置)。
云厂商负责:全部基础设施和应用安全。
安全责任的"下限"和"上限":
SaaS 用户的安全责任最轻——只需要管好自己的密码和数据分享权限。IaaS 用户的安全责任最重——需要管理操作系统、应用、网络、数据库的所有安全层面。配置错误是 IaaS 安全事件的头号原因。
1.3 云安全主要威胁面
威胁类别
具体风险
真实案例模式
身份与访问管理(IAM)
GitHub 泄露 AccessKey、权限策略用通配符 *、未启用 MFA
最常见的云安全事故,占 60%+
数据安全
OSS/S3 存储桶公开读、数据库无密码、快照备份公开
数据泄露事件头号原因
网络安全
安全组 0.0.0.0/0、SSH/RDP 对公网开放、VPC 设计有缺陷
导致服务器被入侵、被挖矿
配置管理
使用默认密码、服务端口意外暴露、元数据服务未防护
入门级但危害极大的错误
二、公有云攻防
2.1 IAM(身份与访问管理)安全
IAM 是云平台的"看门人"。它决定了谁(身份)可以对什么(资源)执行哪些操作(权限)。
国内云平台 IAM 对照:
概念
阿里云 RAM
腾讯云 CAM
用户
RAM 用户
CAM 用户/协作者
角色
RAM 角色
CAM 角色
策略
权限策略
策略
凭据
AccessKey(AK)
SecretId + SecretKey
AccessKey 泄露:
AccessKey(阿里云以 LTAI 开头)和 SecretKey 是访问云 API 的"用户名和密码"。泄露意味着攻击者可以使用该账号的全部权限。
泄露途径:
搜索泄露的 AccessKey:
权限过大判断:
安全的做法是遵循最小权限原则(Least Privilege):
2.2 元数据服务攻击
元数据服务(Metadata Service)是云平台为每个云主机提供的特殊 HTTP 端点。云主机可以通过这个端点查询自身信息——包括动态分配的 IAM/RAM 角色临时凭据。
各云平台元数据服务地址:
云平台
元数据服务地址
阿里云
http://100.100.100.200/latest/meta-data/
腾讯云
http://metadata.tencentyun.com/latest/meta-data/
AWS
http://169.254.169.254/latest/meta-data/
元数据服务返回的关键信息:
SSRF 攻击元数据服务:
SSRF(Server-Side Request Forgery,服务端请求伪造)是指攻击者通过存在漏洞的 Web 应用,让服务器代为发起 HTTP 请求。如果应用没有对用户输入的 URL 做充分的限制,攻击者可以提供 http://100.100.100.200/latest/meta-data/,服务器会"替"攻击者请求元数据服务,从而泄露 RAM 角色凭据。
防御措施:
方法
说明
应用层
过滤用户输入的 URL,禁止访问 100.100.100.200、10.0.0.0/8、127.0.0.0/8 等内网地址
网络层
安全组限制出站流量,只允许必要的出站连接
RAM 角色
使用最小权限原则——即使凭据泄露,攻击者也只能执行有限操作
IMDSv2
增强型元数据服务——需要先获取 Token 才能查询
2.3 云存储安全
对象存储(Object Storage)是云平台提供的海量、低成本、高可靠的文件存储服务。
国内产品对照:
阿里云
腾讯云
华为云
OSS(对象存储服务)
COS(对象存储)
OBS(对象存储服务)
访问权限类型:
权限
含义
URL 直接访问结果
私有(Private)
仅授权用户可访问,默认值
返回 AccessDenied
公共读(Public Read)
任何人可读取所有文件
返回文件内容或文件列表
公共读写(Public Read-Write)
任何人可读写删除所有文件
可上传、修改、删除文件
测试存储桶权限:
存储桶名称枚举:
攻击者可通过字典爆破发现公开的存储桶。存储桶命名通常遵循可预测的模式:
三、云主机攻防
3.1 获取云主机权限后的信息收集
当攻击者通过 Web 漏洞、弱密码或其他方式获得了云主机 Shell 后,下一步是收集凭据以实现横向移动。
3.2 完整攻击链
攻击链一:Web 漏洞 → 反弹 Shell → 凭据收集 → 云资源操作
这是最常见的路径。攻击者利用应用漏洞(SQL 注入、文件上传、RCE)获得服务器 Shell,然后收集服务器上的 AccessKey,使用 CLI 工具操作云资源。
攻击链二:SSRF → 元数据服务 → 获取 RAM 角色凭据 → 云资源操作
这个攻击链的关键前提是应用存在 SSRF 漏洞,且没有过滤内网地址。攻击者通过 SSRF 使服务器请求元数据服务,获取 RAM 角色的临时凭据。
攻击链三:公开存储桶 → 源码泄露 → 提取数据库密码 → 连接数据库
开发团队将源码备份或日志文件上传到公开的存储桶中。攻击者下载后,在源码中找到数据库连接字符串,直接连接云数据库。
3.3 云主机加固
加固项
具体措施
为什么重要
SSH 强化
密钥登录、禁用密码、改端口
防止暴力破解
安全组
最小放行——仅开放 80/443 + 堡垒机 IP 的 22
减少攻击面
凭据管理
使用 RAM 角色代替 AccessKey 硬编码
避免凭据泄露
补丁管理
定期更新 OS 和应用
修复已知漏洞
日志审计
开启 ActionTrail/CloudAudit
事后追溯
四、虚拟化安全
4.1 容器 vs 虚拟机
维度
容器(Docker)
虚拟机(KVM/VMware)
架构
共享宿主机内核
拥有独立 Guest 内核
隔离
进程级(Namespace + Cgroups)
硬件级(VT-x/AMD-V)
启动
秒级
分钟级
资源
MB 级
GB 级
逃逸难度
较低(本质上是内核漏洞利用)
较高(需要虚拟化层零日)
为什么容器更容易逃逸:容器共享宿主机的 Linux 内核。如果容器进程找到内核漏洞并利用成功,它在宿主机上就获得了代码执行能力——因为两者运行在同一个内核上。虚拟机有独立的 Guest 内核,即使 Guest 被攻破,攻击者仍被困在 Guest 中——还需要再突破虚拟化层(QEMU/KVM/VMware)的隔离才能到达 Host。
4.2 Docker 容器逃逸
条件 1:--privileged 特权容器。特权容器拥有全部 Capabilities,可以操作宿主机硬件。
条件 2:挂载 Docker Socket(-v /var/run/docker.sock:/var/run/docker.sock)。容器内可直接控制宿主机的 Docker。
条件 3:CAP_SYS_ADMIN + cgroup 可写。利用 cgroup notify_on_release 在宿主机执行命令。
4.3 虚拟机逃逸
虚拟机逃逸需要 Guest 内的代码执行 + 虚拟化层的已知漏洞。
知名漏洞:
判断当前是否在虚拟机中:
五、搭建实验环境
5.1 阿里云免费套餐
访问 https://free.aliyun.com,使用手机号注册 + 支付宝实名认证(无需信用卡):
5.2 Docker 本地靶场(零成本)
5.3 VirtualBox + Ubuntu + KVM
核心要点
主题
核心
服务模型
IaaS/PaaS/SaaS,用户安全责任递减
责任共担
云厂商负责"云的安全",用户负责"云中的安全"
IAM
AccessKey 泄露是头号风险;*:*:* = 定时炸弹
元数据服务
SSRF 的关键跳板 → 可获取 RAM 角色临时凭据
云存储
公开读 = 数据泄露;公开读写 = 数据泄露+篡改
容器逃逸
privileged + docker.sock + CAP_SYS_ADMIN/cgroup
虚拟机逃逸
需 QEMU/KVM 虚拟化层漏洞(较罕见)
国内实验
阿里云免费套餐 + Docker 本地 = 零成本