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 来同步部署。这是模拟“安全基线被破坏”的标准流程。
- 创建 Git 仓库目录结构:
insecure-app/ ├── deployment.yaml └── kustomization.yaml - 创建 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 - 执行同步:
argocd app sync vulnerable-app
同步成功后,Argo CD 会将不安全应用部署到集群。此时,集群的安全基线已被破坏,攻击面显著扩大。
4.4 不安全应用的攻击路径图
下图展示了攻击者如何利用上述配置漏洞,从容器内部逐步渗透到宿主机乃至整个集群。
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 可以集成这些策略引擎,在同步前自动验证清单合规性。