关于后端:谈谈-Kubernetes-的匿名访问

48次阅读

共计 2028 个字符,预计需要花费 6 分钟才能阅读完成。


文本翻译自: https://raesene.github.io/blog/2023/03/18/lets-talk-about-ano…


本周有一些对于 Dero Cryptojacking operation 的文章,其中对于攻击者所施行的细节之一引起了我的留神。有人提到他们正在攻打容许匿名拜访 Kubernetes API 的集群。到底如何以及为什么能够匿名拜访 Kubernetes 是一个乏味的话题,波及几个不同的畛域,所以我想我会写一些对于它的内容。

匿名拜访如何工作?

集群是否能够进行匿名拜访由 kube-apiserver 组件的标记 --anonymous-auth 管制,其默认为true,因而如果您在传递给服务器的参数列表中没有看到它,那么匿名拜访将被启用。

然而,仅凭此项设置并不能给攻击者提供拜访集群的很多权限,因为它只涵盖了申请在被解决之前通过的三个步骤之一(Authentication -> Authorization -> Admission Control)。正如 Kubernetes 管制拜访 的文档中所示,在身份认证后,申请还必须通过受权和准入管制(认证 -> 受权 -> 准入管制)。

受权和匿名拜访

因而下一步是申请须要匹配受权策略(通常是 RBAC,但也可能是其余策略)。当然,为了做到这一点,申请必须调配一个身份标识,这个时候 system:anonymoussystem:unauthenticated 权限组就派上了用场。这些身份标识被调配给任何没有无效身份验证令牌的申请,并用于匹配受权政策。

您能够通过查看 Kubeadm 集群上的 system:public-info-viewer clusterrolebinding 来理解相似的工作原理。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
    annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
    labels:
    kubernetes.io/bootstrapping: rbac-defaults
    name: system:public-info-viewer
roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: system:public-info-viewer
subjects:
- apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: system:authenticated
- apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: system:unauthenticated

匿名拜访有多常见

当初咱们晓得了匿名拜访是如何工作的,问题就变成了“这有多常见?”。答案是大多数次要发行版都会默认启用匿名拜访,并通常通过 system:public-info-viewer clusterrole提供一些对 /version 以及其余几个端点的拜访权限。

要理解这实用于多少集群,咱们能够应用 censys 或 shodan 来查找返回版本信息的集群。例如,这个 censys 查问 显示返回版本信息的主机超过一百万,因而咱们能够说这是一个相当常见的配置。

一个更重大的也更合乎 dero 文章中提出的要点是,这些集群中有多少容许攻击者在其中创立工作负载。尽管您无奈从 Censys 取得确切的信息,但它的确有一个显示集群的查问,容许匿名用户枚举集群中的 pod,在撰写本文时显示 302 个集群节点。我猜其中一些 / 大部分是蜜罐,但也可能有几个就是高风险的易受攻击的集群。

禁用匿名拜访

在非托管集群(例如 Rancher、Kubespray、Kubeadm)上,您能够通过将标记 --anonymous-auth=false 传递给 kube-apiserver 组件来禁用匿名拜访。在托管集群(例如 EKS、GKE、AKS)上,您不能这样做,然而您能够删除任何容许匿名用户执行操作的 RBAC 规定。例如,在 Kubeadm 集群上,您能够删除 system:public-info-viewer clusterrolebindingsystem:public-info-viewer clusterrole,以无效阻止匿名用户从集群获取信息。

当然,如果您有任何依赖这些端点的应用程序(例如健康检查),它们就会中断,因而测试您对集群所做的任何更改十分重要。这里的一种抉择是查看您的审计日志,看看是否有任何匿名申请向 API 服务器收回。

论断

容许某种级别的匿名拜访是 Kubernetes 中的常见默认设置。这自身并不是一个很大的平安问题,但它的确意味着在许多配置中,阻止攻击者毁坏您的集群的惟一办法是 RBAC 规定,因而一个谬误可能会导致重大问题,尤其是当您的集群裸露在互联网上时。

正文完
 0