Krishna-Mali1/wazuh-siem-homelab
GitHub: Krishna-Mali1/wazuh-siem-homelab
一个基于 Wazuh 搭建的 SIEM 家庭实验室项目,演示了如何配置自定义检测规则来监控 PowerShell 混淆攻击和文件完整性篡改。
Stars: 0 | Forks: 0
# Wazuh SIEM 家庭实验室项目
# 关于本项目
我构建这个项目是为了学习 SIEM 工具在真实环境中的工作原理。我一直在学习网络安全,并希望获得日志监控、自定义规则编写和威胁检测的实战经验。我选择 Wazuh 是因为它是开源的且在业界被广泛使用。
这个想法很简单,即在 Ubuntu 虚拟机上设置 Wazuh,将一台 Windows 虚拟机作为 agent 连接,然后检测真实的攻击技术,如 PowerShell 混淆和未经授权的文件更改。
## 环境配置
我使用 VirtualBox 在同一台宿主机上创建了两台虚拟机:
| 机器 | 操作系统 | 角色 |
|--------|-----|------|
| 虚拟机 1 | Ubuntu | Wazuh Manager + Indexer + Dashboard |
| 虚拟机 2 | Windows | Wazuh Agent |
两台虚拟机都连接到 VirtualBox 中的同一个内部网络,以便它们能够相互通信。
## Wazuh 组件如何协同工作
| 组件 | 角色 |
|-----------|------|
| Wazuh Manager | 接收来自 agent 的日志,应用规则,生成警报 |
| Wazuh Indexer | 存储所有日志和警报数据 |
| Wazuh Dashboard | 可视化界面,可在浏览器中查看警报和事件 |
| Wazuh Agent | 安装在 Windows 虚拟机上 — 收集日志并发送给 Manager |
工作流程如下:
```
Windows VM (Agent)
│
│ Sends logs to Manager
Ubuntu VM (Wazuh Manager)
│
│ Applies rules, generates alerts
Wazuh Indexer stores data
│
Wazuh Dashboard displays alerts
```
## 在 Ubuntu 虚拟机上安装 Wazuh
我遵循官方的 Wazuh 4.14.5 文档,使用安装脚本将所有三个组件安装在一起:
```
curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh
curl -sO https://packages.wazuh.com/4.14/config.yml
```
在 config.yml 中添加了我的 Ubuntu 虚拟机 IP 地址,然后运行:
```
sudo bash wazuh-install.sh -a
```
安装完成后,终端在最后显示了自动生成的登录凭据:
```
INFO: --- Summary ---
INFO: You can access the web interface https://
User: admin
Password:
```
我使用这些凭据登录到 Wazuh Dashboard,并在首次登录后更改了密码。

## 在 Windows 虚拟机上设置 Wazuh Agent
### 步骤 1 - 下载 Wazuh Agent
```
Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.14.5-1.msi -OutFile wazuh-agent.msi
```
然后运行 MSI 安装程序,并在设置过程中输入 Ubuntu 虚拟机的 IP 地址作为 Manager IP。
### 步骤 2 - 安装 Sysmon 以获得更好的可见性
Sysmon 是一个 Windows 系统监控工具,它提供的日志比单独的 Windows 详细得多,即包括进程创建、网络连接和文件更改。如果没有 Sysmon,对 Windows 机器上发生情况的可见性将非常有限。
我从 Microsoft Sysinternals 网站下载了 Sysmon zip 文件,并使用了 SwiftOnSecurity config,这是安全社区中最广泛使用的 Sysmon 配置。
```
.\Sysmon64.exe -accepteula -i sysmonconfig.xml
```
### 步骤 3 - 启动 Wazuh Agent
在 Windows 上打开 services.msc,找到 Wazuh 服务并启动它。一分钟后,该 agent 在 Wazuh Dashboard 中显示为 Active 状态。


## 用例 1 - PowerShell 编码命令检测
### 为什么选择这个
PowerShell 的 -EncodedCommand 标志是一项功能,攻击者滥用它将恶意脚本/代码隐藏在 Base64 字符串中,从而有效地绕过基本的基于特征的检测机制。
### 步骤 1 - 在 Windows 上启用 Script Block Logging
通过 Windows 注册表启用 PowerShell Script Block Logging,以记录事件 ID 4104 下的所有 PowerShell 活动:
```
Path: HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
Value: EnableScriptBlockLogging = 1
```
### 步骤 2 - 配置 Agent 以收集 PowerShell 日志
在 Windows 虚拟机上打开 ossec.conf,路径为:
```
C:\Program Files (x86)\ossec-agent\ossec.conf
```
添加此代码块以收集 PowerShell 事件日志,并将其转发到 Ubuntu 上的 Wazuh Manager:
```
Microsoft-Windows-PowerShell/Operational
eventchannel
```
通过 services.msc 重启 Wazuh 服务。
### 步骤 3 - 在 Ubuntu 上编写自定义检测规则
在 Ubuntu 上打开自定义规则文件:
```
sudo nano /var/ossec/etc/rules/local_rules.xml
```
添加此规则以检测 base64 编码的 PowerShell 命令:
```
windows
(?i)(-enc|-encodedcommand)
PowerShell encoded command detected - possible obfuscation attempt
T1059.001
T1027
```

