GCP - Add Custom SSH Metadata
GCP - 添加自定义SSH元数据
修改元数据
如果攻击者获得必要的权限,实例上的元数据修改可能会导致重大安全风险。
将SSH密钥合并到自定义元数据中
在GCP上,Linux系统通常会从Google Compute Engine的Python Linux Guest Environment执行脚本。其中一个关键组件是accounts守护程序,旨在定期检查实例元数据端点以获取授权的SSH公钥更新。
因此,如果攻击者可以修改自定义元数据,他可以使守护程序找到一个新的公钥,该公钥将被处理并集成到本地系统中。该密钥将被添加到现有用户的~/.ssh/authorized_keys
文件中,或者根据密钥的格式,可能会创建一个具有sudo
权限的新用户。攻击者将能够 compromise 主机。
将SSH密钥添加到现有特权用户
检查实例上现有的SSH密钥:
执行命令描述实例及其元数据,以查找现有的SSH密钥。输出中的相关部分将位于
metadata
下,特别是ssh-keys
键下。
注意SSH密钥的格式:用户名在冒号之前,用冒号分隔。
为SSH密钥元数据准备文本文件:
将用户名及其对应的SSH密钥详情保存到名为
meta.txt
的文本文件中。这对于保留现有密钥并添加新密钥至关重要。
为目标用户(此示例中为
alice
)生成新的SSH密钥:
使用
ssh-keygen
命令生成新的SSH密钥,确保注释字段(-C
)与目标用户名匹配。
将新的公钥添加到
meta.txt
,模仿实例元数据中的格式。
更新实例的SSH密钥元数据:
使用
gcloud compute instances add-metadata
命令将更新后的SSH密钥元数据应用于实例。
使用新的SSH密钥访问实例:
使用新密钥通过SSH连接到实例,以在目标用户(此示例中为
alice
)的上下文中访问shell。
创建一个新的特权用户并添加SSH密钥
如果找不到有趣的用户,可以创建一个新用户,并赋予该用户sudo
权限:
项目级别的SSH密钥
可以通过在项目级别应用SSH密钥来扩大在云环境中对多个虚拟机(VMs)的SSH访问范围。这种方法允许对项目中任何未明确阻止项目范围SSH密钥的实例进行SSH访问。以下是简要指南:
在项目级别应用SSH密钥:
使用
gcloud compute project-info add-metadata
命令将meta.txt
中的SSH密钥添加到项目的元数据中。此操作确保SSH密钥在项目中的所有VM中被识别,除非VM启用了“阻止项目范围SSH密钥”选项。
使用项目范围密钥SSH进入实例:
有了项目范围的SSH密钥,您可以SSH进入项目中的任何实例。不阻止项目范围密钥的实例将接受SSH密钥,从而授予访问权限。
直接SSH进入实例的方法是使用
gcloud compute ssh [INSTANCE]
命令。此命令使用您当前的用户名和在项目级别设置的SSH密钥来尝试访问。
参考资料
Last updated