
# ThreatHub
### 🛡️ 网络威胁情报与 IOC 调查平台
**在一个调查工作区内验证、富化、评分、关联、可视化和管理入侵指标。**








[演示](#-demo) •
[概述](#-overview) •
[功能](#-key-features) •
[关联](#-ioc-correlation-engine) •
[架构](#-architecture) •
[快速开始](#-quick-start) •
[API](#-rest-api) •
[安全](#-security-and-privacy)
## 🎬 演示
该演示展示了完整的调查工作流:
1. 创建一个命名的调查案件。
2. 添加并验证多个 IOC。
3. 查询兼容的威胁情报提供商。
4. 查看标准化的判定结果和来源证据。
5. 详细检查单个 IOC。
6. 探索生成的关系图谱。
7. 查看每个检测到的连接背后的证据。
## 🔎 概述
ThreatHub 是一个全栈网络威胁情报平台,可将原始的入侵指标转化为结构化、可重用的调查案件。
该平台接受 IP 地址、域名、URL 和文件哈希,通过多个威胁情报提供商对其进行丰富,计算标准化的风险评分,提取相关证据,并发现指标之间的关系。
ThreatHub 在同一个分析引擎之上包含两个接口:
- 一个基于 React 和 TypeScript 的 Web 应用程序,用于案件管理和可视化。
- 一个基于 Rich 的 Python CLI,用于终端调查。
调查报告、图谱数据和案件元数据本地存储在 SQLite 中。缓存层减少了重复的 API 请求,加快了重复搜索的速度,并限制了不必要的提供商配额消耗。
## 🎯 问题背景
威胁情报调查通常要求分析人员:
- 跨多个外部平台搜索相同的 IOC。
- 比较不一致的提供商响应格式。
- 手动跟踪结果。
- 确定指标是否有关联。
- 在后续调查中重新打开以前的发现。
- 管理 API 配额和提供商故障。
- 从通用分类中分离出有意义的证据。
ThreatHub 将此流程集中到一个调查工作区中。
```
flowchart LR
A[Raw IOCs] --> B[Validation]
B --> C[Multi-source enrichment]
C --> D[Normalization]
D --> E[Risk scoring]
D --> F[Evidence correlation]
E --> G[Investigation results]
F --> H[Relationship graph]
G --> I[Saved case]
H --> I
```
## ✨ 核心功能
### 多来源情报富化
ThreatHub 集成了多个威胁情报提供商:
| 提供商 | 主要用途 | 证据示例 |
|---|---|---|
| VirusTotal | 信誉和多引擎分析 | 检测计数、分类、解析记录、联系的 IP、URL 和文件 |
| AbuseIPDB | IP 滥用信誉 | 滥用置信度、报告计数、ISP、使用类型和国家 |
| Shodan | 面向互联网的基础设施 | 端口、服务、主机名、组织、漏洞和地理位置 |
| AlienVault OTX | 威胁活动上下文 | Pulse、标签、活动、引用和恶意软件上下文 |
| URLScan.io | Web 和基础设施分析 | 截图、重定向、关联域名、IP、品牌和判定结果 |
| MalwareBazaar | 恶意软件样本情报 | 签名、哈希、文件元数据、标签和引用 |
采集器会根据 IOC 类型动态选择。不支持的提供商会被自动跳过。
### 调查案件管理
- 创建命名的调查案件。
- 添加可选的案件描述。
- 在一个工作流中分析多个 IOC。
- 将新的 IOC 添加到现有案件中。
- 跳过重复的指标。
- 移除单个指标。
- 在案件更改后重建关系。
- 导出案件信息。
- 删除完整案件。
- 从 SQLite 恢复已保存的案件。
### IOC 分析
- 自动检测 IOC 类型。
- 内联输入验证。
- 多 IOC 分析。
- 并发 IOC 处理。
- 并发提供商收集。
- 标准化的判定结果和风险评分。
- 特定来源的证据面板。
- 关联 IOC 发现。
- 备用哈希查找。
- 人类可读的威胁上下文。
- 国家和基础设施元数据。
### 分析师可视化
- 案件概览卡片。
- 严重性摘要。
- IOC 结果表。
- 单个 IOC 详情面板。
- 交互式关系图谱。
- 关系证据卡片。
- Shodan 地理位置地图。
- URLScan 截图预览。
- 恶意软件家族摘要。
- 关联基础设施视图。
### 弹性与性能
- 特定来源的缓存。
- 备用哈希缓存重用。
- 可配置的强制刷新。
- 提供商超时隔离。
- 实时提供商失败后的缓存回退。
- 并发收集。
- 去重的关系图谱。
- 针对密集证据组的简化布局。
## 🧾 支持的 IOC 类型
| IOC 类型 | 示例 | 兼容的采集器 |
|---|---|---|
| IPv4 | `8.8.8.8` | VirusTotal, AbuseIPDB, Shodan, OTX, URLScan |
| IPv6 | `2001:4860:4860::8888` | VirusTotal, AbuseIPDB, Shodan, OTX, URLScan |
| Domain | `example.com` | VirusTotal, URLScan, OTX |
| URL | `https://example.com/login` | VirusTotal, URLScan, OTX |
| MD5 | `44d88612fea8a8f36de82e1278abb02f` | VirusTotal, MalwareBazaar, OTX |
| SHA-1 | 40 字符的十六进制哈希 | VirusTotal, MalwareBazaar, OTX |
| SHA-256 | 64 字符的十六进制哈希 | VirusTotal, MalwareBazaar, OTX |
后端使用能力矩阵来确定哪些采集器与每个 IOC 兼容。
## 🧠 IOC 关联引擎
ThreatHub 会比较来自同一调查的指标,并仅在具备支持性证据时创建图谱关系。
### 支持的关系类型
| 关系 | 含义 | 证据示例 |
|---|---|---|
| `SUBDOMAIN` | 一个域名是另一个域名的真实子域 | 解析并标准化的域名 |
| `RESOLVES_TO` | 观察到一个域名解析到某个 IP | 结构化的 VirusTotal 解析记录 |
| `HOSTED_ON` | 一个 URL 托管在已分析的域名或 IP 上 | 解析的 URL 主机名或 URLScan 页面证据 |
| `SHARED_INFRASTRUCTURE` | 指标共享基础设施 | 共同的 IP 或托管证据 |
| `SAME_MALWARE_FAMILY` | 文件哈希共享特定的恶意软件家族 | 标准化的 MalwareBazaar 或提供商分类 |
| `COMMUNICATES_WITH` | 恶意软件样本联系了另一个 IOC | 联系的 IP、URL 或域名证据 |
| `MENTIONED_TOGETHER` | 指标共享相关的威胁上下文 | 上下文相关的 OTX pulse 证据 |
每个关系包含:
- 源 IOC。
- 目标 IOC。
- 关系类型。
- 人类可读的描述。
- 置信度。
- 证据类别。
- 方向性元数据。
### 关联防护措施
ThreatHub 包含多项防护措施,旨在减少误报关系:
- 关系是从结构化的提供商字段中提取的,而不是任意的原始报告文本。
- 域名和 IP 在比较前会被标准化。
- URL 关系使用解析后的主机名,而不是子字符串匹配。
- 长相相似的域名不会被自动视为子域。
- OTX pulse 在被选中之前会根据案件上下文进行评分。
- 无关或通用的 pulse 会被拒绝。
- 通用的恶意软件标签不会作为特定的恶意软件家族被接受。
- 威胁行为者名称不会被视为恶意软件家族名称。
- 重复的家族关系使用星型布局,而不是完全的成对图谱。
- 重复和较低优先级的关系在渲染前会被简化。
被拒绝的通用标签示例包括:
```
trojan
dropper
trojan/dropper
ransomware
backdoor
APT backdoor
generic malware
Lazarus
Moonstone Sleet
```
被接受的特定家族名称示例包括:
```
SUNBURST
NukeSped
Teardrop
Cuba
```
### 关联流水线
```
flowchart LR
A[Provider reports] --> B[Structured evidence extraction]
B --> C[IOC normalization]
C --> D[Relationship rules]
D --> E[Context and confidence checks]
E --> F[False-positive filters]
F --> G[Deduplication]
G --> H[Graph simplification]
H --> I[Visual graph and evidence cards]
```
### 密集图谱简化
当多个文件属于同一恶意软件家族时,ThreatHub 会避免创建所有可能的成对连接。
对于六个相关文件:
```
Pairwise graph: 15 edges
Star graph: 5 edges
```
星型布局在保持连通性的同时,生成了更清晰、更有用的调查图谱。
## 📊 风险评分
ThreatHub 计算一个 `0` 到 `10` 的标准化风险评分。
| 评分 | 判定 |
|---:|---|
| 9–10 | `CRITICAL` |
| 7–8 | `HIGH` |
| 4–6 | `MEDIUM` |
| 1–3 | `LOW` |
| 0 | `CLEAN` |
该评分可能会考虑以下证据:
- VirusTotal 恶意引擎检测。
- AbuseIPDB 滥用置信度评分。
- MalwareBazaar 恶意软件识别。
- URLScan 恶意判定结果。
- AlienVault OTX pulse 关联。
- 提供商信誉和分类信号。
该评分上限为 `10`。
后端还会生成人类可读的风险因素,解释哪些证据影响了结果。
## ⚡ 并发分析
ThreatHub 在两个级别执行并发分析:
1. 提交给 API 的多个 IOC 被并发处理。
2. 每个 IOC 兼容的采集器并发运行。
```
flowchart TB
A[Investigation request] --> B1[IOC 1]
A --> B2[IOC 2]
A --> B3[IOC 3]
B1 --> C11[VirusTotal]
B1 --> C12[OTX]
B1 --> C13[MalwareBazaar]
B2 --> C21[VirusTotal]
B2 --> C22[URLScan]
B2 --> C23[OTX]
B3 --> C31[VirusTotal]
B3 --> C32[AbuseIPDB]
B3 --> C33[Shodan]
```
来自一个提供商的失败或超时不会自动使整个 IOC 报告失效。
## 💾 本地缓存
ThreatHub 将完整的分析报告存储在本地 SQLite 数据库中。
缓存包括:
- IOC 值和类型。
- 首次发现时间戳。
- 最后扫描时间戳。
- 搜索计数。
- 风险评分。
- 完整的序列化报告。
- 特定提供商的结果。
- 案件结果和图谱数据。
默认的缓存有效期窗口为 24 小时。
### 备用哈希缓存
同一文件样本的报告可能包含多个哈希。
如果样本已通过 SHA-256 进行过分析,后续的 MD5 或 SHA-1 搜索可以重用现有报告,而无需重复所有提供商请求。
强制刷新会绕过备用哈希重用,以便执行真正全新的提供商查询。
这减少了:
- 重复的 API 请求。
- 提供商配额使用。
- 分析时间。
- 冗余的数据库记录。
## 🏗 架构
```
flowchart TB
Analyst[Security Analyst]
Analyst --> Web[React + TypeScript Web UI]
Analyst --> CLI[Rich Python CLI]
Web -->|REST JSON| API[Flask REST API]
CLI --> Engine[Summary Engine]
API --> Engine
Engine --> Parser[IOC Parser and Capability Matrix]
Engine --> Cache[(SQLite Cache and Cases)]
Engine --> Collectors[Concurrent Collector Layer]
Collectors --> VT[VirusTotal]
Collectors --> Abuse[AbuseIPDB]
Collectors --> Shodan[Shodan]
Collectors --> OTX[AlienVault OTX]
Collectors --> URLScan[URLScan.io]
Collectors --> MB[MalwareBazaar]
VT --> Normalize[Normalization Layer]
Abuse --> Normalize
Shodan --> Normalize
OTX --> Normalize
URLScan --> Normalize
MB --> Normalize
Normalize --> Score[Risk Scoring]
Normalize --> Correlate[IOC Correlation Engine]
Score --> Report[Normalized IOC Reports]
Correlate --> Graph[Relationship Graph]
Report --> Cache
Graph --> Cache
Report --> API
Graph --> API
Report --> CLI
```
## 🔄 分析流程
```
sequenceDiagram
actor User
participant UI as React Frontend
participant API as Flask API
participant Engine as Summary Engine
participant DB as SQLite
participant Providers as Intelligence Providers
User->>UI: Submit one or more IOCs
UI->>UI: Validate and identify IOC types
UI->>API: POST /api/analyze
API->>Engine: Analyze indicators concurrently
loop For each IOC
Engine->>DB: Check fresh cache
alt Fresh report exists
DB-->>Engine: Return cached report
else Live enrichment required
Engine->>Providers: Query compatible providers concurrently
Providers-->>Engine: Return provider evidence
Engine->>Engine: Normalize and score
Engine->>DB: Save fresh report
end
end
Engine->>Engine: Extract relationship evidence
Engine->>Engine: Correlate and simplify graph
Engine-->>API: Results and graph
API-->>UI: JSON response
UI-->>User: Tables, evidence, maps and graph
```
## 🗂 项目结构
```
ThreatHub/
├── README.md
├── .gitignore
├── docs/
│ └── assets/
│ └── threathub-demo.gif
├── backend/
│ ├── .env.example
│ ├── api/
│ │ └── server_api.py
│ ├── cli/
│ │ └── main_cli.py
│ ├── src/
│ │ ├── analysis/
│ │ │ └── summary_engine.py
│ │ ├── collectors/
│ │ │ ├── abuseipdb.py
│ │ │ ├── base_collector.py
│ │ │ ├── malwarebazaar.py
│ │ │ ├── otx.py
│ │ │ ├── shodan.py
│ │ │ ├── urlscan.py
│ │ │ └── virustotal.py
│ │ ├── core/
│ │ │ ├── country_mapper.py
│ │ │ ├── database.py
│ │ │ ├── input_parser.py
│ │ │ ├── normalizers.py
│ │ │ └── utils.py
│ │ └── config.py
│ ├── tests/
│ │ ├── integration/
│ │ └── unit/
│ │ ├── test_analysis/
│ │ ├── test_collectors/
│ │ └── test_core/
│ ├── pyproject.toml
│ ├── requirements.txt
│ └── run_cli.sh
└── frontend/
├── .env.example
├── public/
│ └── shield.png
├── src/
│ ├── components/
│ ├── hooks/
│ ├── lib/
│ ├── pages/
│ ├── test/
│ └── types/
├── package.json
├── package-lock.json
├── vite.config.ts
└── vitest.config.ts
```
虚拟环境、`.env` 文件、SQLite 数据库、本地数据库备份、构建输出、缓存文件和本地维护脚本被排除在版本控制之外。
## 🧰 技术栈
### 前端
- React 18
- TypeScript
- Vite
- Tailwind CSS
- shadcn/ui
- Radix UI
- React Router
- TanStack Query
- React Flow
- Cytoscape
- ELK.js
- Dagre
- Leaflet
- Recharts
- Vitest
- Testing Library
### 后端
- Python 3.10+
- Flask
- Flask-CORS
- SQLite
- Requests
- Rich
- Pandas
- OpenPyXL
- Graphviz
- python-dotenv
- PyCountry
- Pytest
- pytest-cov
- pytest-asyncio
- pytest-mock
## 🚀 快速开始
### 前置条件
安装:
- Git
- Python 3.10 或更新版本
- Node.js 18 或更新版本
- npm
- 您打算使用的提供商的 API 密钥
缺少 API 密钥将禁用相关的采集器。其他已配置的提供商可以继续运行。
### 1. 克隆仓库
```
git clone https://github.com/ElinorCohen/threathub-cti-platform.git
cd threathub-cti-platform
```
### 2. 配置后端
#### macOS 或 Linux
```
cd backend
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
cp .env.example .env
```
将您的 API 密钥添加到 `backend/.env`:
```
VT_API_KEY=
SHODAN_API_KEY=
ABUSEIPDB_API_KEY=
OTX_API_KEY=
MALWAREBAZAAR_API_KEY=
URLSCAN_API_KEY=
IPINFO_API_KEY=
API_PORT=5001
```
启动 API:
_BLOCK_12/>
后端监听于:
```
http://127.0.0.1:5001
```
#### Windows PowerShell
```
cd backend
py -m venv venv
.\venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
Copy-Item .env.example .env
$env:PYTHONPATH = "."
python api/server_api.py
```
### 3. 配置前端
打开另一个终端:
```
cd frontend
npm ci
cp .env.example .env
```
在 `frontend/.env` 中设置 API 基础 URL:
```
VITE_API_BASE=http://127.0.0.1:5001/api
```
启动 Vite:
```
npm run dev
```
打开:
```
http://localhost:8080
```
## 🖥 CLI 使用方法
### macOS 或 Linux
```
cd backend
source venv/bin/activate
export PYTHONPATH="$(pwd):$PYTHONPATH"
python cli/main_cli.py
```
也可以使用辅助脚本:
```
cd backend
chmod +x run_cli.sh
./run_cli.sh
```
### Windows PowerShell
```
cd backend
.\venv\Scripts\Activate.ps1
$env:PYTHONPATH = (Get-Location).Path
python cli/main_cli.py
```
CLI 提供:
- 单个 IOC 分析。
- 从文件批量输入。
- 带有颜色编码的判定结果。
- 特定于提供商的证据。
- 关联的 IOC 信息。
- 搜索历史元数据。
- 结构化的终端表格。
- 进度指示器。
## ⚙️ 环境变量
### 后端
| 变量 | 提供商或组件 | 用途 |
|---|---|---|
| `VT_API_KEY` | VirusTotal | 信誉、分析和相关对象证据 |
| `SHODAN_API_KEY` | Shodan | 主机、服务、端口和漏洞信息 |
| `ABUSEIPDB_API_KEY` | AbuseIPDB | IP 滥用信誉 |
| `OTX_API_KEY` | AlienVault OTX | Pulse 和活动上下文 |
| `MALWAREBAZAAR_API_KEY` | MalwareBazaar | 恶意软件样本查询 |
| `URLSCAN_API_KEY` | URLScan.io | 搜索和活动网站扫描 |
| `IPINFO_API_KEY` | 预留集成 | 未来的富化支持 |
| `API_PORT` | Flask API | 后端监听端口;默认为 `5001` |
### 前端
| 变量 | 默认 | 用途 |
|---|---|---|
| `VITE_API_BASE` | `http://127.0.0.1:5001/api` | 后端 REST API 基础 URL |
切勿提交真实的凭据。
## 🔌 REST API
本地 API 基础 URL 为:
```
http://127.0.0.1:5001/api
```
### 分析 IOC
```
POST /api/analyze
Content-Type: application/json
```
请求示例:
```
{
"iocs": [
{
"value": "8.8.8.8",
"type": "IPv4"
},
{
"value": "example.com",
"type": "DOMAIN"
}
]
}
```
响应结构示例:
```
{
"results": [
{
"id": "generated-result-id",
"value": "8.8.8.8",
"type": "IPv4",
"verdict": "LOW",
"score": 2,
"sources": [],
"analyzedAt": "2026-01-01T12:00:00+00:00"
}
],
"graph": {
"nodes": [],
"links": []
}
}
```
### 案件端点
| 方法 | 端点 | 用途 |
|---|---|---|
| `GET` | `/api/cases` | 列出已保存的调查案件 |
| `GET` | `/api/cases/{case_id}` | 获取一个案件 |
| `POST` | `/api/cases` | 创建或更新案件 |
| `DELETE` | `/api/cases/{case_id}` | 删除案件 |
| `POST` | `/api/cases/{case_id}/add-iocs` | 分析并追加新的 IOC |
| `DELETE` | `/api/cases/{case_id}/iocs/{ioc_value}` | 删除 IOC 并重建图谱 |
当添加或删除指标时,关系图谱将被重新计算,并保存更新后的案件。
## 🗄 数据库
ThreatHub 使用本地 SQLite 数据库:
```
backend/cti_data.db
```
数据库在后端初始化时自动创建。
### IOC 记录
IOC 缓存存储:
- IOC 值。
- IOC 类型。
- 首次发现时间戳。
- 最后扫描时间戳。
- 搜索计数。
- 风险评分。
- 序列化的提供商报告。
### 案件记录
调查案件存储:
- 案件 ID。
- 案件名称。
- 描述。
- 状态。
- 创建和更新时间戳。
- IOC 计数。
- 标准化的结果。
- 关系数据。
- 图谱节点和链接。
由于数据库可能包含私密的调查历史和敏感指标,因此已将其从 Git 中排除。
## 🧪 测试
### 后端
```
cd backend
source venv/bin/activate
pytest
pytest -v
pytest --cov=src
pytest tests/unit
pytest tests/integration
pytest tests/unit/test_analysis -v
```
后端测试套件涵盖:
- 采集器初始化。
- 缺失 API 密钥的行为。
- 提供商错误和超时。
- 响应解析。
- IOC 验证。
- 数据标准化。
- 风险评分。
- SQLite 操作。
- 备用哈希查找。
- 案件持久化。
- 强制刷新行为。
- DNS 关系。
- URL 主机关系。
- 共享基础设施。
- 文件通信。
- OTX pulse 相关性。
- 拒绝通用恶意软件标签。
- 恶意软件家族图谱简化。
- 防止误报关联。
### 前端
```
cd frontend
npm run build
npm run lint
npm test
npm run test:watch
```
## 🛠 开发命令
### 前端
| 命令 | 用途 |
|---|---|
| `npm run dev` | 启动 Vite 开发服务器 |
| `npm run build` | 创建生产环境构建 |
| `npm run preview` | 预览生产环境构建 |
| `npm run lint` | 运行 ESLint |
| `npm test` | 运行一次 Vitest |
| `npm run test:watch` | 在监视模式下运行测试 |
### 后端
| 命令 | 用途 |
|---|---|
| `pytest` | 运行完整的后端测试套件 |
| `pytest -v` | 以详细输出模式运行测试 |
| `pytest --cov=src` | 生成源代码覆盖率 |
| `python cli/main_cli.py` | 启动 CLI |
| `PYTHONPATH=. python api/server_api.py` | 启动 Flask API |
## 🔐 安全与隐私
### API 密钥
- 仅将 API 密钥存储在 `backend/.env` 中。
- 切勿提交 `.env`。
- 切勿通过前端变量暴露提供商密钥。
- 一旦暴露,请立即轮换凭据。
- 避免在日志或截图中打印机密信息。
- 在生产环境中使用受管理的密钥存储服务。
### 敏感 IOC 查询
提交的指标将被发送到配置的第三方提供商。
查询可能会泄露:
- 内部基础设施。
- 客户指标。
- 正在调查的可疑域名。
- 事件响应上下文。
- 先前未知的 URL。
在提交机密指标之前,请查看每个提供商的隐私政策和服务条款。
### URLScan 可见性
当前的 URLScan 主动扫描工作流可能会使用公开可见性。
请勿提交:
- 内部 URL。
- 身份验证链接。
- 仅限客户的系统。
- 机密基础设施。
- 包含敏感 token 的 URL。
在将 collector 与私有 URL 一起使用之前,请更改其配置。
### 开发服务器
内置的 Flask 服务器仅用于本地开发。
它可能会:
- 在启用调试模式的情况下运行。
- 允许广泛的 CORS 访问。
- 在没有身份验证的情况下运行。
- 在没有授权的情况下运行。
- 在没有速率限制的情况下运行。
在未增加额外安全控制的情况下,请勿将其公开暴露。
### 本地数据库
SQLite 数据库可能包含调查历史、提供商响应、基础设施元数据、案件描述和 IOC 值。
请勿将其发布或附加到公开的错误报告中。
## 🚢 生产环境建议
在公开部署之前:
- 禁用 Flask 调试模式。
- 使用 Gunicorn、Waitress 或其他 WSGI 服务器。
- 将 CORS 限制为已批准的来源。
- 添加身份验证。
- 添加基于角色的授权。
- 添加 schema 验证。
- 添加请求大小限制。
- 添加速率限制。
- 使用 HTTPS。
- 使用密钥管理器。
- 添加结构化日志记录。
- 避免记录机密的 IOC。
- 将长时间运行的分析移至后台 worker。
- 添加数据库迁移。
- 在多用户环境中考虑使用 PostgreSQL。
- 添加保留策略。
- 添加依赖项扫描。
- 添加自动机密扫描。
- 添加 CI/CD 检查。
## 🩺 故障排除
前端无法连接到后端
确认后端正在运行:
```
http://127.0.0.1:5001
```
确认 `frontend/.env` 包含:
```
VITE_API_BASE=http://127.0.0.1:5001/api
```
更改环境文件后重新启动 Vite。
直接测试 API:
```
curl http://127.0.0.1:5001/api/cases
```
在 macOS 上端口 5000 返回 HTTP 403
某些 macOS 系统将端口 `5000` 用于 AirPlay Receiver,并返回类似以下的响应:
```
HTTP/1.1 403 Forbidden
Server: AirTunes
```
因此,ThreatHub 默认使用端口 `5001`。
使用:
```
API_PORT=5001
```
和:
```
VITE_API_BASE=http://127.0.0.1:5001/api
```
提供商返回“Missing API Key”
将相关变量添加到 `backend/.env` 并重新启动后端。
请从 `backend` 目录运行后端,以便 `python-dotenv` 能够定位到环境文件。
提供商超时或未返回数据
检查:
- API 密钥权限。
- 提供商配额。
- 速率限制。
- 网络可用性。
- 正确的 IOC 格式。
- 提供商可用性。
ThreatHub 会隔离提供商故障,并在可用时重用缓存的源数据。
应用程序启动时出现旧案件
案件是从以下位置恢复的:
```
backend/cti_data.db
```
仅在您确实想要重置本地调查历史时,才备份或移除数据库。
CLI 无法导入 src 包
请从 `backend` 目录运行 CLI 并配置 `PYTHONPATH`:
```
export PYTHONPATH="$(pwd):$PYTHONPATH"
python cli/main_cli.py
```
## 🗺 路线图
未来潜在的改进包括:
- 身份验证和用户账户。
- 多用户调查工作区。
- 基于角色的访问控制。
- Docker 和 Docker Compose。
- 后台分析作业。
- 使用 WebSockets 或服务器发送事件的实时进度更新。
- 分析师笔记和标签。
- 证据附件。
- PDF、JSON 和 CSV 案件报告。
- STIX 2.1 支持。
- TAXII 集成。
- MISP 集成。
- Sigma 规则管理。
- YARA 规则管理。
- 定期的 IOC 重新扫描。
- 判定变更警报。
- 提供商健康监控。
- API 配额监控。
- 扩展的图谱实体类型。
- PostgreSQL 支持。
- 完整的前端测试覆盖率。
- 端到端测试。
- 持续集成。
- 自动化依赖审查。
- 自动化机密扫描。
## ⚖️ 负责任的使用
仅对您获得授权可以分析的指标、系统和调查使用 ThreatHub。
尊重:
- 提供商服务条款。
- API 配额。
- 隐私要求。
- 数据处理义务。
- 适用法律。
威胁情报数据可能包含误报、过期报告、Sinkhole、共享托管基础设施、受损的合法服务或安全研究系统。
提供商的判定结果应被视为调查证据,而非确凿的证据。
## 🤝 贡献
为每个更改创建单独的分支:
```
git switch -c feature/your-feature-name
```
进行更改后:
```
git add .
git commit -m "feat: describe the change"
git push -u origin feature/your-feature-name
```
贡献应:
- 避免提交凭据。
- 避免提交调查数据库。
- 在可行的情况下包含测试。
- 保持前端 API 契约。
- 记录新的环境变量。
- 为新的提供商包含采集器测试。
- 通过后端测试和前端构建检查。
## 👤 作者
**Elinor Cohen**
作为一个全栈网络安全和威胁情报项目构建,它结合了:
- 外部 API 集成。
- 并发处理。
- 数据标准化。
- 本地缓存。
- SQLite 持久化。
- 调查案件管理。
- 风险评分。
- 基于证据的 IOC 关联。
- 误报过滤。
- 交互式图谱可视化。
- 后端和前端工程。
## 📄 许可证
目前未包含任何开源许可证。
在添加许可证之前,源代码仍受仓库所有者的默认版权所有权约束。