重启 Wazuh Manager:
```
sudo systemctl restart wazuh-manager
```
### 步骤 4 - 测试与警报
在 Windows 虚拟机上运行了一个安全的编码 PowerShell 测试命令。该警报在 Wazuh Security Events 仪表板中触发,规则 ID 为 100010。


## 在此 PowerShell 编码命令检测警报触发后,我会怎么做
当规则 100010 触发时,我不会立即阻止或杀死任何东西。首先我会进行调查,即:
1. 我会在 Wazuh 中查看警报详细信息,以确切了解运行了什么命令。
2. 我会尝试解码该命令,因为 PowerShell 的 -EncodedCommand 标志仅接受 UTF-16LE Base64 字符串。
3. 我会检查是哪个用户账户在什么时间运行了该命令,还会检查该用户是否应该运行此命令。
4. 我还会尝试检查是哪个进程生成了该 PowerShell 实例。
5. 如果该命令看起来是恶意的,我会隔离该机器并升级此事件。
6. 如果该命令是真实的,这意味着它是为某些合法工作而运行的,那么我会调整规则以减少误报。
**注意:** 这是我基于目前所学知识的个人思考过程。这可能不是真实 SOC 环境中遵循的确切流程。
## 用例 2 - File Integrity Monitoring (FIM)
### 为什么选择这个
攻击者经常将恶意软件投放到特定的 Windows 文件夹中,以修改系统文件、维持持久性或重定向流量。FIM 会实时检测这些更改。
### 步骤 1 - 在 Windows 上配置受监控目录
在 ossec.conf 的 syscheck 块中添加了攻击者常用的目录:
```
43200
no
C:\Windows\Temp
C:\Windows\System32\drivers\etc
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
C:\Users\Public
```
| 文件夹 | 攻击者为何使用它 |
|--------|---------------------|
| C:\Windows\Temp | 这是投放恶意软件的常见位置 |
| C:\Windows\System32\drivers\etc | Hosts 文件,攻击者修改它以进行 DNS 劫持 |
| Startup folder | 用于持久化,例如恶意软件在每次重启时运行 |
| C:\Users\Public | 共享文件夹滥用 |

### 步骤 2 - 在 Ubuntu 上编写自定义 FIM 规则
将 FIM 检测规则添加到 local_rules.xml:
```
554
FIM - New file created in suspicious location: $(syscheck.path)
T1565
550
FIM - File modified in suspicious location: $(syscheck.path)
T1565
553
FIM - File deleted in suspicious location: $(syscheck.path)
T1565
```

重启 Wazuh Manager:
```
sudo systemctl restart wazuh-manager
```
### 步骤 3 - 测试与警报
我在受监控目录中创建、修改并删除了一个测试文件,以检查检测规则是否有效。这三个事件均作为警报出现在 Wazuh Threat Hunting 部分。



## 在 FIM(File Integrity Monitoring) 警报被检测到后,我会怎么做
由于自定义检测规则专门监控攻击者常用的目录,因此当在这些文件夹中创建、修改或删除文件时,这本身似乎就已经很可疑了。因此,如果触发了此警报,我会:
1. 检查是哪个特定目录触发了警报以及具体发生了什么,即文件是被创建、修改还是删除。
2. 检查是哪个用户在什么时间进行了更改。
3. 检查同一台机器在同一时间前后是否有任何其他警报。
4. 在 VirusTotal 等平台上检查文件哈希值。
5. 如果确认是恶意的,我会隔离该机器并升级事件。
6. 如果是真实的,我会将其标记为误报,并调整规则以减少误报。
**注意:** 这是我基于目前所学知识的个人思考过程。这可能不是真实 SOC 环境中遵循的确切流程。
## MITRE ATT&CK 覆盖范围
| 技术 ID | 技术名称 | 检测者 |
|-------------|---------------|------------|
| T1059.001 | PowerShell | 规则 100010 |
| T1027 | Obfuscated Files or Information | 规则 100010 |
| T1565 | Data Manipulation | 规则 100020, 100021, 100022 |

## 我学到了什么
- 如何使用 VirtualBox 从头开始在 Ubuntu 上设置 Wazuh SIEM
- Wazuh Manager、Indexer 和 Dashboard 如何作为一个完整的 SIEM 平台协同工作
- 如何将 Windows agent 连接到 Wazuh manager
- 如何使用 Wazuh 规则语法和 PCRE2 正则表达式编写自定义检测规则
- FIM 的工作原理以及为什么监控特定目录很重要
- 如何将检测映射到 MITRE ATT&CK 框架
- 如何调查警报
## 使用的工具
| 工具 | 用途 |
|------|---------|
| VirtualBox | 虚拟化平台 |
| Wazuh 4.14.5 | SIEM 平台 |
| Ubuntu | Wazuh Manager、Indexer 和 Dashboard |
| Windows | Wazuh Agent |
| Sysmon + SwiftOnSecurity Config | 增强 Windows 可见性 |
| OpenSearch | 日志索引和仪表板后端 |
| PowerShell | 攻击模拟 |
## 参考
- Wazuh 文档 — https://documentation.wazuh.com
- MITRE ATT&CK 框架 — https://attack.mitre.org
- Sysmon — https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon
- SwiftOnSecurity Sysmon 配置 — https://github.com/SwiftOnSecurity/sysmon-config
## 作者
- Krishna Mali [有志成为 SOC Analyst]
标签:AI合规, AMSI绕过, DNS 反向解析, PB级数据处理, Wazuh, x64dbg, 威胁检测, 子域名变形, 安全运维