saadnav38/SIEM-dashboard
GitHub: saadnav38/SIEM-dashboard
一个从零构建的轻量级 SIEM 仪表盘,实现了多源日志接入、关联规则检测和交互式可视化,复刻了企业级安全运营平台的核心功能。
Stars: 0 | Forks: 0
# SIEM 仪表盘
一个从零开始构建的安全信息和事件管理(SIEM)仪表盘,用于实时聚合、关联和可视化来自多个日志源的安全事件。
## 概述
本项目复刻了 Splunk 和 IBM QRadar 等企业级 SIEM 平台中的核心功能。它从多个来源接收日志,将其规范化为统一的 schema,运行关联规则以检测攻击模式,并通过交互式 Web 仪表盘将所有内容可视化。
本项目作为作品集构建,旨在展示在安全运营、日志分析和威胁检测方面的实用知识。
## 功能
- **多源日志接入**:支持 Suricata IDS 告警、Linux auth 日志、防火墙日志以及 Suricata eve.json(flow、DNS、DHCP 事件)
- **日志规范化**:将不同的日志格式转换为包含标准字段的一致事件 schema
- **关联规则引擎**:跨多个事件检测暴力破解、账户被盗和端口扫描
- **实时仪表盘**:显示事件时间线、严重性分布、事件类型细分和 Top 源 IP
- **取证追踪(Forensic pivot)**:点击任何源 IP 可过滤整个仪表盘,仅显示该 IP 的活动
- **基于严重性的告警**:具有可配置的阈值和针对严重事件的 Slack webhook 通知
- **时间范围过滤**:支持过去 1 小时、24 小时和 7 天的时间窗口
- **导出功能**:将过滤后的事件下载为 CSV 或 JSON 以供外部分析
- **基于会话的身份验证**:使用哈希密码保护所有路由和 API 端点
- **真实的 Suricata 数据**:采集自运行带有 Emerging Threats 规则的 Suricata 8.0.3 的活跃 Kali Linux 家庭实验室
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Python, Flask |
| 数据库 | SQLite |
| 前端 | HTML, CSS, Vanilla JavaScript |
| 图表 | Chart.js |
| 日志源 | Suricata IDS (eve.json), Linux auth.log, 防火墙日志 |
| 认证 | Werkzeug 密码哈希, Flask 会话 |
## 项目结构
SIEM-dashboard/
├── app.py # Flask 后端和 REST API 端点
├── database.py # SQLite schema 和连接管理
├── ingestor.py # 日志解析器和规范化引擎
├── correlator.py # 关联规则引擎和告警生成
├── rules.json # 可配置的检测规则
├── templates/
│ ├── index.html # 主仪表盘
│ └── login.html # 身份验证页面
└── static/
├── css/style.css
└── js/dashboard.js
## 检测规则
关联引擎可检测以下模式:
| 规则 | 阈值 | 严重性 |
|---|---|---|
| 暴力破解攻击 | 同一 IP 在 10 分钟内失败登录 5 次以上 | 高 |
| 账户被盗 | 失败登录后跟随成功登录 | 严重 |
| 端口扫描 | 同一 IP 在 5 分钟内产生 3 次以上 IDS 告警 | 高 |
规则可通过 `rules.json` 进行配置,无需修改代码。
## 设置与安装
**前置条件:** Python 3.8+, pip
```
# Clone 仓库
git clone https://github.com/saadnvv/SIEM-dashboard.git
cd SIEM-dashboard
# Install 依赖
pip install flask werkzeug
# Initialize 数据库
python database.py
# Ingest 示例日志或指向你的 eve.json
python ingestor.py
# 运行 correlation rules
python correlator.py
# 启动 dashboard
python app.py
```
在浏览器中打开 `http://127.0.0.1:5000`
**默认凭据:**
- 用户名: `analyst` 密码: `siem1234`
- 用户名: `admin` 密码: `admin5678`
## Slack 告警
要为严重和高危告警启用 Slack 通知:
1. 在 https://api.slack.com/messaging/webhooks 创建一个 Slack 传入 webhook
2. 复制 `config.example.json` 为 `config.json`
3. 将你的 webhook URL 添加到 `config.json` 中
严重和高危告警将自动发布到你的 Slack 频道。
## 日志源
**Suricata eve.json** 将你的 Suricata eve.json 放在 `logs/` 目录中。接入器会自动处理 alert、flow、DNS 和 DHCP 事件类型。
**认证日志** 将 Linux auth.log 放在 `logs/` 目录中,用于 SSH 登录事件解析。
**防火墙日志** 将防火墙日志放在 `logs/` 目录中,用于连接允许/拒绝事件解析。
## API 端点
| 端点 | 方法 | 描述 |
|---|---|---|
| `/api/events` | GET | 带过滤条件的分页事件 |
| `/api/alerts` | GET | 触发的关联告警 |
| `/api/stats` | GET | 严重性计数、类型计数、Top IP |
| `/api/timeline` | GET | 每小时的事件量 |
| `/api/export` | GET | 将事件导出为 CSV 或 JSON |
| `/api/events/` | GET | 单个事件详情 |
| `/api/ingest` | POST | 触发日志接入和关联 |
## 演示的 SIEM 概念
**日志规范化** 来自不同来源的原始日志看起来完全不同。接入器将每种日志格式转换为统一的 schema,使得来自 Suricata、auth.log 和防火墙日志的事件都能以相同的方式存储和查询。
**事件关联** 单个事件很少能说明全部情况。关联引擎会跨多个事件寻找以检测模式。一次失败的登录是噪音。来自同一 IP 的五十次失败登录紧接着一次成功登录,这是一个账户被盗的信号。
**告警疲劳预防** 真正的 SIEM 会产生数以千计的告警。此仪表盘按源 IP 和规则名称对相关告警进行分组,以防止分析师被重复的通知所淹没。
**取证追踪** 当分析师看到可疑 IP 时,他们可以点击调查(Investigate)立即过滤整个仪表盘以显示该 IP 的活动,从而复刻商业 SIEM 平台中使用的追踪工作流。
## 与商业 SIEM 的比较
| 功能 | 本项目 | Splunk | IBM QRadar |
|---|---|---|---|
| 日志接入 | 基于文件 | 基于 Agent | 基于 Agent |
| 关联规则 | 配置文件 | SPL 查询 | AQL 查询 |
| 存储 | SQLite | 专有 | PostgreSQL |
| 可视化 | Chart.js | 内置 | 内置 |
| 规模 | 单主机 | 企业级 | 企业级 |
## 局限性
- 单主机部署,不适用于大规模的分布式日志收集
- SQLite 适用于开发和小型部署,生产环境应使用 PostgreSQL
- 关联规则按需评估,而非实时流处理
- 没有基于机器学习的异常检测
## 作者
Saad Nav | [LinkedIn](https://linkedin.com/in/saadnav) | [GitHub](https://github.com/saadnvv)
标签:AMSI绕过, Chart.js, CMS安全, CSV, Flask, IP 地址批量处理, JavaScript, JSON, Metaprompt, OPA, PKINIT, Python, Slack通知, SQLite, Suricata, Syscall, Web开发, 事件关联, 仪表板, 免杀技术, 入侵检测系统, 前端, 告警系统, 多模态安全, 威胁检测, 安全仪表板, 安全信息与事件管理, 安全可视化, 安全数据湖, 安全运营, 安全项目, 实时数据, 实验室环境, 密码哈希, 工控安全, 开源SIEM, 扫描框架, 插件系统, 搜索引擎爬取, 数据可视化, 数据导出, 无后门, 日志规范化, 日志采集, 暴力破解检测, 溯源, 现代安全运营, 端口扫描检测, 红队行动, 网络安全, 逆向工具, 隐私保护, 靶场