contantlab/reachability
GitHub: contantlab/reachability
基于环境上下文图谱对漏洞扫描结果进行重新评分和攻击链分析的自托管优先级排序引擎。
Stars: 0 | Forks: 0
# 可达性
**基于上下文感知的漏洞优先级排序与攻击路径链。支持自托管,无锁定,可替换任意扫描器。**
Reachability 会接收漏洞扫描结果,并根据*您的*环境模型(包括您的拓扑结构、安全控制措施以及核心数据资产)对这些结果进行重新评分。它能将“严重和高危”积压列表中的噪音削减为您的技术栈中真正可被利用的漏洞,并揭示那些扫描器容易遗漏的危险漏洞链:例如两个串连起来就能直接访问您数据库的“中危”漏洞。
## 问题所在
针对 SaaS 应用运行一次扫描器,您会得到数百个发现结果,其中数十个被标记为严重或高危。随后,大多数团队要花几天时间逐一对每个发现结果进行人工排查:*这个漏洞真的可达吗?它前面有 WAF 吗?它真的涉及敏感数据吗?它能与其他漏洞串联利用吗?* 这种分流处理不仅速度慢、极其依赖上下文,而且很少有人能彻底做完。因此,积压的漏洞列表越来越长,而那些真正危险的组合——例如一个低危的 SSRF 被利用为跳板,进而访问未经过身份验证的内部管理端点——却一直被埋没在那些根本无法被利用的噪音中。
## Reachability 的作用
- **降低噪音优先级。** 如果在每个入站路径上都有阻断型 WAF 拦截的严重 SQLi,或者存在于任何面向互联网的路径都不会调用的代码中的依赖项 CVE,其风险评分会被下调——*并且每一次调整都附带书面理由。*没有任何漏洞会被静默屏蔽。
- **提升真实风险等级。** 它将每个漏洞发现建模为攻击者的一个步骤(前置条件 -> 后置条件),并在您的环境图谱中搜索能够触及敏感资产的漏洞链。一个由三个中危漏洞组成、最终直达核心数据存储的漏洞链,无论其单个漏洞的评分如何,都会被报告为严重。
- **具备自我解释性。** 每一次重新评分都包含可审计的追踪记录——触发了哪条规则,是哪个安全控制措施、路径或漏洞链导致了这次调整。这种解释机制本身就是该产品的核心价值。
## 核心原则
- **支持自托管。** 只需 `docker compose up`。可在您自己的服务器、AWS、Azure 或任何地方运行。没有外部 SaaS 依赖,没有回传通信,也没有遥测。
- **无锁定。** 默认使用免费、开源的扫描器。已经在付费使用高级扫描器?只需更改一行配置即可替换。推理引擎完全不受影响。
- **以配置为准。** 技术栈上下文、扫描器选择和评分策略都是归您所有并进行版本控制的声明式文件。
- **无需人工干预。** 任何具备技术能力的人都可以独立部署。不需要销售通话,没有客户成功经理,也不需要许可证密钥。
- **确定且可审计。** 每次运行的评分结果均可重现。安全团队可以验证每一项决策。
## 工作原理
```
Scanners Normalize Context Reasoning
(swappable) findings graph (yours) engine
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐
│ nmap │ │ common │ │ assets │ │ reachability │
│ ZAP │ ──────► │ finding │ ─────► │ controls │ ─────► │ + chaining │
│ Grype │ │ schema │ │ zones │ │ + policy │
│ (yours) │ └──────────┘ │ data │ └──────┬───────┘
└─────────┘ └──────────┘ │
▼
re-prioritized findings + attack chains
each with a written rationale
```
1. **摄取上下文。** 通过引导式问卷和文件上传——包括 SBOM (CycloneDX/SPDX)、IaC (Terraform)、图表即代码——构建您的环境图谱。IaC 被视为基本事实;问卷答案被视为低可信度数据。
2. **扫描。** 可插拔的适配器运行您选择的扫描器,并将每个结果标准化为统一的 schema。
3. **推理。** 引擎计算每个漏洞的互联网可达性,在图谱上构建攻击链,然后应用声明式评分策略,生成上下文相关的严重性、评分差异以及调整理由。
4. **报告。** 输出一个重新排序的优先级列表和一组攻击链,每一项都可以展开查看*原因*。
## 替换扫描器
默认全部使用开源工具。要使用您已购买授权的高级扫描器,只需更改一行配置:
```
# config/environment.yaml
scanners:
port: nmap
dast: zap # -> burp-enterprise
sca: grype # -> tenable
```
大多数扫描器只需要一个声明式的 YAML 适配器(包含命令和字段映射,无需编写代码)。复杂的扫描器则可以使用一个小型的 Python 适配器。请参阅 [文档:编写适配器](docs/writing-an-adapter.md)。
## 仓库结构
```
core/ graph model, reasoning engine, scoring - scanner-agnostic
adapters/ one folder per scanner; OSS defaults + _template scaffold
schema/ normalized finding model, context graph, adapter contract, scoring policy
deploy/ docker-compose, env examples
docs/ self-host guide, "write an adapter in 20 minutes"
```
## 设计文档
所有功能构建所依赖的契约都位于 [`schema/`](schema/) 中:
- [`01-finding-schema.md`](schema/01-finding-schema.md) - 每个适配器必须输出的内容
- [`02-context-graph-schema.md`](schema/02-context-graph-schema.md) - 引擎查询的环境模型
- [`03-adapter-interface.md`](schema/03-adapter-interface.md) - 扫描器可替换性契约
- [`04-scoring-policy.md`](schema/04-scoring-policy.md) - 声明式重新评分规则
- [`categories.md`](schema/categories.md) - 包含前置/后置条件和控制映射的漏洞分类法
## 状态
早期开发阶段。设计契约已经稳定;实现正在进行中。采用核心优先的构建顺序:先是上下文图谱与数据摄取,然后是完成一个端到端扫描器的接入,接着是降级引擎,之后是攻击路径链,最后是实时的 DAST 和报告。
## 技术
核心采用 Python。使用 Postgres 进行存储和图谱遍历(通过递归 CTE),并封装在 `GraphStore` 接口背后——自托管时无需沉重的图数据库,同时也为超大规模环境预留了接入图数据库的空间。采用容器化部署,与云服务商无关。
## 许可证
Apache 2.0。您可以随意使用、托管、嵌入或修改它。在设计上坚决杜绝锁定。
标签:GPT, 安全态势感知, 攻击路径分析, 测试用例, 漏洞优先级评估, 漏洞管理, 自动化安全分析, 请求拦截, 逆向工具