pablo-nieves-sec/vendor-risk-console
GitHub: pablo-nieves-sec/vendor-risk-console
一款基于纯本地、零密钥运行的第三方供应商风险评估(TPRM)工具,通过聚合免费公开情报源对供应商进行可追溯的自动化风险评分与分级。
Stars: 0 | Forks: 0
# 供应商风险控制台
一款本地、免费的第三方供应商风险评估工具。输入供应商及其
域名;它会查询免费、无需密钥的公开情报源,根据**您**控制的
标准对结果进行评分,并在浏览器中将调查结果呈现为
动画式的“情报终端”仪表板。
专为从事第三方/供应商风险管理 (TPRM) 且希望在不支付平台费用或暴露
API 密钥的情况下进行快速、有证据支持分类处理的从业者打造。
## 功能
- 获取**供应商/产品名称**和**主域名**。
- 在免费的公开来源中并发执行查询。
- 使用确定性规则对每个风险**领域**进行评分(0–100,分数越高 = 越安全),然后将其汇总为加权的 **Trust Index**(信任指数)和一个
分类:`CLEARED → GUARDED → ELEVATED → HIGH → CRITICAL`。
- 呈现危险信号、积极信号、建议措施以及每个来源的
收集日志。
- 允许您从 UI 中**重新调整标准**(领域权重、严格的合规性关卡),以适应您正在运行的任何计划。
### 情报来源(全部免费,无需密钥)
| 评估领域 | 来源 |
|---|---|
| 漏洞与主动利用 | NVD CVE API (CPE 确认) + CISA KEV 目录 |
| 电子邮件与 DNS 安全态势 | DNS-over-Https (Cloudflare / Google) |
| TLS / 证书规范 | 实时 TLS 握手 |
| 泄露历史 | Have I Been Pwned 泄露索引 |
| Web 加固 | HTTP 安全响应头 + security.txt + 技术指纹 |
| 攻击面 | crt.sh 暴露主机标记 + Shodan 端口/CVE *(可选密钥)* |
| 域名与 IP 信誉 | VirusTotal / AbuseIPDB / Scamalytics *(可选密钥)* |
| 新闻与事件历史 | Google News RSS (无需密钥) — 数据泄露/勒索软件/诉讼相关标题 |
| 足迹与透明度 | crt.sh + 维基百科 |
| 合规性与认证 | 人工核查 (无免费 API) |
## 环境要求
- **macOS** 且具备 **Python 3.9+** (使用 `python3 --version` 检查;如有需要,请从
[python.org](https://www.python.org/downloads/) 安装或使用 `brew install python`)。
- **无需第三方包。** 仅使用标准库。
## 快速开始
您只需要 **Python 3.9+**(每台 Mac 和大多数 Linux 机器上都已经自带;
Windows 用户只需从 安装一次,并勾选*“Add Python to PATH”*)。
**简单方法 — 双击启动器:**
| 您的电脑 | 双击 |
|---|---|
| **macOS** | `Run Vendor Risk Console.command` *(首次运行:右键点击 → 打开 → 打开以清除安全警告)* |
| **Windows** | `run.bat` |
| **Linux** | `run.sh` *(或 `bash run.sh`)* |
**或者从终端运行**(适用于所有平台):
```
python3 vrc.py # launch and open the UI in your browser
python3 vrc.py --demo # instant synthetic data, no network — great for a first look
python3 vrc.py --port 9000
python3 vrc.py --no-browser
```
控制台完全在您的机器上运行,绑定到 `127.0.0.1`(仅限环回地址 —
不会向您的网络暴露任何内容)。按 **Ctrl-C** 停止运行。
## 查看证据、深入分析并导出
每一个结果都旨在*有理有据*,而不仅仅是一个判定结论:
- 仪表盘显示 **Risk Index**(风险指数,0–100,**分数越高 = 风险越大**);横幅会标示
**风险分类** (`LOW → MODERATE → ELEVATED → HIGH → CRITICAL`)。风险由各项发现累积而来。
- **点击任何风险领域即可展开。** 您将看到**评分计算细节**
(例如 `0 + 25 no SPF + 30 no DMARC + 10 no DNSSEC = 65 risk`)、**原始证据**
(实际的 SPF/DMARC 记录、CVE ID、证书详情),以及指向各个来源的
**“验证 ↗”链接**,任何人都可以据此独立确认评分。
- **证据覆盖率**(位于来源面板中)告诉您有多少来源
返回了实时数据 —— 覆盖率低意味着更多的情况尚未被核实,
而不是说该供应商更安全。
**导出报告**(位于仪表板顶部)提供三种格式:
- **Markdown** — 一份整洁的、按章节划分的报告。最适合粘贴到
幻灯片中,或交回给分析师/LLM 进行深入审查。
- **JSON** — 完整的结构化记录,非常适合归档或自动化分析。
- **打印 / 另存为 PDF** — 一个精美的、浅色主题的可打印版本。
## 配置标准
直接编辑 `config.json`,或使用 UI 中的 **◇ Criteria** 面板:
- 调整每个风险领域的**权重**(权重会进行归一化处理)。
- 记录**合规性**状态 (SOC 2, ISO 27001, HIPAA, …)。将某一项
标记为**必需**以将其设为硬性关卡 —— 无论其他评分如何,未满足要求都会将最终判定上限锁定为
`HIGH`。
## 它*不是*什么
这是诚实的分类处理,而不是合规性神谕。
- **合规性信息是从供应商自己的信任/安全页面中提取的**,并显示为
`CLAIMED`(公开声明,而非经审计的证书)。在依赖它之前,请确认实际的 SOC 2 报告;在 Criteria 中设置已验证状态以覆盖此值。
- **CVE/KEV 数据仅涵盖具有正式 CVE 记录的产品。** 许多小型
SaaS 工具根本没有这些数据 —— 这会被解读为“无数据”,而不是“安全”。
- 没有泄露记录或 CVE **并不**代表安全。
在做出具有约束力的接入决定之前,务必通过供应商的
信任中心和 SOC 2 报告进行佐证。
## 安全说明
- 服务器仅绑定到**环回地址 (`127.0.0.1`)** —— 它永远不会暴露给
您的网络。
- 浏览器仅与本地后端通信;页面上没有任何第三方调用,
工具中任何位置也不存在凭据。
## 许可证
MIT — 可为您的组织进行使用、改编和重新配置。
## 评估方法
该工具生成一个 **Risk Index(风险指数,0–100,分数越高 = 风险越大)**。风险由各项发现累积;
每个领域从 0 开始,并根据薄弱环节增加分数。整体评分是**返回了实时数据的领域的加权平均值**
(排除了没有数据的领域,因此失败的查询不会影响结果),
分类区间来自 `config.json → scoring.bands`。
每一个量度 —— CVE 严重性惩罚、DNS/TLS/泄露扣分以及区间阈值 —— 都位于 `config.json → scoring` 中,因此整个评分规则都可以在不触碰代码的情况下进行调整。默认值是基于专业判断设定的,而非既定标准;请根据您的计划对其进行调整,并记录您的选择。
值得阐明并辩解的关键设计选择:
- **CVE 经过 CPE 确认。** 只有当产品作为受影响的 CPE 出现时(token 精确匹配),CVE 才会被计入,而不仅仅是在描述中被提及 —— 这就是为什么“Slack”不会因为关于“slackware”的 CVE 而受到惩罚的原因。
- **合规性声明受上下文限制。** 只有当某项标准出现在肯定性表述(已认证/合规/证明)附近,且没有被否定(例如“未通过 SOC 2 认证”)时,才会被标记为 `CLAIMED`。信任页面上的声明并
不是经过审计的证书。
- **缺失会被标记,绝不会受到奖励。** 没有 CVE / 没有泄露记录仅会轻微
降低风险,并被标记为未经证实。
## 局限性(在展示前必读)
- **合规性提取功能无法读取 JavaScript 渲染的信任中心** (Vanta /
SafeBase / Drata 托管的页面)。即使证书确实存在,这些页面也可能显示 `NOT FOUND` —— 搜索链接涵盖了这种情况。请务必确认
实际的 SOC 2 报告。
- **NVD 关键字搜索每次查询最多返回 200 个结果**,且此处未进行分页处理;
具有庞大 CVE 足迹的供应商可能会被抽样查看,而非详尽展示。
- **crt.sh 和某些来源偶尔会缓慢或受到速率限制**;失败的
来源会显示为 `NO DATA`,并从整体评分中排除。
- **对于共享主机,IP 信誉来源存在较大噪音。** AbuseIPDB/Scamalytics
对*托管 IP* 进行评分;位于 Cloudflare/AWS 上的供应商可能会继承其邻居的
信誉。请降低此领域的权重,并阅读应用内的说明。
- **Shodan 免费层级受限** —— 主机查询可能需要付费会员资格;
当查询失败时,该领域仍会根据证书透明度暴露情况进行评分。
- **新闻匹配基于标题级别和关键字** —— 它可能会出现误报
(在无关报道中被提及的供应商),或者遗漏付费墙后的报道。
请将其视为需要调查的线索,而不是已确认的事件。
- **不检查 DKIM**(因为它需要针对特定供应商的 selector,且无法免费获取);但会检查 SPF/DMARC/DNSSEC。
- **攻击面仅为被动探测** —— 证书透明度 + Shodan。该
工具除了获取公开页面外,绝不会扫描、探测或触碰供应商。
- 这是**分类处理**,而不是审计或 GRC(治理、风险与合规)平台。它为人类的
决策提供信息;它本身不做出决策。
## 可选集成(均为免费层级,默认关闭)
该工具在**零密钥**的情况下即可完全正常使用。将以下任意一项设置为环境
变量即可开启额外的来源;未设置的来源将被直接跳过,并在收集
日志中显示为 `OFF`(它们永远不会阻塞或导致评估失败):
```
export VT_API_KEY=... # VirusTotal — domain reputation (free ~4 req/min)
export ABUSEIPDB_API_KEY=... # AbuseIPDB — hosting-IP abuse reports (free 1000/day)
export SHODAN_API_KEY=... # Shodan — open ports/services/host CVEs
export SCAMALYTICS_USER=... # Scamalytics — IP fraud score
export SCAMALYTICS_KEY=...
export NVD_API_KEY=... # NIST NVD — raises CVE query rate limits
python3 vrc.py
```
信誉 (VirusTotal/AbuseIPDB/Scamalytics) 是一个独立的风险领域,
在至少提供其中一个密钥之前,它将一直被排除在评分之外。
## 测试
```
python3 test_assessor.py # deterministic unit tests, no network
```
涵盖 CPE 确认(包括 slack/slackware 陷阱)、合规性声明
门控、SPF/DNS/TLS/泄露评分、域名标准化以及判定区间。
## 缓存
CISA KEV 目录和 HIBP 泄露索引会缓存在 `.cache/`
目录下(12 小时和 24 小时 TTL),这样重复运行时会非常快,且不会对那些服务造成过大压力。
标签:GitHub, GPT, Python, 威胁情报, 安全态势评估, 实时处理, 底层编程, 开发者工具, 无后门, 漏洞管理, 第三方风险管理, 逆向工具