4. 部署一个不安全的应用:创建包含安全漏洞的 Deployment

在云原生环境中,安全基线是防御的第一道防线。然而,许多团队为了快速交付或调试便利,无意中引入了严重的安全漏洞。本章将模拟一个典型的“不安全应用”部署场景,通过 Argo CD 将其部署到 Kubernetes 集群,为后续的自动化回滚与故障自愈奠定基础。

⚠️ 安全警示: 以下示例仅用于教学演示,展示常见的安全配置错误。切勿在生产环境中使用特权容器、hostPath 挂载或 hostNetwork 等高风险配置。

4.1 不安全应用的典型特征

一个“不安全”的 Kubernetes Deployment 通常包含以下一种或多种高危配置。这些配置会显著扩大攻击面,使容器逃逸、主机提权、敏感数据泄露等攻击成为可能。

安全漏洞类型 配置示例 风险描述
特权容器 securityContext.privileged: true 容器拥有宿主机 root 权限,可操作所有内核功能,极易被用于容器逃逸。
hostPath 挂载 volumes[].hostPath.path: /var/log 容器可直接读写宿主机文件系统,攻击者可篡改系统文件或窃取敏感数据。
hostNetwork spec.hostNetwork: true 容器直接使用宿主机网络栈,可监听宿主机端口,绕过网络策略隔离。
容器以 root 运行 securityContext.runAsUser: 0 容器进程以 root 身份运行,即使没有特权模式,也可能通过漏洞获得主机权限。
挂载 Docker Socket hostPath.path: /var/run/docker.sock 容器可直接控制宿主机 Docker 守护进程,实现完全的容器逃逸。

4.2 创建包含安全漏洞的 Deployment 清单

以下 YAML 清单定义了一个名为 vulnerable-app 的 Deployment。它同时包含了特权容器、hostPath 挂载和以 root 运行三个高危配置,是一个典型的不安全应用示例。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vulnerable-app
  namespace: security-demo
  labels:
    app: vulnerable-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vulnerable-app
  template:
    metadata:
      labels:
        app: vulnerable-app
    spec:
      hostNetwork: true
      containers:
      - name: app
        image: nginx:latest
        securityContext:
          privileged: true
          runAsUser: 0
        ports:
        - containerPort: 80
        volumeMounts:
        - name: host-log
          mountPath: /mnt/host-log
        - name: docker-socket
          mountPath: /var/run/docker.sock
      volumes:
      - name: host-log
        hostPath:
          path: /var/log
          type: Directory
      - name: docker-socket
        hostPath:
          path: /var/run/docker.sock
          type: Socket
🔍 漏洞分析:
  • privileged: true — 容器拥有所有 Linux 内核能力,可以挂载设备、加载内核模块、修改系统时间等。
  • hostNetwork: true — 容器直接暴露在宿主机网络命名空间,可监听宿主机所有端口。
  • runAsUser: 0 — 容器进程以 root 身份运行,即使没有特权模式,也能执行大部分系统调用。
  • hostPath 挂载 /var/log — 攻击者可以读取或篡改宿主机系统日志,掩盖攻击痕迹。
  • 挂载 Docker Socket — 攻击者可以通过 Docker API 在宿主机上创建任意容器,实现完全逃逸。

4.3 通过 Argo CD 部署不安全应用

我们将上述清单提交到 Git 仓库,并配置 Argo CD Application 来同步部署。这是模拟“安全基线被破坏”的标准流程。

  1. 创建 Git 仓库目录结构:
    insecure-app/
    ├── deployment.yaml
    └── kustomization.yaml
  2. 创建 Argo CD Application 定义:
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: vulnerable-app
      namespace: argocd
    spec:
      project: default
      source:
        repoURL: 'https://github.com/your-org/insecure-app.git'
        path: insecure-app
        targetRevision: HEAD
      destination:
        server: 'https://kubernetes.default.svc'
        namespace: security-demo
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
  3. 执行同步:
    argocd app sync vulnerable-app

同步成功后,Argo CD 会将不安全应用部署到集群。此时,集群的安全基线已被破坏,攻击面显著扩大。

4.4 不安全应用的攻击路径图

下图展示了攻击者如何利用上述配置漏洞,从容器内部逐步渗透到宿主机乃至整个集群。

不安全应用攻击路径图 不安全应用攻击路径图 攻击者 特权容器 (privileged: true) 挂载 Docker Socket hostPath 挂载 /var/log 宿主机沦陷 攻击者通过特权容器 → Docker Socket 或 hostPath → 宿主机沦陷 → 横向移动至整个集群

4.5 安全基线检查清单

在部署任何应用到生产环境之前,建议对照以下清单进行安全基线检查。本课程后续章节将演示如何通过 Argo CD 和策略引擎自动执行这些检查。

检查项 合规要求 违规后果
privileged 容器 禁止设置为 true 容器逃逸,主机权限丢失
hostPath 挂载 禁止挂载敏感路径(/var/log, /etc, /root 等) 文件系统篡改,敏感数据泄露
hostNetwork 禁止使用 网络策略绕过,端口监听
容器运行用户 禁止以 root (UID 0) 运行 提权攻击,系统调用滥用
Docker Socket 挂载 禁止挂载 完全容器逃逸,宿主机控制权丢失
Linux Capabilities 仅保留必要能力,禁止 ALL 内核功能滥用,权限提升
💡 最佳实践: 使用 Pod Security Standards (PSS) 或 Open Policy Agent (OPA) 在 Admission 阶段拦截不安全配置。Argo CD 可以集成这些策略引擎,在同步前自动验证清单合规性。

4.6 本章小结