karthikarunapuram8-dot/pathcollapse
GitHub: karthikarunapuram8-dot/pathcollapse
基于图的身份暴露分析工具,通过最小控制变更消除最高风险路径。
Stars: 0 | Forks: 0
# PathCollapse
[](https://github.com/karunapuram/pathcollapse/actions/workflows/ci.yml)
[](https://goreportcard.com/report/github.com/karunapuram/pathcollapse)
[](LICENSE)
**基于图的身份暴露分析,能够以最小的控制变更实现最大的安全影响。**
PathCollapse 摄取企业环境中的身份和策略元数据,构建类型化的权限/暴露图,对现实中的提升权限和影响范围路径进行推理,然后计算**最小控制变更**以消除最高风险路径。
## 功能特性
- **类型化身份图** — 15 种节点类型,17 种边类型,覆盖 AD/Entra ID 关系
- **多模式路径推理** — 可达性、可能性(条件过滤)和完整防御分析
- **贪心断点优化器** — 基于集合覆盖算法,用最少的变更获得最大影响
- **检测映射器** — 为每条路径生成 Sigma 规则、KQL 查询、SPL 查询和 ATT&CK 映射
- **漂移检测** — 快照差异对比突出显示新的特权成员关系、委派变更和证书模板漂移
- **SQLite 快照持久化** — 使用 `pathcollapse snapshot` 保存、列出、对比和修剪图快照
- **HTML 报告** — 单文件 CISO 仪表板就绪报告,含执行摘要、风险路径、断点和漂移
- **分析师 DSL** — 人类可读的查询语言:`FIND PATHS FROM user:alice TO privilege:tier0 WHERE confidence > 0.7`
- **多种摄取格式** — 通用 JSON、CSV(用户/组/管理员/GPO)、BloodHound JSON 导出、YAML 事实
## 安装
### 预构建二进制文件(推荐)
从 [GitHub Releases](https://github.com/karunapuram/pathcollapse/releases) 下载适用于您平台的最新版本:
```
# macOS / Linux — 提取并移动到 PATH
tar xzf pathcollapse_*_darwin_arm64.tar.gz
mv pathcollapse /usr/local/bin/
```
### 从源码构建
```
git clone https://github.com/karunapuram/pathcollapse
cd pathcollapse
go build ./cmd/pathcollapse
```
或安装所有二进制文件:
```
go install ./cmd/...
```
**要求**:Go 1.22+
### 性能
请参考 [BENCHMARKS.md](BENCHMARKS.md) 获取延迟和内存数据。
## 快速开始
### 从 JSON 摄取
```
pathcollapse ingest --input identity-data.json --type json --output snapshot.json
```
### 分析路径
```
# 查找从 alice 到任意层级 0 资产的所有路径(使用已摄取的快照)
pathcollapse analyze --graph snapshot.json \
--query "FIND PATHS FROM user:alice TO privilege:tier0 LIMIT 10"
# 查找折叠顶级路径的最小断点
pathcollapse analyze --graph snapshot.json \
--query "FIND BREAKPOINTS FOR top_paths LIMIT 5"
# 显示相对于先前快照的漂移
pathcollapse analyze --graph snapshot-feb.json --baseline snapshot-jan.json \
--query "SHOW DRIFT"
```
### 生成报告
```
pathcollapse report --graph snapshot.json --format markdown --top 20
pathcollapse report --graph snapshot.json --format json --output report.json
# CISO 审查的 HTML 报告(包含可选的漂移部分)
pathcollapse report --graph snapshot.json --format html --output report.html
pathcollapse report --graph snapshot.json --baseline baseline.json --format html --output drift-report.html
```
### 对比两个快照
```
# 基于文件的差异
pathcollapse diff snapshot-jan.json snapshot-feb.json
```
### 快照持久化(SQLite)
```
# 将命名快照保存至 ~/.pathcollapse/snapshots.db
pathcollapse snapshot save --name weekly-jan --graph snapshot.json
# 列出所有存储的快照
pathcollapse snapshot list
# 按 ID 比较两个存储的快照(使用漂移引擎)
pathcollapse snapshot diff 1 3
# 修剪旧快照,保留最近的 5 个
pathcollapse snapshot prune --older-than 90 --keep-min 5
```
### 直接计算断点
```
pathcollapse breakpoints --graph snapshot.json --top 10
```
## 架构概览
```
Ingestion (pkg/ingest)
│ JSON / CSV / BloodHound / YAML
▼
Normalization (pkg/normalize)
│ dedup, canonicalize
▼
Graph Engine (pkg/graph)
│ adjacency list, 100K nodes / 1M edges target
├──► Scoring (pkg/scoring)
│ RiskScore formula, configurable weights
├──► Reasoning (pkg/reasoning)
│ Reachability / Plausibility / Defensive modes
├──► Controls (pkg/controls)
│ Greedy set-cover breakpoint optimizer ← KILLER FEATURE
├──► Detection (pkg/detection)
│ Sigma / KQL / SPL generation, ATT&CK mapping
├──► Drift (pkg/drift)
│ Snapshot comparison, blast-radius delta
└──► Reporting (pkg/reporting)
Executive + engineer reports, Markdown / JSON
```
## 支持的摄取格式
| 适配器 | 标志 | 描述 |
|--------|------|------|
| 通用 JSON | `--type json` | PathCollapse 原生格式 |
| CSV 用户 | `--type csv_users` | `id,name,type,tags` |
| CSV 组 | `--type csv_groups` | `member_id,group_id` |
| CSV 本地管理员 | `--type csv_local_admin` | `user_id,computer_id,confidence` |
| CSV GPO | `--type csv_gpo` | `gpo_id,ou_id,gpo_name` |
| BloodHound JSON | `--type bloodhound` | 仅读解析器,适用于 BH 收集器导出 |
| YAML 事实 | `--type yaml` | 分析师提供的手动关系 |
## DSL 查询语言
```
# 查找横向移动路径
FIND PATHS FROM user:alice TO privilege:tier0 WHERE confidence > 0.7 ORDER BY risk DESC LIMIT 10
# 查找最优控制断点
FIND BREAKPOINTS FOR top_paths LIMIT 5
# 显示自上次快照以来的漂移
SHOW DRIFT SINCE last_snapshot
# 查找高风险服务账户
FIND HIGH_RISK_SERVICE_ACCOUNTS
```
详见 [docs/query-language.md](docs/query-language.md) 获取完整参考。
## 风险评分公式
```
RiskScore = (TargetCriticality × 0.30)
+ (Confidence × 0.20)
+ (Exploitability × 0.20)
+ ((1 - Detectability) × 0.15)
+ (BlastRadius × 0.15)
```
所有权重均可通过 `ScoringConfig` 调整。详见 [docs/scoring.md](docs/scoring.md)。
## 包布局
| 包 | 角色 |
|----|------|
| `pkg/model` | 核心领域类型:节点、边、枚举 |
| `pkg/graph` | 图引擎:邻接、遍历、路径搜索 |
| `pkg/scoring` | 风险评分函数 |
| `pkg/ingest` | 摄取适配器 |
| `pkg/normalize` | 数据规范化 |
| `pkg/reasoning` | 三种分析模式 |
| `pkg/controls` | 断点优化器 |
| `pkg/detection` | Sigma/KQL/SPL 生成 |
| `pkg/drift` | 快照差异对比 |
| `pkg/query` | DSL 词法分析器 + 解析器 + 执行器 |
| `pkg/reporting` | Markdown、JSON 和 HTML 报告渲染 |
| `pkg/snapshot` | 基于 SQLite 的图快照持久化 |
| `pkg/policy` | 策略规则评估 |
| `pkg/telemetry` | 遥测需求映射 |
| `pkg/evidence` | 证据引用管理 |
| `pkg/providers` | LLM 提供者抽象 |
## 当前状态
### 当前已实现
| 能力 | 状态 |
|------|------|
| 图引擎(节点/边/遍历) | ✅ 完整实现 |
| JSON / CSV / BloodHound / YAML 摄取 | ✅ 已实现并包含测试 |
| 风险评分(可配置权重) | ✅ 已实现并包含测试 |
| 路径查找(迭代 DFS、深度受限) | ✅ 已实现并包含测试 |
| 断点优化器(贪心集合覆盖) | ✅ 已实现并包含测试 |
| DSL 词法分析器 + 解析器 | ✅ 已实现并包含测试 |
| `FIND PATHS` 查询执行 | ✅ 返回排序路径 |
| `FIND BREAKPOINTS` 查询执行 | ✅ 返回控制建议 |
| `SHOW DRIFT` 查询执行 | ✅ 需要 `--baseline` 标志;调用 `drift.CompareSnapshots` |
| Markdown + JSON 报告 | ✅ 已实现并包含测试 |
| 漂移检测(CompareSnapshots) | ✅ 检测 4 类漂移 |
| `ingest` CLI 子命令 | ✅ 读取文件并写入快照 |
| `analyze` CLI 子命令 | ✅ 对快照或固件执行 DSL 查询 |
| `breakpoints` CLI 子命令 | ✅ 在快照或固件上执行贪心优化器 |
| `report` CLI 子命令 | ✅ 对快照或固件生成 Markdown/JSON/HTML 报告 |
| `diff` CLI 子命令 | ✅ 对两个快照生成漂移报告 |
| `snapshot` CLI 子命令 | ✅ 通过 SQLite 在 `~/.pathcollapse/snapshots.db` 上保存/列出/对比/修剪 |
| HTML 报告生成 | ✅ 为 CISO 审查提供单文件自包含报告 |
| GitHub Actions CI | ✅ 构建、vet、竞态检测、goreleaser 检查 |
| 集成测试(完整流水线) | ✅ `test/integration/pipeline_test.go` |
### 暂存/薄弱实现
| 包 | 状态 |
|----|------|
| `pkg/normalize` | 存根 — 去重和规范化尚未实现 |
| `pkg/policy` | 存根 — 策略规则评估尚未实现 |
| `pkg/providers` | 存根 — LLM 提供者抽象尚未连接 |
| `pkg/evidence` | 仅类型和帮助器;无摄取管道为其提供数据 |
| `pkg/telemetry` | 仅需求映射器;无实时遥测收集 |
| 检测(Sigma/KQL/SPL) | 通用模板;尚未针对路径定制 |
### 验证的演示工作流
```
# 摄取内置的测试数据集
./pathcollapse ingest --input internal/testdata/enterprise_ad.json \
--type json --output /tmp/snapshot.json
# 查找从 alice 到层级 0 的攻击路径
./pathcollapse analyze --graph /tmp/snapshot.json \
--query "FIND PATHS FROM user:alice TO privilege:tier0 LIMIT 5"
# 计算最小断点
./pathcollapse breakpoints --graph /tmp/snapshot.json --top 5
# 生成完整的 Markdown 报告
./pathcollapse report --graph /tmp/snapshot.json --format markdown --top 5
```
## 贡献
PathCollapse 是开源项目,欢迎贡献。在提交大规模更改前请先打开问题。
```
go test ./...
go vet ./...
```
### CI 门槛
每个拉取请求必须通过竞态检测器才能合并:
```
go test -race ./...
```
### 性能分析
提供了 `Makefile` 用于常见的性能分析任务:
```
make bench # run all benchmarks with allocation counts
make cpu-profile # capture CPU profile for FindPaths (writes cpu.prof)
make mem-profile # capture heap profile for FindPaths (writes mem.prof)
make race # run full test suite under the race detector
```
## 许可证
Apache 2.0
标签:ATT&CK映射, CSV处理, EVTX分析, Go语言, GraphQL, Homebrew安装, HTML报告, JSON解析, KQL查询, Sigma规则, SPL查询, Streamlit, 企业安全, 分析师DSL, 多模式推理, 多模态安全, 威胁建模, 安全报告, 开源安全工具, 快照持久化, 断点分析, 日志审计, 最小权限, 权限优化, 检测映射, 漂移检测, 特权管理, 目标导入, 程序破解, 算法优化, 网络资产管理, 访问控制, 路径分析, 路径折叠, 身份图谱, 身份治理, 逆向工程平台, 速率限制处理, 集合覆盖, 风险路径