LevaAverGit/mini-siem-detection-lab-v2
GitHub: LevaAverGit/mini-siem-detection-lab-v2
实验室级 SIEM 检测管线,模拟从多源日志摄取到检测告警、事件分组与报告的完整 SOC 监控工作流。
Stars: 0 | Forks: 0
# Mini SIEM 检测实验室
[](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, 告警关联, 安全工程, 安全规则引擎, 安全运营, 密码管理, 扫描框架, 无后门, 网络测绘, 逆向工具