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, 代码示例, 告警生成, 威胁情报平台, 威胁指标, 威胁评分, 安全仪表盘, 安全编排, 密码管理, 态势感知, 情报收集, 数据分析, 数据库管理, 无后门, 日志记录, 漏洞发现, 漏洞研究, 网络安全, 自动化响应, 访问控制, 逆向工具, 隐私保护