
30 天的攻防演練凝縮成一張矩陣——每個攻擊都有對應的偵測和防禦。
完成本日實作後,你將能夠:
本篇是 30 天攻防的完整對照矩陣。建議的最低閱讀量:
| 等級 | 天數 | 內容 |
|---|---|---|
| 必備 | Day 1 | ATT&CK 概念 + 10 戰術概覽 |
| 建議 | Day 24 | Kill Chain(35 場景端到端演練的成果) |
| 建議 | Day 25–27 | Falco + Tetragon + 策略引擎(理解偵測和防禦工具) |
| 可跳過 | Day 2–23 | 各場景細節(本篇會彙整所有場景的攻防對照) |
快速路徑:如果時間有限,至少讀完 Day 1 → 24 → 本篇,即可掌握全局攻防視圖。
ATT&CK 描述攻擊者「做了什麼」,D3FEND 描述防禦者「該怎麼回應」。兩者結合,才是完整的攻防視圖。
MITRE ATT&CK for Containers 是專門針對容器環境的攻擊知識庫。KOAD 覆蓋了全部 10 個戰術、28 個技術:

D3FEND 是 MITRE 的防禦知識庫,定義了七大防禦戰術:
| D3FEND 戰術 | 說明 | 對應階段 | KOAD 實例 |
|---|---|---|---|
| Model | 建立威脅模型 | Build | 本篇的攻防矩陣 |
| Harden | 強化系統配置 | Deploy | PSS、RBAC、etcd 加密 |
| Detect | 偵測攻擊行為 | Runtime | Falco、Audit Log |
| Isolate | 隔離受影響範圍 | Runtime | NetworkPolicy、gVisor |
| Evict | 驅逐攻擊者 | Runtime | Falco Talon Terminate |
| Restore | 恢復正常服務 | Operate | Velero 備份、ArgoCD |
| Deceive | 欺騙攻擊者(蜜罐) | Runtime | 未實作(進階方向) |
每個 D3FEND 戰術下有具體的防禦技術。KOAD 使用的 D3FEND 技術:
| D3FEND ID | 技術名稱 | KOAD 實作 |
|---|---|---|
| D3-ACL | Access Control List | NetworkPolicy |
| D3-MAC | Mandatory Access Control | AppArmor |
| D3-SCA | System Call Analysis | Falco、Tetragon |
| D3-FE | File Encryption | etcd EncryptionConfig |
| D3-BA | Behavioral Analysis | Falco 規則 |
| D3-SPP | System Call Filtering | seccomp profile |
| D3-OSM | Operating System Monitoring | Audit Log |
| D3-NI | Network Isolation | NetworkPolicy |
每一項 D3FEND 技術都能對應到具體的合規標準和 KOAD 實作。以下逐一拆解:
D3-ACL — Access Control List(存取控制清單)
default-deny-all 作為基線# D3-ACL 實作範例:阻擋 Metadata API
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: block-metadata
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except: [169.254.169.254/32]
D3-MAC — Mandatory Access Control(強制存取控制)
D3-SCA — System Call Analysis(系統呼叫分析)
D3-FE — File Encryption(檔案加密)
# D3-FE 實作範例:etcd 加密配置
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources: [secrets]
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-key>
- identity: {}
D3-BA — Behavioral Analysis(行為分析)
D3-SPP — System Call Filtering(系統呼叫過濾)
D3-OSM — Operating System Monitoring(作業系統監控)
D3-NI — Network Isolation(網路隔離)
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S01 | T1190 | SSRF → Metadata API | Harden | NetworkPolicy 阻擋 169.254.169.254 | Calico | Day 2-3 |
| S01 | T1190 | Detect | WAF 偵測 SSRF pattern | ModSecurity | Day 3 | |
| S02 | T1133 | kubelet 暴露 | Harden | anonymous-auth=false | kubelet config | Day 2-3 |
| S02 | T1133 | Detect | 連接埠掃描偵測 | Falco k8s_audit | Day 3 | |
| S03 | T1078 | kubeconfig 洩漏 | Harden | Bound Token + RBAC | K8s 原生 | Day 2-3 |
| S03 | T1078 | Detect | git-secrets / truffleHog | CI/CD | Day 3 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S04 | T1059 | Jupyter Shell | Detect | Shell 啟動偵測 | Falco S04 | Day 4-5 |
| S05 | T1609 | kubectl 控制叢集 | Harden | RBAC 最小權限 | K8s RBAC | Day 4-5 |
| S05 | T1609 | Detect | kubectl 執行偵測 | Falco S05 | Day 5 | |
| S06 | T1610 | 部署特權 Pod | Harden | Kyverno block-privileged | Kyverno | Day 5 |
| S07 | T1053 | CronJob 持久化 | Detect | CronJob 建立審計 | Audit Log | Day 4 |
| S08 | T1204 | 釣魚 Pod | Harden | 映像白名單 | Kyverno | Day 5 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S09 | T1098 | RBAC 竄改 | Detect | RBAC 變更審計 | Audit Log | Day 6-7 |
| S09 | T1098 | Evict | 移除惡意 ClusterRoleBinding | kubectl | Day 7 | |
| S10 | T1136 | 後門 SA | Detect | SA 建立審計 | Audit Log | Day 6-7 |
| S11 | T1543 | Sidecar 注入 | Detect | Webhook 配置監控 | Audit Log | Day 6 |
| S12 | T1525 | 映像植入 | Harden | Cosign 簽章 + Kyverno 驗簽 | Cosign | Day 7 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S13 | T1611 | Privileged mount | Harden | PSS Restricted | K8s 原生 | Day 8, 12 |
| S13 | T1611 | Detect | 特權容器偵測 | Falco S13 | Day 12 | |
| S14 | T1611 | Cgroup release_agent | Detect | cgroup 操作偵測 | Falco S14 | Day 9 |
| S15 | T1611 | Docker.sock | Harden | 禁止 hostPath | Kyverno | Day 10, 12 |
| S15 | T1611 | Detect | Docker socket 存取偵測 | Falco S15 | Day 10 | |
| S16 | T1611 | /proc core_pattern | Detect | core_pattern 修改偵測 | Falco S16 | Day 10 |
| S17 | T1611 | SYS_PTRACE | Harden | Drop ALL capabilities | PSS | Day 11, 12 |
| S17 | T1611 | Detect | ptrace 偵測 | Falco S17 | Day 11 | |
| S18 | T1611 | lxcfs | Detect | mknod 偵測 | Falco S18 | Day 9 |
| S19 | T1068 | Dirty Pipe CVE | Harden | gVisor 沙箱 | gVisor | Day 11, 13 |
| S19 | T1068 | Detect | exploit binary 偵測 | Falco S19 | Day 11 | |
| S19 | T1068 | Isolate | 核心隔離(獨立核心) | gVisor/Kata | Day 13 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S20 | T1612 | 宿主機建映像 | Detect | Docker build 偵測 | Falco S20 | Day 14 |
| S21 | T1070 | 清除痕跡 | Detect | 歷史檔刪除偵測 | Falco S21 | Day 14 |
| S21 | T1070 | Harden | 集中式日誌(不可刪) | Fluentd/Loki | Day 14 | |
| S22 | T1036 | 偽裝 kube-proxy | Detect | 異常 Pod 名稱比對 | Audit Log | Day 14 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S23 | T1685 | 停用安全工具 | Harden | RBAC 保護 falco/kyverno NS | K8s RBAC | Day 15 |
| S23 | T1685 | Detect | DaemonSet 刪除偵測 | Falco k8s_audit | Day 15 | |
| S23 | T1685 | Restore | 自動重建安全元件 | ArgoCD/Flux | Day 15 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S24 | T1110 | 暴力破解 | Detect | 暴力破解工具偵測 | Falco S24 | Day 16-17 |
| S24 | T1110 | Harden | 帳號鎖定 + 2FA | OIDC | Day 17 | |
| S25 | T1528 | 竊取 Token | Harden | 不在 env/ConfigMap 放 Token | Vault | Day 16-17 |
| S26 | T1552 | 明文憑證 | Harden | etcd 加密 + Vault | EncryptionConfig | Day 16-17 |
| S26 | T1552 | Detect | SA Token 讀取偵測 | Falco S26 | Day 17 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S27 | T1613 | 資源列舉 | Harden | RBAC 限制 list/get | K8s RBAC | Day 18 |
| S28 | T1046 | 網路掃描 | Detect | nmap 偵測 | Falco S28 | Day 18 |
| S28 | T1046 | Isolate | NetworkPolicy 限制通訊 | Calico | Day 18 | |
| S29 | T1069 | RBAC 探測 | Detect | auth can-i 審計 | Audit Log | Day 18 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S30 | T1550 | 跨 NS Token | Harden | automountSAToken=false | K8s 原生 | Day 19 |
| S30 | T1550 | Isolate | NetworkPolicy 跨 NS 限制 | Calico | Day 19 | |
| S30 | T1550 | Detect | 跨 NS 存取審計 | Audit Log | Day 19 |
| KOAD | ATT&CK | 攻擊 | D3FEND | 防禦 | 工具 | 天數 |
|---|---|---|---|---|---|---|
| S31 | T1485 | 資料破壞 | Harden | PDB + RBAC 限 delete | K8s 原生 | Day 20-21 |
| S31 | T1485 | Restore | Velero 備份恢復 | Velero | Day 21 | |
| S32 | T1499 | Resource Bomb | Harden | ResourceQuota + LimitRange | K8s 原生 | Day 20-21 |
| S32 | T1499 | Detect | stress 工具偵測 | Falco S32 | Day 21 | |
| S33 | T1490 | 阻止恢復 | Harden | 異地備份 + RBAC 保護 | S3/GCS | Day 21 |
| S34 | T1498 | 網路 DoS | Isolate | NetworkPolicy | Calico | Day 20 |
| S35 | T1496 | 挖礦劫持 | Detect | 挖礦程式偵測 | Falco S35 | Day 20-21 |
| S35 | T1496 | Harden | 映像白名單 + CPU 監控 | Kyverno/Prometheus | Day 21 |

