Nate-ryan-7690/Intel
GitHub: Nate-ryan-7690/Intel
一个轻量级的威胁情报获取、评分与审批流水线,通过交叉印证和分析师审核确保情报质量,并支持基于实际终端环境的CVE严重性自动校准。
Stars: 0 | Forks: 0
# Intel Pipeline
一个独立的威胁情报获取、规范化、分析师审批和导出
流水线。Night's Watch 家庭 SOC 套件的一部分。
从 8 个自动化订阅源拉取指标,使用基于交叉印证的置信度进行评分,
将它们路由到分析师审批队列,并将批准的指标导出为签名的
JSON 快照。CVE 条目通过 NVD 版本范围数据进行富化,并与
已安装的软件进行比较——导出的严重性反映了终端是否实际受到影响。

*运行在 6001 端口的单页 Flask 仪表板。包含订阅源状态条、手动拉取控件、
导出管理以及可过滤的审批队列。*
## 功能特性
- **8 个自动化订阅源拉取器** — 涵盖 IP、域名、URL、
哈希、CVE 和 TTP 的 Tier 1 和 Tier 2 来源
- **GreyNoise 富化** — 在分析师审查期间提供按需的 IP 上下文信息
- **已安装软件扫描器** — 在启动时读取 Windows 注册表,写入用于
CVE 相关性校验的软件清单
- **NVD 富化** — 针对供应商和产品与已安装软件匹配的 CVE,进行
定向 NVD API v2.0 查询;存储每个 CVE 的版本范围数据
- **CVE 严重性校验关卡** — 在导出时进行版本检查,当
已安装版本不在所有受影响范围内时,将 CVE 严重性降级为 `medium`;
在数据缺失时执行容错(fail open)处理;在每次导出时重新评估,
以便随着富化数据的完善,严重性始终保持最新
- **交叉印证置信度模型** — 当独立来源达成一致时,置信度会上升;
同一来源的重复拉取绝不会虚增分数
- **分阶段置信度衰减** — 指标根据类型 TTL 分两阶段衰减;
TTP 永远不会过期
- **分析师在环审批** — 所有指标在导出前必须经过审查和批准
- **TLP 感知导出** — 包含 SHA256 伴随文件的 schema 1.1 JSON 快照;
保留最近 5 个快照并支持回滚
- **Flask 仪表板** — 运行在 6001 端口的深色主题单页应用;包含订阅源健康状况条、
带有类型过滤的审批队列、导出管理
## 分析师工作流
### 审批队列
从订阅源拉取的每个指标都会以 `pending` 状态进入审批队列。
分析师按类型(IP、Domain、Hash、CVE、ASN、TTP、URL)进行过滤,并在每个条目
符合导出条件之前对其进行审查。
### 审查面板

审查面板显示完整的规范化条目——值、置信度分数、证据
类别、描述、受影响的供应商和产品、源订阅源、通道(自动/手动)
和到期时间。分析师可以添加备注、调整建议的严重性和 TLP,并选择
**批准 (Approve)**、**拒绝 (Reject)** 或 **告警 (Alert)**(标记为需立即关注)。
### 搜索和过滤

跨值和源字段的自由文本搜索,结合类型和状态过滤器,
可以快速审查特定的指标模式——此处显示的是从 URLhaus 订阅源拉取的、
托管在 GitHub 基础设施上的已批准 URL 指标。
## CVE 严重性校验关卡
CVE 指标在导出时会经过感知版本的严重性检查。该关卡使用
在启动和富化期间构建的两个数据源:
1. **已安装软件** (`scanner.py`) — Windows 注册表扫描,生成包含名称、发布者和版本的已安装软件的 JSON 清单
2. **NVD 版本范围** (`feeds/nvd.py`) — 针对 CISA KEV 供应商和产品与已安装软件包匹配的 CVE,进行定向 NVD API v2.0 查询
在导出时,`normalizer.py` 中的 `compute_effective_severity()` 会执行以下操作:
- 应用类型上限:ASN → 最高为 `medium`,TTP → 最高为 `low`
- 对于 CVE 条目:将已安装版本与 NVD 受影响范围进行比较
- 版本处于受影响范围内 → 保持严重性不变
- 版本处于所有范围之外 → 降级为 `medium`
- 尚无富化数据,或未找到产品 → 执行容错处理(保持严重性不变)
- Microsoft/Windows → 始终保持严重性不变(每个 Windows 终端都会受影响)
该关卡只会降级严重性——它永远不会提升严重性。如果分析师刻意设定了
较低的严重性,该关卡不会将其向上覆盖。
因为该关卡在每次导出时都会针对当前的富化数据触发,所以导出结果中的
严重性会自动反映补丁更新情况:一旦软件包被更新并超出了受影响范围,
下一次导出就会自动将该 CVE 降级,无需任何人工干预。
## 导出和验证

