概述
如果攻击者入侵了使用 gcloud CLI 登录的电脑或服务器,他们可能会获取 OAuth 令牌。即使之后您阻止了他们访问这些设备,他们也能用复制下来的令牌继续访问 Google Cloud。为降低这个风险,建议使用短期有效的凭证,并限制哪些设备可以访问资源。
gcloud CLI 的凭据是怎么存储的?
- 用户账号登录时,gcloud CLI 会保存访问令牌和刷新令牌。访问令牌有效期是 60 分钟,但刷新令牌可以长期使用。
- 服务账号登录时,gcloud CLI 使用密钥文件申请访问令牌。只要这个密钥没被删除,它就一直有效。
- 在某些 Google Cloud 环境(如 Compute Engine)中,凭据会自动生成并由系统管理。
- 如果用“工作负载身份联合”,凭据是短期的,不依赖本地文件。
攻击者如何滥用这些令牌?
如果攻击者拿到 gcloud CLI 的令牌,他们可以:
- 模仿合法用户执行操作,日志中看不出异常。
- 利用刷新令牌或密钥长期访问系统。
- 绕过密码和两步验证。
如何降低风险?以下是几个关键做法:
-
设置会话时长限制
- 强制用户每隔一段时间重新验证身份,阻止攻击者长期使用令牌。
-
使用 VPC Service Controls
- 限制只有特定网络内的请求才能访问资源,防止攻击者在外部设备使用凭据。
-
启用 Chrome Enterprise 安全策略
- 设置访问条件,例如 IP 或设备认证,不符合条件的请求会被拒绝。
-
强制使用两步验证
- 对 SSH 登录等远程访问开启两步验证,即使令牌被盗,攻击者也难以登录。
-
限制服务账号密钥使用
- 不使用或减少使用密钥文件,并启用政策禁止新密钥创建。
-
遵循最小权限原则
- 只赋予用户完成任务所需的最小权限,避免权限滥用。
-
保护端点设备
- 防止攻击者入侵开发者电脑或服务器,定期检查设备安全。
-
确保安全响应团队具备权限
- 确保安全团队在出事时有权限快速采取行动。
出现安全事件后的处理建议:
-
使所有 OAuth 令牌失效
- 启用会话时长策略,或手动移除用户的 gcloud CLI 凭据。
-
大范围失效令牌(如不确定受影响用户)
- 可以使用 Admin SDK 写脚本批量移除所有用户的 gcloud CLI 访问权限。
示例脚本用于撤销所有人的访问令牌:
function listUsersAndInvalidate() { const users = AdminDirectory.Users.list({ customer: 'my_customer' }).users; for (const user of users){ let tokens = AdminDirectory.Tokens.list(user.primaryEmail).items; for (const token of tokens) { if (token.clientId === "32555940559.apps.googleusercontent.com") { AdminDirectory.Tokens.remove(user.primaryEmail, token.clientId); } } } } -
处理服务账号被盗情况
- 暂停服务账号,删除密钥,60 分钟后再启用。
- 或者直接删除并重新创建服务账号(需要更多修改)。