karthikarunapuram8-dot/pathcollapse

GitHub: karthikarunapuram8-dot/pathcollapse

基于图的身份暴露分析工具,通过最小控制变更消除最高风险路径。

Stars: 0 | Forks: 0

# PathCollapse [![CI](https://github.com/karunapuram/pathcollapse/actions/workflows/ci.yml/badge.svg)](https://github.com/karunapuram/pathcollapse/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/karunapuram/pathcollapse)](https://goreportcard.com/report/github.com/karunapuram/pathcollapse) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](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, 多模式推理, 多模态安全, 威胁建模, 安全报告, 开源安全工具, 快照持久化, 断点分析, 日志审计, 最小权限, 权限优化, 检测映射, 漂移检测, 特权管理, 目标导入, 程序破解, 算法优化, 网络资产管理, 访问控制, 路径分析, 路径折叠, 身份图谱, 身份治理, 逆向工程平台, 速率限制处理, 集合覆盖, 风险路径