ManishReal01/ThreatLens

GitHub: ManishReal01/ThreatLens

ThreatLens是一个集成14个开源情报源的开源威胁情报平台,提供自动化指标关联分析与SOC可视化仪表盘,帮助安全团队高效追踪和研判威胁活动。

Stars: 0 | Forks: 0

# ThreatLens — 开源威胁情报平台 ![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-blue?style=flat-square&logo=python) ![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?style=flat-square&logo=fastapi) ![Next.js 14](https://img.shields.io/badge/Next.js-14-black?style=flat-square&logo=next.js) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15-336791?style=flat-square&logo=postgresql) ![License MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square) ## 功能特性 - ✅ **14 个活跃威胁源** — URLhaus, OTX, ThreatFox, CISA KEV, Feodo Tracker, MalwareBazaar, SSLBL, Spamhaus DROP, Emerging Threats, OpenPhish, PhishTank, NVD CVE, VirusTotal 丰富化, GeoIP 丰富化 - ✅ **63,000+ 个已索引 IOC** — IP, 域名, URL, 哈希值 (MD5/SHA1/SHA256) 以及 CVE - ✅ **关联引擎** — 通过共现、时间、子网、恶意软件家族和 TTP 重叠信号自动检测活动;包含 337+ 个关联威胁活动 - ✅ **SOC 指挥中心仪表板** — 实时威胁地图、实时告警、IOC 摄取趋势和顶级威胁行为者 - ✅ **IOC 搜索与过滤** — 跨 7 种 IOC 类型的全文搜索,支持严重性过滤 - ✅ **批量查询** — 粘贴最多 100 个 IOC 进行即时批量查询,并支持 CSV 导出 - ✅ **严重性评分** — 综合分数由信息源可信度 (35%)、来源数量 (25%) 和时效性 (40%) 加权计算 - ✅ **威胁行为者情报** — 完整的 MITRE ATT&CK 对手数据库,包含 IOC 关联 - ✅ **MITRE ATT&CK 矩阵** — 交互式技术热力图可视化 - ✅ **分析师工作区** — 针对每个 IOC 的标签、备注和监视列表,用于分类工作流 - ✅ **GeoIP 威胁地图** — 按严重性显示 IP IOC 来源的世界地图 - ✅ **PDF 报告** — 支持按 IOC 和威胁行为者导出 PDF 报告 ## 技术栈 | 层级 | 技术 | |---|---| | 后端 | FastAPI + Python 3.9+, APScheduler | | ORM | SQLAlchemy async (`asyncpg`) | | 数据库 | PostgreSQL (Supabase transaction pooler) | | 数据迁移 | Alembic | | 前端 | Next.js 14 (App Router), TypeScript, Tailwind CSS v3 | | 图表 | Recharts | | 地图 | react-simple-maps | | 关系图 | React Flow | | PDF | ReportLab | | HTTP 客户端 | `httpx` async 配合 `tenacity` 重试/退避机制 | ## 快速开始 ### 1. 克隆仓库 ``` git clone https://github.com/ManishReal01/threatlens.git cd threatlens ``` ### 2. 配置环境 复制并填写示例文件: ``` cp .env.example backend/.env cp frontend/.env.example frontend/.env.local ``` `backend/.env` 中的最低配置要求: ``` # 必须使用 Transaction Pooler URL(端口 6543) DATABASE_URL=postgresql+asyncpg://postgres.[ref]:[password]@aws-0-ap-south-1.pooler.supabase.com:6543/postgres # 可选 — 留空以禁用该 feed OTX_API_KEY= URLHAUS_API_KEY= VT_API_KEY= ``` ### 3. 运行数据库迁移 ``` cd backend pip install -r requirements.txt alembic upgrade head ``` ### 4. 启动后端 ``` uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` ### 5. 启动前端 ``` cd frontend npm install npm run dev ``` 在浏览器中打开 [http://localhost:3000](http://localhost:3000)。 ## 信息源 | 信息源 | IOC 类型 | 是否需要认证 | |---|---|---| | [URLhaus](https://urlhaus.abuse.ch/) | URL, 域名 | API key (abuse.ch) | | [AlienVault OTX](https://otx.alienvault.com/) | IP, 域名, 哈希值, URL | API key | | [ThreatFox](https://threatfox.abuse.ch/) | IP, 域名, 哈希值, URL | API key (abuse.ch) | | [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) | CVE | 无 | | [Feodo Tracker](https://feodotracker.abuse.ch/) | IP (僵尸网络 C2) | 无 | | [MalwareBazaar](https://bazaar.abuse.ch/) | SHA256, MD5, SHA1 | 无 | | [SSLBL](https://sslbl.abuse.ch/) | SHA1 (SSL 证书) | 无 | | [Spamhaus DROP](https://www.spamhaus.org/drop/) | IP | 无 | | [Emerging Threats](https://rules.emergingthreats.net/) | IP | 无 | | [OpenPhish](https://openphish.com/) | URL | 无 | | [PhishTank](https://www.phishtank.com/) | URL | 无 | | [NVD CVE](https://nvd.nist.gov/) | CVE | 无 | | [MITRE ATT&CK](https://attack.mitre.org/) | 威胁行为者组织 + 技术 | 无 | | [VirusTotal](https://www.virustotal.com/) | IP, 哈希值, URL (丰富化) | API key | | [GeoIP Enricher](https://ip-api.com/) | IP 地理位置 (丰富化) | 无 | ## 关联引擎 ThreatLens 通过触发五个独立信号,自动将相关的 IOC 聚类为威胁活动: | 信号 | 权重 | 逻辑 | |---|---|---| | 共现 | 0.6–0.9 | IOC 在 ≥2 次信息源采集中共同出现 | | 恶意软件家族 | 0.85 | 共享恶意软件家族标签 | | TTP 重叠 | 0.80 | IOC 关联至具有相同技术的威胁行为者 | | 子网聚类 | 0.7–0.85 | IP 共享 /24 子网 | | 时间 | 0.50 | IOC 在 ±3 小时窗口内被摄取 | 仅当 **≥2 个信号被触发** 且合并权重大于等于 0.4 时,边缘才会被保留。具有 ≥5 个成员的集群将成为威胁活动。结果可在 `/campaigns` 中查看。 ## 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Next.js 14 Frontend (Port 3000) │ │ Dashboard · IOC Search · Bulk Lookup · Campaigns │ │ Threat Actors · ATT&CK Matrix · Analyst Workspace │ └───────────────────┬─────────────────────────────────────────┘ │ REST API ┌───────────────────▼─────────────────────────────────────────┐ │ FastAPI Backend (Port 8000) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ IOC Router │ │ Feed Router │ │ Campaigns Router │ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ APScheduler — 14 feed jobs (staggered, long-interval)│ │ │ │ URLhaus · OTX · ThreatFox · CISA KEV · Feodo │ │ │ │ MalwareBazaar · SSLBL · Spamhaus · Emerging Threats │ │ │ │ OpenPhish · PhishTank · NVD · MITRE ATT&CK · VT │ │ │ └──────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Correlation Engine (every 6h) │ │ │ │ 5 signals → BFS clustering → campaign upsert │ │ │ └──────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Normalization + Upsert pipeline │ │ │ │ Canonicalize → NormalizedIOC → upsert_ioc() │ │ │ └──────────────────────────────────────────────────────┘ │ └───────────────────┬─────────────────────────────────────────┘ │ asyncpg (transaction pooler, port 6543) ┌───────────────────▼─────────────────────────────────────────┐ │ PostgreSQL (Supabase) │ │ iocs · ioc_sources · feed_runs · threat_actors │ │ campaigns · campaign_iocs · ioc_relationships │ │ tags · notes · watchlist │ └─────────────────────────────────────────────────────────────┘ ``` ## 环境变量 所有变量均位于 `backend/.env` 中。仅 `DATABASE_URL` 为必填项。 | 变量 | 是否必填 | 描述 | |----------|----------|-------------| | `DATABASE_URL` | **是** | Supabase **transaction pooler** URL — 端口 **6543**。格式:`postgresql+asyncpg://postgres.[ref]:[pass]@aws-0-region.pooler.supabase.com:6543/postgres` | | `ALLOWED_ORIGINS` | 否 | 逗号分隔的 CORS 源。默认值:`http://localhost:3000` | | `OTX_API_KEY` | 否 | [AlienVault OTX](https://otx.alienvault.com/) API key。留空以禁用。 | | `URLHAUS_API_KEY` | 否 | [abuse.ch](https://abuse.ch/) API key — 由 URLhaus 和 ThreatFox 共享。留空以同时禁用这两者。 | | `VT_API_KEY` | 否 | [VirusTotal](https://www.virustotal.com/) 免费 API key。留空以禁用 VT 丰富化。 | 计划间隔和分页限制可以在 `.env` 中被覆盖 — 有关完整列表,请参见 `.env.example` 和 `backend/app/config.py`。 ## 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE)。
标签:AV绕过, CISA KEV, Cloudflare, CVE, ESC4, FastAPI, IOC, IP地址, masscan, MITRE ATT&CK, nuclei, OSINT, OTX, PDF报告, PostgreSQL, Python, SOC仪表盘, ThreatFox, TIP, URLhaus, 严重性评分, 域名, 威胁关联引擎, 威胁地图, 威胁情报平台, 威胁源, 安全分析工作台, 安全运营中心, 恶意哈希, 批量查询, 指标关联, 攻击者画像, 数字签名, 无后门, 测试用例, 网络安全, 网络映射, 自动化活动检测, 资产探测, 逆向工具, 隐私保护