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, 提示词优化, 数字签名, 数据模型, 数据聚合, 漏洞管理, 缓存机制, 网络安全, 自动化攻击, 隐私保护