janderik/threat-pulse
GitHub: janderik/threat-pulse
一款开源威胁情报平台,通过聚合多源 OSINT 数据实现 IOC 管理、威胁评分和 MITRE ATT&CK 关联映射。
Stars: 0 | Forks: 0
# ThreatPulse
[](https://github.com/user/threatpulse/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](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, 威胁情报, 安全监控, 开发者工具, 无后门, 测试用例, 网络测绘, 请求拦截, 逆向工具