BasitS-hash/siem-dashboard
GitHub: BasitS-hash/siem-dashboard
一款基于 React 与 Node.js 的全栈实时 SIEM 仪表板,结合公开威胁情报与滑动窗口检测引擎,对安全事件进行 MITRE ATT&CK 映射与可视化告警。
Stars: 0 | Forks: 0
# 🛡️ SentinelView
### 实时 SIEM 仪表板:集成实时威胁情报与 MITRE ATT&CK 映射
实时流式传输、检测和甄别安全事件 — 基于实时的 abuse.ch 和 CISA KEV 订阅源,通过规则引擎进行关联,并映射到 MITRE ATT&CK 框架。
[](https://github.com/BasitS-hash/siem-dashboard/actions/workflows/ci.yml)
[](https://github.com/BasitS-hash/siem-dashboard/actions/workflows/codeql.yml)
[](https://github.com/BasitS-hash/siem-dashboard/actions/workflows/security.yml)
[](LICENSE)
[](https://www.typescriptlang.org/)
[](https://react.dev/)
[](https://nodejs.org/)
## 概述
**SentinelView** 是一个全栈安全信息和事件管理 (SIEM) 仪表板。Node.js 后端会合成逼真的安全事件流 — 并混合从公开订阅源提取的**真实威胁情报** — 将每个事件通过滑动窗口检测引擎进行处理,并通过 WebSockets 将告警推送到 React 仪表板。每个告警都会映射到相应的 MITRE ATT&CK 战术和技术,在实时的地理威胁地图上进行标绘,并可导出为 CSV。
它作为一个作品集级别的项目进行构建,旨在展示实时数据流水线、威胁检测逻辑、安全的 API 设计以及现代 TypeScript 工程能力 — 而非一个玩具。
## 功能
### 检测与情报
- **实时事件流** — Socket.io 将日志事件和告警推送到浏览器,无需轮询。
- **滑动窗口检测引擎** — 基于状态、按源 IP 在滑动时间窗口内进行关联,并实现告警去重。
- **实时威胁情报** — 每小时从 Feodo Tracker (C2 IP)、URLhaus (恶意软件 URL) 和 CISA KEV (真实 CVE) 刷新数据,并提供离线时的优雅降级回退。
- **MITRE ATT&CK 映射** — 每个告警都包含战术、技术和 technique ID。
- **地理威胁地图** — 源 IP 地理定位并实时标绘。
- **CSV 导出** — 支持导出告警和日志,并采用防止公式注入的安全编码。
### 检测规则 (符合 MITRE ATT&CK)
| 规则 | 触发条件 | MITRE ID | 严重性 |
|------|---------|----------|----------|
| 暴力破解 | 同一 IP 在 60 秒内产生 ≥5 次失败认证 | T1110 | High |
| 端口扫描 | 同一 IP 在 60 秒内扫描 ≥8 个独立端口 | T1046 | High |
| SQL 注入 | 任何带有 `sqli` 标签的请求 | T1190 | Critical |
| 跨站脚本攻击 | 任何带有 `xss` 标签的请求 | T1059.007 | High |
| 数据泄露 | 窗口内外发流量 >10 MB | T1041 | Critical |
| 权限提升 | 包含 `sudo`/提权指示符 | T1548.003 | Critical |
| 反向 Shell / C2 | 包含反向 shell 或 beacon 指示符 | T1071 | Critical |
| 横向移动 | 外部 IP 连接 ≥5 个内部主机 | T1021 | High |
### 仪表板
1. **总览** — KPI 卡片、事件趋势面积图、严重性分布环形图、Top 攻击者、类别细分、近期告警/日志。
2. **实时数据流** — 滚动事件表格,支持暂停/恢复、搜索以及严重性/类别筛选。
3. **告警** — 带有 MITRE 标识的告警卡片,支持确认/解决工作流。
4. **威胁地图** — 在世界地图上对源 IP 进行地理定位展示。
5. **检测规则** — 规则目录,包含阈值、逻辑以及 MITRE 映射。
## 架构
```
flowchart LR
subgraph Intel["Threat Intel Feeds"]
F1[Feodo TrackerC2 IPs] F2[URLhaus
Malware URLs] F3[CISA KEV
CVEs] end subgraph Backend["Node.js Backend"] TI[Threat Intel Feed
hourly refresh + fallback] GEN[Log Generator] DET[Detection Engine
windowed correlation] API[Express REST API
helmet · CORS allowlist · rate limit] WS[Socket.io Gateway] end subgraph Frontend["React + Vite SPA"] HOOK[useSocket hook] UI[Dashboard · Live Feed · Alerts
Threat Map · Rules] end F1 & F2 & F3 --> TI TI --> GEN GEN --> DET DET -->|alerts| WS GEN -->|events| WS API <-->|REST| HOOK WS <-->|WebSocket| HOOK HOOK --> UI ``` **数据流:** 威胁订阅源为生成器提供基础数据 → 事件流经检测引擎 → 告警和事件通过 Socket.io 广播 → React 客户端渲染实时状态,并支持确认/解决以及 CSV 导出。 ## 技术栈 | 层级 | 技术 | |-------|-----------| | Frontend | React 18, TypeScript 5, Vite 5 | | 样式 | Tailwind CSS 3 (暗黑赛博朋克主题) | | 图表 | Recharts (面积图、饼图、柱状图、雷达图) | | 实时通信 | Socket.io | | Backend | Node.js 20+, Express 4 | | 安全 | helmet, express-rate-limit, CORS 白名单, 启动时环境变量校验 | | 测试 | Vitest (+ v8 覆盖率, jsdom) | | 工具 | npm workspaces (monorepo), GitHub Actions, CodeQL, gitleaks, Dependabot | ## 快速开始 ### 前置条件 - Node.js 20+ - npm 10+ ### 安装与运行 ``` git clone https://github.com/BasitS-hash/siem-dashboard.git cd siem-dashboard # 安装所有 workspace (frontend + backend) npm install # 可选:复制并调整环境默认值 cp .env.example .env # 同时运行 backend + frontend npm run dev ``` - **前端:** http://localhost:5200 - **后端 API:** http://localhost:3001 - **WebSocket:** ws://localhost:3001 ### 生产构建 ``` npm run build # builds frontend bundle + compiles backend npm start # serves the backend on port 3001 ``` ### 测试与验证 ``` npm run test --workspace=backend # 61 tests npm run test --workspace=frontend # 21 tests npm run test:coverage --workspace=backend npm run typecheck --workspace=backend npm run typecheck --workspace=frontend ``` ## 配置 所有配置均通过环境变量进行(参见 [`.env.example`](.env.example)): | 变量 | 作用域 | 默认值 | 描述 | |----------|-------|---------|-------------| | `PORT` | Backend | `3001` | 服务器监听端口 (启动时校验) | | `ALLOWED_ORIGINS` | Backend | `localhost:5200,3000` | 逗号分隔的 CORS 白名单 (禁止使用 `*`) | | `RATE_LIMIT_MAX` | Backend | `300` | 每个 IP 每分钟的最大 `/api` 请求数 | | `VITE_BACKEND_URL` | Frontend | `localhost:3001` | 后端 base URL (开发环境使用 Vite proxy) | 无效的值(例如非数字的端口或通配符源)会导致后端在启动时快速失败并给出明确的提示信息。 ## API 参考 ### REST | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/health` | 健康状态 + 威胁情报新鲜度 | | GET | `/api/logs?limit=200` | 近期事件 (limit 限制在 1–500 之间) | | GET | `/api/alerts` | 所有告警 | | GET | `/api/stats` | 当前的聚合统计信息 | | PATCH | `/api/alerts/:id` | 更新告警状态 (校验 id 和 status 枚举) | ### WebSocket 事件 (服务器 → 客户端) | 事件 | Payload | 描述 | |-------|---------|-------------| | `init` | `{ logs, alerts, stats }` | 连接时的初始快照 | | `log` | `LogEvent` | 新的安全事件 | | `alert` | `Alert` | 新的威胁告警 | | `alert_updated` | `Alert` | 告警状态变更 | | `stats` | `Stats` | 聚合统计信息 (每 5 秒) | ## 项目结构 ``` siem-dashboard/ ├── backend/ │ └── src/ │ ├── index.ts # Express + Socket.io server │ ├── config.ts # Env parsing & startup validation │ ├── validation.ts # Pure input validators │ ├── threatDetector.ts # Windowed detection engine + MITRE map │ ├── threatIntelFeed.ts # Feodo / URLhaus / CISA KEV ingestion │ ├── logGenerator.ts # Realistic event generator │ ├── types.ts # Shared types │ └── *.test.ts # Vitest suites ├── frontend/ │ └── src/ │ ├── pages/ # Dashboard, LiveFeed, Alerts, ThreatMap, Rules │ ├── components/ # Charts, cards, table, header, sidebar │ ├── hooks/ # useSocket, useToast │ ├── lib/exportCsv.ts # Injection-safe CSV export │ └── lib/exportCsv.test.ts ├── .github/ │ ├── workflows/ # ci · codeql · security │ └── dependabot.yml ├── SECURITY.md ├── CONTRIBUTING.md └── package.json # npm workspaces root ``` ## 截图 | 总览 | 威胁地图 | 告警 | |----------|-----------|--------| | _即将推出_ | _即将推出_ | _即将推出_ | ## 安全 安全态势、加固细节以及漏洞报告流程记录在 **[SECURITY.md](SECURITY.md)** 中。亮点包括: - **后端加固** — helmet 响应头、CORS 白名单 (拒绝通配符)、基于 IP 的速率限制、JSON body 大小限制、Socket.io payload 大小限制、禁用 `x-powered-by`、集中处理错误且绝不泄露 stack trace。 - **输入校验** — 在边界处对告警 ID、状态枚举和查询限制进行校验/截断。 - **CSV 公式注入防御** — 对以 `= + - @` (以及制表符/回车符) 开头的导出单元格进行转义中和处理。 - **启动配置校验** — 遇到不良环境变量时快速失败。 - **自动化扫描** — CodeQL、gitleaks 和 `npm audit` 在 CI 中运行。 这是一个**演示**项目:设计上没有身份验证,并使用内存存储。请勿按原样部署以处理生产流量 — 请参阅路线图。 ## 路线图 - [ ] 身份验证 + RBAC (JWT / OIDC) - [ ] 持久化存储 (Elasticsearch / ClickHouse / TimescaleDB) - [ ] 真实日志摄取 (syslog, Filebeat, Fluent Bit) - [ ] 带有 Sigma 规则导入的自定义规则构建器 - [ ] 告警集成 (Slack, PagerDuty, 电子邮件) - [ ] Dockerfile + 容器扫描 (Trivy) - [ ] 多租户支持 ## 许可证 [MIT](LICENSE) © 2026 SentinelView SIEM Dashboard ## 致谢 - [MITRE ATT&CK](https://attack.mitre.org/) — 威胁分类框架 - [abuse.ch](https://abuse.ch/) — Feodo Tracker 与 URLhaus 订阅源 - [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) — 已被利用漏洞目录 - [Recharts](https://recharts.org/), [Lucide](https://lucide.dev/), [Tailwind CSS](https://tailwindcss.com/), [Socket.io](https://socket.io/)
标签:GNU通用公共许可证, MITM代理, Node.js, React, Syscalls, TypeScript, 威胁情报, 安全可视化, 安全插件, 安全运营, 开发者工具, 扫描框架, 自动化攻击