Kubernetes安全指南总结
1. Kubernetes简介
Kubernetes集群由控制平面和一组节点组成,控制平面负责管理节点和Pod,节点组件负责维护运行的Pod并提供Kubernetes运行环境。主要组件包括:
- 控制平面组件:kube-apiserver、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager、CoreDNS、WebUI(仪表板)
- 节点组件:Kubelet、kube-proxy、Container runtime、Network Plugins
2. Kubernetes安全风险
指南运用ATT&CK模型,从攻防双方视角分析针对Kubernetes各种弱点的攻击手法和防御手段,关注Kubernetes平台的攻防研究。攻击者可能通过以下方式入侵Kubernetes集群:
- 初始访问:凭证泄漏(kubeconfig文件、云凭证)、使用恶意镜像、存在漏洞的应用程序、暴露的敏感接口(Dashboard、APIServer、Docker Daemon、私有镜像等)
- 执行:在容器内执行命令(kubectl exec)、创建容器、使用带有SSH服务的容器、应用程序漏洞利用(RCE)、Sidecar注入、使用ServiceAccount连接APIServer
- 持久化:创建后门容器(DaemonSet、Deployments)、在已有权限的容器中植入后门、Kubernetes定时任务、在自定义镜像中植入后门、修改安全配置、部署ShadowAPIServer、创建和已有Pod名称相似的Pod
- 权限提升:利用特权容器提权、为普通用户添加高权限、为EKS添加高权限角色、使用容器里挂载的敏感目录逃逸到宿主机、利用内核漏洞逃逸到宿主机、利用Docker漏洞逃逸、利用Kubernetes漏洞进行提权、通过泄露的凭证信息提权
- 防御绕过:容器日志清理、Kubernetes event日志清理、部署ShadowAPIServer、通过匿名网络访问、修改请求来源的UA头、禁用安全产品、创建和已有Pod名称相似的Pod、Kubernetes审计日志绕过、在云厂商监控区域外进行攻击
- 凭证窃取:获取Kubernetes secret、获取kubeconfig、访问容器SA、利用Kubernetes准入控制器窃取信息、不安全的凭据(文件中的凭据、Kubernetes API)、窃取应用程序访问令牌、暴力破解(密码猜测、密码喷洒、撞库)
- 探测:访问KUBERNETES APIServer(8080端口未授权、6443端口未授权)、访问Kublet API、访问Kubernetes Dashboard、访问云厂商服务接口(实例元数据API)、访问私有镜像库、通过NodePort访问Service、权限组发现、网络服务发现、容器和资源发现
- 横向移动:Kubernetes内网横向访问、通过ServiceAccount访问Kubernetes API、通过第三方Kubernetes组件横向移动、窃取凭证攻击云资源、窃取凭证攻击其他应用、污点(Taint)横向渗透、通过Tiller服务账户进行横向渗透、CoreDNS投毒
- 影响:数据销毁、资源劫持(计算劫持、带宽劫持)、端点拒绝服务、网络拒绝服务、阻止系统恢复、数据窃取
3. Kubernetes风险检测防护
- 配置错误:IaC配置不当、集群组件配置不当、RBAC配置不当、缺失网络隔离控制、缺失日志和监控、缺失机密管理
- 漏洞风险:供应链漏洞(镜像完整性、已知软件漏洞)、Kubernetes组件漏洞(截至2024年12月的Kubernetes漏洞列表)
4. Kubernetes安全开源项目
- kube-bench:用于检查Kubernetes集群的安全配置是否符合CIS Kubernetes基准
- OPA:轻量级的通用策略引擎,可将OPA集成为Sidecar、主机级守护进程或库,将策略决策交给OPA执行
- CDK:零依赖的容器渗透开源工具集,集成了许多EXP和POC,方便人们对容器进行信息收集、权限维持、逃逸等多种攻击方法的利用
- Trivy:多功能的安全扫描器,支持大多数流行的编程语言、操作系统和平台的扫描,可扫描容器镜像、文件系统、Git存储库、虚拟机镜像、Kubernetes、AWS、正在使用的操作系统包和软件依赖关系(SBOM)、已知漏洞(CVE)、IaC问题和配置错误、敏感信息和秘密、软件许可证