返回更新列表
新发布Aug 16, 2026

k8scout v0.1.2

将一个单一的二进制文件放入一个被攻破的Kubernetes pod中,立即映射出所有现实的攻击路径:集群管理员、节点逃逸、秘密窃取和云IAM接管。

分享

k8scout 标志

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

Beta — 用于授权安全评估的单一二进制 Kubernetes 攻击路径引擎。

将其放入被攻破的 Pod,运行它,即可获得每个现实可行的横向移动路径地图——从当前落脚点到集群管理员、节点访问、机密窃取和云 IAM 角色。


理念

你在 Kubernetes Pod 中拥有 RCE。接下来呢?

k8scout 回答这个问题。它自动发现被攻破 Pod 的服务账户能做什么,映射 RBAC 图,并追踪从你的确切落脚点到高价值目标的攻击路径。

它有三种工作模式:

  • 攻击模式(默认)—— 在被攻破的 Pod 内运行。发现你的身份、权限以及从当前位置可达到的所有横向移动路径。
  • 审查模式--reviewer-mode)—— 使用只读 SA 运行,审计整个集群所有身份的攻击面。
  • 侦察模式--recon)—— 快速、低足迹地查看你的身份、有效权限以及你能接触的资源。不构建图或路径。添加 --bruteforce-ns 以发现你不能全局列举的命名空间。

演示

k8scout 演示


它发现什么

k8scout 构建一个带权重的权限图,并运行基于 Dijkstra 的路径查找,以发现现实的多步攻击链:

  • 从 Pod 到集群管理员 — 通过 RBAC 绑定、工作负载变异或 CRB 创建
  • 容器逃逸到节点 — 通过特权容器、hostPID、hostNetwork、危险 capabilities 或 hostPath 挂载
  • 横向移动 — exec 进入其他 Pod,窃取其 SA 令牌,通过权限进行 pivot
  • 机密和凭据窃取 — 挂载的 SA 令牌、机密、带有泄露凭据的 ConfigMap、孤儿令牌
  • 云 IAM 权限提升 — IRSA (AWS)、GKE Workload Identity、Azure Workload Identity、投影令牌观众滥用
  • 模拟链 — 通过模拟权限进行 SA 到 SA 的接管
  • 工作负载变异 — 修补 Deployment 以更改其 SA,然后继承该 SA 的权限
  • Webhook 注入 — 控制变更 Webhook 以注入到未来工作负载
  • GitOps 操作者滥用 — ArgoCD、Flux、External Secrets 和 Vault 操作者权限提升
  • 错误配置检测 — 悬挂绑定、通配符动词、自动挂载令牌、环境变量中明文机密

每个发现都包含 MITRE ATT&CK 技术 ID、风险评分以及包含实际图节点的逐步攻击路径。总共有 50 条检测规则。


快速开始

从被攻破的 Pod(主要用例)

# 将二进制文件复制到 Pod 中
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout

# 运行它
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json

# 拉取结果
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json

# 如果你正在使用 reverse shell,这个流程完全一样!

二进制文件会自动检测它正在集群内运行,识别 Pod 和 SA,并从你的确切落脚点开始路径查找。

预期用途:渗透测试、红队行动、内部安全审查和集群加固审计。务必在获得适当授权后针对任何集群运行。

从本地机器

# 使用 ~/.kube/config 或 $KUBECONFIG
k8scout --all-namespaces --out result.json

# 针对单个命名空间
k8scout --namespace production --out result.json

侦察模式(快速权限和资源检查)

# 我是谁?我能做什么?我能访问哪些资源?
k8scout --recon

# 发现你不能全局列举的命名空间(内置字典)
k8scout --recon --bruteforce-ns

# 使用你自己的命名空间字典进行暴力破解(每行一个名称)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt

侦察模式跳过图构建、推理和 AI——这是回答“这个令牌实际拥有什么?”的最快方式。它报告当前身份、其有效权限(SelfSubjectRulesReview)以及每个资源的权限矩阵(SelfSubjectAccessReview)。--bruteforce-ns 通过读取每个命名空间都拥有的已知对象(命名空间对象、其 default ServiceAccount 或 kube-root-ca.crt ConfigMap)来确认命名空间是否存在——当身份无法列举命名空间但仍可能访问特定命名空间时很有用。

审查模式(全集群审计)

# 部署只读 RBAC 和 Job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml

# 或直接以审查者权限运行
k8scout --reviewer-mode --all-namespaces --out result.json

带 AI 叙述

export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json

安装

预编译二进制文件

Releases 页面下载。所有二进制文件均为静态链接,无依赖。

二进制文件平台
k8scout-linux-amd64Linux x86-64
k8scout-linux-arm64Linux ARM64
k8scout-darwin-amd64macOS Intel
k8scout-darwin-arm64macOS Apple Silicon