| 層級 | 防禦措施 | 覆蓋場景 |
|---|---|---|
| Cloud | IMDSv2, Workload Identity | S01 |
| Cluster | RBAC, Audit Log, etcd 加密 | S03, S05, S09, S10, S26 |
| Container | PSS, seccomp, AppArmor, gVisor | S13–S19 |
| Code | 映像掃描, 簽章, SBOM | S12, S23–S24 |
| Network | NetworkPolicy | S01, S28, S30, S34 |
| Runtime | Falco, Tetragon | 全部 35 場景 |
| 階段 | 措施 | 工具 | 覆蓋天數 |
|---|---|---|---|
| Build | 多階段建構 + Trivy 掃描 + Cosign 簽章 | Docker, Trivy, Cosign | Day 22-23 |
| Deploy | Kyverno 驗簽 + PSS + 映像白名單 | Kyverno, K8s PSS | Day 5, 12, 23 |
| Runtime | Falco 偵測 + NetworkPolicy + Tetragon | Falco, Calico, Tetragon | Day 25-27 |
| Operate | Audit Log + 備份 + CIS Benchmark | kube-bench, Velero | Day 26-27 |
| 指標 | 數字 | 備註 |
|---|---|---|
| 戰術覆蓋 | 10/10 (100%) | 完整覆蓋 Containers Matrix |
| 技術覆蓋 | 28/28 (100%) | 每個技術至少一個場景 |
| 場景總數 | 35 | 部分技術有多場景(如 T1611 有 7 個逃逸場景) |
| D3FEND 戰術 | 使用次數 | 覆蓋比例 |
|---|---|---|
| Harden | 18 | 51% |
| Detect | 20 | 57% |
| Isolate | 4 | 11% |
| Evict | 1 | 3% |
| Restore | 3 | 9% |
| Model | 1(本篇) | 3% |
| Deceive | 0 | 0%(進階方向) |
觀察:Harden 和 Detect 是主力,佔了防禦措施的 80%+。這符合業界實務——大部分安全投資應該放在「強化」和「偵測」。
| 空缺 | 說明 | 改善方向 |
|---|---|---|
| Deceive | 沒有蜜罐部署 | 部署 K8s honeypot(kubetrap) |
| Evict 自動化 | 只有手動驅逐 | Falco Talon 自動 Terminate |
| Restore 演練 | 備份有了但沒定期演練恢復 | 季度 DR 演練 |
不是所有防禦措施的投報率都一樣。以下從「部署成本」和「覆蓋場景數」兩個維度分析,幫你決定先投資什麼:
| 防禦措施 | 部署成本 | 覆蓋場景 | ROI 等級 |
|---|---|---|---|
| NetworkPolicy default-deny | 1 YAML | S01, S28, S30, S34(4 場景 + 間接影響全部) | ★★★★★ |
| RBAC 最小權限 | 配置變更 | S03, S05, S09, S27, S30(5+ 場景) | ★★★★★ |
| PSS Restricted | 1 Label | S13–S19(7 場景) | ★★★★★ |
| automountSAToken=false | 1 行 YAML | S25, S26, S30(3 場景 + 減少攻擊面) | ★★★★☆ |

