malathi-cyber-sketch/wazuh-sysmon-siem-home-lab

GitHub: malathi-cyber-sketch/wazuh-sysmon-siem-home-lab

基于 Docker 部署的 Wazuh SIEM 家庭实验室,通过 Windows 10 端点的 Sysmon 遥测数据检测 Hydra 和 Nmap 攻击,并将告警映射到 MITRE ATT&CK 框架。

Stars: 0 | Forks: 0

# Wazuh + Sysmon SIEM 家庭实验室 ![Wazuh](https://img.shields.io/badge/Wazuh-4.7.5-3AB6E8?style=for-the-badge&logo=wazuh&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Deployment-2496ED?style=for-the-badge&logo=docker&logoColor=white) ![Sysmon](https://img.shields.io/badge/Sysmon-15.21-00A4EF?style=for-the-badge&logo=windows&logoColor=white) ![Kali Linux](https://img.shields.io/badge/Kali%20Linux-Attacker-557C94?style=for-the-badge&logo=kalilinux&logoColor=white) ![Windows 10](https://img.shields.io/badge/Windows%2010-Endpoint-00A4EF?style=for-the-badge&logo=windows10&logoColor=white) ![Hydra](https://img.shields.io/badge/Hydra-Brute%20Force-CC0000?style=for-the-badge&logo=hackaday&logoColor=white) ![Nmap](https://img.shields.io/badge/Nmap-Recon-4682B4?style=for-the-badge&logo=nmap&logoColor=white) ![MITRE ATT&CK](https://img.shields.io/badge/MITRE%20ATT%26CK-Mapped-D6273A?style=for-the-badge&logo=mitre&logoColor=white) ![CIS Benchmark](https://img.shields.io/badge/CIS%20Benchmark-SCA%20Scan-F5A623?style=for-the-badge&logo=checkmarx&logoColor=white) 我搭建的一个小型 SIEM 环境,目的是真正在实践中理解“端点监控”的含义,而不是纸上谈兵。Wazuh manager 在 Kali 上通过 Docker 运行,一台 Windows 10 机器作为被监控的端点,Sysmon 为其提供详细的遥测数据,然后我攻击自己的机器,看看这套系统是否真的能捕捉到什么。 简短的回答是:确实捕捉到了。详细的说明在下面。 ## 为什么做这个 每一个 SOC 分析师的招聘启事都把“SIEM 经验”列为要求,而每一门课程都只是教你阅读别人已经生成的告警。我想自己构建这条 pipeline —— 安装它、破坏它、修复它、攻击它,然后阅读我自己的告警 —— 这样我才能真正理解仪表板背后发生了什么,而不是仅仅认得那个 UI 界面。 我选择使用 Docker 部署 Wazuh manager,而不是裸机安装程序,主要是因为我觉得这样启动得更快。确实如此,但也并非完全如此 —— 下文会详细说明。 ## 实验室包含什么 - **Wazuh Manager** —— Kali Linux,通过 `docker-compose` 部署,Wazuh 4.7.5 - **Windows 10 端点** —— Wazuh Agent 4.7.5 + Sysmon 15.21 (SwiftOnSecurity config) - **攻击机** —— 同一台 Kali 机器,用于针对 Windows 目标进行 Hydra 暴力破解尝试和 Nmap 扫描 ``` [Kali - Wazuh Manager (Docker)] <---- monitors ----> [Windows 10 - Agent + Sysmon] | └── also used to attack the Windows box (Hydra, Nmap) ``` 所有设备都位于 `192.168.100.0/24` 的仅主机 (host-only) 网络上。Manager 地址为 `.3`,Windows 目标地址为 `.4`。 ## 阶段 1 — 让网络互通 **工具:** `ipconfig`, `ping` 在完全接触 Wazuh 之前,我只是检查了一下这两台机器是否真的能互相通信。这很基础,但跳过这一步正是导致你之后调试错误方向的原因。 ``` C:\Windows\system32>ping 192.168.100.3 Reply from 192.168.100.3: bytes=32 time<1ms TTL=64 ``` 发送了 4 个数据包,0% 丢失。很好,继续下一步。 ![Kali 可以与 Windows 通信](https://static.pigsec.cn/wp-content/uploads/repos/cas/e9/e9c4be09b3dcd77acb9ea2d930fae4ae53be694766c4988625165af8d91f2a82.png) ![Windows 可以与 Kali 通信](https://static.pigsec.cn/wp-content/uploads/repos/cas/b4/b401cde9db22bfeafd8f8d6d9d5a3adc27c241d505c70ee6d85dc2dab6debab5.png) ## 阶段 2 — 使用 Docker 搭建 Wazuh Manager **工具:** Docker, `docker-compose` 我拉取了官方的 `wazuh-docker` 单节点仓库并直接运行。 ``` cd wazuh-docker/single-node docker-compose up -d docker ps ``` 创建了 17 个卷,在不到一秒的时间内启动了 3 个容器 —— indexer、manager 和 dashboard。 ``` single-node-wazuh.indexer-1 Up single-node-wazuh.manager-1 Up single-node-wazuh.dashboard-1 Up ``` ![Docker 容器运行中](https://static.pigsec.cn/wp-content/uploads/repos/cas/9f/9f8d8b00c7b514c551195a89dc3d7cd054d277c58e69a30fa0bc28fc10d86e3f.png) 说实话,与我对之前手动安装的记忆相比,这部分感觉太容易了。这种感觉并没有持续太久。 *(旁注 —— 我之前也曾在 Kali 上直接尝试过手动运行 `wazuh-install.sh -a` 的方式,因为 Kali 并不在 Wazuh 官方支持的操作系统列表中。必须加上 `--ignore-check` 运行才能跳过操作系统检查,实际上它顺利完成安装了。不过我还是保留了 Docker 版本作为主要的环境设置,因为当我弄坏某些东西时,它更容易推倒重建。)* ![在 Kali 上运行手动 wazuh-install.sh](https://static.pigsec.cn/wp-content/uploads/repos/cas/52/52c9f3d6484fe651a0b843f9aa6f78750d564c0873425ce2415c13129b28d7fc.png) ## 阶段 3 — 打开仪表板 **工具:** 浏览器, Wazuh Dashboard 使用安装脚本在最后输出的管理员凭据登录 `https://192.168.100.3`。第一次查看仪表板:代理摘要显示“无结果”,一条黄色的横幅告诉我还没有添加任何代理。这很合理 —— 我确实还没添加。 这就是在截图中看起来令人印象深刻,但如果没有任何实际的端点汇报数据,它实际上毫无意义的部分。我想指出这一点,因为很多“SIEM 实验室”的教程写到这就停了,好像这就是终点线。但这其实只是起跑线。 ![第一次查看仪表板,还没有代理](https://static.pigsec.cn/wp-content/uploads/repos/cas/22/22b2fd17869b25ee0d368ff7923a73105475739c2539e93c7dc788850ccd5654.png) ## 阶段 4 — 注册 Windows 10 代理 **工具:** `manage_agents` (Wazuh 内置的 CLI,在 manager 容器内运行) 这就是 Docker 让事情变得稍微有点烦人的地方 —— 代理管理工具不是图形界面的,你必须在正在运行的容器内执行它。 ``` (A)dd an agent (A) Please provide the following: * A name for the new agent: windows10 * The IP Address of the new agent: 192.168.100.4 Confirm adding it? (y/n): y Agent added with ID 001. ``` ![在 manager 上添加代理](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/ddfa5ee1729d97fc093c1f7f525a22ff7b25e746bea2391d5bf6847bbe9fe3e6.png) ![代理添加确认](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a4d4ce605c6ef5e88e244de9ea2097385cea78204f3180b9ccba2728605fe5d2.png) 然后提取该代理 ID 的密钥: ``` (E)xtract key for an agent Provide the ID of the agent to extract the key: 001 Agent key information for '001' is: MDAxIHdpbmRvd3MxMCAxOTIuMTY4LjEwMC40IGY4Y... ``` ![提取的代理密钥](https://static.pigsec.cn/wp-content/uploads/repos/cas/cd/cd8a475f27b1cb20cdbbb7058fc03efad0fcc46be3be0452fe96491fa65e68dd.png) 将该密钥粘贴到 Windows 端的 Wazuh Agent 应用程序中,点击保存,点击启动。状态随即变为 **Running**。 ``` Agent: windows10 (001) - 192.168.100.4 Status: Running ``` ![Wazuh 代理在 Windows 上运行](https://static.pigsec.cn/wp-content/uploads/repos/cas/73/733d27dc1671ade2f5458393424967ccca1826e883220fe3cde611209e6f870d.png) 也从 manager 端进行了验证: ``` docker exec -it single-node-wazuh.manager-1 /var/ossec/bin/agent_control -l ``` ``` ID: 001, Name: windows10, IP: 192.168.100.4, Active ``` 代理已上线。但这并不意味着它已经派上用场了 —— 一个基础的代理会汇报系统信息,但我想要的是真正的进程级遥测数据,这就意味着需要 Sysmon。 ## 阶段 5 — 安装 Sysmon **工具:** Sysinternals Sysmon + SwiftOnSecurity 的社区 config Sysmon 记录进程创建、网络连接和文件活动的细节远比默认的 Windows 事件日志详细得多。但它需要一个 config 文件才能真正发挥作用 —— 默认的 config 几乎不记录任何内容。 ``` C:\Users\admin\Downloads\Sysmon>Sysmon64.exe -accepteula -i sysmonconfig-export.xml ``` 一个小麻烦:解压后下载的文件变成了 `Sysmon.exe`, `Sysmon64.exe`, 和 `Sysmon64a.exe` —— 我最初在还没有 `cd` 进入正确文件夹的情况下尝试运行 `Sysmon64.exe`,并收到了“未识别”的错误。新手的错误,在我检查了 `dir` 之后大约十秒钟就修复了。 ![解压后的 Sysmon 文件](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/3166bf8e08a1f90ce00f5dcccbaf51730b21510df5d00547563db7aa6d53493f.png) 验证它确实已经安装并启动: ``` wevtutil qe Microsoft-Windows-Sysmon/Operational /c:5 /f:text ``` ``` Event ID: 16 — Sysmon config state changed Configuration: C:\Users\admin\Downloads\sysmonconfig-export.xml Event ID: 4 — Sysmon service state changed: Started ``` Config 已加载,服务正在运行,哈希值已确认。很好。 ![Sysmon config 规则已加载](https://static.pigsec.cn/wp-content/uploads/repos/cas/b3/b3c3a7b5c3d5a9bd1a55b757960c3f4849bbd5adeec5f1d4b3ba7517e3563741.png) ![Sysmon 成功运行并记录了事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0cf456dabc612eff8410240c1aca6e9e5760758a731125a142acdfafc6a4cbee.png) ## 阶段 6 — 让 Wazuh 真正读取 Sysmon 日志 **工具:** `ossec.conf` (Wazuh 代理 config) 这一步很容易被忽略,然后你就会纳闷为什么仪表板里什么都没显示。Wazuh 代理默认并不知道要转发 Sysmon 的事件日志 —— 你必须明确告诉它。 将此代码块添加到 `C:\Program Files (x86)\ossec-agent\ossec.conf` 中: ``` Microsoft-Windows-Sysmon/Operational eventchannel ``` 重启了服务: ``` net stop WazuhSvc net start WazuhSvc ``` 也是在这个时候,我遇到了整个项目中比较令人困惑的 bug 之一 —— 重启后代理立即显示为已断开连接,并且 Sysmon 事件根本没有在仪表板中显示(`rule.groups: sysmon` → 未找到结果)。我花了一些时间检查服务状态、事件日志,并再次检查了 config 文件,之后干脆把所有东西又重启了一遍。它自己就恢复了。我至今没有一个干净利落的解释 —— 我最好的猜测是,服务在 config 重新加载后需要一点时间向 manager 重新注册,但我没有深入挖掘去证实这一点。 ![ossec.conf 中的 config 参考](https://static.pigsec.cn/wp-content/uploads/repos/cas/a9/a9a0bf87a2388e4eb46e18776bcb5ac11fbb3a1f24c7e4894e973d58d7572eb8.png) ![服务重启后仪表板加载中](https://static.pigsec.cn/wp-content/uploads/repos/cas/b7/b7d62bca3969838e1cf98a2aaa4fc68c1186fca2af04484d41f3afd3f86c5cfd.png) ## 阶段 7 — 真正攻击目标 **工具:** Hydra, Nmap 是时候看看这一切是否真的捕捉到了什么。 **使用 Hydra 进行暴力破解尝试 (RDP 和 SSH):** ``` hydra -l Administrator -P passwords.txt rdp://192.168.100.4 [ERROR] freerdp: The connection failed to establish. [ERROR] all children were disabled due too many connection errors 0 of 1 target completed, 0 valid password found ``` ``` hydra -l Administrator -P passwords.txt ssh://192.168.100.4 [ERROR] could not connect to ssh://192.168.100.4:22 - Timeout connecting ``` 两者都彻底失败了 —— RDP 没有按照 Hydra 需要的方式接受连接,SSH 甚至都没有开放。这不是我开始时预期的结果,但这是一个真实的结果:该目标确实不存在针对这些特定攻击路径的漏洞。我将此保留在文档中,而不是悄悄删除它,因为一次失败的攻击仍然是一个真实的发现。 **Nmap 全端口扫描:** ``` nmap 192.168.100.4 -p- ``` 这个起作用了并生成了真实的遥测数据 —— 扫描交互产生的进程创建和文件活动几乎立刻显示在了 Sysmon 中。 我也直接在 Windows 机器上运行了一些本地活动 —— PowerShell 脚本文件创建、命令提示符使用、文件投放 —— 以产生更真实的“攻击者在机器上”的行为,而不仅仅是依赖基于网络的攻击。 ![来自 Kali 的 Hydra 和 Nmap 攻击尝试](https://static.pigsec.cn/wp-content/uploads/repos/cas/5a/5a0db59e0b442eded7b21c1b49887e44314d2c729ef10e5622185b9330946aad.png) ![攻击中途的第二个 Windows 终端会话](https://static.pigsec.cn/wp-content/uploads/repos/cas/8a/8aa81392234f8936376b383aef37d7dea2249eb10896f7e8f9016b980ba213d1.png) ## 阶段 8 — 读取结果 **工具:** Wazuh Dashboard → Security Events 这才是真正的回报。将事件过滤范围缩小到 `agent.name: windows10`,看着告警不断涌入。 反复出现的模式,一次又一次地显示: ``` Rule 92201 (Level 9): powershell.exe created a new scripting file under Windows Temp or User data folder MITRE: T1105 (Ingress Tool Transfer), T1059 (Command and Scripting Interpreter) Tactic: Command and Control, Execution ``` 还有一个很引人注目的 —— Level 15,这是我这段时间看到的最高严重级别: ``` Rule 92213 (Level 15): Executable file dropped in folder commonly used by malware MITRE: T1105 Tactic: Command and Control ``` 还在较低的严重级别捕获了发现活动 (T1087),这与 Nmap 扫描相符。 ![windows10 代理的安全事件仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/e3/e3ee5cb7798a7d5a901608ffcf4a11252e1e347567ec6901657167cc534147c2.png) ![特定于 Sysmon 的事件细分](https://static.pigsec.cn/wp-content/uploads/repos/cas/e7/e7727d30d0801627015152410ef75f3728a668d91fe4709ee76310c89530b5a8.png) ![Sysmon 检测结果详情](https://static.pigsec.cn/wp-content/uploads/repos/cas/2a/2ad0e27492c9b7430539d562c498e87707ee44b11c25bf774cda14c5331cd707.png) 出于好奇而非计划,我也针对 CIS Microsoft Windows 10 Benchmark 运行了内置的 SCA (Security Configuration Assessment) 扫描: ``` Policy: CIS Microsoft Windows 10 Enterprise Benchmark v1.12.0 Passed: 121 Failed: 270 Score: 30% ``` 30% 的成绩很难看,但这是一个没有经过任何加固的原生 Windows 10 虚拟机,所以老实说这大概是我预料之中的。如果非要说的话,这也是一个很好的论据,说明了为什么基线加固很重要 —— 这台机器几乎无法通过真实审计会运行的每一项配置检查。 ## 我遇到的问题以及实际上是如何解决的 我没有把它们整理得比实际情况更整洁 —— 这大概是我遇到它们时的顺序。 | 问题 | 到底发生了什么 | 我是如何解决的 | |---|---|---| | `docker-compose up` 给出了关于 `version` 属性已过时的警告 | 较新版本的 Docker Compose 不再需要 yml 中的 `version:` 字段 | 忽略了它 —— 表面上的警告,反正容器都正常启动了 | | `NET START WazuhSvc` 提示“服务名称无效” | 代理 MSI 第一次没有干净地安装 | 重新安装了 MSI,然后在尝试启动它之前使用 `sc query WazuhSvc` 确认了该服务存在 | | 尝试运行 `Sysmon64.exe` 并得到“未识别”的提示 | 实际上并没有在我解压 zip 文件的文件夹中 | 显然,先 `cd` 进入正确的文件夹 —— 但值得一提,因为这是你在疲惫时会浪费十分钟的那种错误 | | Sysmon 事件完全没有显示在 Wazuh 中 | `ossec.conf` 中没有包含告诉代理去读取 Sysmon 事件通道的 `` 块 | 手动添加了 eventchannel 块,重启了代理服务 | | 配置重启后代理立即显示断开连接,并且日志文件夹看起来是空的 | 不完全确定 —— 可能是服务在重新加载后需要时间重新注册 | 再次重启了服务,检查 `agent_control -l` 直到它再次显示 Active | | Hydra 无法暴力破解 RDP 或 SSH | RDP 连接在协议级别未能完成,目标上甚至没有开放 SSH 端口 | 没有“修复”这个问题 —— 这是一个准确的结果。将其记录为一个发现,而不是强行使用不同的攻击来获得一个更完美的故事| Kali 不在 Wazuh 手动安装程序支持的操作系统列表中 | Wazuh 的安装脚本会对照固定列表进行检查 (RHEL, CentOS, Ubuntu, Amazon Linux) | 在手动尝试时加上了 `--ignore-check` 运行;最终无论如何还是坚持以 Docker 部署作为主要方式 | | 仪表板中的报告页面显示“无报告” | Wazuh 仅基于保存的仪表板/报告定义生成 PDF 报告 —— 当时还没有报告定义 | 需要先保存仪表板视图并创建报告定义;因为没有深入探究,因为这并不是检测目标的核心 | ## 我从中学到了什么 Docker 让 manager 的部署变得更快,但并没有让整个项目变得更容易 —— 它只是把摩擦转移到了其他地方。我不再与包安装程序作斗争,而是开始与容器 exec 命令作斗争,并弄清楚哪些 config 存在于容器内,哪些存在于宿主机上。这两种方式都不“简单”,它们只是在不同的地方存在困难。这可能是整个过程中最坦率的收获。 另一件让我印象深刻的事情是:让代理显示为“Active”并不等于获得了有用的遥测数据。“管道已连接”和“管道正在传输任何值得阅读的内容”之间存在真正的差距,而这个差距正是大多数教程一笔带过的 `ossec.conf` 步骤。 ## 仓库结构 ``` wazuh-sysmon-home-lab/ ├── README.md └── screenshots/ ├── docker_wazuh.png ├── dashboard.png ├── installing_wazuh.png ├── agent_adding.png ├── added_agent.png ├── key.png ├── use_main.png ├── waw.png ├── windows_2.png ├── ruuning.png ├── sysmon.png ├── sysmon_files.png ├── sysmon_running_successfully.png ├── sysmon_results.png ├── events.png ├── events_sysmon.png ├── attacks.png ├── kali_talk.png └── windows_can_talk.png ``` ## 关于我 我是 Malathi (Enola) —— 正在努力进入 SOC 分析师岗位,此前有过为期 6 个月的网络安全实习经验,涵盖 IDS/防火墙操作、VAPT 和 SOC 运营。这个实验室是我试图缩小“我学过 SIEM 概念”和“我实际上运行过、破坏过并修复过它”之间差距的尝试。我仍在学习中 —— 如果有任何我弄错了或者可以处理得更干净的地方,很乐意听取您的反馈。 [LinkedIn](https://linkedin.com/in/malathi-mittapalli-enola-b73208413) · [GitHub](https://github.com/malathi-cyber-sketch)
标签:CTI, Docker, Wazuh, 安全实验环境, 安全防御评估, 插件系统, 端点监控, 请求拦截