从源码构建

需要 Go 1.22+。

git clone https://github.com/hac01/k8scout
cd k8scout
make build          # 原生二进制文件
make build-linux    # 静态 Linux amd64 二进制文件
make build-all      # 所有四个发布目标

工作原理

k8scout (在被攻破的 Pod 内运行)
 |
 ├── 1. 检测落脚点
 │     Pod 名称 (HOSTNAME)、SA (TokenReview)、Node (downward API)
 │
 ├── 2. 发现权限
 │     每个命名空间的 SSRR + 约 30 个并发 SSAR 抽查
 │     (始终被允许,无需 RBAC)
 │
 ├── 3. 列举集群对象 (如果被拒绝则优雅降级)
 │     Namespaces、RBAC、Workloads、Pods、Secrets、Nodes、Webhooks、CRDs
 │
 ├── 4. 构建攻击图
 │     节点: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
 │     边: runs_as, mounts, authenticates_as, can_exec, can_patch,
 │         can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
 │
 ├── 5. 发现攻击路径 (从落脚点到高价值目标的 Dijkstra 路径)
 │     按攻击者努力程度加权——最便宜(最现实)的路径优先
 │     目标: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
 │
 ├── 6. 运行推理规则 (50 条规则,含 MITRE ATT&CK 映射)
 │
 ├── 7. 可选: AI 风险叙述 (GPT-4o)
 │
 └── 8. 输出: 文本摘要 + JSON 报告

即使使用一个无法列出 Pod 或 RBAC 对象的最小 SA,该工具也能仅从身份数据合成落脚点图,并通过 SSRR/SSAR 权限发现可达到的内容。


攻击图可视化

将 JSON 报告加载到任何浏览器的 web/graph.html 中(拖放,无需服务器)。

  • 攻击路径标签 — 按风险评分排序,每个显示从落脚点到目标的多跳链
  • 多链视图 — 同时可视化单个图中的重叠攻击路径
  • 力导向图 — 所有节点和边,带有颜色编码类别和风险评分环
  • 聚焦模式 — 淡化结构噪声以突出攻击相关节点
  • RBAC 切换 — 隐藏 RBAC 节点,但当它们属于活跃攻击路径时自动显示
  • 迷你地图 — 浏览大图而不丢失上下文
  • 节点详情 — 点击任意节点查看元数据、连接和相关发现
  • 导出 — 下载自包含的 HTML 渗透测试报告

CLI 参考

k8scout [flags]

Flags:
  --out string            输出 JSON 文件路径 (默认 "k8scout-result.json")
  --namespace string      枚举单个命名空间
  --all-namespaces        枚举所有可访问的命名空间 (默认 true)
  --format string         输出格式: text | json (默认 "text")
  --timeout int           每次请求超时时间(秒)(默认 60)
  --log-level string      debug | info | warn | error (默认 "info")
  --kubeconfig string     kubeconfig 路径 (未设置则自动检测)
  --reviewer-mode         对所有身份进行全集群 RBAC 审计
  --recon                 快速侦察: 身份, 权限 (SSRR), 可访问资源 (SSAR)
  --bruteforce-ns         暴力破解命名空间名称以找到你不能列举的 (与 --recon 一起使用)
  --ns-wordlist string    用于 --bruteforce-ns 的自定义命名空间字典 (默认为内置列表)
  --stealth               跳过 SSRR/SSAR 以减少审计日志足迹
  --skip-ssar             仅跳过 SSAR 抽查
  --openai-key string     OpenAI API 密钥 (或 OPENAI_API_KEY 环境变量)
  --openai-model string   OpenAI 模型 (默认 "gpt-4o")
  --skip-ai               跳过 AI 叙述生成

RBAC 要求

从被攻破的 Pod 运行时:无需特殊 RBAC。SSRR 和 SSAR 始终被允许。如果 SA 无法列出集群对象,工具会优雅降级——它仍能从可用信息中发现权限并生成发现。

为了全面枚举(推荐用于 k8scout SA):在 deploy/rbac.yaml 中定义的只读访问:

  • namespaces, nodes: get, list
  • serviceaccounts, secrets (仅元数据), configmaps: get, list
  • pods, deployments, daemonsets, statefulsets, jobs, cronjobs: get, list
  • roles, rolebindings, clusterroles, clusterrolebindings: get, list
  • mutatingwebhookconfigurations, validatingwebhookconfigurations: get, list

除非身份通过 SSAR 确认有 GET 权限,否则永远不会读取机密值。


Beta 反馈

k8scout 正在积极开发中。如果你在你的集群中遇到错误、误报或检测空白,请提交 issue。误报和遗漏路径尤其有用——如果可能,请包含匿名化的发现 JSON。


许可证

MIT

分类