Pentesting Kubernetes Services
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes 使用几个 特定的网络服务,您可能会发现它们 暴露在互联网上 或在 内部网络中,一旦您攻陷一个 pod。
Finding exposed pods with OSINT
一种方法是在 crt.sh 中搜索 Identity LIKE "k8s.%.com"
以查找与 kubernetes 相关的子域名。另一种方法可能是在 github 中搜索 "k8s.%.com"
并查找包含该字符串的 YAML 文件。
How Kubernetes Exposes Services
了解 Kubernetes 如何 公开暴露服务 可能对您有用,以便找到它们:
Exposing Services in KubernetesFinding Exposed pods via port scanning
以下端口可能在 Kubernetes 集群中开放:
Port | Process | Description |
---|---|---|
443/TCP | kube-apiserver | Kubernetes API 端口 |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | 容器指标 |
6443/TCP | kube-apiserver | Kubernetes API 端口 |
8443/TCP | kube-apiserver | Minikube API 端口 |
8080/TCP | kube-apiserver | 不安全的 API 端口 |
10250/TCP | kubelet | 允许完全模式访问的 HTTPS API |
10255/TCP | kubelet | 未经身份验证的只读 HTTP 端口:pods、运行中的 pods 和节点状态 |
10256/TCP | kube-proxy | Kube Proxy 健康检查服务器 |
9099/TCP | calico-felix | Calico 的健康检查服务器 |
6782-4/TCP | weave | 指标和端点 |
30000-32767/TCP | NodePort | 服务的代理 |
44134/TCP | Tiller | Helm 服务监听 |
Nmap
Kube-apiserver
这是管理员通常使用工具 kubectl
进行交互的 API Kubernetes 服务。
常用端口:6443 和 443,但在 minikube 中也有 8443 和 8080 作为不安全端口。
查看以下页面以了解如何获取敏感数据并执行与此服务相关的敏感操作:
Kubernetes EnumerationKubelet API
此服务在集群的每个节点上运行。它是控制节点内部pod的服务。它与kube-apiserver进行通信。
如果您发现此服务暴露,您可能发现了未认证的 RCE。
Kubelet API
如果响应是 Unauthorized
,则需要进行身份验证。
如果您可以列出节点,则可以使用以下命令获取 kubelets 端点列表:
kubelet(只读)
etcd API
Tiller
您可以滥用此服务在Kubernetes内部提升权限:
cAdvisor
用于收集指标的服务。
NodePort
当一个端口通过 NodePort 在所有节点上暴露时,所有节点上的相同端口都会打开,将流量代理到声明的 Service。默认情况下,这个端口将在 30000-32767 范围内。因此,新的未检查服务可能会通过这些端口访问。
漏洞配置
Kube-apiserver 匿名访问
不允许对 kube-apiserver API 端点进行匿名访问。但您可以检查一些端点:
检查 ETCD 匿名访问
ETCD 存储集群的机密、配置文件和更多 敏感数据。默认情况下,ETCD 不能 被 匿名访问,但检查一下总是好的。
如果 ETCD 可以被匿名访问,您可能需要 使用 etcdctl 工具。以下命令将获取所有存储的密钥:
Kubelet RCE
Kubelet 文档 解释说,默认情况下允许匿名访问该服务:
允许对 Kubelet 服务器的匿名请求。未被其他身份验证方法拒绝的请求被视为匿名请求。匿名请求的用户名为
system:anonymous
,组名为system:unauthenticated
要更好地理解 Kubelet API 的身份验证和授权工作原理,请查看此页面:
Kubelet Authentication & AuthorizationKubelet 服务 API 没有文档,但源代码可以在这里找到,找到暴露的端点就像 运行 一样简单:
所有这些听起来都很有趣。
您可以使用 Kubeletctl 工具与 Kubelet 及其端点进行交互。
/pods
此端点列出 pods 及其容器:
/exec
此端点允许非常轻松地在任何容器内执行代码:
为了避免此攻击,kubelet 服务应以 --anonymous-auth false
运行,并且该服务应在网络层面进行隔离。
检查 Kubelet(只读端口)信息泄露
当 kubelet 只读端口 被暴露时,未授权方可以从 API 中检索信息。该端口的暴露可能导致各种 集群配置元素 的泄露。尽管信息,包括 pod 名称、内部文件位置和其他配置,可能不是关键的,但其暴露仍然构成安全风险,应予以避免。
利用此漏洞的一个示例涉及远程攻击者访问特定 URL。通过导航到 http://<external-IP>:10255/pods
,攻击者可能会从 kubelet 中检索敏感信息:
参考文献
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
Last updated