滥用计算实例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策略
使用以下命令检查项目级别的角色和权限分配:
|
|
2. 枚举计算实例
检查项目中的可用实例:
|
|
3. 枚举计算实例IAM策略
检查实例本身的IAM策略:
|
|
4. 枚举项目元数据
检查项目范围的元数据:
|
|
5. 添加标签到实例
使用计算实例管理员角色添加网络标签:
|
|
6. 通过SSH访问实例
使用实例元数据中的私钥进行SSH连接。
7. 读取存储桶
使用gsutil命令与存储桶交互:
|
|
缓解策略
- 禁用项目和实例元数据向任何用户公开
- 切勿在实例元数据中存储私钥
- 通过移除compute.instances.setTags权限进一步限制访问
本文演示了攻击者如何通过利用计算实例IAM配置错误、元数据暴露和网络标签操作在GCP中提升权限。