Mohsahal/Threat-Intelligence-platform
GitHub: Mohsahal/Threat-Intelligence-platform
基于Flask和MongoDB构建的轻量级威胁情报平台,通过对接VirusTotal实现指标自动化收集、评分与告警,并提供REST API与可视化看板。
Stars: 0 | Forks: 0
# 🛡️ 威胁情报平台 (TIP)
一个基于 **Python 3.10+**、**MongoDB** 和 **Flask** 构建的生产就绪型威胁情报平台。它从 VirusTotal 收集威胁数据,对其进行标准化处理并存储在 MongoDB 中,根据严重程度对指标进行评分,然后通过 REST API 暴露数据和警报。
## 📁 项目结构
```
threat-intelligence-platform/
│
├── app.py # Flask REST API (entry point)
├── collector.py # Pipeline orchestrator
├── virustotal_client.py # VirusTotal API wrapper (with retry logic)
├── normalizer.py # Raw API response → clean document
├── scorer.py # Threat scoring & alert generation
├── storage.py # MongoDB CRUD helpers
├── database.py # MongoDB connection manager
├── config.py # Config loader (reads .env)
├── logger.py # Centralised logging
├── streamlit_app.py # Optional Streamlit dashboard
│
├── .env # Your environment variables (git-ignored)
├── .env.example # Template – copy to .env
├── requirements.txt # Python dependencies
├── logs/
│ └── tip.log # Auto-created at runtime
└── README.md
```
## ⚡ 快速开始
### 1. 前置条件
| 工具 | 版本 |
|------|---------|
| Python | 3.10 或更高版本 |
| MongoDB | 6.x,在本地端口 27017 上运行 |
| Virusotal 账号 | 免费版,访问 [virustotal.com](https://www.virustotal.com/) |
### 2. 安装依赖
```
pip install -r requirements.txt
```
### 3. 配置环境
```
# 复制示例文件
copy .env.example .env # Windows
cp .env.example .env # Linux / macOS
# 打开 .env 并将 YOUR_VIRUSTOTAL_API_KEY_HERE 替换为你的真实密钥
```
### 4. 启动 MongoDB
确保 MongoDB 正在本地运行:
```
# Windows (如果作为服务安装)
net start MongoDB
# 或者直接启动 mongod
mongod --dbpath "C:\data\db"
```
### 5. 启动 Flask API
```
python app.py
```
你应该会看到:
```
2026-04-14 20:00:00 [INFO ] ThreatIntelPlatform → Connecting to MongoDB at mongodb://localhost:27017/
2026-04-14 20:00:00 [INFO ] ThreatIntelPlatform → MongoDB connection successful.
2026-04-14 20:00:00 [INFO ] ThreatIntelPlatform → Starting Threat Intelligence Platform API on 0.0.0.0:5000
* Running on http://0.0.0.0:5000
```
### 6. (可选)Streamlit 仪表板
配置好 MongoDB 后,你可以在浏览器 UI 中收集和浏览指标(此 UI 不需要 Flask):
```
streamlit run streamlit_app.py
```
## 🌐 REST API 参考
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/health` | 存活探针 – 检查 API + MongoDB |
| `GET` | `/alerts` | 列出所有警报(可选 `?severity=high`) |
| `GET` | `/threats` | 列出所有存储的威胁指标 |
| `GET` | `/threats/` | 获取单个 IP 或域名 |
| `POST` | `/collect` | 触发一次收集运行 |
### POST /collect – 请求体
```
{
"indicators": ["8.8.8.8", "example.com", "185.220.101.45"]
}
```
### GET /alerts – 响应示例
```
{
"count": 2,
"alerts": [
{
"indicator": "185.220.101.45",
"indicator_type": "ip",
"threat_score": 82,
"severity": "high",
"malicious_count": 18,
"message": "[HIGH] Threat detected: 185.220.101.45 scored 82/100 on VirusTotal.",
"triggered_at": "2026-04-14T15:00:00+00:00"
}
]
}
```
## 🎯 威胁评分系统
| 分数范围 | 严重程度 | 创建警报? |
|-------------|----------|----------------|
| 0 – 29 | 🟢 低 | 否 |
| 30 – 69 | 🟡 中 | 是 |
| 70 – 100 | 🔴 高 | 是 |
阈值可以在 `.env` 中通过 `LOW_THRESHOLD` 和 `HIGH_THRESHOLD` 进行配置。
## 🧪 快速 API 检查
在 Flask API 运行时(`python app.py`),验证健康状况并列出威胁:
```
curl -s http://localhost:5000/health
curl -s http://localhost:5000/threats
```
## 🔄 重试逻辑
所有对 VirusTotal API 的调用都会在遇到问题时自动重试最多 `MAX_RETRIES` 次,并采用指数退避策略:
- **网络错误** → 重试
- **HTTP 429** (频率限制) → 等待并重试
- **HTTP 5xx** → 重试
- **HTTP 401 / 404** → 立即失败 (不重试)
在 `.env` 中配置 `MAX_RETRIES` 和 `RETRY_DELAY`。
## 📝 日志
所有事件都会记录到终端和 `logs/tip.log` 文件中。
```
logs/tip.log ← persisted across runs
```
## 🔒 安全提示
- 切勿将你的真实 `.env` 文件提交到版本控制中
- 根据最佳实践,`.env` 已被有意排除在源代码之外(已添加到 `.gitignore`)
- VirusTotal 免费版每天允许 **500 次请求** (每分钟 4 次查询)
标签:Ask搜索, DNS 反向解析, ETW劫持, Flask, FTP漏洞扫描, HTTP/HTTPS抓包, IP 地址批量处理, Kubernetes, masscan, MongoDB, nuclei, Python, Python 3.10, REST API, SOC工具, Streamlit, TIP, VirusTotal, 代码示例, 告警生成, 威胁情报平台, 威胁指标, 威胁评分, 安全仪表盘, 安全编排, 密码管理, 态势感知, 情报收集, 数据分析, 数据库管理, 无后门, 日志记录, 漏洞发现, 漏洞研究, 网络安全, 自动化响应, 访问控制, 逆向工具, 隐私保护