Sami9211/ThreatOrbit---An-Opensource-Threat-Intelligence-Library
GitHub: Sami9211/ThreatOrbit---An-Opensource-Threat-Intelligence-Library
一个聚合多源威胁情报并输出标准化 STIX 2.1 的轻量服务,解决 IOC 收集与共享的碎片化问题。
Stars: 0 | Forks: 0
# ThreatOrbit — 威胁情报库
聚合 **AlienVault OTX** 和 **abuse.ch** 的 IOC(入侵指标),
通过 **VirusTotal** 进行增强,
将所有数据转换为 **STIX 2.1**,并通过 **FastAPI REST API** 暴露。
## 功能概述
```
AlienVault OTX ──┐
├──► Fetch IOCs ──► Deduplicate ──► Enrich (VirusTotal)
abuse.ch ─────────┘ │
▼
Convert to STIX 2.1
│
▼
FastAPI REST API / JSON file
(ready for OpenCTI / TAXII)
```
## 先决条件
| 要求 | 说明 |
|---|---|
| Python 3.11 或 3.12 | 使用 `python --version` 检查版本 |
| pip | 随 Python 一起安装 |
| AlienVault OTX 账户 | 免费注册:https://otx.alienvault.com |
| VirusTotal 账户 | 免费注册:https://www.virustotal.com |
## 步骤 1 — 获取 API 密钥
### AlienVault OTX
1. 访问 https://otx.alienvault.com 并创建免费账户
2. 登录后,点击右上角 **用户名 → 设置(Settings)**
3. API 密钥显示在 **"OTX Key"** 下,复制该值
### VirusTotal
1. 访问 https://www.virustotal.com 并创建免费账户
2. 登录后,点击右上角 **个人头像 → API Key**
3. 复制页面显示的密钥
## 步骤 2 — 初始化项目
在终端中依次运行以下命令:
```
# 将项目文件夹克隆或复制到您的机器,然后:
cd ctil
# 创建虚拟环境(保持依赖隔离)
python -m venv venv
# 激活虚拟环境
# 在 Windows 上:
venv\Scripts\activate
# 在 Mac/Linux 上:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
你将看到依赖包正在安装,这大约需要 1–2 分钟。
## 步骤 3 — 添加 API 密钥到 config.py
用任意文本编辑器打开 `config.py`,并替换占位符值:
```
# 第 8 行 — 替换为您的 OTX 密钥
OTX_API_KEY = "abc123yourkeyhere"
# 第 18 行 — 替换为您的 VirusTotal 密钥
VIRUSTOTAL_API_KEY = "def456yourkeyhere"
```
保存文件。这是运行前唯一需要修改的内容。
## 步骤 4 — 启动 API 服务
```
# 确保您在 ctil/ 文件夹中且 venv 已激活
uvicorn main:app --reload
```
你将看到类似如下的输出:
```
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process
```
**保持该终端窗口打开。** 服务将持续运行,直到你按下 `CTRL+C`。
## 步骤 5 — 使用 API
在浏览器中打开:
```
http://127.0.0.1:8000/docs
```
这将打开 **Swagger UI** —— 一个可视化接口,用于测试所有 API 端点。
你可以直接在此触发数据获取并查看结果。
## API 端点
### 触发从所有来源完整获取数据
```
POST http://127.0.0.1:8000/fetch
```
- 该操作在后台运行(耗时 2–5 分钟,取决于 VirusTotal 速率限制)
- 查询参数 `?enrich=false` 可跳过 VirusTotal 增强(速度更快,不消耗 API 配额)
- 查询参数 `?max_enrich=20` 可限制 VT 调用次数(默认:50)
### 检查库状态
```
GET http://127.0.0.1:8000/stats
```
返回总 IOC 数量、按类型分类的统计,以及最后获取时间。
### 浏览所有 IOC
```
GET http://127.0.0.1:8000/iocs
```
可选过滤参数:
- `?ioc_type=ip` — 仅显示 IP
- `?ioc_type=hash` — 仅显示文件哈希
- `?threat_type=botnet`
- `?malicious_only=true` — 仅显示 VirusTotal 确认为恶意的条目
- `?limit=50&offset=0` — 分页支持
### 搜索特定值
```
GET http://127.0.0.1:8000/iocs/search?q=185.220
```
### 精确查找 IOC
```
GET http://127.0.0.1:8000/iocs/185.220.101.1
```
### 导出全部数据为 STIX 2.1 包
```
POST http://127.0.0.1:8000/stix/export
```
返回 STIX 2.1 Bundle JSON,并将 `stix_bundle.json` 保存到磁盘。
### 下载最近保存的 STIX 包
```
GET http://127.0.0.1:8000/stix/bundle
```
## 无浏览器测试(使用 curl)
```
# 触发获取(无 VirusTotal 丰富功能,更快)
curl -X POST "http://127.0.0.1:8000/fetch?enrich=false"
# 检查统计信息
curl http://127.0.0.1:8000/stats
# 获取前 10 个 IOC
curl "http://127.0.0.1:8000/iocs?limit=10"
# 导出 STIX bundle
curl -X POST http://127.0.0.1:8000/stix/export -o bundle.json
```
## 项目文件结构
```
ctil/
├── config.py ← API keys go here
├── models.py ← IOC data models
├── main.py ← FastAPI server
├── requirements.txt ← Python dependencies
│
├── fetchers/
│ ├── otx.py ← AlienVault OTX feed
│ └── abusech.py ← URLhaus, MalwareBazaar, Feodo Tracker
│
├── enrichment/
│ └── virustotal.py ← VirusTotal enrichment
│
└── stix_converter/
└── converter.py ← STIX 2.1 bundle generation
```
## 单独运行模块(用于测试)
你可以独立测试每个组件:
```
# 单独测试 OTX 获取器
python fetchers/otx.py
# 单独测试 abuse.ch 获取器
python fetchers/abusech.py
# 在已知恶意哈希上测试 VirusTotal 丰富功能
python enrichment/virustotal.py
# 使用虚拟 IOC 测试 STIX 转换
python stix_converter/converter.py
```
## 连接 OpenCTI(准备就绪后)
部署 OpenCTI 后,按以下步骤操作:
1. 打开 `config.py`
2. 设置 `OPENCTI_URL` 为你的 OpenCTI 实例地址(如 `http://localhost:8080`)
3. 设置 `OPENCTI_API_KEY` 为你的 OpenCTI API 密钥(在 OpenCTI → 个人资料中查找)
4. 导出 STIX 包:调用 `POST /stix/export`
5. 通过以下方式将 `stix_bundle.json` 导入 OpenCTI:
- OpenCTI UI → **数据 → 导入 → 上传文件**
- 或使用 OpenCTI Python 客户端以编程方式推送
## 常见问题与解决
| 问题 | 解决方法 |
|---|---|
| `ModuleNotFoundError: No module named 'fastapi'` | 激活虚拟环境后运行 `pip install -r requirements.txt` |
| OTX 返回 0 个 IOC | 检查 `config.py` 中的 API 密钥,确保完全匹配且无空格 |
| VirusTotal 返回 429 | 已达到速率限制 —— 等待 60 秒,或设置 `?max_enrich=10` |
| 服务器无法在 8000 端口启动 | 在 `config.py` 中修改 `API_PORT` 为其他值,如 8001 |
| `venv\Scripts\activate` 在 Windows 上无法使用 | 在 PowerShell 中运行,而非 CMD |
标签:abuse.ch, API服务, Ask搜索, AV绕过, FastAPI, IOC聚合, OpenCTI, Python, REST API, STIX 2.1, TAXII, VirusTotal, 去重, 威胁情报, 富 enrichment, 开发者工具, 数据聚合, 数据集成, 无后门, 网络威胁, 网络安全, 网络测绘, 逆向工具, 隐私保护