LevaAverGit/mini-siem-detection-lab-v2

GitHub: LevaAverGit/mini-siem-detection-lab-v2

实验室级 SIEM 检测管线,模拟从多源日志摄取到检测告警、事件分组与报告的完整 SOC 监控工作流。

Stars: 0 | Forks: 0

# Mini SIEM 检测实验室 [![CI](https://github.com/LevaAverGit/mini-siem-detection-lab/actions/workflows/ci.yml/badge.svg)](https://github.com/LevaAverGit/mini-siem-detection-lab/actions/workflows/ci.yml) 一个模拟 SOC 监控工作流的实验室级别检测 pipeline: 事件源 → 日志摄取 → 标准化 → 检测规则 → 告警 → 事件分组 → 报告 → 分析师手册。 旨在展示 Python 后端、安全工程和 SOC 工作流技能。这不是一个生产级 SIEM。 ## 本项目展示了什么 - **事件 pipeline 设计** — 四种日志源 → 统一标准化的事件模型 → 检测引擎 → 告警/事件生命周期 - **FastAPI 后端** — 包含摄取、列表、分诊和报告 endpoint,全面使用 Pydantic v2 模型 - **检测规则引擎** — 从 YAML 加载 9 条规则,确定性运行,不使用 ML 或外部 API - **事件分组** — 通过共享的源 IP 将告警关联为事件,并包含时间线和实体追踪 - **SQLite 持久化** — schema 优先初始化,通过 `tmp_path` 实现测试间隔离 - **CLI 工具** — 包含 `ingest`、`demo`、`alerts list`、`incidents list`、`incidents report` 命令 - **124 个测试,0 个警告** — 针对每个服务层的单元测试,通过 `httpx.ASGITransport` 进行 API 测试 - **结构化报告** — Markdown 和 JSON 事件报告 ## 架构 ``` Log Sources (4) Detection Engine linux_auth.log ─┐ ┌── SSH Brute Force (threshold-based) nginx_access.log┤ ├── Brute Force Success windows_sec.jsonl─► Normalize ──► ├── Web Dir Scanning cloud_audit.jsonl┘ (Event) ├── Sensitive Path Access ├── Suspicious User Agent POST /events/ingest ├── Windows Account Created ↓ ├── Cloud SG Opened to 0.0.0.0/0 Normalization Service ├── IAM Change After Login Failure ↓ └── Multi-Source Suspicious IP Detection Engine (9 rules) ↓ Storage Alert List SQLite (events / alerts / incidents) ↓ Incident Grouping (by source_ip) ↓ Incident + Timeline ↓ Report (Markdown / JSON) ``` ## 快速开始 ``` # 安装 python3.11 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt # 或者使用 make make install # 运行所有测试 make test # 运行完整 demo(摄入所有样本日志,显示结果) make demo ``` ## 演示 ``` $ make demo ============================================================ Mini SIEM Detection Lab — Demo Run ============================================================ Ingested 129 events from sample_logs/linux_auth.log Ingested 118 events from sample_logs/nginx_access.log Ingested 12 events from sample_logs/windows_security.jsonl Ingested 8 events from sample_logs/cloud_audit.jsonl Total events ingested : 267 Total skipped : 0 Alerts generated : 22 Incidents created : 8 Alert breakdown by severity: CRITICAL : 5 HIGH : 11 MEDIUM : 6 Incidents: [INC-0001] [CRITICAL] Critical Incident — 203.0.113.99 [INC-0002] [HIGH] High Incident — 192.0.2.150 ... ``` ## API 概览 | Endpoint | Method | 描述 | |---|---|---| | `/health` | GET | 存活检查 | | `/events/ingest` | POST | 摄取原始日志内容 | | `/events/` | GET | 列出事件(过滤项:`source_type`, `limit`) | | `/alerts/` | GET | 列出告警(过滤项:`status`, `severity`) | | `/alerts/{id}/status` | PATCH | 更新告警分诊状态 | | `/incidents/` | GET | 列出事件(过滤项:`status`, `severity`) | | `/incidents/{id}` | GET | 获取事件详情 | | `/incidents/{id}/report.md` | GET | Markdown 报告 | | `/incidents/{id}/report.json` | GET | JSON 报告 | 请参阅 `docs/API_OVERVIEW.md` 获取请求/响应示例。 **启动 API:** ``` make run-api # FastAPI 可通过 http://127.0.0.1:8000 访问 # 文档位于 http://127.0.0.1:8000/docs ``` ## CLI 用法 ``` # 摄入日志文件 python -m cli.main ingest --source linux_auth --file sample_logs/linux_auth.log # 运行完整 demo python -m cli.main demo # 列出警报 python -m cli.main alerts list # 列出事件 python -m cli.main incidents list # 导出事件报告 python -m cli.main incidents report --id INC-0001 --format md --output reports/INC-0001.md python -m cli.main incidents report --id INC-0001 --format json ``` ## 检测规则 | 规则 ID | 来源 | 逻辑 | 严重程度 | MITRE 技术 | |---|---|---|---|---| | `SSH_BRUTE_FORCE` | linux_auth | 同一 IP 失败的 SSH 登录次数 >= 10/30/100 | medium/high/critical | T1110.001 | | `SSH_BRUTE_FORCE_SUCCESS` | linux_auth | 同一 IP:失败 >= 5 次后登录成功 | critical | T1078 | | `WEB_DIR_SCAN` | nginx_access | 同一 IP 产生 HTTP 404 次数 >= 30/80 | medium/high | T1595.002 | | `SENSITIVE_PATH_ACCESS` | nginx_access | 访问 /.env、/.git、/admin、/phpmyadmin | medium/high | T1083 | | `SUSPICIOUS_USER_AGENT` | nginx_access | sqlmap、nikto、gobuster、masscan、dirbuster | medium/high | T1595 | | `WIN_ACCOUNT_CREATED_AFTER_FAILURES` | windows_security | 同一主机上出现多次 4625 后发生 4720 | high | T1136.001 | | `CLOUD_SG_OPEN` | cloud_audit | SG 规则在端口 22/3389/5432/3306 上设置为 0.0.0.0/0 | high/critical | T1562.007 | | `CLOUD_IAM_CHANGE_AFTER_FAILURE` | cloud_audit | 最近有登录失败记录的用户修改了 IAM 策略 | high | T1098 | | `MULTI_SOURCE_SUSPICIOUS_IP` | all | 同一 IP 在 2 个以上的来源类型可疑事件中出现 | critical | 多种 | 所有规则均可通过 `app/rules/default_rules.yml` 进行配置。每条规则包含 MITRE ATT&CK 战术、技术以及映射置信度(`direct` 或 `approximate`)。请参阅 `docs/DETECTION_RULES.md` 获取每条规则的映射说明。 ## Sigma 风格规则 `sigma_rules/` 目录包含 Sigma 格式的 YAML 示例,这些示例将实验室的检测逻辑映射到 [Sigma](https://sigmahq.io/) 开放标准: | Sigma 规则文件 | 映射的实验室规则 | MITRE 技术 | |---|---|---| | `sigma_rules/ssh_brute_force.yml` | SSH_BRUTE_FORCE | T1110.001 | | `sigma_rules/web_path_traversal_scan.yml` | WEB_DIR_SCAN, SENSITIVE_PATH_ACCESS, SUSPICIOUS_USER_AGENT | T1595.002, T1083, T1595 | | `sigma_rules/windows_failed_logons_account_creation.yml` | WIN_ACCOUNT_CREATED_AFTER_FAILURES | T1136.001, T1078 | ## 示例事件报告 `reports/example_incident_report.md` 包含一份合成的 SOC 分析师事件报告,展示了 SSH 暴力破解并导致失陷场景的输出格式: - 从首次登录失败到成功失陷的完整时间线 - MITRE ATT&CK 战术/技术链(T1110.001 → T1078) - 来自关联规则的证据 - 建议的响应步骤 - 误报评估 ## 示例事件工作流 ``` 1. Ingest logs python -m cli.main ingest --source linux_auth --file sample_logs/linux_auth.log 2. Run the rest python -m cli.main ingest --source nginx_access --file sample_logs/nginx_access.log python -m cli.main ingest --source windows_security --file sample_logs/windows_security.jsonl python -m cli.main ingest --source cloud_audit --file sample_logs/cloud_audit.jsonl 3. Review incidents python -m cli.main incidents list 4. Export report python -m cli.main incidents report --id INC-0001 --format md --output reports/report.md 5. Triage alert (via API) curl -X PATCH http://127.0.0.1:8000/alerts/{alert_id}/status \ -H "Content-Type: application/json" \ -d '{"status": "triaged"}' ``` ## 测试 ``` make test # 124 tests ``` | 测试模块 | 覆盖范围 | |---|---| | `test_normalization.py` | Linux 认证、Nginx、Windows、Cloud 解析器;格式错误的行;文件级摄取 | | `test_detection_engine.py` | 全部 9 条规则;阈值边界;严重程度升级;多源关联 | | `test_incident_grouping.py` | IP 分组;严重程度升级;时间线;实体收集;分数上限 | | `test_storage_service.py` | 事件/告警/事件的插入/列表/更新;通过 `tmp_path` 实现 DB 隔离 | | `test_api_events.py` | 健康、摄取、列表 endpoint;source_type 过滤器 | | `test_api_alerts.py` | 告警列表、状态更新、事件列表、报告 MD/JSON | | `test_cli.py` | 演示、摄取、报告导出 | | `test_report_service.py` | Markdown 部分、JSON 结构、AI 追踪检查 | ## 项目结构 ``` mini-siem-detection-lab/ ├── app/ │ ├── main.py FastAPI app factory, lifespan │ ├── api/ │ │ ├── routes_events.py POST /events/ingest, GET /events/ │ │ ├── routes_alerts.py GET/PATCH /alerts/ │ │ ├── routes_incidents.py GET /incidents/, reports │ │ └── routes_health.py GET /health │ ├── core/ │ │ ├── config.py pydantic-settings (SIEM_ prefix) │ │ └── logging.py Structured JSON logging │ ├── db/ │ │ ├── database.py SQLite connection, init_db │ │ └── schema.sql CREATE TABLE statements │ ├── models/ │ │ └── schemas.py Event, Alert, Incident, Pydantic v2 │ ├── services/ │ │ ├── normalization_service.py 4 source parsers → unified Event │ │ ├── detection_engine.py 9 detection rules → Alert list │ │ ├── incident_grouping_service.py Alert → Incident (by IP) │ │ ├── storage_service.py SQLite CRUD │ │ ├── report_service.py Markdown + JSON report generation │ │ └── ingestion_service.py File-level ingest orchestration │ └── rules/ │ └── default_rules.yml Detection rule thresholds and config ├── cli/ │ └── main.py CLI: ingest, demo, alerts, incidents ├── sample_logs/ │ ├── linux_auth.log 129 synthetic Linux auth events │ ├── nginx_access.log 118 synthetic Nginx access events │ ├── windows_security.jsonl 12 synthetic Windows Security events │ └── cloud_audit.jsonl 8 synthetic cloud audit events ├── tests/ 124 tests ├── docs/ 11 documentation files ├── .github/workflows/ci.yml GitHub Actions CI ├── Makefile ├── pyproject.toml └── requirements.txt ``` ## 本项目不是什么 - 不是生产级 SIEM - 不是 Wazuh、MaxPatrol SIEM、KUMA、Splunk 或 ELK 的替代品 - 不是实时的分布式事件处理系统 - 不是 ML/UEBA 异常检测系统 - 不是 EDR、DLP、PAM 或 NGFW - 不是基于 agent 的日志收集 - 不是法律合规产品 ## 限制 请参阅 `docs/LIMITATIONS.md` 获取完整列表。关键点如下: - 所有数据均为合成数据 — 不涉及真实系统 - 检测规则使用静态阈值,未采用时间窗口机制 - 单线程处理 — 不适用于高吞吐量摄取 - API endpoint 上无认证(仅供本地实验室使用) - 无实时流处理 ## 展示的技能 请参阅 `docs/BIGTECH_SKILLS_MAPPING.md` 获取完整的能力映射, 以及 `docs/SOC_INTERVIEW_DEFENSE.md` 获取面试谈话要点和范围说明。 展示了在安全工具、SOC 自动化和 Python 后端任务方面初级/中级偏下 (junior/junior+) 的准备程度: - Python 3.11、FastAPI、Pydantic v2、SQLite、pytest - 事件驱动 pipeline 思维 - 检测规则工程,具备规则级别的 MITRE ATT&CK 映射(直接/近似置信度) - SOC 告警生命周期(新建 → 分诊 → 升级 → 关闭) - 结构化 Markdown 和 JSON 报告 - CLI 工具设计 - 使用 `tmp_path` 和 `ASGITransport` 实现测试隔离 ## 许可证 MIT
标签:AV绕过, FastAPI, PE 加载器, Python, 告警关联, 安全工程, 安全规则引擎, 安全运营, 密码管理, 扫描框架, 无后门, 网络测绘, 逆向工具