AJings3c/Threat-Intelligence

GitHub: AJings3c/Threat-Intelligence

全球威胁情报聚合平台,实时监控网络安全威胁。

Stars: 0 | Forks: 0

# 威胁情报平台 **全球威胁情报资源平台** — 将公共网络威胁情报源聚合到一个统一的态势感知仪表板中。 该平台从多个公开源中提取指标,将它们归一化到单个 数据模型中,地理定位IP指标,并通过实时 仪表板展示所有内容:世界威胁地图、实时指标源、最新CVE面板、严重性 过滤/搜索、以及按来源的 freshness/health 监控。它还可以将新的高严重性威胁的预定警报摘要推送到 **钉钉** 和 **Telegram**。 ## 数据源(所有均为公开,无需API密钥) | 源 | 内容 | 类型 | |----|------|------| | **CISA KEV** | 已知已利用漏洞目录 | 已利用漏洞 | | **abuse.ch Feodo Tracker** | 恶意软件分发URL | 恶意URL | | **abuse.ch URLhaus** | 恶意软件分发URL | 恶意URL | | **NVD** | 最新发布的CVE | 漏洞 | ## 架构 ``` threat-intel-platform/ ├── backend/ Node + Express + TypeScript API (fetch → normalize → geo → cache) │ └── src/ │ ├── sources/ one module per feed (cisaKev, feodo, urlhaus, nvd) │ ├── store.ts in-memory aggregator + periodic refresh + stats │ ├── geo.ts best-effort IP geolocation (ip-api batch) │ └── index.ts Express server + REST API └── frontend/ Vite + React + TypeScript + Tailwind dashboard └── src/components/ map, feed table, CVE panel, stats, source health ``` 后端在启动时和每次 `REFRESH_INTERVAL_MS`(默认15分钟)时获取所有源,将它们归一化到统一的 `ThreatIndicator` 模型中,并服务缓存结果,以便UI保持快速,并且上游源不会被过度使用。 ### REST API | 端点 | 描述 | |------|-------------| | `GET /api/health` | 服务状态 + 每个源的健康状况 | | `GET /api/threats` | 指标,可按 `source`、`type`、`severity`、`q`、`limit` 过滤 | | `GET /api/map` | 地理定位的地图指标 | | `GET /api/cve` | 来自NVD的最新CVE | | `GET /api/stats` | 聚合计数(按源/类型/严重性,顶级国家) | | `GET /api/sources/health` | 每个源的新鲜度和错误状态 | | `GET /api/notify/status` | 警报通知器配置 + 最后运行状态 | | `POST /api/notify/test` | 立即向配置的频道发送测试摘要 | ## 快速开始 需要Node.js >= 20(见 `.nvmrc`)。 ``` npm install # installs both workspaces npm run dev # backend on :4000, frontend on :5173 (proxies /api) ``` 打开 http://localhost:5173。 ### 生产构建 ``` npm run build # builds backend (tsc) + frontend (vite) npm start # serves API and the built frontend from :4000 ``` 当 `frontend/dist` 存在时,后端直接提供服务,因此单个进程托管 API和仪表板。 ## 脚本 | 命令 | 描述 | |------|-------------| | `npm run dev` | 在监视模式下运行后端 + 前端 | | `npm run build` | 构建两个工作区 | | `npm run typecheck` | 对两个工作区进行类型检查 | | `npm run lint` | 对两个工作区进行代码风格检查 | ## 警报(钉钉 / Telegram 定时推送) 后端可以定期推送**新**威胁的摘要(通过指标ID去重,按严重性/来源过滤)到钉钉和/或Telegram机器人。默认情况下是**关闭的**,并且 仅在 `NOTIFY_ENABLED=true` 且至少配置了一个频道时激活。 在启动时,通知器将其基线与初始数据集进行校准,因此第一个摘要仅包含服务启动后出现的威胁 — 没有历史垃圾邮件。 ``` # 启用 + 钉钉(完整 webhook URL 或仅 access_token) NOTIFY_ENABLED=true \ DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxxx" \ DINGTALK_SECRET="SECxxxx" \ # optional: enables HMAC-SHA256 signing NOTIFY_MIN_SEVERITY=critical \ npm start -w backend # Telegram NOTIFY_ENABLED=true \ TELEGRAM_BOT_TOKEN="123456:ABC..." \ TELEGRAM_CHAT_ID="-1001234567890" \ npm start -w backend ``` 任何时候都可以使用 `curl -X POST http://localhost:4000/api/notify/test` 验证连接。 查看 `.env.example` 获取变量的完整列表。 - **钉钉**:群组 → 设置 → 机器人 → 添加 *自定义* 机器人。使用关键词或 *签名* 安全选项(设置 `DINGTALK_SECRET`)。复制webhook(或只需其 `access_token`)。 - **Telegram**:通过 [@BotFather](https://t.me/BotFather) 创建机器人以获取令牌,然后 获取您的聊天ID(例如,向机器人发送消息并阅读 `https://api.telegram.org/bot/getUpdates`, 或将机器人添加到群组/频道)。 ## 配置 | 环境变量 | 默认 | 描述 | |---------|------|-------------| | `PORT` | `4000` | 后端端口 | | `REFRESH_INTERVAL_MS` | `900000` | 源刷新间隔(15分钟) | | `VITE_API_BASE` | `''` | 前端API基础(留空以使用同源/开发代理) | | `NOTIFY_ENABLED` | `false` | 定时警报推送的主开关 | | `NOTIFY_INTERVAL_MS` | `3600000` | 摘要推送间隔(1小时) | | `NOTIFY_MIN_SEVERITY` | `critical` | 警报的最小严重性(`low`/`medium`/`high`/`critical`) | | `NOTIFY_SOURCES` | _(all)_ | 逗号分隔的源列表以限制来源(`cisa_kev,feodo,urlhaus,nvd`) | | `NOTIFY_MAX_ITEMS` | `10` | 每个摘要消息的最大项目数 | | `DINGTALK_WEBHOOK` | — | 钉钉机器人webhook URL或 `access_token` | | `DINGTALK_SECRET` | — | 钉钉签名密钥(可选) | | `TELEGRAM_BOT_TOKEN` | — | 从BotFather获取的Telegram机器人令牌 | | `TELEGRAM_CHAT_ID` | — | Telegram聊天/群组/频道ID | ## 许可证 MIT。用于防御和研究。所有上游数据均受每个提供者条款的约束(CISA、abuse.ch、NVD)。
标签:API健康检查, API开发, C2服务器, CVE, DingTalk, Express, GNU通用公共许可证, GPT, HTTP/HTTPS抓包, IP地理位置, masscan, MITM代理, Node.js, React, RESTful API, Syscalls, Tailwind CSS, Telegram, TypeScript, Vite, WSL, 全球威胁地图, 威胁情报, 威胁情报平台, 安全插件, 开发者工具, 态势感知, 恶意URL, 提示词优化, 数字签名, 数据模型, 数据聚合, 漏洞管理, 缓存机制, 网络安全, 自动化攻击, 隐私保护