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, 威胁情报平台, 威胁数据关联, 安全可视化, 安全运营, 实时仪表盘, 实时处理, 开源安全项目, 情报收集, 扫描框架, 指标自动评分, 无后门, 漏洞发现, 漏洞研究, 网络安全, 自动化威胁分析, 自定义脚本, 蓝军对抗, 逆向工具, 隐私保护