joshi-parwaaz/SecInt-Threat-Intlligence-Platform
GitHub: joshi-parwaaz/SecInt-Threat-Intlligence-Platform
面向蓝队的开源威胁情报聚合与可视化平台,自动采集多源 IOC 并评分,帮助安全团队高效研判与响应。
Stars: 0 | Forks: 0
# SecInt — 威胁情报平台
**在线演示:** https://secint.vercel.app *(部署后请更新此项)*
聚合来自 AlienVault OTX、URLhaus、AbuseIPDB 和 VirusTotal 的 IOC。对其进行丰富处理,自动评分严重程度,并在实时 React 仪表盘中直观展示所有信息。
## 技术栈
| | |
|---|---|
| 前端 | React 18, Tailwind CSS, Recharts, Framer Motion |
| 后端 | FastAPI, APScheduler(6小时 IOC 自动刷新) |
| 数据库 | MongoDB via Motor (async) |
| 托管 | Vercel · Render · MongoDB Atlas — 均为免费套餐 |
## 本地运行
**前置条件:** Python 3.10+, Node.js 18+, MongoDB (本地或 Atlas)
### 1. 后端
```
cd backend
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```
创建你的 `.env` 文件:
```
cp .env.example .env
```
打开 `.env` 并至少设置:
```
MONGO_URI=mongodb://localhost:27017/secint # or your Atlas URI
CORS_ORIGINS=http://localhost:3000
```
API 密钥是可选的 — 如果没有提供,将自动加载演示数据集。
启动服务器:
```
uvicorn main:app --reload
# 运行于 http://localhost:8000
# Swagger 文档位于 http://localhost:8000/docs
```
你应该会在终端中看到:
```
✅ Connected to MongoDB
✅ MongoDB indexes verified
🌱 Demo dataset loaded: 119 IOCs available immediately
⏰ IOC refresh scheduler started
```
### 2. 前端
```
# 新终端,从项目根目录
cd frontend
npm install
npm start
# 打开于 http://localhost:3000
```
仪表盘会立即加载数据。如果未设置 API 密钥,顶部会出现一个黄色的演示模式横幅。
### 故障排除
| 问题 | 解决方法 |
|---|---|
| `ModuleNotFoundError` | 确保虚拟环境已激活,运行 `pip install -r requirements.txt` |
| 仪表盘不显示数据 | 访问 `http://localhost:8000/api/iocs/stats` — 如果返回了数据,则说明是 CORS 问题。检查 `.env` 中的 `CORS_ORIGINS=http://localhost:3000` |
| MongoDB 连接被拒绝 | 启动本地 MongoDB (`mongod`) 或使用 Atlas URI |
| 端口 8000 被占用 | `uvicorn main:app --reload --port 8001` 并在 `frontend/.env` 中设置 `REACT_APP_API_URL=http://localhost:8001` |
## 部署 ($0/月)
按以下顺序部署:Atlas → Render → Vercel。
### 1. MongoDB Atlas
1. [cloud.mongodb.com](https://cloud.mongodb.com) → 免费的 M0 集群
2. **Network Access** → 添加 `0.0.0.0/0`
3. **Database Access** → 创建用户,保存密码
4. **Connect → Drivers** → 复制连接字符串,将数据库设置为 `secint`:
mongodb+srv://user:pass@cluster.mongodb.net/secint?retryWrites=true&w=majority
### 2. Render (后端)
1. 将仓库推送到 GitHub
2. [render.com](https://render.com) → New Web Service → 关联仓库
3. 设置:
| | |
|---|---|
| Root Directory | `backend` |
| Build Command | `pip install -r requirements.txt` |
| Start Command | `uvicorn main:app --host 0.0.0.0 --port $PORT` |
4. 环境变量 (Render 仪表盘 → Environment 标签页):
| 键 | 值 |
|---|---|
| `MONGO_URI` | 你的 Atlas 连接字符串 |
| `OTX_API_KEY` | 你的密钥,或留空以使用演示模式 |
| `VIRUSTOTAL_API_KEY` | 你的密钥,或留空 |
| `ABUSEIPDB_API_KEY` | 你的密钥,或留空 |
| `CORS_ORIGINS` | `https://your-app.vercel.app` (在第 3 步后填写) |
| `REFRESH_INTERVAL_HOURS` | `6` |
5. 部署。验证: `https://secint-api.onrender.com/health` → `{"status":"healthy"}`
### 3. Vercel (前端)
```
cd frontend
npx vercel
```
出现提示时,设置环境变量:
```
REACT_APP_API_URL = https://secint-api.onrender.com
```
或者通过 Vercel 仪表盘操作:New Project → 导入仓库 → Root Directory: `frontend` → 添加上述环境变量 → Deploy。
### 4. 连接它们
返回 Render → Environment → 更新 `CORS_ORIGINS` 为你实际的 Vercel URL → Save (将自动重新部署)。
### 5. 更新此 README
将顶部的在线演示链接替换为你真实的 Vercel URL。对于访问此仓库的人来说,这一行是最重要的。
## API 端点
当后端运行时,可在 `/docs` 查看完整的交互式文档。
| 端点 | 描述 |
|---|---|
| `GET /api/iocs/` | 列出 IOC (按类型、严重程度、来源筛选) |
| `GET /api/iocs/stats` | 按类型、严重程度、来源统计数量 — 单次聚合 |
| `GET /api/iocs/search?q=emotet` | 全文搜索 |
| `GET /api/iocs/critical` | 仅显示 CRITICAL (严重) IOC,按分数排序 |
| `GET /api/reports/top-threats` | 按严重程度分数排名的前 N 个威胁 |
| `GET /api/reports/download/csv` | 导出为 CSV |
| `GET /api/reports/download/json` | 导出为 JSON |
| `GET /api/reports/download/html` | 带样式的 HTML 报告 |
| `POST /api/ingestion/trigger` | 手动触发数据源刷新 |
| `GET /health/scheduler` | 后台调度器状态 |
## 严重程度评分
| 等级 | 分数 | 条件 |
|---|---|---|
| 🔴 CRITICAL | ≥ 70 | VT 检出率 > 80% 或已知的严重家族 (Emotet, LockBit, Cobalt Strike…) |
| 🟠 HIGH | 45–69 | VT > 50% 或 AbuseIPDB 置信度 > 70% |
| 🟡 MEDIUM | 20–44 | VT > 20% 或 AbuseIPDB > 50% |
| 🟢 LOW | 1–19 | 仅包含低置信度信号 |
## 威胁来源
| 来源 | 免费套餐 |
|---|---|
| [AlienVault OTX](https://otx.alienvault.com/api) | 无限制 |
| [URLhaus](https://urlhaus.abuse.ch) | 无需密钥 |
| [AbuseIPDB](https://www.abuseipdb.com/account/api) | 每天 1,000 次检查 |
| [VirusTotal](https://www.virustotal.com/gui/my-apikey) | 每天 500 次请求 |
标签:AbuseIPDB, Ask搜索, AV绕过, FastAPI, GNU通用公共许可证, IOC聚合, masscan, MongoDB, Node.js, OSV, Python, React, Render, SOC工具, Syscalls, Tailwind CSS, URLhaus, Vercel, VirusTotal, 威胁情报平台, 威胁数据关联, 安全可视化, 安全运营, 实时仪表盘, 实时处理, 开源安全项目, 情报收集, 扫描框架, 指标自动评分, 无后门, 漏洞发现, 漏洞研究, 网络安全, 自动化威胁分析, 自定义脚本, 蓝军对抗, 逆向工具, 隐私保护