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, 开发者工具, 数据聚合, 数据集成, 无后门, 网络威胁, 网络安全, 网络测绘, 逆向工具, 隐私保护