滥用GCP计算实例IAM配置错误实现权限提升

本文详细介绍了如何利用GCP计算实例的IAM配置错误、元数据暴露和网络标签操作实现权限提升。通过初始受损的服务账户,从无任何角色权限逐步获取对项目存储桶的访问和数据下载能力。

滥用计算实例IAM配置错误在GCP中获取权限

理解计算实例

实例是托管在Google基础设施上的虚拟机(VM)。可以通过密码、SSH或RDP访问实例。公共SSH密钥可以通过实例元数据在实例级别管理,也可以通过项目元数据在项目级别管理。

另一种访问实例的方式是通过OS Login功能。启用后,具有roles/compute.osLogin或roles/compute.osAdminLogin角色的用户可以直接登录,无需SSH密钥或密码。

计算实例的IAM策略变更

以前,在GCP中创建新实例时,通常会分配默认服务账户(格式为[PROJECT_NUMBER]-compute@developer.gserviceaccount.com)。此默认服务账户在项目级别具有Editor角色。

IAM更新

新项目中的默认服务账户不再默认授予roles/editor,而是授予更严格的角色,如roles/compute.serviceAgent。

OAuth范围

创建新实例时,常见的OAuth范围包括:

  • 对所有启用的云服务的完全访问
  • 对计算引擎资源的完全访问
  • 对存储桶的只读访问

所需工具

需要在使用gcloud CLI的测试机器上进行安装。

利用步骤

1. 检查新访问账户的IAM策略

使用以下命令检查项目级别的角色和权限分配:

1
gcloud projects get-iam-policy [PROJECT NAME]

2. 枚举计算实例

检查项目中的可用实例:

1
gcloud compute instances list

3. 枚举计算实例IAM策略

检查实例本身的IAM策略:

1
gcloud compute instances get-iam-policy [INSTANCE NAME]

4. 枚举项目元数据

检查项目范围的元数据:

1
gcloud compute project-info describe

5. 添加标签到实例

使用计算实例管理员角色添加网络标签:

1
gcloud compute instances add-tags [INSTANCE NAME] --tags=ssh

6. 通过SSH访问实例

使用实例元数据中的私钥进行SSH连接。

7. 读取存储桶

使用gsutil命令与存储桶交互:

1
2
gsutil ls
gsutil cp gs://[BUCKET NAME]/[FILE NAME] [LOCAL_PATH]

缓解策略

  • 禁用项目和实例元数据向任何用户公开
  • 切勿在实例元数据中存储私钥
  • 通过移除compute.instances.setTags权限进一步限制访问

本文演示了攻击者如何通过利用计算实例IAM配置错误、元数据暴露和网络标签操作在GCP中提升权限。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计