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. ```
以 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 ```
## 仓库结构 ``` 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 节。_
标签:StruQ, Web截图, 子域名突变, 安全实验, 容器安全, 攻击与防御, 系统加固, 越狱测试