在一篇中,介绍了从 Kubernetes 到云域的横向移动技术,在这一篇将分析从云到 Kubernetes
的相反方向的横向移动,并研究 CSP 之间潜在的攻击向量有何不同。
从云环境向托管的 Kubernetes 集群进行横向移动攻击, 黑客可以利用多种技术: 这些包括但不限于利用 IAM
云密钥、kubeconfig
文件和容器注册表镜像。
Wiz 数据显示,使用托管 Kubernetes 集群的云环境大约15%至少有一个云工作节点(例如 VM
、无服务功能、存储桶、网络应用程序),它存有一个长期明文的云密钥,这个密钥关联到一个拥有高K8S
权限的IAM/ADD
用户。
黑客拿到托管集群相关的IAM
云密钥,就可以生成一个kubeconfig
文件,里面包含该K8S
集群相关的信息,如命名空间,用户和校验技术。然后他们会利用这个文件和密钥登录这个集群,访问他们的资源。
然而,他们访问范围是由身份权限限制的,在这一块,不同云厂商有不同的范围:
黑客拿到了密钥,登录到EKS
集群,他的权限和密钥相关的身份有关:
创建集群的身份,在EKS
控制平台拥有system:masters
权限,有所有管理权限,可以接管整个集群。
其它身份,根据身份在ConfigMap
的权限配置访问相应资源
黑客获得用户云密钥,根据用户权限,可能使用创建的kubeconfig
文件,来登录租户的GKE
集群。
同样,一个长期的服务账户也可能允许黑客登录到GKE
集群。
在GKE
集群中,集群的授权是整合K8S
原生的RBAC
模型和IAM
。RBAC
是管控集群和命名空间,而IAM
是管控项目的。一个身份必须具有其中之一,才能够访问资源。
因此,如果没有明确RBAC
限制,黑客获取了一个具有组织,目录和项目的管理身份,可以对任何集群有管理权限。
Azure
云密钥有点类似谷歌云的情况,不一样的是,它的影响取决于,是否使用了本地账户,AAD
集群账户和授权方法。
由于集群并没有和AAD
整合,所以,用户和管理员都会从集群那里获取一个客户证书。这个证书的名字统一为masterclient
和属于包含cluster-admin/cluster-wide
角色的system:masters
组。所以,即使黑客只是拿到一个最低权限的用户,仍然可以创建kubeconfig
文件来访问集群,获得管理员权限
AAD
认证的AAD
集群账户由于AAD
认证有两种方法,在这种情况,kubeconfig
文件往往是空的,任何涉及集群API的调用,都会提示用户登录和认证,从而减少被入侵的风险。
然而不幸的是,87%使用AAD
云环境都采用本地账户的认证方式。
kubeconfig
文件无论黑客以什么身份进入,只要能够找到一个托管集群的一个kubeconfig
文件,都足够接管整个集群。
如果一个Azure
集群使用本地账户认证,kubeconfig
文件使用明文的client-certificate-data
和 client-key-data
就可以让黑客接管集群。
但如果是用AAD
认证,kubeconfig
文件会自动修改,包含一个客户ID和刷新的token
,这个刷新的token
默认有效期是90天。如果一个黑客在用户登录之后的90天内拿到这个文件,就可以接管集群。
除了Azure
云之外,亚马逊云和谷歌云还需要IAM
身份的云密钥,所以黑客必须还得拿到相关的云密钥才能够认证到集群中。
如果黑客能够入侵了注册中心,也可以推送和修改现有镜像,他们就会往合法的docker
镜像注入后门代码,那么任何一个使用了这个镜像的集群,都会给黑客留下一个后门。
避免在工作节点中旋转长期云密钥
对外的工作节点上不能有kubeconfig
文件
限制对容器注册中心的访问