K8S 中对 Windows 节点的利用

目录

漏洞概述

漏洞详情

​编辑

漏洞验证

补丁分析

在集群中探索

参考资料


在许多组织中,所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式,从而简化了 DevOps 实践,令 Windows 应用程序同样遵从云原生模式,实际生产中存在很多这样的混合集群。

K8S后渗透横向节点与持久化隐蔽方式探索

K8S API访问控制之RBAC利用 

之前两篇有关 K8S 的文章👆(点击文章查看),分别探索了对于 K8S 本身功能的利用、多种不同 RBAC 权限的利用,但是对于集群中 Windows 节点的情况下并未去研究,刚好近期 K8S 的一些漏洞是针对 Windows 节点。

漏洞概述

近期 kubernetes 中发现了漏洞 CVE-2023-3676,该漏洞可在集群中的 Windows 节点上创建 pod,并在节点上提权到管理员权限。 

受影响的版本:

  • • kubelet <= v1.28.0

  • • kubelet <= v1.27.4

  • • kubelet <= v1.26.7

  • • kubelet <= v1.25.12

  • • kubelet <= v1.24.16

漏洞详情

该漏洞是一个典型的命令注入,由于节点上运行的 kubelet 是由本地最高权限即管理员权限,通过创建 pod 使用 kubelet 的权限以达到提权。

命令注入就是将用户提交的数据未经过滤或者过滤不严格,通过拼接将参数传入调用系统命令的函数调用处。

用户在集群中创建 pod 时,可以在主机和 pod 之间创建共享目录就是卷,卷主要用来多个 pod 共享文件,或者持久化容器生命周期内创建或修改的文件。

在 pod

### Kubernetes 双主节点架构设置与 Host Key Verification Failed 问题解决方案 #### 1. **Kubernetes 双主节点架构概述** 在高可用 (High Availability, HA) 架构下,通常需要部署两个或更多的主节点以确保集群的稳定性。双主节点架构可以通过以下组件实现: - 使用负载均衡器(如 Keepalived 或 MetalLB)分配流量至多个主节点- 部署 etcd 集群用于分布式存储元数据。 - 启用 kube-apiserver 的健康检查功能以支持动态切换。 以下是具体的配置方法[^2]: --- #### 2. **双主节点架构的具体配置** ##### 2.1 主机命名与 hosts 文件配置 为了便于识别各节点角色,需统一修改主机名并通过 `/etc/hosts` 实现基于主机名的解析。 ```bash # 修改主机名 hostnamectl set-hostname k8s-master1 && bash hostnamectl set-hostname k8s-master2 && bash hostnamectl set-hostname k8s-node1 && bash hostnamectl set-hostname k8s-node2 && bash # 编辑 /etc/hosts 文件 vi /etc/hosts ``` 添加如下内容: ```plaintext 192.168.145.153 k8s-master1 192.168.145.154 k8s-master2 192.168.145.155 k8s-node1 192.168.145.156 k8s-node2 ``` --- ##### 2.2 配置无密码 SSH 登录 为了避免每次操作都需要输入密码,可启用 SSH 密钥认证并分发公钥到其他节点。 ```bash # 生成密钥对 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 将公钥复制到各个节点 ssh-copy-id k8s-master1 ssh-copy-id k8s-master2 ssh-copy-id k8s-node1 ssh-copy-id k8s-node2 ``` 注意:如果出现 `Host key verification failed` 错误,请参见下一节解决办法。 --- ##### 2.3 时间同步 为防止时间不同步引发问题,可在所有节点安装 NTP 并同步时间。 ```bash yum install ntpdate -y ntpdate time.windows.com ``` --- ##### 2.4 关闭防火墙和 SELinux 关闭不必要的安全防护措施以简化调试过程。 ```bash # 停止并禁用防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭交换分区 swapoff -a sed -i '/swap/d' /etc/fstab # 禁用 SELinux sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config setenforce 0 ``` --- ##### 2.5 配置 etcd 高可用集群 etcd 是 Kubernetes 存储核心数据的关键组件,推荐将其独立部署成三节点集群以提高可靠性。 ```yaml # 创建 etcd 配置文件 cat <<EOF | tee /etc/systemd/system/etcd.service [Unit] Description=etcd After=network.target [Service] Type=simple ExecStart=/usr/local/bin/etcd \ --data-dir=/var/lib/etcd \ --name=$(hostname) \ --initial-advertise-peer-urls=http://$(hostname):2380 \ --listen-peer-urls=http://0.0.0.0:2380 \ --advertise-client-urls=http://$(hostname):2379 \ --listen-client-urls=http://0.0.0.0:2379 \ --initial-cluster-token=etcd-cluster-1 \ --initial-cluster=k8s-master1=http://k8s-master1:2380,k8s-master2=http://k8s-master2:2380 \ --initial-cluster-state=new Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF ``` 启动服务: ```bash systemctl daemon-reload systemctl start etcd systemctl enable etcd ``` --- ##### 2.6 配置 kube-apiserver 负载均衡 使用 Keepalived 和 haproxy 提供 VIP 支持,使外部请求能均匀分布到两台主节点上。 **Keepalived 配置示例**: ```plaintext vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 192.168.145.200 } } ``` **haproxy 配置示例**: ```plaintext frontend k8s-api bind *:6443 mode tcp default_backend k8s-masters backend k8s-masters mode tcp balance roundrobin server master1 192.168.145.153:6443 check server master2 192.168.145.154:6443 check ``` --- #### 3. **解决 Host Key Verification Failed 问题** 当尝试通过 SSH 连接到某台服务器时,若其 ECDSA 公钥已变更而本地启用了严格模式 (`StrictHostKeyChecking=yes`),则会出现此错误[^1]。 解决方法如下: 1. 删除旧有记录: ```bash ssh-keygen -f "/root/.ssh/known_hosts" -R "192.168.55.187" ``` 2. 手动编辑 known_hosts 文件: 若无法直接运行命令,可通过文本编辑器打开 `/root/.ssh/known_hosts`,找到对应的 IP 行并删除。 3. 自动化脚本清理: 利用循环批量处理多台主机: ```bash for ip in $(cat ips.txt); do ssh-keygen -f "/root/.ssh/known_hosts" -R "$ip"; done ``` --- #### 4. **总结** 通过合理规划主节点职责分工以及引入必要的辅助工具和服务,可以构建稳定高效的 Kubernetes 双主节点架构。针对常见的 SSH 认证失败现象,采取及时更新本地缓存的方式即可轻松应对。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值