SuperAPI AI 工具集

defending-kubernetes

部署与运维

查看项目

更新于 10-16 02:31

技能介绍

用途:本技能用于加固和监控 Kubernetes 集群,针对实际发生的攻击面,而非稀有漏洞。它是 attacking-eks-gke-aks 与 exploiting-containers 的防御对照。

主要能力与优先顺序:

  1. RBAC 最小权限:排查看似无害的权限升级原语。危险动作不只通配符;在命名空间内 create pods 可让主体以任意服务账号运行 Pod 并挂载任意 Secret,等同命名空间管理员;roles 上的 escalate 与 bind、pods/exec 的 create,以及 secrets、serviceaccounts/token、nodes/proxy 的访问都是升级路径。示例命令:kubectl auth can-i create pods --all-namespaces --as=system:serviceaccount:ns:sa;kubectl get clusterrolebindings -o json | jq '.items[] | select(.roleRef.name=="cluster-admin") | .subjects'。应枚举主体实际能力,而非角色名称。
  2. Pod Security Admission:PSP 已在 1.25 移除,改用内置 PSA,通过命名空间标签执行 privileged、baseline、restricted 三级(如 pod-security.kubernetes.io/enforce: restricted,配合 warn、audit)。restricted 可阻止 privileged 容器、host 命名空间、host-path 挂载、root 运行、添加 capability。超出三级的策略(镜像来源、仓库白名单)需外部准入控制器(Kyverno、OPA Gatekeeper)。
  3. 网络策略默认拒绝:默认所有 Pod 互通;每个命名空间设默认拒绝入站并显式放行,可阻止横向移动。需确认 CNI 真正执行策略,否则对象存在但无效更糟。
  4. 服务账号令牌与 Secrets:不调用 API 的 Pod 设 automountServiceAccountToken: false;Secret 未配置静态加密时在 etcd 中仅为 base64;检查是否以环境变量传入令牌和云凭证。
  5. 控制平面与 kubelet 暴露面:API server 不应在无认证授权与网络限制下暴露公网,匿名认证必须关闭;kubelet 只读端口 10255 与认证端口 10250 不应可被工作负载访问;etcd 必须启用双向 TLS。

检测:开启审计日志。多数集群缺乏有效审计策略,事后无法调查。高价值信号包括对 Pod 的 exec/attach/port-forward、大规模或集群范围读取 Secret、对 clusterrolebindings/rolebindings 的 create/update、创建带 privileged 或 host 命名空间或 host-path 的 Pod、匿名或 system:unauthenticated 请求成功、通过 TokenRequest API 创建令牌。托管集群审计日志会进入云日志平台(GKE→Cloud Audit Logs,EKS→CloudWatch,AKS→Azure Monitor)。

外部资料读取:可用 curl -sL "https://defuddle.md/<url>" 将公开公告、规范、厂商报告取为 Markdown,减少约 78% token 并返回全文。不适合 JSON/API 响应、需认证或 JS 渲染的页面,也不应路由对手基础设施、客户主机或演练 URL。部分站点返回错误块(如 {"error":"Failed to fetch: 418 I'm a teapot"}),那是抓取被拒而非来源不存在,应直接重新抓取。

适用场景:评审集群安全态势或准入/RBAC 配置;疑似入侵后的响应(分诊之后);决定强制执行什么(Pod Security、网络策略)与检测什么;将攻击发现转化为具体控制;加固控制平面、kubelet 或 etcd 暴露面。

限制与不适用:不用于攻击集群(用 attacking-eks-gke-aks);容器逃逸与运行时内部机制用 exploiting-containers / escaping-hardened-containers,再回到本技能找控制措施;集群周边云 IAM 平面(IRSA、工作负载身份、节点角色)属 investigating-*-incidents / hardening-cloud-posture;判断告警是否为事件用 triaging-security-alerts。常见错误认知包括:角色名不含 admin 就不危险、配了 Pod Security 就安全、定义了 NetworkPolicy 就完成分段、Secret 存在 etcd 就受保护、托管集群由厂商全权负责、没有告警就代表安全——都应先核实审计策略是否存在。