云安全案例14: 从入侵云资源到接管K8S
2023-5-27 10:32:33 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

在一篇中,介绍了从 Kubernetes 到云域的横向移动技术,在这一篇将分析从云到 Kubernetes 的相反方向的横向移动,并研究 CSP 之间潜在的攻击向量有何不同。

云到 Kubernetes 黑客 TTP

从云环境向托管的 Kubernetes 集群进行横向移动攻击, 黑客可以利用多种技术: 这些包括但不限于利用 IAM 云密钥、kubeconfig 文件和容器注册表镜像。

1.IAM云密钥

Wiz 数据显示,使用托管 Kubernetes 集群的云环境大约15%至少有一个云工作节点(例如 VM、无服务功能、存储桶、网络应用程序),它存有一个长期明文的云密钥,这个密钥关联到一个拥有高K8S权限的IAM/ADD用户。

黑客拿到托管集群相关的IAM云密钥,就可以生成一个kubeconfig文件,里面包含该K8S集群相关的信息,如命名空间,用户和校验技术。然后他们会利用这个文件和密钥登录这个集群,访问他们的资源。

然而,他们访问范围是由身份权限限制的,在这一块,不同云厂商有不同的范围:

  • 亚马逊云密钥

黑客拿到了密钥,登录到EKS集群,他的权限和密钥相关的身份有关:

  1. 创建集群的身份,在EKS控制平台拥有system:masters权限,有所有管理权限,可以接管整个集群。
  2. 其它身份,根据身份在ConfigMap的权限配置访问相应资源
  • 谷歌云密钥

黑客获得用户云密钥,根据用户权限,可能使用创建的kubeconfig文件,来登录租户的GKE集群。

同样,一个长期的服务账户也可能允许黑客登录到GKE集群。

GKE集群中,集群的授权是整合K8S原生的RBAC模型和IAMRBAC是管控集群和命名空间,而IAM是管控项目的。一个身份必须具有其中之一,才能够访问资源。

因此,如果没有明确RBAC限制,黑客获取了一个具有组织,目录和项目的管理身份,可以对任何集群有管理权限。

  • Azure云密钥

有点类似谷歌云的情况,不一样的是,它的影响取决于,是否使用了本地账户,AAD集群账户和授权方法。

  1. 本地账户

由于集群并没有和AAD整合,所以,用户和管理员都会从集群那里获取一个客户证书。这个证书的名字统一为masterclient和属于包含cluster-admin/cluster-wide角色的system:masters组。所以,即使黑客只是拿到一个最低权限的用户,仍然可以创建kubeconfig文件来访问集群,获得管理员权限

  1. 使用AAD认证的AAD集群账户

由于AAD认证有两种方法,在这种情况,kubeconfig文件往往是空的,任何涉及集群API的调用,都会提示用户登录和认证,从而减少被入侵的风险。

然而不幸的是,87%使用AAD云环境都采用本地账户的认证方式。

2. kubeconfig文件

无论黑客以什么身份进入,只要能够找到一个托管集群的一个kubeconfig文件,都足够接管整个集群。

如果一个Azure集群使用本地账户认证,kubeconfig文件使用明文的client-certificate-dataclient-key-data就可以让黑客接管集群。

但如果是用AAD认证,kubeconfig文件会自动修改,包含一个客户ID和刷新的token,这个刷新的token默认有效期是90天。如果一个黑客在用户登录之后的90天内拿到这个文件,就可以接管集群。

除了Azure云之外,亚马逊云和谷歌云还需要IAM身份的云密钥,所以黑客必须还得拿到相关的云密钥才能够认证到集群中。

3.容器注册中心镜像

如果黑客能够入侵了注册中心,也可以推送和修改现有镜像,他们就会往合法的docker镜像注入后门代码,那么任何一个使用了这个镜像的集群,都会给黑客留下一个后门。

建议的最佳实践

  1. 避免在工作节点中旋转长期云密钥
  2. 对外的工作节点上不能有kubeconfig文件
  3. 限制对容器注册中心的访问

文章来源: https://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247489492&idx=1&sn=59fc027e7f7c93dc9b0f5addbd568664&chksm=fdf97cc1ca8ef5d7b41f4954c7d8f0e7d16fe5d43fbd16fb2077906a2d608da6bdf741f71659&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh