ggines/wazuh-siem-lab
GitHub: ggines/wazuh-siem-lab
这是一个基于 VirtualBox 的 Wazuh SIEM 实验室项目,详细记录了如何部署 Wazuh 并集成 Suricata 和 YARA 等工具,以实现安全事件的集中监控与模拟攻击的检测。
Stars: 0 | Forks: 0
# 在 VirtualBox 虚拟化环境中实施与验证 Wazuh SIEM
本项目将逐步说明如何在 VirtualBox 虚拟化环境中实施 Wazuh SIEM,以分析警报并检测针对 endpoint 模拟的攻击。
### 目录
- [所需的虚拟机](#-mvs-necesarias)
- [可选虚拟机](#-mv-opcional)
- [网络拓扑图](#mapa-de-red)
- [在 Ubuntu Server 24.04 上安装 Wazuh Manager](#instalación-de-wazuh-manager-en-ubuntu-server-2404)
- [验证磁盘空间](#verificación-del-espacio-en-disco)
- [安装 Wazuh Manager](#instalación-de-wazuh-manager)
- [为服务器自身启用漏洞检测](#activar-la-detección-de-vulnerabilidades-para-el-propio-servidor)
- [在 Ubuntu Desktop 22.04 上安装 Wazuh Agent](#instalación-de-wazuh-agent-en-ubuntu-desktop-2204)
- [在 Ubuntu Desktop 中配置 Suricata 规则](#implementación-de-reglas-suricata-en-ubuntu-desktop)
- [测试攻击](#ataque-de-prueba)
- [在 Ubuntu Desktop 中配置 FIM 和 YARA](#implementación-de-fim-y-yara-en-ubuntu-desktop)
- [配置 FIM](#implementación-de-fim)
- [使用 Valhalla 配置 YARA](#implementación-de-yara-con-valhalla)
- [使用恶意软件样本测试功能](#comprobación-del-funcionamiento-con-muestras-de-malware)
- [结论](#%EF%B8%8F-conclusiones)
- [参考网资](#-webgrafía)
## 💻 所需的虚拟机
- **Ubuntu Server 24.04 (服务器):** 将安装 **Wazuh Manager**(用于实时收集安全事件并应用检测规则和安全策略)和 **Wazuh Dashboard**(用于提供 Web 用户界面)。
- **配置规格:**
- **CPUs**: 4
- **RAM**: 8000 MB
- **硬盘**: 80 GB
- **网络**: NAT 网络适配器和仅主机适配器
- **Ubuntu Desktop 22.04 (Endpoint/代理):** 将安装 **Wazuh Agent** 以检测可疑事件并将其发送到 Wazuh Manager。随后还将添加 Suricata、FIM 和 YARA。
- **配置规格:**
- **CPUs**: 2
- **RAM**: 4096 MB
- **硬盘**: 25 GB
- **网络**: NAT 网络适配器
## 💻 可选虚拟机
作为可选项,我们还可以配置另一台虚拟机来发起攻击:
- **Kali Linux (攻击者):** 将用于对 endpoint 发起攻击。
- **配置规格:**
- **CPUs**: 2
- **RAM**: 4096 MB
- **硬盘**: 80 GB
- **网络**: NAT 网络适配器
## 网络拓扑图
所有机器彼此之间以及与 Internet 之间都具有连通性。主机(物理机)与 Ubuntu Server 24.04(服务器)虚拟机之间具有连通性。
虚拟机将具有以下网络配置:

## 在 Ubuntu Server 24.04 上安装 Wazuh Manager
### 验证磁盘空间
在开始安装之前,我检查了虚拟机的磁盘是否至少有 50 GB 的可用空间。作为最低要求,机器应具有 50 GB 的可用空间。此数量取决于以下因素:
- 在 Wazuh Manager 服务器上进行分析的代理数量
- 将要生成的警报数量
- 我们打算存储 logs 的时间长短
默认情况下,**/** 分区中的可用空间为 19 GB:


为了将逻辑卷扩展到磁盘的所有空间,我执行了命令 ```sudo lvextend –l +100%FREE /dev/ubuntu-vg/ubuntu-lv```

为了扩展 **/** 分区的文件系统,我执行了命令 ```sudo resize2fs /dev/ubuntu-vg/ubuntu-lv```

这样,如果我们使用命令 ```df –h``` 检查磁盘上的可用空间量,我们会发现它已经扩展了(在这种情况下从 12 GB 增加到了 29 GB):

### 安装 Wazuh Manager
要开始安装 Wazuh Manager,我在服务器上遵循了以下步骤:
我执行了命令 ```curl -sO https://packages.wazuh.com/4.13/wazuh-install.sh && sudo bash ./wazuh-install.sh -a``` 以下载并运行安装向导:

安装完成后,将显示 Wazuh Web 界面的 URL 以及用于访问的用户名和密码:

Wazuh 的用户名和密码可以在 **wazuh-install-files.tar** 内的 **wazuh-passwords.txt** 文件中找到
要显示它们,请使用命令 ```sudo tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt```
要禁用 Wazuh 的自动更新并避免环境出现问题,我们执行以下命令:
- ```sed -i "s/^deb /#deb /" /etc/apt/sources.list.d/wazuh.list```
- ```apt update```

要从主机访问 Wazuh Web 界面,我指定了服务器的 **host-only** 适配器的 IP。在这种情况下,是 **192.168.56.10**:

现在我们使用之前提供的用户名登录,在这种情况下:
- **用户名:** admin
- **密码:** 5zOXs9+FpFtLj9rfrfI*r0AsI47dmhWP

这样我们就可以访问 SIEM 的 dashboard。在 dashboard 中,我们可以找到不同的部分来可视化警报、与 MITRE ATT&CK 技术的关系或漏洞检测。
### 为服务器自身启用漏洞检测
为了让 Wazuh 也扫描自身服务器/manager,我编辑了文件 **/var/ossec/etc/internal_options.conf**,并找到 *vulnerability-detection.disable_scan_manager* 这一行,将其值从 1 更改为 0:

我使用命令 ```sudo systemctl restart wazuh-manager``` 重启了 Wazuh 服务
这样,如果我们现在访问漏洞检测器,就会出现自身服务器可能存在的漏洞:

## 在 Ubuntu Desktop 22.04 上安装 Wazuh Agent
Ubuntu Desktop 22.04 虚拟机将安装 Wazuh Agent,以便它收集诸如 logs 之类的信息并将其发送到 Wazuh Manager 服务器。为了进行安装,我在 endpoint 上遵循了以下步骤:
我们使用命令 ```curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg``` 安装 GPG 密钥

我们使用命令 ```echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list``` 添加仓库,并执行 ```apt-get update```

指定安装了 Wazuh Manager 的机器的 IP 并安装 Wazuh Agent。在这种情况下,我指定了 IP **10.0.2.10**,它对应于
服务器的 NAT 网络适配器,并且与 Ubuntu Desktop 具有连通性。
命令为 ```WAZUH_MANAGER="10.0.2.10" apt-get install wazuh-agent```

我使用以下命令激活并启动了 Wazuh Agent 服务:
- ```systemctl daemon-reload```
- ```systemctl enable wazuh-agent```
- ```systemctl start wazuh-agent```

与 Wazuh Manager 一样,我也使用以下命令在 Wazuh Agent 中禁用了自动更新:
- ```sed -i "s/^deb/#deb/" /etc/apt/sources.list.d/wazuh.list```
- ```apt-get update```

这样,Wazuh Agent 已安装在充当 endpoint 的 Ubuntu Desktop 22.04 虚拟机上。
如果我现在重新加载 Wazuh 的 dashboard,**已经显示了一个资产:**

对于每个资产,都会显示其 **主机名、IP 和操作系统** 等详细信息。
从这里开始,我们可以查看代理的各种警报和漏洞。
通过这些步骤,Wazuh Agent 已配置为将警报发送到 Wazuh Manager,从而能够实时识别潜在的漏洞和威胁。
## 在 Ubuntu Desktop 中配置 Suricata 规则
**Suricata** 是一个网络威胁检测引擎 (IDS/IPS),能够监控网络流量并检测恶意或可疑活动。
此实施的目标是将 Suricata 生成的事件发送到 Wazuh Manager,以便在集中式面板中进行分析和可视化。
首先,我按照以下步骤在 endpoint(在本例中为装有 Ubuntu Desktop 的虚拟机)上安装了 Suricata:
我使用以下命令安装了 Suricata:
- ```sudo add-apt-repository ppa:oisf/suricata-stable```

- ```sudo apt-get update```

- ```sudo apt-get install suricata –y```

我使用以下命令下载并解压了 Suricata 规则:
- ```cd /tmp/ && curl -LO https://rules.emergingthreats.net/open/suricata-6.0.8/emerging.rules.tar.gz```

- ```sudo tar -xvzf emerging.rules.tar.gz && sudo mkdir /etc/suricata/rules && sudo mv rules/*.rules /etc/suricata/rules/```

- ```sudo chmod 777 /etc/suricata/rules/*.rules```

我编辑了 Suricata 的配置文件 ```/etc/suricata/suricata.yaml``` 并更改了这些变量的值:
- ```HOME_NET```: 我指定了 Ubuntu Desktop endpoint 的 IP。在这种情况下是 **10.0.2.2**:

- ```default-rule-path```: 我指定了 Suricata 规则所在的路径。
- ```rule-files```: 我指定了 ***.rules**,以便该目录中扩展名为 **.rules** 的所有文件都被 Suricata 用作 IDS/IPS 规则:

- ```af-packet```:
- ```interface```: 我指定了 endpoint 的监听接口。在这种情况下是 **enp0s3**,它对应于 NAT 网络。

在这种情况下,当任何主机向该接口 (enp0s3) 发出请求时,都会生成一个事件。只要源 IP 地址与 Ubuntu Desktop (10.0.2.2) 的 IP 地址不同即可。
保存更改后,我使用命令 ```systemctl restart suricata``` 重启了 Suricata 服务,以使规则生效:

我编辑了 Wazuh Agent 的配置文件 ```/var/ossec/etc/ossec.conf``` 并添加了这些行以指定 Suricata 的 logs 文件:
```
json
/var/log/suricata/eve.json
```
这样一来,我们就能将 Suricata 生成的事件发送到 Wazuh Manager。
保存 Wazuh Agent 的配置文件后,我重启了其服务:

### 测试攻击
为了生成警报,我从 Ubuntu Server 虚拟机对 Ubuntu Desktop 虚拟机执行了 ping 操作。
我运行了命令 ```ping –c 20 100.2.2```,向 endpoint 发送了 20 个数据包:

现在,如果我们访问 dashboard 并转到威胁检测和 Ubuntu Desktop 代理,我们可以看到 Suricata 生成的与此 ping 相关的警报:

如果我们检查该警报,可以看到诸如 **代理的主机名、目标 IP 或源 IP** 等详细信息:

我还尝试从 Kali Linux 虚拟机使用命令 ```nmap –p- 10.0.2.2``` 向 endpoint 发出请求
此命令扫描机器的所有 TCP 端口:

通过此扫描,生成了以下 Suricata 警报:

它检测到了对各种端口的扫描,例如 VNC 或 MySQL。
## 在 Ubuntu Desktop 中配置 FIM 和 YARA
**FIM (File Integrity Monitoring)** 是一种安全过程,允许监控并验证文件或目录是否被篡改。
它可用于:
- 检测攻击者修改系统文件(例如关键二进制文件或脚本)的攻击。
- 识别配置文件中未经授权的更改。
- 遵守安全法规。
在这种情况下,目标是当文件被修改、创建或删除时,代理生成一个事件并将其发送到 Wazuh 服务器。
另一方面,**YARA 规则**允许识别和分类可疑文件。
**YARA 规则**定义了模式,当这些模式在文件或进程中找到时,表明可能存在恶意软件。
YARA 规则由以下部分组成:
- **条件:** 要查找的内容(例如,字节序列、文本字符串、正则表达式)。
- **标准:** 何时触发规则(例如,是否同时出现多个字符串)。
在这种情况下,在 Wazuh 中集成 YARA 可以使用 YARA 规则分析由 FIM 监控的文件,实时检测可疑文件并在文件与已知恶意软件签名匹配时生成警报。
在 Wazuh 中的工作原理如下:
1. FIM 检测到文件发生更改。
2. Wazuh 使用 YARA 根据加载的规则分析该文件。
3. 如果 YARA 发现恶意模式,则会生成一个事件并发送到 Wazuh 服务器。
**Valhalla** 是一项提供以下功能的服务:
- 专业的、最新的 YARA 规则集中仓库。
- 由网络安全专家创建和维护的规则。
- 有助于检测新变种恶意软件和新兴威胁的签名。
Valhalla 允许 Wazuh:
- 集成广泛的 YARA 规则集,而无需管理员手动创建。
- 针对新威胁保持更新,因为 Valhalla 的规则会不断更新。
在 Wazuh 中的工作原理如下:
1. 管理员从 Valhalla 下载 YARA 规则(例如,通过脚本或手动)。
2. 这些规则存储在 Wazuh 服务器或代理上的 ```valhalla_rules.yar``` 等文件中。
3. 配置 Wazuh Agent 以将这些规则与 FIM 模块一起使用。
### 配置 FIM
首先,我在 Ubuntu Desktop 机器上创建了 ```documents``` 目录。
这将是用于监控的目录:

目标是当我们在此目录中创建文件时,会生成一个事件,以便我们可以在 Wazuh 的 dashboard 中对其进行分析。
我修改了 Wazuh Agent 的配置文件 ```/var/ossec/etc/ossec.conf```,以添加创建的目录路径。我将
路径添加到了 `````` 标签中,该标签包含被监控的目录:

这样,它也会检查此目录并实时报告更改。
保存更改后,我使用命令 ```systemctl restart wazuh-agent``` 重启了 Wazuh Agent 服务
为了验证其操作,我在 ```documents``` 目录中创建了一个测试文件并将其删除:

如果我现在重新加载事件,已经显示了 2 个事件;一个是 ```prueba.txt``` 文件的创建,另一个是它的删除:

### 使用 Valhalla 配置 YARA
通过配置 YARA,我们实现了当被监控目录发生更改时对其进行分析,如果检测到恶意模式,则向 Wazuh 服务器生成一个事件。
要在 Ubuntu Desktop endpoint 上配置 YARA,我执行了以下命令:
- ```sudo apt update```
- ```sudo apt install -y make gcc autoconf libtool libssl-dev pkg-config```
- ```sudo curl -LO https://github.com/VirusTotal/yara/archive/v4.2.3.tar.gz```
- ```sudo tar -xvzf v4.2.3.tar.gz -C /usr/local/bin/ && rm -f v4.2.3.tar.gz```
- ```cd /usr/local/bin/yara-4.2.3/```
- ```sudo ./bootstrap.sh && sudo ./configure && sudo make && sudo make install && sudo make check```
为了避免在执行 ```yara``` 命令时出现 ```error while loading shared libraries: libyara.so.9: cannot open shared object file: No such file or directory``` 错误,我也执行了以下命令:
- ```sudo su```
- ```echo "/usr/local/lib" >> /etc/ld.so.conf```
- ```ldconfig```

我使用以下命令下载了 YARA 检测规则:
- ```sudo mkdir -p /tmp/yara/rules```
- ```sudo curl 'https://valhalla.nextron-systems.com/api/v1/get' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8' -H 'Accept- Language: en-US,en;q=0.5' --compressed -H 'Referer: https://valhalla.nextron-systems.com/' -H 'Content-Type: application/x-www-form-urlencoded' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' --data 'demo=demo&apikey=1111111111111111111111111111111111111111111111111111111111111111&format=text' -o /tmp/yara/rules/yara_rules.yar```

我在 ```/var/ossec/active-response/bin/``` 目录中创建了 ```yara.sh``` 文件,其内容来自[官方文档:](https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/fim-yara.html)

这是当 FIM 检测到受监控目录发生更改时,执行 YARA 扫描的主动响应脚本。
我使用以下命令更改了脚本的权限和所有者:
- ```sudo chmod 750 /var/ossec/active-response/bin/yara.sh```
- ```sudo chown root:wazuh /var/ossec/active-response/bin/yara.sh```

然后我安装了 **jq** 工具,用于处理 FIM 警报的 JSON 数据:
- ```sudo apt install -y jq```

最后,我再次编辑了 Wazuh Agent 的配置文件 ```/var/ossec/etc/ossec.conf```,以添加我想要监控的另一个目录,在这个
情况下是 **root:**

保存更改后,我再次使用命令 ```systemctl restart wazuh-agent``` 重启了 Wazuh Agent 服务
下一步是配置 Wazuh 服务器。我使用命令 ```ssh wazuh@192.168.56.10``` 通过主机终端的 SSH 连接进行了配置
首先,我编辑了文件 ```/var/ossec/etc/decoders/local_decoder.xml``` 并添加了[官方文档:](https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/fim-yara.html#wazuh-server-configuration)中指出的内容

这允许提取 YARA 执行扫描所产生的信息。
我编辑了文件 ```/var/ossec/etc/rules/local_rules.xml``` 并根据[官方文档:](https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/fim-yara.html#wazuh-server-configuration)添加了以下内容

在这里我们指定了组,以便当 ```root``` 目录发生修改时,会生成具有相应 ID 的事件。
我编辑了 Wazuh Server 的配置文件 ```/var/ossec/etc/ossec.conf``` 并添加了以下内容:
```
yara_linux
yara.sh
-yara_path /usr/local/bin -yara_rules /tmp/yara/rules/yara_rules.yar
no
no
yara_linux
local
100200,100201
```
这样,将执行 ```yara.sh``` 脚本,并使用 YARA 规则监控相应的目录(在本例中为 root)。
最后,保存更改后,我使用命令 ```systemctl restart wazuh-manager``` 在服务器上重启了 Wazuh Manager 服务。
### 使用恶意软件样本测试功能
为了验证 FIM 和 YARA 规则的操作,我在 Ubuntu Desktop 机器上下载了 **Mirai** 和 **Xbash** 恶意软件的样本,并将它们移动到了 ```root``` 目录。
在此之前,如果我转到 Wazuh 的 dashboard 并选择 endpoint 的 Threat Hunting 选项,不会出现任何级别为 12 的警报:

在下载恶意软件样本并将其移动到 ```root``` 目录之后,如果我重新加载 Wazuh 的 dashboard,就会出现级别为 12 的警报:


从事件部分,我们可以看到 YARA 规则在我下载的恶意软件目录中检测到了可疑模式:

这样,每次 YARA 在 ```root``` 目录的文件中检测到恶意模式时,都会创建相应的警报。
# ✔️ 结论
这个项目让我更好地了解了像 Wazuh 这样的 SIEM 的工作原理,以及实施 Suricata、FIM 和 YARA 等工具以增强检测能力的重要性。
# 📘 参考网资
为本项目查阅的资料:
- *Network IDS integration, Wazuh documentation:* https://documentation.wazuh.com/current/proof-of-concept-guide/integrate-network-ids-suricata.html
- *Quickstart, Wazuh documentation:* https://documentation.wazuh.com/current/quickstart.html
- *Wazuh agent, Wazuh documentation:* https://documentation.wazuh.com/current/installation-guide/wazuh-agent/index.html
- *File integrity monitoring and YARA, Wazuh documentation:* https://documentation.wazuh.com/current/user-manual/capabilities/malware-detection/fim-yara.html
- *WAZUH – FIM & YARA UD, Clockwork Computer Blogspot:* https://clockworkcomputerip.blogspot.com/2025/06/wazuh-fim-yara-ud.html
- *Clockwork Computer, YouTube:* https://www.youtube.com/@ClockworkComputerIP/videos
标签:AMSI绕过, CISA项目, DAST, Go语言工具, HTTP工具, IT运维, meg, Metaprompt, Socks5代理, Suricata, Ubuntu Desktop, Ubuntu Server, VirtualBox, Wazuh, x64dbg, YARA, 云资产可视化, 信息安全, 入侵检测系统, 威胁检测, 安全仪表盘, 安全实验室, 安全数据湖, 安全运营, 恶意软件分析, 扫描框架, 模拟攻击, 现代安全运营, 端点安全, 网络安全, 网络安全审计, 网络流量分析, 自定义DNS解析器, 虚拟化环境, 补丁管理, 隐私保护