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, 扫描框架, 插件系统, 搜索引擎爬取, 数据可视化, 数据导出, 无后门, 日志规范化, 日志采集, 暴力破解检测, 溯源, 现代安全运营, 端口扫描检测, 红队行动, 网络安全, 逆向工具, 隐私保护, 靶场