| 防禦措施 | 部署成本 | 覆蓋場景 | ROI 等級 |
|---|---|---|---|
| Falco(基本規則) | Helm install | 20+ 場景偵測 | ★★★★☆ |
| Audit Log | API Server 配置 | S09–S11, S22, S29(5 場景) | ★★★☆☆ |
| Kyverno(7 策略) | Helm + 7 YAML | S06, S08, S12, S15(4 場景) | ★★★☆☆ |
| etcd 加密 | API Server 配置 | S26(1 場景但影響大) | ★★★☆☆ |
| 防禦措施 | 部署成本 | 覆蓋場景 | 為什麼仍需要 |
|---|---|---|---|
| gVisor | RuntimeClass + containerd 配置 | S19(核心隔離) | 唯一能防 0-day 核心漏洞的手段 |
| Cosign + Trivy | CI/CD 整合 | S12(映像植入) | 供應鏈攻擊防禦無替代品 |
| Falco Talon | 額外 Helm + 規則 | S23(自動回應) | 人工回應速度太慢 |
| Velero 備份 | Helm + S3 配置 | S31, S33(恢復) | 最後一道防線 |
Phase 1(第 1 天):NetworkPolicy + RBAC + PSS
↓ 覆蓋 16 場景,阻擋 80% 攻擊鏈
Phase 2(第 1 週):Falco + Audit Log + etcd 加密
↓ 新增偵測能力,覆蓋 25 場景
Phase 3(第 2 週):Kyverno + Cosign + Trivy
↓ Admission 控制 + 供應鏈安全
Phase 4(第 1 月):Tetragon + gVisor + Talon + Velero
↓ 進階防禦 + 自動回應 + 備份恢復
| 領域 | 權重 | 覆蓋天數 | 核心內容 |
|---|---|---|---|
| Cluster Setup | 15% | Day 2–3 | API Server + kubelet 強化 |
| Cluster Hardening | 15% | Day 6–7, 17 | RBAC + SA + Audit Log |
| System Hardening | 10% | Day 12–13 | seccomp + AppArmor + gVisor |
| Minimize Microservice | 20% | Day 8–13, 21 | PSS + 容器安全 + 資源限制 |
| Supply Chain Security | 20% | Day 22–23 | Cosign + Trivy + 映像策略 |
| Monitoring/Runtime | 20% | Day 25–27 | Falco + NetworkPolicy + CIS |
用這張矩陣做風險評估時,檢查你的環境:
對於每個 KOAD 場景:
□ 這個攻擊在我的環境中可行嗎?
□ 對應的 Harden 措施是否已部署?
□ 對應的 Detect 措施是否已設定?
□ 如果偵測到,回應 SOP 是否準備好?
不是所有場景都需要同等投入。根據風險和影響排序:
| 優先級 | 場景 | 原因 |
|---|---|---|
| P0 | S13-S19 容器逃逸 | 逃逸 = 控制整個 Node |
| P0 | S09 RBAC 竄改 | cluster-admin = 控制整個叢集 |
| P1 | S01 SSRF | 雲端 Metadata 洩漏 = 控制雲帳號 |
| P1 | S35 挖礦 | 直接經濟損失 |
| P2 | S20-S22 隱匿 | 延長攻擊者駐留時間 |
| P3 | S27-S29 偵察 | 攻擊鏈的前期階段,影響較小 |
將矩陣與合規框架交叉比對:
| 合規要求 | ATT&CK 場景 | KOAD 防禦 |
|---|---|---|
| PCI-DSS 要求 6.5 | T1190 SSRF | NetworkPolicy + WAF |
| SOC2 CC6.1 | T1078 憑證 | RBAC + Bound Token |
| HIPAA 164.312(a) | T1552 明文密碼 | etcd 加密 + Vault |
| ISO 27001 A.12.4 | 全部 | Audit Log + Falco |
| NIST 800-190 | Container 安全 | PSS + seccomp + AppArmor |
| CIS Benchmark | 叢集配置 | kube-bench 全部項目 |
SSRF (S01) → kubectl (S05) → Cryptominer (S35)
│ │ │
TA0001 TA0002 TA0040
Initial Execution Impact
Access
這是 KOAD 攻擊鏈中最短的路徑——只需要 3 步。前提是 Pod 的 SA 已有足夠權限。