导出会生成一个带有时间戳的 schema 1.1 JSON 快照以及匹配的 SHA256 伴随文件。
系统会保留最近的五个快照,并且任何之前的快照都可以回滚作为
当前导出结果。每个快照记录了条目数量、TLP 分类和用于
验证的完整哈希值。
### 导出 Schema 1.1 字段
导出中的每个指标包含:
| 字段 | 描述 |
|---|---|
| `type` | 指标类型 (ip, domain, hash, cve, asn, ttp, url) |
| `value` | 规范化后的指标值 |
| `evidence_class` | Infrastructure / Artifact / Vulnerability / Behavior |
| `confidence` | 综合信任分数 (0–100) |
| `severity` | 经关卡计算得出的有效严重性 |
| `tlp` | TLP 分类 |
| `engine_action` | Block / Alert / Log |
| `source_list` | 报告此指标的所有订阅源 |
| `source_count` | 独立来源的数量 |
| `first_seen` / `last_seen` | 时间戳 |
| `expires_at` | 计算出的过期时间 |
| `lane` | automated 或 human |
| `approved_at` / `approved_by` | 审批元数据 |
| `description` | 订阅源提供的描述或技术名称 |
| `affected_vendor` | CVE: 来自 CISA KEV 的供应商 |
| `affected_product` | CVE: 来自 CISA KEV 的产品 |
验证最近的导出:
```
python verify_export.py
```
列出所有保留的快照:
```
python verify_export.py --list
```
验证特定快照:
```
python verify_export.py intel_export_20260428_185654_287293_standard.json
```
退出代码 0 = 验证通过。退出代码 1 = 被篡改或缺失。
## 订阅源
| 订阅源 | 类型 | 等级 | 指标 |
|---|---|---|---|
| MITRE ATT\&CK | TTP | 1 | Techniques (T-codes) |
| CISA KEV | CVE | 1 | Known Exploited Vulnerabilities |
| Spamhaus ASN-DROP | ASN | 1 | Hijacked / malicious ASNs |
| MalwareBazaar | Hash | 1 | Recent malware sample SHA256s |
| Feodo Tracker | IP | 1 | Active C2 botnet IPs |
| URLhaus | URL | 2 | Active malware distribution URLs |
| ThreatFox | IP/Domain/URL/Hash | 2 | Multi-type threat indicators |
| AlienVault OTX | IP/Domain/URL/Hash | 2 | Community threat pulses |
GreyNoise 仅用于 IP 富化——不是批量订阅源。
NVD 仅用于 CVE 版本富化——不是批量订阅源。
## 置信度模型
- **基础权重** — 根据订阅源等级设定(Tier 1 为 70-85)
- **新的独立来源** — +10 交叉印证奖励
- **同源重复拉取** — 更新 `last_seen`,无奖励
- **Tier 3 来源** — 在 Tier 1 来源提供交叉印证之前,上限为 60
- **过期后重新观察** — 置信度重置为订阅源基础权重,条目返回待处理状态
## 衰减时间表
| 类型 | 早期阶段 TTL | 早期惩罚 | 晚期阶段 TTL | 晚期惩罚 |
|---|---|---|---|---|
| IP / Domain / URL | 7 天 | -10 | 21 天 | -20 |
| ASN / Hash | 30 天 | -10 | 90 天 | -20 |
| CVE | 90 天 | -10 | 180 天 | -20 |
| TTP | 永久 | — | — | — |
## 设置
### 要求
- Python 3.10+
- Windows (scanner.py 使用 `winreg`)
- pip 包: `flask`, `requests`, `python-dotenv`, `packaging`
```
pip install flask requests python-dotenv packaging
```
### API 密钥
将 `config.example.env` 复制到 `.env` 并填入您的密钥:
```
cp config.example.env .env
```
| 密钥 | 来源 | 是否必需 |
|---|---|---|
| `ABUSE_CH_API_KEY` | auth.abuse.ch | 是 |
| `OTX_API_KEY` | otx.alienvault.com | 是 (OTX) |
| `GREYNOISE_API_KEY` | greynoise.io | 否 (留空表示未认证,每天 10 次查询) |
| `NVD_API_KEY` | nvd.nist.gov/developers/request-an-api-key | 否 (推荐 — 50 请求/30秒 vs 5 请求/30秒) |
MITRE ATT&CK、CISA KEV 和 Spamhaus 不需要 API 密钥。
### 首次运行
```
launch.bat
```
打开一个持久化的终端窗口,并在 6001 端口启动 Flask 服务器。
在浏览器中访问 `http://localhost:6001`。
数据库会在首次启动时自动创建于 `Data\intel.db`。
已安装软件清单会在每次启动时写入
`%USERPROFILE%\Desktop\SOC\Config\installed_software.json`。
## 项目结构
```
Intel\
├── src\
│ ├── app\
│ │ └── app.py — Flask dashboard (all routes)
│ ├── db\
│ │ ├── database.py — Schema, migrations, connection, audit log
│ │ └── ingest.py — Insert / update / corroboration logic
│ ├── feeds\
│ │ ├── base.py — BaseFeed (pull, normalize, ingest, health log)
│ │ ├── runner.py — Parallel feed orchestration
│ │ ├── greynoise.py — IP enrichment (on-demand, not a feed)
│ │ ├── nvd.py — CVE version enrichment (on-demand, not a feed)
│ │ └── [mitre, cisa_kev, spamhaus, malwarebazaar,
│ │ urlhaus, threatfox, feodo, otx].py
│ ├── normalizer.py — Raw to normalized entry; type ceilings; CVE severity gate
│ ├── scanner.py — Windows registry scan → installed_software.json
│ ├── decay.py — Phase-based confidence decay
│ └── exporter.py — Schema 1.1 JSON export, SHA256 sidecar, rollback, pruning
├── verify_export.py — Standalone export verification tool
├── launch.bat — Start server (persistent terminal)
├── config.example.env — API key template (commit this, not .env)
├── .gitignore
└── Documentation\
├── Intel_Test_Guide.md
└── Screenshots\ — Dashboard screenshots used in this README
```
## 状态生命周期
```
pending -> approved / rejected
pending -> pending_review (feed update changes a significant field)
approved -> pending_review (feed update changes a significant field)
approved -> expired (decay reaches 0)
expired -> pending (re-observed by a feed — confidence resets)
```
## Night's Watch 家庭 SOC 套件的一部分
此流水线是独立的情报层(阶段 1 + 阶段 2A 已完成)。
阶段 2B 将通过流水线设计文档中定义的 SOC 仪表板 "Update Intel" 流程,
将导出功能与 SOC 关联引擎集成。
标签:CVE, CVE严重性降级, CVE相关性, Flask, GPT, GreyNoise, Home SOC, IoC, IP地址, IP 地址批量处理, JSON导出, Night's Watch, NVD, Python, SHA256, TI, TLP协议, TTP, URL, 人工审查, 仪表板, 关联引擎, 分析师审批, 哈希, 域名, 威胁情报, 安全运营中心, 实时处理, 开发者工具, 情报丰富, 情报收集, 情报管线, 情报衰减, 情报证实, 指标摄入, 数字签名, 无后门, 无线安全, 漏洞严重性评估, 漏洞研究, 漏洞管理, 版本范围检查, 网络安全, 网络安全审计, 网络映射, 置信度评分, 资产暴露, 软件清单扫描, 逆向工具, 防御自动化, 隐私保护