wahidhendrawan/ThreatDock
GitHub: wahidhendrawan/ThreatDock
一个全栈威胁情报聚合仪表板,整合多源 CVE、IOC 和安全资讯,提供统一筛选、优先级排序与可视化展示。
Stars: 0 | Forks: 0
# ThreatDock
**ThreatDock** 是一个全栈安全警报和威胁情报仪表板。它汇集了来自国家漏洞数据库 (NVD)、GitHub Security Advisories 和 Red Hat 安全数据的漏洞公告,并利用开源威胁情报丰富这些信息。该仪表板完全在 Docker 中运行,并公开了一个简单的 REST API 和响应式 Web 界面,用于筛选和确定警报的优先级。
## 功能
- **多源数据聚合**
- **GitHub Advisories** – 查询 GitHub 公开的 Security Advisories API,以从开源生态系统中收集 CVE 和安全通告。GitHub token 是可选的,但能提高 API 速率限制。
- **NVD CVEs** – 通过 JSON API 从美国国家漏洞数据库拉取新发布的 CVE,并根据 CVSS 评分推导严重性。
- **Red Hat Security Data** – 从 Red Hat 公开的安全源下载最近的 CVE 和公告,并将 Red Hat 严重性映射到标准的 Critical/High/Medium/Low 值。
- **OTX Pulses** – 与 AlienVault Open Threat Exchange API 集成。当您提供 API key 时,后端会查询您订阅的 pulses (`/api/v1/pulses/subscribed`) 并将每个 pulse 转换为仪表板警报【603937255844768†L49-L52】。由于 API 不包含明确的严重性评级,OTX pulses 被视为中等严重性项目。
- **ThreatFox IOCs** – 与 abuse.ch 的威胁情报平台集成。使用免费的 Auth-Key,后端调用 ThreatFox API (`/api/v1` 并带 `query=get_iocs`) 以检索过去七天的失陷指标【916006223225416†L44-L52】。每个 IOC 都显示为高严重性警报,并带有指向 ThreatFox 门户的链接。
- **MISP events** – ThreatDock 可以从您自己的 MISP 实例获取事件。后端使用 MISP Automation API 的 `/events/index` endpoint 获取最近的事件,并将数字 `threat_level_id` 字段(1 = High,2 = Medium,3 = Low)映射到相应的严重性【380436334720828†L240-L319】。在您的环境中提供 `MISP_URL` 和 `MISP_API_KEY` 以启用此功能。
- **IntelOwl analysis** – 存在一个用于 IntelOwl(一个 OSINT 分析平台)的占位集成。要激活它,请提供 `INTELO_OWL_API_KEY` 并在 `backend/services/intelowl.js` 中实现调用。默认情况下,此集成处于禁用状态。
- **YARA/Sigma rules** – ThreatDock 包含一个将警报与 YARA 和 Sigma 规则匹配的存根。您可以通过实现 `backend/services/yaraSigma.js` 与现有的 YARA/Sigma 服务(例如,您的 `yara-sigma-webui` 项目)集成。匹配的警报作为单独的来源返回。
- **RSS Feeds** – ThreatDock 还可以从精选的网络安全 RSS 源获取新闻和分析。后端解析来自 *awesome-threat-intel-rss* 项目的几个知名源,包括:
- **SANS Internet Storm Center** (源: `https://isc.sans.edu/rssfeed_full.xml`)【36635210653818†L361-L366】 – 一个全球性的网络威胁和互联网安全合作监测机构。
- **US-CERT National Cyber Awareness System – Alerts** (源: `https://us-cert.cisa.gov/ncas/alerts.xml`)【36635210653818†L375-L378】 – 提供有关当前安全问题和漏洞的及时信息。
- **BleepingComputer** (源: `https://www.bleepingcomputer.com/feed`)【36635210653818†L417-L423】 – 一个专注于网络安全威胁和建议的流行科技新闻网站。
- **Dark Reading** (源: `https://www.darkreading.com/rss/all.xml`)【36635210653818†L433-L438】 – 一个受安全专业人士信赖的在线社区。
- **Krebs on Security** (源: `http://krebsonsecurity.com/feed`)【36635210653818†L487-L493】 – 记者 Brian Krebs 对网络犯罪的调查报道。
您可以通过编辑 `backend/services/rss.js` 并添加更多源 URL 来扩展或自定义 RSS 源列表。来自这些源的文章默认被视为低严重性警报,其标题和发布日期显示在仪表板中。
- **REST API** – 所有警报存储在本地 SQLite 数据库中,并通过 `/alerts` 公开。查询参数允许按严重性、来源和日期范围进行筛选。结果按严重性和时间排序。
- **交互式仪表板** – React 前端在可排序的表格中显示警报。用户可以按严重性(Critical、High、Medium、Low)、数据源(GitHub、NVD、Red Hat、OTX、ThreatFox)和日期范围进行筛选。单击警报会在新标签页中打开原始公告或 IOC 页面。
- 该表现在包含 **Attack Phase** 和 **Status** 列。Attack Phase 对应于 MITRE ATT&CK 阶段(目前在实施未来的分类之前默认为“Unknown”)。可以通过下拉菜单将 Status 更改为“Open”、“In Progress”或“Resolved”。
- “Alert Statistics”部分可视化显示了按严重性分布的警报,并使用简单的条形图和折线图(由 Recharts 库提供支持)显示了随时间变化的警报数量。
- **容器化部署** – 应用程序分为后端和前端服务。单个 `docker-compose.yml` 即可启动这两个容器。环境变量在 `backend/.env` 中定义,以配置 API 密钥而无需修改代码。
## 要求
- Docker 和 Docker Compose。
- Node.js 和 npm(仅当您计划在 Docker 之外运行服务时)。
## 设置
1. **克隆或解压代码库。**
2. 导航到项目目录并复制环境模板:
cp backend/.env.example backend/.env
3. 编辑 `backend/.env` 并提供您想使用的任何 API 凭证:
- `GITHUB_TOKEN` – 用于提高 GitHub API 速率限制的个人访问令牌。
- `NVD_API_KEY` – 来自 NVD 的可选 API key,用于获得更高的请求配额。
- `OTX_API_KEY` – 您的 AlienVault OTX API key;获取订阅的 pulses 所需【603937255844768†L49-L52】。
- `THREATFOX_AUTH_KEY` – 您来自 abuse.ch 的 ThreatFox Auth-Key;检索 IOC 所需【916006223225416†L44-L52】。
- `MISP_URL` 和 `MISP_API_KEY` – 用于未来与 MISP 实例集成的占位符。
- `INTELO_OWL_API_KEY` – 为额外的 OSINT 来源保留。
- `SLACK_WEBHOOK_URL` – 可选的 Slack Incoming Webhook URL。如果提供,ThreatDock 将为严重性等于或高于 `NOTIFY_THRESHOLD` 值的警报发送通知。
- `NOTIFY_THRESHOLD` – Slack 通知的严重性阈值(例如 Critical、High、Medium)。默认为 High。
- `AUTH_USER` 和 `AUTH_PASSWORD` – 设置这些以启用后端 API 的 HTTP basic authentication。留空则禁用认证。
4. **构建并运行容器**:
docker-compose up --build
后端监听端口 5000,前端服务在端口 3000 上提供。导航到 `http://localhost:3000` 查看仪表板。
## 用法
- **筛选警报:** 使用页面顶部的下拉菜单选择严重性级别和来源。日期选择器允许您将结果限制为开始和结束日期。更改筛选器时表格会自动更新。
- 其他筛选器允许您选择 **status**(Open、In Progress、Resolved)和 **attack phase**。Attack Phase 值对应于 MITRE ATT&CK 战术类别;目前它们默认为“Unknown”。
- **API 查询:** 后端 API 通过查询参数支持相同的筛选器。例如,要仅检索高严重性的 ThreatFox IOCs:
curl 'http://localhost:5000/alerts?severity=High&source=ThreatFox'
要更新警报的状态(例如,将警报 ID 123 标记为“Resolved”),发送一个 PATCH 请求:
curl -X PATCH 'http://localhost:5000/alerts/123' \
-H 'Content-Type: application/json' \
-d '{"status":"Resolved"}'
## 扩展项目
ThreatDock 设计为可扩展的。要添加另一个威胁情报源:
1. 在 `backend/services/` 下创建一个新模块,该模块使用 `axios` 调用外部 API 并返回对象数组。
2. 在 `backend/app.js` 的 `fetchAllSources()` 中将数据标准化为通用警报模式(`source`、`externalId`、`title`、`severity`、`date`、`url`)。
3. 在前端筛选器组件中添加一个条目以公开新来源。
此外,后端还公开了用于 Slack 通知和基本 HTTP authentication 的存根。要启用 Slack 通知,请在您的环境中设置 `SLACK_WEBHOOK_URL` 和可选的 `NOTIFY_THRESHOLD`。要使用简单凭据保护 API,请设置 `AUTH_USER` 和 `AUTH_PASSWORD`。
## 许可和合理使用
所有集成的 API 均按照其各自的服务条款使用。ThreatFox API 需要免费的 Auth-Key,并且请求必须在 `Auth-Key` header 中包含此密钥【916006223225416†L44-L52】。OTX API 同样需要 `X-OTX-API-KEY` header【603937255844768†L49-L52】。在生产环境中运行 ThreatDock 时,请遵守速率限制和使用策略。
标签:CVE 聚合, CVSS 评分, Docker 容器化, GitHub 安全公告, GPT, IOC 检测, MISP 集成, MITM代理, NVD 数据源, Red Hat 安全, REST API, ThreatFox, 妥协指标, 威胁情报, 威胁情报平台 (TIP), 安全事件响应, 安全仪表盘, 安全数据聚合, 安全编排与自动化, 安全运营, 密码管理, 开发者工具, 扫描框架, 漏洞优先级分析, 漏洞管理, 网络安全, 自定义脚本, 请求拦截, 隐私保护