| 防禦措施 | 阻斷步驟 | 效果 |
|---|---|---|
| NetworkPolicy (SSRF) | 步驟 1 | 攻擊鏈無法啟動 |
| RBAC 最小權限 | 步驟 2 | kubectl 無法操控叢集 |
| Audit Log 告警 | 步驟 3 | 偵測到 RBAC 竄改 |
| Kyverno Enforce | 步驟 4 | 特權 Pod 無法建立 |
| PSS Restricted | 步驟 5 | 逃逸無法執行 |
| NetworkPolicy (NS) | 步驟 6 | 橫向移動被阻擋 |
| Falco + Talon | 步驟 7 | 挖礦即時偵測和隔離 |
關鍵觀察:越早阻斷,成本越低、損害越小。NetworkPolicy 在步驟 1 就能終結整條鏈,是投資報酬率最高的防禦措施。
根據 KOAD 的實戰經驗,定義四個防禦成熟度等級:
□ RBAC 已配置(非 default SA cluster-admin)
□ NetworkPolicy default-deny 已部署
□ kubelet anonymous-auth=false
□ etcd 加密已啟用
覆蓋場景:S01–S03, S05, S26
驗證指令:
# 主機終端 — Level 1 驗證
# 檢查是否有 cluster-admin 綁定到 default SA
kubectl get clusterrolebindings -o json | \
jq '.items[] | select(.roleRef.name=="cluster-admin") |
.subjects[] | select(.name=="default")'
# 檢查 NetworkPolicy 是否存在
kubectl get networkpolicy -A | grep -c "deny"
# 檢查 kubelet 認證設定
ssh <node> "cat /var/lib/kubelet/config.yaml | grep anonymous -A1"
# 檢查 etcd 加密
kubectl get apiserver -o=jsonpath='{.items[0].spec.encryption}'
# 或直接驗證 Secret 在 etcd 中是否加密
ETCDCTL_API=3 etcdctl get /registry/secrets/default/test-secret | hexdump -C | head
□ Level 1 全部完成
□ Kyverno 7 條策略(至少 Audit 模式)
□ PSS Restricted 已設定
□ Falco 已部署(基本規則集)
□ Audit Log 已啟用
□ CIS Benchmark 掃描 FAIL < 5 項
覆蓋場景:+ S04–S19, S23
驗證指令:
# 主機終端 — Level 2 驗證
# 檢查 Kyverno 策略狀態
kubectl get cpol -o custom-columns=\
NAME:.metadata.name,\
MODE:.spec.validationFailureAction,\
READY:.status.conditions[0].status
# 檢查 PSS 標籤
kubectl get ns --show-labels | grep "pod-security.kubernetes.io"
# 檢查 Falco 是否運行
kubectl get pods -n falco -l app.kubernetes.io/name=falco -o wide
kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=5
# 檢查 Audit Log 配置
kubectl get pods -n kube-system kube-apiserver-* -o yaml | \
grep -A2 "audit-policy-file"
# CIS Benchmark 掃描
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
kubectl logs job/kube-bench | grep -c "\[FAIL\]"
□ Level 2 全部完成
□ Kyverno 切到 Enforce 模式
□ Falco 自訂規則覆蓋全部 KOAD 場景
□ Falco Talon 自動回應已配置
□ Tetragon TracingPolicy 已部署
□ 供應鏈安全(Cosign + Trivy)
□ IR SOP 已建立
覆蓋場景:+ S20–S35
驗證指令:
# 主機終端 — Level 3 驗證
# 確認 Kyverno 已切 Enforce
kubectl get cpol -o json | jq '.items[] |
select(.spec.validationFailureAction != "Enforce") | .metadata.name'
# 預期:空輸出代表全部 Enforce
# 列出自訂 Falco 規則數量
kubectl get configmap -n falco -l app.kubernetes.io/name=falco \
-o jsonpath='{.items[*].data}' | grep -c "rule:"
# 確認 Falco Talon 運行中
kubectl get pods -n falco -l app.kubernetes.io/name=falco-talon
# 確認 Tetragon TracingPolicy
kubectl get tracingpolicies -o name | wc -l
# 驗證 Cosign 簽章
cosign verify --key cosign.pub <your-image>:latest
# Trivy 掃描通過
trivy image --exit-code 1 --severity HIGH,CRITICAL <your-image>:latest
□ Level 3 全部完成
□ 季度 IR 演練
□ 攻擊模擬(紅隊/紫隊)
□ SIEM 整合 + 告警關聯
□ 自動化合規報告
□ Chaos Engineering 驗證防禦韌性
驗證指令:
# 主機終端 — Level 4 驗證
# 檢查 IR 演練記錄(假設用 ConfigMap 追蹤)
kubectl get configmap ir-drill-log -n security -o yaml
# 驗證 SIEM 整合(Falco → Elasticsearch/Splunk)
kubectl logs -n falco -l app.kubernetes.io/name=falco-sidekick --tail=5
# Chaos Mesh 已部署
kubectl get pods -n chaos-mesh
# 合規報告 CronJob
kubectl get cronjob -n security compliance-report
這張矩陣最大的價值不只是看,而是用來演練。以下是完整的 Purple Team 演練 SOP:
事前準備(D-7):
□ 確認 KOAD 環境可用(minikube status)
□ 確認 Falco / Kyverno / Tetragon 正常運行
□ 建立演練專用 Namespace(kubectl create ns drill-<date>)
□ 準備演練記錄模板(Google Sheet / Confluence)
□ 指定紅隊(1-2 人)和藍隊(1-2 人)角色
□ 設定演練時間窗口(建議 2-4 小時)
演練當天(D-Day):
□ 藍隊先確認監控基線(Falco 無 alert)
□ 紅隊按攻擊鏈順序執行(S01 → S05 → S09 → ...)
□ 藍隊即時監控 + 回應
□ 每個場景記錄:偵測?幾秒?誰回應?
Round 1:單步驟演練(初階)
逐一執行單一場景,驗證偵測能力:
# 紅隊:執行 S01 SSRF 攻擊
kubectl exec -n drill attacker -- \
curl -s http://169.254.169.254/latest/meta-data/
# 藍隊:檢查 NetworkPolicy 是否阻擋
kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=10 | \
grep -i "metadata"
# 記錄表格
# | 場景 | 攻擊成功? | 偵測到? | 偵測延遲 | 回應動作 | 結果 |
# | S01 | 否(被NP阻擋)| N/A | N/A | N/A | PASS |
Round 2:攻擊鏈演練(中階)
執行完整攻擊鏈,測試縱深防禦:
演練攻擊鏈路徑:
Step 1:S01 SSRF → 預期被 NetworkPolicy 擋住
Step 2:(繞過)直接 S05 kubectl → 預期被 RBAC 擋住
Step 3:(繞過)直接 S09 RBAC 竄改 → 預期被 Audit Log 偵測
Step 4:(繞過)直接 S13 特權逃逸 → 預期被 PSS 擋住
Step 5:(繞過)直接 S35 挖礦 → 預期被 Falco 偵測
每個步驟記錄:
- 阻擋層是否生效?
- 如果繞過,下一層是否接住?
- 最終落到哪一層才被擋住?
Round 3:假設淪陷演練(高階)
假設某些防禦已被繞過,測試深層防禦:

