janderik/threat-pulse

GitHub: janderik/threat-pulse

一款开源威胁情报平台,通过聚合多源 OSINT 数据实现 IOC 管理、威胁评分和 MITRE ATT&CK 关联映射。

Stars: 0 | Forks: 0

# ThreatPulse [![CI](https://github.com/user/threatpulse/actions/workflows/ci.yml/badge.svg)](https://github.com/user/threatpulse/actions/workflows/ci.yml) [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) **ThreatPulse** 是一个开源的**威胁情报平台 (TIP)**,可从多个 OSINT 来源收集、分析、关联并存储威胁指标 (IOC)。它提供了用于查询和管理威胁数据的 REST API,并包含一个用于优先处理最危险威胁的评分引擎。 ## 架构 ``` ┌─────────────────────────────┐ │ OSINT Collectors │ │ ┌─────┐ ┌──────┐ ┌───────┐ │ │ │OTX │ │Abuse │ │ MITRE │ │ │ │Feed │ │IPDB │ │ATT&CK │ │ │ └──┬──┘ └──┬───┘ └───┬───┘ │ │ │ │ │ │ │ ┌──┴───────┴─────────┴──┐ │ │ │ Custom Feeds │ │ │ └───────────────────────┘ │ └──────────┬──────────────────┘ │ ┌──────────▼──────────────────┐ │ Correlation Engine │ │ ┌──────────────────┐ │ │ │ Threat Scorer │ │ │ └──────────────────┘ │ └──────────┬──────────────────┘ │ ┌──────────▼──────────────────┐ │ Database │ │ (PostgreSQL / SQLite) │ └──────────┬──────────────────┘ │ ┌──────────▼──────────────────┐ │ FastAPI REST API │ │ ┌──────────────────────┐ │ │ │ /api/v1/iocs │ │ │ │ /api/v1/threats │ │ │ │ /api/v1/search │ │ │ │ /api/v1/stats │ │ │ └──────────────────────┘ │ └─────────────────────────────┘ ``` ## 功能 - **OSINT Feed 采集器** — AlienVault OTX、AbuseIPDB、MITRE ATT&CK、自定义 JSON/YAML/CSV feeds - **IOC 管理** — IP、域名、URL、哈希 (MD5/SHA1/SHA256)、CVE、电子邮件 - **威胁评分引擎** — 基于可信度、类型、来源和标签的加权评分 - **关联引擎** — 通过共享标签、MITRE ID 和来源关联相关的 IOC - **MITRE ATT&CK 集成** — 将威胁映射到技术、战术、组织和软件 - **REST API** — 针对 IOC 和威胁的完整 CRUD、搜索和统计 - **PostgreSQL + SQLite** — 生产环境使用 PostgreSQL,开发环境回退至 SQLite - **异步采集器** — 支持可配置间隔的并发 feed 获取 - **Docker 支持** — 通过 docker-compose 进行容器化部署 ## 快速开始 ### 本地开发 ``` # Clone 和 install git clone https://github.com/user/threatpulse.git cd threatpulse pip install -r requirements.txt pip install -e . # 启动 API server python -m src.main server # 或者:运行 collectors 一次 python -m src.main collect-once ``` API 将在 `http://localhost:8000` 提供。 ### Docker 部署 ``` docker-compose up --build ``` ## 配置 设置环境变量或将它们放在 `.env` 文件中: | 变量 | 默认值 | 描述 | |---|---|---| | `DATABASE_URL` | `sqlite:///data/threatpulse.db` | PostgreSQL 或 SQLite DSN | | `ALIENVAULT_API_KEY` | `""` | AlienVault OTX API 密钥 | | `ABUSEIPDB_API_KEY` | `""` | AbuseIPDB API 密钥 | | `COLLECTOR_INTERVAL_MINUTES` | `15` | 采集器运行间隔 | | `LOG_LEVEL` | `INFO` | 日志级别 | | `HOST` | `0.0.0.0` | API 绑定地址 | | `PORT` | `8000` | API 端口 | ## API Endpoints ### IOC | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/api/v1/iocs` | 创建新的 IOC | | `GET` | `/api/v1/iocs` | 列出/搜索 IOC | | `GET` | `/api/v1/iocs/{id}` | 通过 ID 获取 IOC | | `DELETE` | `/api/v1/iocs/{id}` | 删除 IOC | `GET /api/v1/iocs` 的查询参数: - `value` — 部分值匹配 - `ioc_type` — 按类型过滤 (`ip`, `domain`, `url`, `md5`, `sha256`, `cve`, `email`) - `source` — 按来源过滤 - `confidence` — 按可信度过滤 (`low`, `medium`, `high`, `critical`) - `active_only` — 仅显示活跃的 IOC (默认: `true`) - `limit` / `offset` — 分页 ### 威胁 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/api/v1/threats` | 创建新威胁 | | `GET` | `/api/v1/threats` | 列出/搜索威胁 | | `GET` | `/api/v1/threats/{id}` | 通过 ID 获取威胁 | | `PATCH` | `/api/v1/threats/{id}/status` | 更新威胁状态 | | `DELETE` | `/api/v1/threats/{id}` | 删除威胁 | ### 搜索与统计 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/api/v1/search?q=...` | 跨 IOC 和威胁的全文搜索 | | `GET` | `/api/v1/stats` | 平台统计信息 | | `GET` | `/api/v1/health` | 健康检查 | ## 使用示例 ``` # 添加一个 IOC curl -X POST http://localhost:8000/api/v1/iocs \ -H "Content-Type: application/json" \ -d '{"type": "ip", "value": "185.220.101.42", "confidence": "high", "tags": ["c2", "emotet"]}' # 搜索 IOCs curl "http://localhost:8000/api/v1/iocs?value=185.&ioc_type=ip" # 创建一个 threat curl -X POST http://localhost:8000/api/v1/threats \ -H "Content-Type: application/json" \ -d '{"name": "Emotet Campaign", "tags": ["emotet", "malware"]}' # 搜索所有内容 curl "http://localhost:8000/api/v1/search?q=emotet" # 检查 stats curl http://localhost:8000/api/v1/stats ``` ## 测试 ``` pytest tests/ -v --cov=src ``` ## 许可证 MIT
标签:ESC4, IOC管理, OSINT, Python, REST API, 威胁情报, 安全监控, 开发者工具, 无后门, 测试用例, 网络测绘, 请求拦截, 逆向工具