k8s的相关安全配置
k8s安全相关
主要参考以下链接 https://kubernetes.io/zh-cn/docs/concepts/security/cloud-native-security/
Control plane
| Protocol | Direction | Port Range | Purpose | Used By |
|---|---|---|---|---|
| TCP | Inbound | 6443 | Kubernetes API server | All |
| TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 10259 | kube-scheduler | Self |
| TCP | Inbound | 10257 | kube-controller-manager | Self |
| Although etcd ports are included in control plane section, you can also host your own etcd cluster externally or on custom ports. |
Worker node(s)
| Protocol | Direction | Port Range | Purpose | Used By |
|---|---|---|---|---|
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 10256 | kube-proxy | Self, Load balancers |
| TCP | Inbound | 30000-32767 | NodePort Services† | All |
外到内
k8s apiserver 8080端口未授权
k8s的apiserver默认配置位置为master主机上的/etc/kubernetes/manifests/kube-apiserver.yaml,常见配置问题为未授权 --insecure-port和--insecure-bind-address配置选项,可以通过http协议访问api-server,不需要配置认证用的证书。导致未授权访问,但该配置项已经在1.1.0版本中移除(部分版本只是将选项改为了–insecure-port=0以关闭,但仍然可以手动开启)。https://github.com/kubernetes/kubernetes/commit/2f175bc43279a1a4552610a42af0a006f4c6fba2
k8s kubelet 10250端口未授权
10250端口在node节点,用于接收k8s控制面发来的命令并控制当前node的pod等其他信息 k8s的kubelet默认配置位置为每个node主机上的/var/lib/kubelet/config.yaml,但这个配置文件并不导致未授权。 导致未授权的是匿名用户的开启,这个在RBAC用户规则里会有。
dashboard未授权
dashboard是k8s的相关组件,默认不安装,但安装后默认端口为8001,配置内容需要在相关pod中查看,参数为
- –enable-skip-login
- – insecure-bind-address=0.0.0.0
从 1.10.1 版本起,Dashboard 默认禁用了跳过按钮。
etcd 未授权
在master主机的/etc/kubernetes/manifests/etcd.yaml,默认端口为2379,默认监听127.0.0.1。如果开启了该选项 --listen-client-urls=0.0.0.0且未开启--client-cert-auth,则会由于无需使用认证证书从而造成未授权访问。 etcd 用于存储K8s集群中的所有配置数据和状态信息,如果管理员配置不当,导致etcd未授权访问的情况,那么攻击者就可以从etcd中获取secrets&token等关键信息,进而通过kubectl创建恶意pod从而接管集群。
ingress相关
ingress策略默认配置存在问题,当有一台内网机器与node节点在同一内网时,可以利用route add命令将node主机当作网关,而service的IP网段作为目的网段添加到路由里,那么可以通过该路由访问内部服务 但该条件限制太大,无法广泛利用
内部到外(pod到node到master逃逸方式)
docker相关漏洞
内核漏洞
由于宿主机和容器共用同一个内核,所以内核出现问题则会导致可以直接逃逸到宿主机。
pod安全配置
此处为最最重量级的内容,pod大部分逃逸问题都是通过由于各种各样原因的不安全配置导致的。
特权容器
配置危害
特权容器是危害最大的配置情况,如果配置了该项,则大部分pod逃逸都可以生效。
官方要求
官方对此的要求是不允许配置为特权容器。
配置内容
1 | apiVersion: v1 |
敏感目录挂载
主要注意下面几个目录:/、/etc
proc目录挂载
共享命名空间
配置危害
该配置可以通过符号链接来影响主机文件,但大部分情况下都是通过和其他配置配合才能达到逃逸效果。
在docker使用net=host参数启动、与宿主机共享net namespace时,其中的unix socket可以被容器内部访问到,容器中攻击者通过该socket可以通过API控制下游runc进程启动新的恶意镜像,并通过该镜像逃逸。(如CVE-2020-15257)
或者通过存在sys_ptrace的容器进行进程注入(进程注入,cdk run check-ptrace)
官方要求
官方要求不允许开启此配置
配置内容
和上一个配置项一样,
capabilities
污点配置
内到内(横向移动)
RBAC安全配置
遇到的坑
遇到加入节点失败,需要编辑/etc/fstab,将最后一行的swap注释掉后重启,即可使用master的join命令 不要使用minikube等快速搭建的工具,这些工具用的是docker里起docker的技术,部分漏洞可能无法复现(如/proc相关)
- 本文作者: Sn1pEr
- 本文链接: https://sn1per-ssd.github.io/2024/09/09/k8s安全配置及其危害/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