演練報告:KOAD Purple Team Drill #<N>
日期:YYYY-MM-DD
參與人員:紅隊 / 藍隊
1. 總覽
- 演練場景數:__ / 35
- 成功阻擋率:__%
- 平均偵測時間:__ 秒
2. 發現的防禦空缺
| 場景 | 預期防禦 | 實際結果 | 根因 | 修復方案 | 負責人 | 期限 |
3. 改善行動項
- [ ] 修復項 1 — 預計完成日期
- [ ] 修復項 2 — 預計完成日期
4. 下次演練重點
- 聚焦本次失敗的場景
- 新增哪些攻擊手法
理論再完整,不如動手驗證一次。以下是一個濃縮版演練——從攻擊矩陣中各挑一個代表場景,逐層驗證防禦。
# 主機終端 — 快速檢查 KOAD 三大防禦元件
echo "=== Kyverno ==="
kubectl get cpol --no-headers 2>/dev/null | wc -l
echo "=== Falco ==="
kubectl get pods -n falco -l app.kubernetes.io/name=falco --no-headers 2>/dev/null | grep -c Running
echo "=== NetworkPolicy ==="
kubectl get networkpolicy -n koad --no-headers 2>/dev/null | wc -l
預期結果:
=== Kyverno ===
7
=== Falco ===
1
=== NetworkPolicy ===
3
# 主機終端 — 嘗試在已啟用 PSS Restricted 的 namespace 建立特權 Pod
kubectl label namespace koad \
pod-security.kubernetes.io/enforce=restricted --overwrite 2>/dev/null
kubectl run matrix-test-privileged --image=busybox -n koad \
--overrides='{"spec":{"containers":[{"name":"test","image":"busybox",
"securityContext":{"privileged":true}}]}}' 2>&1
# 還原
kubectl label namespace koad pod-security.kubernetes.io/enforce- 2>/dev/null
預期結果:
Error from server (Forbidden): pods "matrix-test-privileged" is forbidden:
violates PodSecurity "restricted:latest"
Harden 層生效:PSS 在 Admission 階段阻擋了 S13–S18 所有需要特權的逃逸。
# 主機終端 — 在攻擊者 Pod 中觸發 Falco 規則
# 執行一個會觸發 Falco 的指令(讀取 SA Token)
kubectl exec -n koad $(kubectl get pods -n koad -l app=attacker -o name | head -1) -- \
cat /var/run/secrets/kubernetes.io/serviceaccount/token > /dev/null 2>&1 || true
# 等待 2 秒讓 Falco 處理
sleep 2
# 檢查 Falco 告警
kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=5 2>/dev/null | \
grep -i "token\|sensitive" | tail -2
預期結果(類似):
{"output":"Warning Sensitive file opened for reading by non-trusted program ...
(file=/var/run/secrets/kubernetes.io/serviceaccount/token ...)"}
Detect 層生效:Falco 即時偵測到 SA Token 讀取行為,對應 S25/S26 憑證竊取。
# 主機終端 — 驗證 NetworkPolicy 隔離效果
# 從 koad namespace 嘗試存取 kube-system 的服務
kubectl exec -n koad $(kubectl get pods -n koad -o name | head -1) -- \
timeout 3 wget -q -O- http://kube-dns.kube-system.svc:53 2>&1 || true
預期結果:
wget: download timed out
Isolate 層生效:NetworkPolicy 阻擋了跨 Namespace 通訊,S30 橫向移動被封鎖。
# 主機終端 — 一鍵防禦狀態總覽
echo "╔════════════════════════════════════════════════════╗"
echo "║ KOAD 攻防矩陣 — 防禦驗證結果 ║"
echo "╠════════════════════════════════════════════════════╣"
echo "║ Harden (PSS) : $(kubectl run pss-check --image=busybox -n koad --overrides='{"spec":{"containers":[{"name":"t","image":"busybox","securityContext":{"privileged":true}}]}}' 2>&1 | grep -q Forbidden && echo 'PASS' || echo 'FAIL')"
echo "║ Detect (Falco) : $(kubectl get pods -n falco -l app.kubernetes.io/name=falco --no-headers 2>/dev/null | grep -q Running && echo 'PASS' || echo 'FAIL')"
echo "║ Isolate (NetPol) : $(kubectl get networkpolicy -n koad --no-headers 2>/dev/null | grep -q . && echo 'PASS' || echo 'FAIL')"
echo "║ Kyverno : $(kubectl get cpol --no-headers 2>/dev/null | grep -q . && echo 'PASS' || echo 'FAIL')"
echo "╚════════════════════════════════════════════════════╝"
這個快速演練驗證了矩陣中四個 D3FEND 戰術(Harden / Detect / Isolate + Kyverno Admission)。完整演練請參考上方「紅藍對抗演練指南」的 Round 1–3 流程。
Enterprise Matrix 涵蓋所有平台(Windows、Linux、macOS、Cloud),有 14 個戰術和 200+ 個技術。Containers Matrix 是子集,專注於容器和 Kubernetes 環境,只保留 10 個戰術、28 個技術。差異在於 Containers Matrix 移除了不適用的技術(如 Registry Run Keys、DLL Injection),新增了容器特有的技術(如 T1611 Container Escape、T1610 Deploy Container)。KOAD 選擇 Containers Matrix 是因為它精確覆蓋了 K8s 的攻擊面,不多不少。
D3FEND 和 NIST CSF(Cybersecurity Framework)都是防禦框架,但抽象層級不同。NIST CSF 定義五大功能(Identify / Protect / Detect / Respond / Recover),更偏管理層面;D3FEND 定義七大戰術,更偏技術層面。兩者可以對照:
| NIST CSF | D3FEND | KOAD 對應 |
|---|---|---|
| Identify | Model | Day 28 攻防矩陣 |
| Protect | Harden | PSS / RBAC / etcd 加密 |
| Detect | Detect | Falco / Audit Log |
| Respond | Evict + Isolate | Talon / NetworkPolicy |
| Recover | Restore | Velero / ArgoCD |
按 Phase 1-4 順序(見「防禦投資 ROI 分析」)。如果只能做三件事:(1) NetworkPolicy default-deny — 一條 YAML 阻擋大部分橫向移動和 SSRF;(2) RBAC 最小權限 — 移除 default SA 不必要的權限;(3) PSS Restricted — 一個 label 阻擋全部容器逃逸。這三步幾乎零成本,卻覆蓋 16+ 個場景。
Falco 使用 eBPF 在 kernel 層攔截 syscall,規則數量對效能的影響遠小於你想像的。KOAD 的 26 條自訂規則在 4 核 / 8GB 的 Minikube 上只增加約 2-3% CPU 使用率。真正影響效能的是輸出量——如果規則太寬鬆(例如監控所有 open syscall),產生的 alert 量會壓垮 Falco Sidekick。建議:先用 priority: WARNING 以上的規則,穩定後再逐步加入 NOTICE 級別。詳見 Day 25 的規則設計原則。
可以,但需要加工。矩陣本身是技術對照表,合規報告還需要:(1) 證據截圖(kubectl 輸出、Falco alert 記錄);(2) 控制措施的有效性測試記錄;(3) 管理層級的風險評估。建議流程:用矩陣的合規對照表找到覆蓋範圍 → 用 kube-bench 產生 CIS 合規報告 → 用 Falco alert 作為偵測控制的證據 → 用演練記錄作為回應能力的證據。Day 27 的 CIS Benchmark 章節有完整的報告產出範例。
沒有直接影響,但長期而言是一個值得填補的空缺。Deceive(欺騙)的核心工具是蜜罐(honeypot),在 K8s 中可以用 kubetrap 或自建 honeypot Pod 來誘捕攻擊者。蜜罐的價值在於零誤報——正常使用者不會碰到蜜罐,所以任何觸發都是真實攻擊。部署方式:
# 蜜罐 Pod 範例(故意暴露高權限 SA)
apiVersion: v1
kind: Pod
metadata:
name: honeypot-db
namespace: production
labels:
app: mysql-backup
spec:
serviceAccountName: honeypot-sa
containers:
- name: trap
image: alpine:latest
command: ["sleep", "infinity"]
搭配 Falco 規則,任何 exec 到這個 Pod 的行為立刻觸發 CRITICAL 告警。這是 KOAD v2 的規劃方向之一。
| 考點 | 本日內容 | 覆蓋天數 | 權重 |
|---|---|---|---|
| ATT&CK 理解 | 10 戰術 × 28 技術 | Day 1, 28 | 概念基礎 |
| 分層防禦 | 4C 模型 | Day 28 | 架構思維 |
| NetworkPolicy | 矩陣中的 Isolate 措施 | Day 3, 19, 27 | 15% |
| RBAC | 矩陣中的 Harden 措施 | Day 5, 7, 17 | 15% |
| PSS/seccomp | 矩陣中的 Container 層 | Day 12–13 | 10%+20% |
| Falco | 矩陣中的 Detect 措施 | Day 25–26 | 20% |
| 供應鏈 | 矩陣中的 Code 層 | Day 22–23 | 20% |
這張矩陣是 KOAD 的核心產出——不只是一張表格,而是一個可操作的防禦框架。
明天 Day 29 進入 Incident Response——當 Falco 告警響起的 SOP。