blueteamvillage/btv-k8s-sandbox-infrastructure

GitHub: blueteamvillage/btv-k8s-sandbox-infrastructure

为 DEF CON 34 蓝队村 CTF 提供一键搭建的本地 Kubernetes 沙盒集群,集成运行时遥测与安全防护机制,供参赛者在隔离环境中部署并分析挑战。

Stars: 8 | Forks: 3

# DC34 K8s 沙盒 — 蓝队村 CTF 欢迎,防守者!本仓库用于快速搭建 **你即将参赛的本地 Kubernetes 沙盒**,用于 **DEF CON 34 蓝队村 CTF**(Project Obsidian)。只需一条命令,即可在你的笔记本电脑上构建一个独立的集群——包含运行时遥测和安全防护机制——在活动期间,CTF 挑战将直接部署到其中。 这里的任何操作都不会影响共享基础设施:整个环境都运行在你机器上的 VM 中,你可以随时将其暂停或清除。 ## 沙盒概览 ``` Your laptop └── Linux VM running Docker ← colima on macOS, Docker Desktop (WSL2) on Windows └── minikube cluster "dc34" ← single-node Kubernetes ├── Cilium ← CNI: pod networking + NetworkPolicy enforcement ├── Tetragon ← eBPF runtime observability (process/syscall events) ├── Kyverno ← policy engine enforcing the guardrails below └── metrics-server ← resource metrics for kubectl top / k9s ``` 作为参赛者,你需要关注的点: - **Tetragon** 会从每个工作负载中流式传输内核级事件(进程执行、网络连接)——这是你在分析挑战时可以进行追踪的遥测数据。 - **Kyverno + Cilium** 会限制挑战工作负载的权限:受限的 Pod 安全、默认拒绝网络策略和资源配额。你部署的任何可疑内容都会被限制在沙盒内部。 ## 环境要求 所有平台:需要为 VM 预留 **约 4 个 CPU 核心和 8 GB 内存**,约 20 GB 磁盘空间,并且需要 **一个 GitHub 账户** 以便在活动期间拉取挑战镜像(见下文)。 - **macOS** — [Homebrew](https://brew.sh);`make` 工作流会自动安装其他所有内容(参见 [`Brewfile`](Brewfile):minikube、kubectl、helm、helmfile、k9s、colima、docker CLI)。 - **Windows 10/11** — winget + Docker Desktop(WSL2 引擎);`windows\start.cmd tools` 会安装其他所有内容。参见 [`windows/README.md`](windows/README.md)。 - **Linux** — 除了 colima 之外,其他工具都是跨平台的。安装 `minikube`、`kubectl`、`helm` 和 `helmfile`,将 Docker 指向你的本地 daemon,然后运行相同的 `minikube start --profile dc34 --driver=docker --cpus=4 --memory=6144 --cni=cilium --addons=metrics-server`,接着执行 `helmfile sync`。如果遇到问题,请在 BTV Discord 中提问。 ## 快速开始 克隆仓库: ``` git clone https://github.com/blueteamvillage/btv-k8s-sandbox-infrastructure.git cd btv-k8s-sandbox-infrastructure ``` **macOS:** ``` make tools & make up ``` **Windows**(PowerShell 或 cmd — 完整指南见 [`windows/README.md`](windows/README.md)): ``` windows\start.cmd tools # once; then start Docker Desktop and open a new terminal windows\start.cmd up ``` 首次运行需要几分钟时间(VM 镜像、集群引导、Helm charts)。验证所有组件是否正常运行: ``` make status # Windows: windows\start.cmd verify kubectl --context dc34 get pods -A # everything Running/Completed ``` | macOS | Windows | 功能说明 | |---|---|---| | `make up` | `start.cmd up` | 启动 VM + 集群,部署沙盒技术栈。可安全重复运行。 | | `make status` | `start.cmd status` | 显示 VM 和集群健康状态。 | | — | `start.cmd verify` | 自动化健康检查(集群、节点、Tetragon、Kyverno)。 | | `make stop` | `start.cmd stop` | 暂停集群 — **状态会被保留**,执行 `up` 会从中断处恢复。 | | `make clean` | `start.cmd clean` | 销毁所有内容(macOS:包括 VM 磁盘)。完全重置。 | | `make tools` | `start.cmd tools` | 仅安装/更新 CLI 工具(Homebrew / winget)。 | ## 部署挑战 每个挑战都是 [`challenges/`](challenges) 中一个可直接应用的 manifest,并搭配了来自蓝队村 registry 的容器镜像(`ghcr.io/blueteamvillage/challenge-`)。每个 manifest 都是 **独立的** — 一次应用即可创建挑战的 namespace 及其 pod: ``` kubectl --context dc34 apply -f challenges/challenge-000.pod.yaml kubectl --context dc34 -n challenge-000 get pods ``` 然后深入分析证据: ``` # 在 pod 内部探查 kubectl --context dc34 -n challenge-000 exec -it challenge-000 -- sh # 或者将 artifacts 复制到你的机器 kubectl --context dc34 -n challenge-000 cp challenge-000:/forensics ./challenge-000-forensics ``` 两种类型的挑战: - **独立挑战**(`challenge-.pod.yaml`)— 每个都部署在其独立的 `challenge-` namespace 中。 - **Converged Frontier 场景**(`challenge-001-s-*.challenge.pod.yaml`)— 包含十个场景,每个场景都有 **`-beginner`** 和 **`-pro`** 两个变体;请选择适合你的赛道。它们共享 `converged-frontier` namespace,并且可以并行运行。 ### 移除挑战 ``` kubectl --context dc34 -n challenge-000 delete pod challenge-000 ``` `kubectl delete -f ` 也适用于独立挑战(它也会删除该挑战的 namespace),但**请勿对 Converged Frontier 文件使用此命令** — 这会删除共享的 `converged-frontier` namespace,并连带删除你正在运行的所有场景 pod。在这种情况下,请改为删除单个 pod。 ## 你可能会遇到的防护机制(它们是功能,不是 Bug) 沙盒经过了刻意的安全加固。如果一个 pod 无法调度或无法连接网络,很可能是因为以下原因: - **受限的 Pod 安全** — Kyverno 对所有工作负载强制执行 Kubernetes `restricted` Pod 安全标准。请求特权模式、host namespace、root 用户等的 Pod 会在**准入阶段被拒绝**。 - **默认拒绝网络策略** — 每个 namespace 都会自动配置拒绝所有 ingress *和* egress 的 NetworkPolicies。除非有策略明确允许,否则工作负载无法对外发起通信。 - **资源配额** — 每个 namespace 都会获得一个 ResourceQuota(最多 5 个 pod,2 CPU / 2 Gi 请求,4 CPU / 4 Gi 限制)和一个 LimitRange(容器默认为 500m / 512 Mi)。 Namespace 可以通过标签来豁免特定的防护机制 — 挑战 manifest 会在需要时设置这些标签,你在进行实验时也可以这样做: | Namespace 上的标签 | 效果 | |---|---| | `blueteamvillage.org/allow-inbound: "true"` | 跳过默认拒绝 **ingress** 策略 | | `blueteamvillage.org/allow-outbound: "true"` | 跳过默认拒绝 **egress** 策略 | | `blueteamvillage.org/disable-quotas: "true"` | 跳过 ResourceQuota | | `blueteamvillage.org/disable-limits: "true"` | 跳过 LimitRange | (`kube-system` 和 `kyverno` 不受上述所有限制。) ## 实用命令 ``` # Cluster 访问 — kubectl context 为 "dc34" kubectl --context dc34 get pods -A # 用于 cluster 的交互式 TUI (https://k9scli.io) k9s --context dc34 # 观察 Tetragon runtime 事件(进程执行、连接等) kubectl --context dc34 logs -n kube-system ds/tetragon -c export-stdout -f # 查看哪些 workloads 被 Kyverno policies 标记 kubectl --context dc34 get policyreports -A # 列出某个 namespace 中的活跃 guardrails kubectl --context dc34 get networkpolicy,resourcequota,limitrange -n ``` ## 故障排除 - **`up` 中途失败** — 该操作是幂等的;直接再次运行即可。`helmfile sync` 会从中断处继续执行。 - **Docker 命令连接到了错误的 daemon**(macOS)— 此设置使用了名为 `colima-dc34` 的 Docker context。`make` 会自动导出它;在普通的 shell 中,请手动运行 `docker context use colima-dc34`。 - **一切都很慢 / pod 被驱逐** — VM 分配了 8 GB 内存和 4 个 CPU。请关闭其他占用资源大的应用程序;如果你的机器还有余力,可以在 [`Makefile`](Makefile) 中调大这些数值。 - **出现奇怪且无法恢复的状态** — 执行 `clean` 然后再执行 `up`,只需几分钟就能获得一个全新的沙盒。 - **Windows 特定问题**(Docker Desktop、WSL2、Git Bash、执行策略)— 参见 [`windows/README.md`](windows/README.md#troubleshooting)。 ## 比赛结束后 - `make stop` / `windows\start.cmd stop` — 暂停沙盒并释放 CPU/RAM;你的集群状态会被保留。 - `make clean` / `windows\start.cmd clean` — 彻底删除集群(在 macOS 上还会删除 VM 及其磁盘)。 ## 获取帮助 你可以在 **蓝队村 Discord** 中找到我们,或者在村里的 BTV 工作人员处寻求帮助 — 我们非常乐意在 CTF 开始前帮助你把沙盒跑起来。祝你狩猎愉快! 🔵
标签:CTF基础设施, Libemu, 子域名突变, 本地沙箱, 环境部署, 网络策略, 请求拦截