Wazuh 研究记录 | 开源XDR | 安全基线检测
文章目录
- 🚀 什么是 Wazuh?
- 🔑 核心功能
- 服务端安装
- 客户端安装
- 查看终端安全基线
- 客户端日志查看
- Windows 安全日志
- MacOS 系统日志
- Linux 系统日志
- 自定义安全基线
- Windows自定义
- 控制台端推送安全基线
- 1.打开控制台远程命令执行功能
- 2. 在控制台编写基线文件
- 3.修改控制台默认组配置文件
- 4.重启服务端、客户端查看基线检测结果
- 5.查看客户端日志,和控制台输出
- 漏洞扫描
🚀 什么是 Wazuh?
Wazuh 是一个 开源的安全平台(XDR / SIEM / HIDS),用来集中管理和监控主机、网络和应用的安全。它最初基于 OSSEC 发展而来,现在是一个独立的开源项目。
🔑 核心功能
- 日志收集与分析(SIEM 功能)
- 支持收集 Windows、Linux、网络设备、云平台日志
- 内置规则引擎,能检测攻击行为、恶意活动
- 可与 ELK(Elasticsearch + Kibana)集成做可视化
- 主机入侵检测(HIDS)
- 文件完整性监控(FIM)
- Rootkit 检测、恶意软件检测
- 系统调用和进程监控
- 漏洞检测
- 自动扫描已安装软件版本
- 与漏洞库(NVD、OVAL 等)对比,发现已知漏洞
- 配置合规 / 基线检查(SCA)
- 内置 CIS、PCI-DSS、HIPAA 等安全基线
- 支持自定义基线(YAML 格式)
- 威胁情报(Threat Intelligence)
- 集成 OTX、VirusTotal 等情报源
- 检测可疑 IP、域名、哈希
- 响应与自动化(Active Response)
- 可执行脚本,阻断 IP、隔离主机
- 与防火墙 / SIEM / SOAR 集成
服务端安装
直接导入OVF文件即可,并修改IP配置
https://packages.wazuh.com/4.x/vm/wazuh-4.12.0.ova
客户端安装
-
登录控制台,默认账户密码 admin admin
-
点击左上角部署,安装SOP部署即可
#Windows Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.12.0-1.msi -OutFile $env:tmp\wazuh-agent; msiexec.exe /i $env:tmp\wazuh-agent /q WAZUH_MANAGER='10.41.84.100' #Linux curl -o wazuh-agent-4.12.0-1.x86_64.rpm https://packages.wazuh.com/4.x/yum/wazuh-agent-4.12.0-1.x86_64.rpm && sudo WAZUH_MANAGER='10.41.84.100' rpm -ihv wazuh-agent-4.12.0-1.x86_64.rpmsudo systemctl daemon-reload sudo systemctl enable wazuh-agent sudo systemctl start wazuh-agent#MacOS Apple Silicom curl -so wazuh-agent.pkg https://packages.wazuh.com/4.x/macos/wazuh-agent-4.12.0-1.arm64.pkg && echo "WAZUH_MANAGER='10.41.84.100'" > /tmp/wazuh_envs && sudo installer -pkg ./wazuh-agent.pkg -target /sudo /Library/Ossec/bin/wazuh-control start#MacOS Apple intel curl -so wazuh-agent.pkg https://packages.wazuh.com/4.x/macos/wazuh-agent-4.12.0-1.intel64.pkg && echo "WAZUH_MANAGER='10.41.84.100'" > /tmp/wazuh_envs && sudo installer -pkg ./wazuh-agent.pkg -target / sudo /Library/Ossec/bin/wazuh-control start
安装后可以在Agent中查看客户端清单
查看终端安全基线
可以在控制台查看客户端 configuration-assessmen 合规情况
- Windows
-
Linux
-
MacOS
客户端日志查看
- 在Discover 页面可以查看客户端日志
Windows 安全日志
MacOS 系统日志
Linux 系统日志
密码长度
自定义安全基线
wazuh可以自定义安装基线,比如按照SRAS,或者其他客户要求定义终端安全检测项目
Windows自定义
-
在C:\Program Files (x86)\ossec-agent\ruleset\sca目录中创建自定义yml文件
-
参考下面的代码
# 企业最小化 Windows 安全基线 # 仅保留密码与锁屏类的关键规则,适合企业轻量级部署 # Copyright (C) 2025, Internal Security Teampolicy:id: "real"file: "real.yml"name: "Windows 最小基线-Real测试"description: "关注核心账号与锁屏安全要求的轻量化基线。"references:- https://www.cisecurity.org/cis-benchmarks/- 企业内部安全标准 v1.0requirements:title: "Check that the Windows platform is Windows 11"description: "Requirements for running the CIS benchmark Domain Controller under Windows 11"condition: allrules:- 'r:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion -> ProductName -> r:^Windows 10'checks:# 1. 最小密码长度- id: 30001title: "密码最小长度 ≥ 8"description: "要求用户密码不少于 8 位,提高破解难度。"rationale: "短密码容易被暴力破解。"impact: "用户需创建更长的密码。"remediation: "在组策略中设置:计算机配置 → Windows 设置 → 安全设置 → 账户策略 → 密码策略 → 最小密码长度 = 8 或以上。"compliance:- cis: ["1.1.3"]condition: allrules:- 'c:net.exe accounts -> n:Minimum password length:\s+(\d+) compare >= 8'# 2. 最大密码有效期- id: 30002title: "最大密码使用期限 ≤ 365 天"description: "要求密码定期更换,防止长期使用导致泄露风险。"rationale: "长期不变的密码更容易被攻击利用。"remediation: "在组策略中设置:最大密码期限 ≤ 365 天,且不为 0。"compliance:- cis: ["1.1.2"]condition: allrules:- 'c:net.exe accounts -> n:Maximum password age \(days\):\s+(\d+) compare <= 365'- 'c:net.exe accounts -> n:Maximum password age \(days\):\s+(\d+) compare > 0'# 3. 账户锁定阈值- id: 30003title: "账户锁定阈值 ≤ 10"description: "连续输错密码 10 次以内应触发账户锁定。"rationale: "限制暴力破解攻击。"remediation: "在组策略中设置:账户锁定阈值 = 10 或更少(但不能为 0)。"compliance:- cis: ["1.2.1"]condition: allrules:- 'c:net.exe accounts -> n:Lockout threshold:\s+(\d+) compare <= 10'- 'c:net.exe accounts -> n:Lockout threshold:\s+(\d+) compare > 0'# 4. 屏幕保护程序超时- id: 30004title: "屏幕保护程序超时 ≤ 900 秒"description: "闲置 15 分钟内自动锁屏,防止未授权访问。"rationale: "防止无人值守的计算机被滥用。"remediation: "在组策略中设置:用户配置 → 管理模板 → 控制面板 → 个性化 → 屏幕保护程序超时 = 900 秒或更少。"compliance:- cis: ["2.2.1"]condition: allrules:- 'r:HKCU\\Control Panel\\Desktop -> ScreenSaveTimeOut -> r:^(\d+)$ compare <= 900'# 5. 屏幕保护程序强制启用- id: 30005title: "强制启用屏幕保护程序"description: "确保屏幕保护程序被启用,结合超时策略使用。"rationale: "无屏保时,超时锁定策略无法生效。"remediation: "在组策略中设置:启用屏幕保护程序。"compliance:- cis: ["2.2.2"]condition: allrules:- 'r:HKCU\\Control Panel\\Desktop -> ScreenSaveActive -> v:1'# 6. 禁止安装webex- id: 30006title: "禁止安装 Webex 软件"description: "检查系统中是否安装了包含 'webex' 字样的软件。"rationale: "Webex 可能不符合企业软件白名单策略。"remediation: "卸载 Webex 或联系 IT 管理员审批。"compliance:- custom: ["禁止使用 Webex"]condition: anyrules:- 'c:wmic product get name -> r:webex'- id: 40001title: "操作系统为 Windows 10 及以上"description: "确保操作系统版本为 Windows 10 或更高。"condition: allrules:- 'r:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion -> ProductName -> r:Windows (10|11|12)'- id: 40002title: "已安装防病毒软件"description: "检查是否安装了主流防病毒软件。"condition: anyrules:- 'c:wmic product get name -> r:(360|McAfee|Symantec|Kaspersky|Defender|ESET|Avast|Trend Micro|Bitdefender)'- id: 40003title: "禁止安装远程/VPN/网盘/Outlook等软件"description: "检查是否安装了Dameware、AnyConnect、UNC、网盘、Outlook等。"condition: anyrules:- 'c:wmic product get name -> r:(Dameware|AnyConnect|UNC|百度网盘|Outlook|Dropbox|OneDrive|WeDrive)'- id: 40004title: "密码复杂度要求"description: "密码长度≥8,含大小写字母和数字。"condition: allrules:- 'c:net accounts -> n:Minimum password length:\s+(\d+) compare >= 8'- 'r:HKLM\SYSTEM\CurrentControlSet\Control\Lsa -> LmCompatibilityLevel -> v:1'- 'r:HKLM\SYSTEM\CurrentControlSet\Control\Lsa -> PasswordComplexity -> v:1'- id: 40005title: "密码修改频率为每月一次"description: "最大密码有效期不超过31天。"condition: allrules:- 'c:net accounts -> n:Maximum password age \(days\):\s+(\d+) compare <= 31'- 'c:net accounts -> n:Maximum password age \(days\):\s+(\d+) compare > 0'- id: 40006title: "禁止本地文件共享"description: "检查是否存在非默认共享。"condition: allrules:- 'c:net share -> r:^[A-Z]\$'- id: 40007title: "禁止物理打印机"description: "仅允许XPS和PDF虚拟打印机。"condition: allrules:- 'c:wmic printer get name -> r:(?i)(?!.*(XPS|PDF)).+'- id: 40008title: "禁用蓝牙"description: "蓝牙服务被禁用。"condition: allrules:- 'r:HKLM\SYSTEM\CurrentControlSet\Services\BTHPORT -> Start -> v:4'- id: 40009title: "屏保5分钟自动锁屏并需密码"description: "屏保超时≤300秒,且恢复需密码。"condition: allrules:- 'r:HKCU\Control Panel\Desktop -> ScreenSaveTimeOut -> r:^(\d+)$ compare <= 300'- 'r:HKCU\Control Panel\Desktop -> ScreenSaverIsSecure -> v:1'- id: 40010title: "禁止访问指定外部网站"description: "检测能否访问 mail.qq.com、pan.baidu.com、apple.com 等外部站点。"condition: anyrules:- 'c:curl -I -m 5 https://mail.qq.com 2>&1 -> r:HTTP/1\.[01] 200'- 'c:curl -I -m 5 https://pan.baidu.com 2>&1 -> r:HTTP/1\.[01] 200'- 'c:curl -I -m 5 https://www.apple.com 2>&1 -> r:HTTP/1\.[01] 200'- id: 40011title: "存在测试文件"description: "检查 D:\\123.csv 文件是否存在。"condition: anyrules:- 'f:D:\\123.csv -> exists'- 'f:D:\123.csv -> exists'- id: 40012title: "存在 tcping 命令"description: "检查 C:\\Windows\\System32\\tcping.exe 是否存在。"condition: anyrules:- 'f:C:\WINDOWS\System32\tcping.exe -> exists'- 'f:C:\WINDOWS\System32\tcping64.exe -> exists'- id: 40013title: "存在测试文件"description: "检查 clash.ini 文件是否存在。"condition: anyrules:- 'c:powershell -Command "Test-Path D:\\clash.ini" -> r:^True$' - id: 40014title: "存在测试文件"description: "检查 D:\\123.csv 文件是否存在。"condition: anyrules:- 'c:powershell -Command "Test-Path D:\\123.csv" -> r:^True$' - id: 99999title: "存在 notepad"description: "检查 C:\\Windows\\notepad.exe 是否存在。"condition: allrules:- 'f:C:\Windows\notepad.exe -> exists'- 'f:C:\\WINDOWS\\notepad.exe -> exists'
-
定义好后重启客户端的wazuh服务即可在控制台看到结果
-
常见的检测语法有:
你在写 Wazuh SCA (Security Configuration Assessment) 规则 时,除了
c:
(命令)、f:
(文件)、r:
(注册表)之外,其实还有一套完整的检测前缀。我帮你整理一份 常用检测方案清单(适合 Windows / Linux 都能用):
🔑 常用规则检测方法(rule 前缀)
前缀 说明 示例 f: 文件检查(存在性 / 内容 / 权限) f:C:\\Windows\\System32\\calc.exe -> exists
r: 注册表键值检查(仅 Windows) r:HKLM\\Software\\Policies\\Microsoft\\Windows\\Control Panel\\Desktop -> ScreenSaveActive -> v:1
c: 命令执行 + 正则匹配 c:net user -> r:Administrator
d: 目录检查(存在性 / 权限) d:C:\\Program Files\\ -> exists
p: 进程检查(匹配运行进程名) p:lsass.exe -> running
n: 网络配置 / 端口检查 n:0.0.0.0:3389 -> listening
k: 内核参数(主要 Linux) k:net.ipv4.ip_forward -> v:0
u: 用户 / 组检查 u:Administrator -> exists
s: 服务状态检查(systemd / Windows service) s:TermService -> running
o: 系统属性检查(OS 名称 / 版本等) o:os.name -> r:Windows 10
🔍 说明与应用场景
- f / d → 文件和目录
检查敏感文件是否存在、权限是否正确。- 示例:
f:D:\\clash.ini -> not_exists
- 示例:
- r → 注册表
检查 Windows 安全策略、组策略配置。- 示例:
r:HKLM\\System\\CurrentControlSet\\Control\\Lsa -> LimitBlankPasswordUse -> v:1
- 示例:
- c → 命令
最通用,几乎万能(适合你刚遇到f:
不生效时的替代)。- 示例:
c:powershell -Command "Test-Path D:\\123.csv" -> r:^True$
- 示例:
- p → 进程
检查是否有黑名单软件在运行。- 示例:
p:webex.exe -> not_running
- 示例:
- n → 网络
确保敏感端口关闭。- 示例:
n:0.0.0.0:23 -> not_listening
- 示例:
- s → 服务
检查服务是否开启/关闭。- 示例:
s:RemoteRegistry -> stopped
- 示例:
- o → OS 属性
判断系统版本,防止错误套用基线。- 示例:
o:os.major -> v:10
- 示例:
⚠️ 小技巧
- 优先用
c:
(命令) → 万能兜底,特别是文件检测有问题时。 - f / r / s → 性能更好(直接 API 级别调用,比
c:
快)。 - 组合 condition →
condition: any
或all
可以混合使用多种前缀,保证可靠性。
- f / d → 文件和目录
控制台端推送安全基线
🔑 关键点:SCA 策略集中管理
- 不用在每台客户端单独放 YML 文件
- 可以通过 Wazuh Manager 在服务端集中存放基线文件,并通过
agent.conf
或group
配置下发给成百上千个 agent。- 这样改动一次,就能应用到对应组的所有客户端。
1.打开控制台远程命令执行功能
-
在客户端Powershell中运行下面的命令,来开启客户端远程命令执行功能
https://www.reddit.com/r/Wazuh/comments/1i7hi18/is_there_a_way_to_push_scaremote_commands1_to_all/
出于安全考虑,Wazuh 不允许服务端直接下发“允许远程命令”这种选项。
否则攻击者一旦控制了 Wazuh server,就能直接在所有 agent 上执行命令,风险太大。
Add-Content -Value 'sca.remote_commands=1' -Path 'C:\Program Files (x86)\ossec-agent\local_internal_options.conf'
Restart-Service WazuhSvc
[!WARNING]
如果不修改,客户端会遇到下面的报错:
2. 在控制台编写基线文件
-
将写好的基线文件放在服务端 /var/ossec/etc/shared/default/ 目录下,并确认好权限
-
[root@wazuh-server shared]# ls -lt /var/ossec/etc/shared/default/real666.yml -rw-r--r--. 1 wazuh wazuh 7788 Sep 10 01:30 /var/ossec/etc/shared/default/real666.yml chown -R wazuh:wazuh /var/ossec/etc/shared/default/real666.yml chmod 750 /var/ossec/etc/shared/default/real666.yml
3.修改控制台默认组配置文件
修改默认组的配置文件,指定policy文件路径
[root@wazuh-server default]# more /var/ossec/etc/shared/default/agent.conf
<agent_config><sca><policies><policy>shared/real666.yml</policy></policies></sca>
</agent_config>#确认文件权限
chown wazuh:wazuh /var/ossec/etc/shared/agent.conf
chmod 640 /var/ossec/etc/shared/agent.conf
4.重启服务端、客户端查看基线检测结果
#重启服务端
systemctl restart wazuh-manager#重启客户端
Restart-Service WazuhSvc
5.查看客户端日志,和控制台输出
2025/09/10 10:14:51 sca: INFO: Starting evaluation of policy: 'C:\Program Files (x86)\ossec-agent\shared\real666.yml'
漏洞扫描
- 可以在Vulnerability Detection 查询客户的漏洞情况,Wazuh 是根据OS的软件包来检测是否存在漏洞,不验证漏洞的可利用性
- Windows的漏洞
-
Linux的漏洞:
-
MacOS 的漏洞
🔍 1. Wazuh 的漏洞检测
- 工作原理
- 依赖 OS query、syscollector 模块收集系统软件清单(版本、补丁、包信息)
- 将采集到的版本信息与 漏洞数据库(NVD、OVAL、MS KB 等) 对比
- 输出漏洞列表(已知版本漏洞)
- 检测方式:被动检测(基于版本匹配),不主动攻击、不发送探测包。
- 结果特征
- 能发现系统/软件中有无已知漏洞(例如:已安装的 OpenSSL 版本有 CVE-XXXX)。
- 不会告诉你漏洞是否真正能利用,只是 潜在风险。
- 优点
- 与 HIDS、SCA 一体化,统一告警平台
- 开源免费,可定制化规则
- 风险面覆盖广,适合合规和持续监控
- 缺点
- 不能确认漏洞是否真实可利用
- 无法发现配置错误导致的安全风险(比如弱口令登录、服务暴露)
🛠 2. Nessus(Tenable)漏洞扫描
- 工作原理
- 主动扫描目标(网络探测、端口扫描、服务识别)
- 结合插件库(包含漏洞利用脚本、检测逻辑)验证漏洞
- 可执行本地认证扫描(SSH、WinRM)获取更精确的软件与补丁信息
- 检测方式:主动探测 + 版本比对 + 弱点利用测试
- 结果特征
- 不仅能识别漏洞,还能验证部分漏洞是否可被利用
- 能发现配置错误(弱口令、明文传输、缺少安全选项等)
- 优点
- 商业级别,插件库更新快,覆盖率高
- 检测结果更接近“真实攻击面”
- 缺点
- 收费(Nessus Essentials 免费版限制主机数)
- 扫描可能影响业务(主动探测带负载)
- 不是持续监控,需要定期扫描
📊 对比总结
特性 Wazuh 漏洞检测 Nessus 漏洞扫描 检测方式 被动(软件清单比对) 主动(网络探测 + 认证扫描) 实时性 持续监控 需定期扫描 能否验证漏洞可利用性 ❌ 不能 ✅ 部分可验证 配置风险检测 一般 强大(弱口令、服务配置) 成本 开源免费 商业收费(部分免费版) 风险 低(不影响业务) 中(扫描可能导致业务负载) 使用场景 合规、持续安全基线监控 深度安全检测、渗透前风险评估