Armin-devhub/wazuh-siem-lab
GitHub: Armin-devhub/wazuh-siem-lab
一个自托管的 Wazuh SIEM 家庭实验室项目,通过 Docker 部署完整安全监控栈,演示终端接入、自定义检测规则编写与告警分诊等核心 SOC 分析师工作流。
Stars: 0 | Forks: 0
# Wazuh SIEM 家庭实验室
一个自托管的 **SIEM (安全信息与事件管理)** 实验室,使用
[Wazuh](https://wazuh.com/) 4.14.5 构建,用于监控实时 Windows 终端。
它在 Docker 中部署了完整的 Wazuh 技术栈,将一台真实的 Windows 机器作为
agent 接入,收集 **Windows Event Logs + Sysmon** 遥测数据,并展示了
核心的 SOC 分析师工作流:**检测 -> 分诊 -> 调优 -> 响应。**
这是我的检测作品集中的 **SIEM / 平台层**。它位于
规则引擎项目之上:
- **Sigma** 规则 -> SIEM 日志检测
- **YARA** 规则 -> 文件/恶意软件检测
- **Suricata** 规则 -> 网络检测
- **Wazuh (本项目)** -> 负责收集、关联、告警和可视化所有内容的平台。

*Wazuh 面板 (Threat Hunting) —— 受监控终端的实时告警数量、热门检测规则以及 MITRE ATT&CK 覆盖情况。*
## 本项目展示了什么
| 技能 | 方式 |
|---|---|
| **SIEM 部署与管理** | 通过 Docker 部署 Wazuh manager + indexer (OpenSearch) + dashboard |
| **终端接入** | 在 Windows 上安装 Wazuh agent,自动注册并集中管理 |
| **日志收集** | 将 Windows Event Logs + **Sysmon** 转发到 SIEM |
| **检测工程** | 编写自定义 Wazuh 规则 (XML),并进行 MITRE 映射 |
| **告警分诊** | 调查告警,识别误报,并记录判定结果 |
| **检测调优** | 编写规则以抑制已知的误报 |
| **合规性与强化** | 使用内置的 SCA (CIS Windows 11 基准) + PCI/NIST 映射 |
| **基础设施 / Docker** | 在资源受限的硬件上进行容器编排与资源调优 |
## 架构
```
WINDOWS ENDPOINT (ACERNITRO5) WAZUH SERVER (Docker)
+----------------------------+ logs 1514 +-----------------------------+
| Wazuh Agent | ------------> | Manager (analyses, rules)|
| - Windows Event Logs | enroll 1515 | | |
| - Sysmon (process/net) | | v |
+----------------------------+ | Indexer (OpenSearch DB) |
| | |
| v |
| Dashboard (web UI :443) |
+-----------------------------+
https://localhost
```
终端是一个**传感器**;manager 负责**分析与告警**;indexer
负责**存储与搜索**;dashboard 负责**可视化**。

*已接入的 Windows 终端 (ACERNITRO5) 作为 agent 运行,并报告为 **Active** 状态。*
## 检测工程
自定义规则位于 [`rules/local_rules.xml`](rules/local_rules.xml) (规则 ID 位于
100000+ 的用户范围内)。
### 自定义检测规则
| 规则 ID | 等级 | 检测内容 | MITRE |
|---|---|---|---|
| **100100** | 12 (高) | `certutil.exe` 下载文件 ("living off the land" - 滥用受信任的 Windows 二进制文件来获取恶意软件) | **T1105** Ingress Tool Transfer |
它挂载到 Wazuh 基础的 Sysmon 进程创建规则 (`61603`) 上,并匹配
进程映像 (`certutil`) 以及下载参数 (`urlcache`)。

*规则 100100 端到端触发 —— ACERNITRO5 上的 certutil 活动被捕获,等级为 **12**,并标记为 **MITRE T1105**。*

*展开的告警详情:完整的命令行、规则元数据和 ATT&CK 映射。*

*两条自定义规则均已部署,并在 Wazuh 规则集中可见 (Server Management → Rules)。*
### 自定义调优规则 (抑制误报)
| 规则 ID | 等级 | 动作 | 原因 |
|---|---|---|---|
| **100200** | 0 (静默) | 覆盖 `__PSScriptPolicyTest_*.ps1` 的内置规则 `92213` | 这些文件是 PowerShell 在每次运行时自行创建的 - 良性的 |
### 观察到的内置检测 (开箱即用)
- **执行的发现活动** (`net user`, `net localgroup`, `whoami`) - MITRE T1087 / T1057 / T1082
- **PowerShell 发起的发现活动** - T1059.001
- **SCA** - CIS Microsoft Windows 11 Benchmark 合规性扫描
- 自动映射到 **PCI DSS, NIST, HIPAA, GDPR**

*内置的安全配置评估 (Security Configuration Assessment) 根据 CIS Microsoft Windows 11 Benchmark 对终端进行评分。*
## 纵深防御实战 (EDR + SIEM)
在测试 certutil 检测时,我尝试了真实的攻击形式
(`certutil -urlcache -split -f ` - 下载文件)。**Windows Defender
直接将其拦截** ("拒绝访问";Defender 威胁检测记录在确切的尝试时间)。
这就是**按预期工作的纵深防御:**
它还揭示了一个真实的遥测细节:SIEM 规则只能在其传感器实际观察到的活动上触发。
如果上游控制在创建时就阻断了进程,则不会有进程创建事件可供告警。
Wazuh 规则在那些 Defender 被禁用、被绕过或不存在的终端上才能体现其价值 -
这正是分层检测至关重要的原因。 (该规则已针对
良性的 `certutil -urlcache` 格式进行了验证,Defender 允许此操作。)
## 真实的分诊示例 (误报)
在测试期间,触发了几个 **Level 15 (严重)** 的告警:
*"可执行文件被释放到恶意软件常用的文件夹中" (T1105)。*
**分诊 (4 个问题):**
1. **什么触发了?** 一个脚本被释放到了 `%TEMP%`。
2. **证据是什么?** 该文件是 `__PSScriptPolicyTest_xxxxx.ps1`,由 `powershell.exe` 创建。
3. **有合理的解释吗?** 是的 —— PowerShell 在每次运行时都会自行创建此文件,以测试其执行策略,然后将其删除。
4. **判定与动作?** **误报。** 无威胁。动作:编写调优规则 `100200` 将其静默。
严重程度只是一个起点,而不是最终判定 —— 这是本实验室实践的核心技能。
## 快速入门
```
# 0. One-time: clone the official Wazuh single-node stack into this folder, then
# lower the indexer heap to 512m (OPENSEARCH_JAVA_OPTS) in
# wazuh-docker/single-node/docker-compose.yml
git clone https://github.com/wazuh/wazuh-docker.git -b v4.14.5
# 1. Start the SIEM (manager + indexer + dashboard)
powershell -File start-lab.ps1
# 2. Open https://localhost (admin / SecretPassword)
# 3. Install the agent on this PC (run elevated) - one time
msiexec.exe /i wazuh-agent-4.14.5-1.msi /q WAZUH_MANAGER="127.0.0.1" `
WAZUH_REGISTRATION_SERVER="127.0.0.1" WAZUH_AGENT_NAME="$env:COMPUTERNAME"
NET START WazuhSvc
# 4. Load the custom detection + tuning rules
powershell -File load-rules.ps1
# 5. Fire the safe attack simulation and watch alerts in the dashboard
powershell -File test-detections.ps1
# 6. Stop the lab (frees RAM, keeps all data)
powershell -File stop-lab.ps1
```
Sysmon 数据收集是通过
[`agent.conf`](agent.conf) (共享的 `default` 组) 从 manager **集中**下发的 ——
这是一种集群管理方法,而不是手动编辑每个终端。
## 资源说明 (真实的经验教训)
该实验室建立在一台 **7.2 GB RAM** 的笔记本电脑上 —— 远低于完整
SIEM 的理想配置。真实的结论:
- 一个完整的 Wazuh 技术栈需要约 3 GB 内存;生产环境的 SIEM 运行在**专用服务器**上,而不是日常使用的笔记本电脑上。
- 对于小型实验室,将 indexer JVM heap 调低至 **512 MB** (在单节点 `docker-compose.yml` 中设置 `OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m`)。
- 在 `.wslconfig` 中设置 **`autoMemoryReclaim`**,以便 WSL2 将闲置内存退还给 Windows (默认情况下它会囤积内存)。
- 在**专注的会话**中运行实验室,并在结束时运行 `stop-lab.ps1`。
这些限制本身就是一个有用的系统管理练习。
## 仓库结构
```
wazuh-siem-lab/
rules/local_rules.xml # custom detection + tuning rules
agent.conf # centralised Sysmon collection (shared group)
start-lab.ps1 # bring the stack up
stop-lab.ps1 # stop it, free RAM, keep data
load-rules.ps1 # deploy rules to the manager + reload
test-detections.ps1 # safe attack simulation
install-agent.ps1 # agent install (record)
SOLO-TEST-CHECKLIST.md # step-by-step demo/screenshot guide
wazuh-docker/ # official Wazuh stack - cloned separately (gitignored), see Quickstart
screenshots/ # dashboard evidence
```
## 技术栈
Wazuh 4.14.5 - OpenSearch - Docker / Docker Compose - Sysmon - Windows Event
Logs - MITRE ATT&CK - PowerShell - WSL2
*由 Armi Fahim 作为 SOC 分析师作品集的一部分构建。仅包含安全的、合成的测试活动 - 没有真实的恶意软件。*
标签:AI合规, Docker, Libemu, PB级数据处理, SIEM系统, Wazuh, 子域名变形, 安全合规, 安全检测工程, 安全运维, 安全防御评估, 日志采集, 版权保护, 网络代理, 请求拦截