k8scout/k8scout

GitHub: k8scout/k8scout

k8scout 是在被控 Pod 内自动发现权限并绘制多步骤攻击路径的 Kubernetes 安全评估工具。

Stars: 11 | Forks: 2

k8scout logo

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

将其放入一个被攻陷的 Pod,运行它,并获取每一个现实可行的权限提升路径的映射——从你当前的立足点到 cluster-admin、节点访问、密钥窃取以及云 IAM 角色。 ## 思路 你已在 Kubernetes Pod 中获得 RCE。接下来该怎么办? k8scout 回答了这个问题。它会自动发现被攻陷 Pod 的服务账户权限,绘制 RBAC 图谱,并追踪从你的当前立足点到高价值目标的逐步攻击路径。 它有两种工作模式: - **进攻模式**(默认)——在内部被攻陷的 Pod 中运行。发现你的身份、权限以及从当前位置可达的所有权限提升路径。 - **审核模式**(`--reviewer-mode`)——使用只读服务账户审计整个集群的攻击面。 ## 演示

k8scout demo

## 它能发现什么 k8scout 构建一个加权权限图,并运行基于 Dijkstra 的路径查找,以发现现实的多步骤攻击链: - **Pod 到 cluster-admin**——通过 RBAC 绑定、工作负载变更或 CRB 创建 - **容器逃逸到节点**——通过特权容器、hostPID、hostNetwork、危险能力或 hostPath 挂载 - **横向移动**——进入其他 Pod 窃取其服务账户令牌,利用其权限进行跳转 - **密钥与凭证窃取**——挂载的服务账户令牌、密钥、包含泄露凭证的配置映射、孤儿令牌 - **云 IAM 权限提升**——IRSA(AWS)、GKE 工作负载身份、Azure 工作负载身份、投影令牌受众滥用 - **身份冒充链**——通过冒充权限实现服务账户到服务账户的接管 - **工作负载变更**——变更一个部署以修改其服务账户,从而继承该账户的权限 - **Webhook 注入**——控制变更 Webhook 以注入未来的工作负载 - **GitOps 运算符滥用**——ArgoCD、Flux、External Secrets 与 Vault 运算符的权限提升 - **误配置检测**——悬挂绑定、通配动词、自动挂载令牌、明文环境变量中的密钥 每个发现均包含 MITRE ATT&CK 技术 ID、风险评分,以及包含实际图谱节点的逐步攻击路径。共计 50 条检测规则。 ## 快速开始 ### 从被攻陷的 Pod(主要使用场景) ``` # 将二进制文件复制到 Pod 中 kubectl cp k8scout-linux-amd64 /:/tmp/k8scout # 运行它 kubectl exec -it / -- chmod +x /tmp/k8scout kubectl exec -it / -- /tmp/k8scout --out /tmp/result.json # 拉取结果 kubectl cp /:/tmp/result.json ./result.json # 如果您的 revshell 如此工作流完全一样! ``` 该二进制文件会自动检测是否在集群内运行,识别 Pod 与服务账户,并从你的当前立足点开始路径查找。 ### 从本地机器 ``` # 使用 ~/.kube/config 或 $KUBECONFIG k8scout --all-namespaces --out result.json # 目标单个命名空间 k8scout --namespace production --out result.json ``` ### 审核模式(全集群审计) ``` # 部署只读 RBAC 和作业 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-amd64` | Linux x86-64 | | `k8scout-linux-arm64` | Linux ARM64 | | `k8scout-darwin-amd64` | macOS Intel | | `k8scout-darwin-arm64` | macOS Apple Silicon | ### 从源码构建 需要 Go 1.22+。 ``` git clone https://github.com/hac01/k8scout cd k8scout make build # native binary make build-linux # static Linux amd64 binary make build-all # all four release targets ``` ## 工作原理 ``` k8scout (running inside compromised pod) | ├── 1. Detect foothold │ Pod name (HOSTNAME), SA (TokenReview), Node (downward API) │ ├── 2. Discover permissions │ SSRR per namespace + ~30 concurrent SSAR spot-checks │ (always permitted, no RBAC needed) │ ├── 3. Enumerate cluster objects (graceful degradation if denied) │ Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs │ ├── 4. Build attack graph │ Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities │ Edges: runs_as, mounts, authenticates_as, can_exec, can_patch, │ can_impersonate, runs_on, assumes_cloud_role, granted_by, ... │ ├── 5. Find attack paths (Dijkstra from foothold to high-value targets) │ Weighted by attacker effort — cheapest (most realistic) paths first │ Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads │ ├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping) │ ├── 7. Optional: AI risk narrative (GPT-4o) │ └── 8. Output: text summary + JSON report ``` 即使拥有无法列出 Pod 或 RBAC 对象的极简服务账户,该工具也能仅凭身份数据综合生成立足点图谱,并发现通过 SSRR/SSAR 权限可到达的目标。 ## 攻击图谱可视化 将 JSON 报告加载到任意浏览器中的 `web/graph.html`(拖放即可,无需服务器)。 - **攻击路径页签**——按风险评分排序,展示从立足点到目标的完整多跳链 - **多链视图**——在同一张图上同时可视化重叠的攻击路径 - **力导向图**——所有节点与边,按类别和风险评分环着色 - **聚焦模式**——减弱结构噪声,突出攻击相关节点 - **RBAC 切换**——隐藏 RBAC 节点,但当它们是活动攻击路径的一部分时会自动显示 - **小地图**——在大型图谱中导航而不丢失上下文 - **节点详情**——点击任意节点查看元数据、连接关系及相关发现 - **导出**——下载自包含的 HTML 渗透测试报告 ## CLI 参考 ``` k8scout [flags] Flags: --out string Output JSON file path (default "k8scout-result.json") --namespace string Enumerate a single namespace --all-namespaces Enumerate all accessible namespaces (default true) --format string Output format: text | json (default "text") --timeout int Per-request timeout in seconds (default 60) --log-level string debug | info | warn | error (default "info") --kubeconfig string Path to kubeconfig (auto-detected if not set) --reviewer-mode Full cluster RBAC audit for all identities --stealth Skip SSRR/SSAR to reduce audit log footprint --skip-ssar Skip SSAR spot-checks only --openai-key string OpenAI API key (or OPENAI_API_KEY env var) --openai-model string OpenAI model (default "gpt-4o") --skip-ai Skip AI narrative generation ``` ## RBAC 要求 **在从被攻陷 Pod 运行时**:无需特殊 RBAC。SSRR 与 SSAR 始终被允许。如果服务账户无法列出集群对象,工具会优雅降级——仍能发现权限并基于可用数据生成发现。 **完整枚举时**(建议使用 k8scout 服务账户):建议使用 `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 权限,否则不会读取密钥值。 ## 测试版反馈 k8scout 处于积极开发中。如果你在集群中遇到 Bug、误报或检测缺口,请[提交问题](../../issues)。误报和遗漏的路径尤其有用——如可能,请附上匿名化的发现 JSON。 ## 许可证 MIT
标签:Dijkstra路径查找, EVTX分析, K8scout, K8s取证, Kubernetes 安全, RBAC, SA令牌, 二进制渗透工具, 云IAM接管, 协议分析, 只读模式, 图搜索, 多步攻击链, 容器逃逸, 日志审计, 服务账户权限, 权限提升, 模型鲁棒性, 横向移动, 秘密窃取, 编程规范, 节点逃逸, 集群攻击路径