前言
作为云原生管理与编排系统的代表,Kubernetes(简称K8S)正受到越来越多的关注,有报告[1]显示,96% 的组织正在使用或评估
K8S,其在生产环境下的市场占有率可见一斑。
K8S 的功能十分强大,其系统复杂性也同样较高,一般而言,程序越复杂则越容易存在安全问题,自然而然地,K8S 集群也同样面临着严重的安全威胁,如 K8S
组件的未授权访问、容器逃逸和横向攻击等。我们说攻和防是相互促进、相伴而生的,作为相关安全人员首先应该从整体上把握业务架构可能面临的安全威胁才有可能做好防护。
本文就以攻击者的视角来聊一聊在 K8S 集群架构下可能存在哪些可攻击的点。
根据以往的渗透测试经验,我们梳理了 K8S 集群架构下可能存在的安全问题,并在如图1的 K8S 集群基础架构图中标注了潜在的攻击点:
图1- K8S集群攻击点
本文将从图 1 出发,在介绍图中标注的攻击点的同时,总结一些在对 K8S 集群进行实际渗透测试的过程中常用的攻击方法。
本文共分为上、下两篇,本篇为上篇,主要介绍对 K8S 组件、节点对外服务、业务 pod
的攻击,以及容器逃逸,即对应图1的攻击点1~7。其余内容将在下篇介绍。
K8S集群攻击点(1~7)
1. 攻击点 1~4:攻击K8S组件
K8S 组件的问题主要是指各组件的不安全配置,攻击点1~4罗列了4个比较有代表性的组件问题,即 API Server 未授权访问、etcd
未授权访问、kubelet 未授权访问、kube-proxy 不安全配置。
除此之外,还有很多组件都存在着类似的安全问题,比如 dashboard、docker 等组件也存在未授权访问的隐患,这些都是 K8S
集群的重要系统组件,一旦被攻击成功,都是可以直接获得相应集群、节点或容器的权限的。
表1搜集了各个组件存在隐患的默认端口,供参考:
组件名称
|
默认端口
—|—
api server
|
8080/6443
dashboard
|
8001
kubelet
|
10250/10255
etcd
|
2379
kube-proxy
|
8001
docker
|
2375
kube-scheduler
|
10251
kube-controller-manager
|
10252
表1- K8S 各组件默认端口
2. 攻击点5:攻击节点对外服务
除了正常的对外业务,可能还会有一些“隐藏”的对外开放服务,这些服务本不该暴露