k8scout/k8scout
GitHub: k8scout/k8scout
k8scout 是在被控 Pod 内自动发现权限并绘制多步骤攻击路径的 Kubernetes 安全评估工具。
Stars: 11 | Forks: 2
k8scout
将其放入一个被攻陷的 Pod,运行它,并获取每一个现实可行的权限提升路径的映射——从你当前的立足点到 cluster-admin、节点访问、密钥窃取以及云 IAM 角色。
## 思路
你已在 Kubernetes Pod 中获得 RCE。接下来该怎么办?
k8scout 回答了这个问题。它会自动发现被攻陷 Pod 的服务账户权限,绘制 RBAC 图谱,并追踪从你的当前立足点到高价值目标的逐步攻击路径。
它有两种工作模式:
- **进攻模式**(默认)——在内部被攻陷的 Pod 中运行。发现你的身份、权限以及从当前位置可达的所有权限提升路径。
- **审核模式**(`--reviewer-mode`)——使用只读服务账户审计整个集群的攻击面。
## 演示
## 它能发现什么
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接管, 协议分析, 只读模式, 图搜索, 多步攻击链, 容器逃逸, 日志审计, 服务账户权限, 权限提升, 模型鲁棒性, 横向移动, 秘密窃取, 编程规范, 节点逃逸, 集群攻击路径