default-cybe/k8s-guard
GitHub: default-cybe/k8s-guard
一套面向 CMU 信息保障课程的 Kubernetes 安全实验环境,串联 LFI 利用、SA Token 窃取、特权提升的攻击链,并配套 Falco 检测和 NSA/CISA 加固方案。
Stars: 0 | Forks: 0
# K8s-Guard
为卡内基梅隆大学的 **14-761 应用信息保障**
(Matt Kaar 教授) 课程而构建。主题 2:*基于 NSA/CISA Kubernetes 加固指南,检测与监控 Kubernetes 中的威胁,并将数据导入 Security Onion。*
## 本实验教授的内容
学生将从四个视角,端到端地完整走一遍漏洞利用路径:
1. **攻击** — 将 Web 应用的本地文件包含漏洞转化为窃取 Kubernetes service-account token,使用该 token 连接 API server,发现过度授权的 `cluster-admin` 绑定,部署特权 pod,并逃逸到宿主机以获取 flag。
2. **检测** — 切换到防御者视角。使用两个遥测数据流在 Security Onion
(Kibana) 中调查攻击:Kubernetes 审计日志 (API 活动)
和 Falco 运行时警报 (容器内的 syscalls)。
3. **加固** — 使用最小权限 RBAC 和 Pod Security Standards 进行补救,
映射到 NSA/CISA Kubernetes 加固指南 v1.2。
核心教训:**配置错误而非零日漏洞才是 K8s 的头号攻击向量** — 即使应用程序仍然存在漏洞,正确的控制措施也能限制其爆炸半径。
## 攻击链
```
┌──────────────────────────────────────────────────┐
│ THREE CHAINED MISCONFIGS │
│ (1) LFI (2) RBAC=cluster-admin (3) no PSS │
└──────────────────────────────────────────────────┘
VM3 Kali VM2 Worker (webapp) VM1 Master (API) VM2 Worker (host)
192.168.50.20 192.168.50.11:30270 192.168.50.10:6443
│ │ │ │
│ curl /read?file= │ │ │
│ ...serviceaccount/ │ │ │
│─────token────────────▶│ │ │
│◀──── JWT token ───────│ │ │
│ │ kubectl --token=$TOKEN │ │
│──────────────────────────────────────────────── ▶│ get nodes / RBAC │
│ │ found: ClusterRoleBinding vuln-sa-admin │
│ │ = cluster-admin │ │
│ kubectl apply -f pwned.yaml (privileged pod) │ │
│──────────────────────────────────────────────── ▶│─── schedule ──────▶│
│ kubectl exec pwned -- cat /host/root/flag/proof.txt │
│──────────────────────────────────────────────────────────────────────▶│
│◀──────────── FLAG{k8s_privilege_escalation_successful} ──────────────│
LFI opens the door → RBAC gives the keys → no PSS lets you walk out.
```
## 仓库结构
```
k8s-guard/
├── README.md ← you are here
├── docs/ ← original source material (unmodified)
│ └── K8s_Guard_Full_Project_Documentation.md
├── manifests/ ← vulnerable-cluster Kubernetes YAML
│ ├── 00-namespace.yaml vuln-app namespace (no PSS = Vuln 3)
│ ├── 01-serviceaccount-vuln-sa.yaml vuln-sa service account (token target)
│ ├── 02-clusterrolebinding-vuln-sa-admin.yaml vuln-sa → cluster-admin (Vuln 2)
│ ├── 03-webapp-pod.yaml Internal Document Portal w/ LFI (Vuln 1)
│ └── 04-webapp-svc.yaml NodePort webapp-svc on 30270
├── attack/ ← attacker's perspective
│ ├── ATTACK.md numbered attack-chain walkthrough
│ └── pwned.yaml privileged attack pod
├── detection/ ← defender's perspective (Security Onion)
│ ├── DETECTION.md audit + Falco investigation guide
│ ├── k3s-audit-config.yaml K8s audit logging config (VM1)
│ ├── filebeat-vm1-audit.yml ships audit logs → Elasticsearch (redacted)
│ └── filebeat-vm2-falco.yml ships Falco alerts → Elasticsearch (redacted)
└── hardening/ ← remediation (NSA/CISA guide)
├── HARDENING.md 3 fixes mapped to NSA/CISA sections
├── hardened-role.yaml least-privilege Role (get/list pods)
├── hardened-rolebinding.yaml binds Role to vuln-sa (namespace-scoped)
└── namespace-hardened.yaml vuln-app + restricted PSS label
```
## 快速开始
- **攻击者:** 从 [`attack/ATTACK.md`](./attack/ATTACK.md) 开始 — 在 Kali 上按顺序执行的每一条
命令。
- **防御者:** 前往 [`detection/DETECTION.md`](./detection/DETECTION.md) —
如何在 Security Onion / Kibana 中发现攻击。
- **加固者:** 前往 [`hardening/HARDENING.md`](./hardening/HARDENING.md) —
三个修复措施及其对应的 NSA/CISA 映射。
- **完整背景:** [`docs/K8s_Guard_Full_Project_Documentation.md`](./docs/K8s_Guard_Full_Project_Documentation.md)。
## MITRE ATT&CK 映射
映射到实验攻击步骤的 MITRE ATT&CK for Containers 技术ID。
| 阶段 | 记录的操作 | 战术 | 技术 |
|---|---|---|---|
| 侦察 | LFI 通过 `/read?file=` 读取任意文件 | 初始访问 | T1190 Exploit Public-Facing Application |
| 侦察 | 从 `/var/run/secrets/.../token` 读取 SA token | 凭证访问 | T1552.001 Unsecured Credentials: Credentials In Files |
| 侦察 | `nmap -p 6443` 扫描 API server | 发现 | T1046 Network Service Discovery |
| 侦察 | 通过 kubectl 枚举 ClusterRoleBindings | 发现 | T1069.003 Permission Groups Discovery: Cloud Groups |
| 提权 | 使用窃取的 cluster-admin token 部署特权 pod | 权限提升 | T1611 Escape to Host |
| 提权 | hostPath `/` 挂载 + `hostPID`/`hostNetwork` | 权限提升 | T1610 Deploy Container |
| 提权 | 在容器内执行 `cat /etc/shadow` | 凭证访问 | T1003.008 OS Credential Dumping: /etc/passwd and /etc/shadow |
## 实验环境
最初构建并运行于 **CMU TopoMojo** (基于 VMware,隔离,无
互联网) 上,使用 **k3s** (轻量级 Kubernetes)。在隔离的
`192.168.50.0/24` 网络上有四台虚拟机:
| 虚拟机 | 角色 | IP | 操作系统 | 学生阶段 |
|---|---|---|---|---|
| VM1 | k3s master | 192.168.50.10 | Ubuntu 24 | 加固 |
| VM2 | k3s worker (webapp, Falco, flag) | 192.168.50.11 | Ubuntu 24 | — (禁止访问) |
| VM3 | 攻击者 | 192.168.50.20 | Kali Linux | 攻击 |
| VM4 | SIEM (Security Onion) | 192.168.50.30 | Security Onion | 检测 |
容器镜像 (`nginx`, `python:3.9-slim`) 已预缓存到 VM2 以支持
气隙运行;k3s 使用 `--flannel-iface=ens32` 以在没有
默认网关的情况下进行网络通信。
## 团队 — Cyber KAT
卡内基梅隆大学 · 14-761 应用信息保障 · 2026 春季
- **K**aivalya Ahir
- **A**arya Kale
- **T**winkle Kamdar
## 参考文献
- NSA & CISA. *Kubernetes Hardening Guide v1.2* (2022年8月)。
- CNCF *Annual Survey 2023*;Red Hat *State of Kubernetes Security 2024*。
- Falco、Kubernetes RBAC / Pod Security Standards、Security Onion 和 k3s 文档。
_完整引用请参见 `docs/K8s_Guard_Full_Project_Documentation.md` 第 14 节。_
以 Mermaid 呈现的相同图表
``` flowchart LR A[VM3 Kali\n192.168.50.20] -->|curl LFI /read?file=| B[VM2 webapp\n:30270] B -->|steals SA JWT token| A A -->|kubectl --token=$TOKEN| C[VM1 API server\n:6443] C -->|RBAC: vuln-sa-admin = cluster-admin| A A -->|apply pwned.yaml privileged pod| C C -->|schedules pod nodeName=worker| D[VM2 host] A -->|exec cat /host/root/flag/proof.txt| D D -->|FLAG| A ```标签:StruQ, Web截图, 子域名突变, 安全实验, 容器安全, 攻击与防御, 系统加固, 越狱测试