Wazuh 研究记录 | 开源XDR | 安全基线检测

文章目录

🚀 什么是 Wazuh?

Wazuh 是一个 开源的安全平台(XDR / SIEM / HIDS),用来集中管理和监控主机、网络和应用的安全。它最初基于 OSSEC 发展而来,现在是一个独立的开源项目。


🔑 核心功能

  1. 日志收集与分析(SIEM 功能)
    • 支持收集 Windows、Linux、网络设备、云平台日志
    • 内置规则引擎,能检测攻击行为、恶意活动
    • 可与 ELK(Elasticsearch + Kibana)集成做可视化
  2. 主机入侵检测(HIDS)
    • 文件完整性监控(FIM)
    • Rootkit 检测、恶意软件检测
    • 系统调用和进程监控
  3. 漏洞检测
    • 自动扫描已安装软件版本
    • 与漏洞库(NVD、OVAL 等)对比,发现已知漏洞
  4. 配置合规 / 基线检查(SCA)
    • 内置 CIS、PCI-DSS、HIPAA 等安全基线
    • 支持自定义基线(YAML 格式)
  5. 威胁情报(Threat Intelligence)
    • 集成 OTX、VirusTotal 等情报源
    • 检测可疑 IP、域名、哈希
  6. 响应与自动化(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.rpm
    
    sudo 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 Team
    
    policy:
      id: "real"
      file: "real.yml"
      name: "Windows 最小基线-Real测试"
      description: "关注核心账号与锁屏安全要求的轻量化基线。"
      references:
        - https://www.cisecurity.org/cis-benchmarks/
        - 企业内部安全标准 v1.0
    
    requirements:
      title: "Check that the Windows platform is Windows 11"
      description: "Requirements for running the CIS benchmark Domain Controller under Windows 11"
      condition: all
      rules:
        - 'r:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion -> ProductName -> r:^Windows 10'
    
    checks:
      # 1. 最小密码长度
      - id: 30001
        title: "密码最小长度 ≥ 8"
        description: "要求用户密码不少于 8 位,提高破解难度。"
        rationale: "短密码容易被暴力破解。"
        impact: "用户需创建更长的密码。"
        remediation: "在组策略中设置:计算机配置 → Windows 设置 → 安全设置 → 账户策略 → 密码策略 → 最小密码长度 = 8 或以上。"
        compliance:
          - cis: ["1.1.3"]
        condition: all
        rules:
          - 'c:net.exe accounts -> n:Minimum password length:\s+(\d+) compare >= 8'
    
      # 2. 最大密码有效期
      - id: 30002
        title: "最大密码使用期限 ≤ 365 天"
        description: "要求密码定期更换,防止长期使用导致泄露风险。"
        rationale: "长期不变的密码更容易被攻击利用。"
        remediation: "在组策略中设置:最大密码期限 ≤ 365 天,且不为 0。"
        compliance:
          - cis: ["1.1.2"]
        condition: all
        rules:
          - '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: 30003
        title: "账户锁定阈值 ≤ 10"
        description: "连续输错密码 10 次以内应触发账户锁定。"
        rationale: "限制暴力破解攻击。"
        remediation: "在组策略中设置:账户锁定阈值 = 10 或更少(但不能为 0)。"
        compliance:
          - cis: ["1.2.1"]
        condition: all
        rules:
          - 'c:net.exe accounts -> n:Lockout threshold:\s+(\d+) compare <= 10'
          - 'c:net.exe accounts -> n:Lockout threshold:\s+(\d+) compare > 0'
    
      # 4. 屏幕保护程序超时
      - id: 30004
        title: "屏幕保护程序超时 ≤ 900 秒"
        description: "闲置 15 分钟内自动锁屏,防止未授权访问。"
        rationale: "防止无人值守的计算机被滥用。"
        remediation: "在组策略中设置:用户配置 → 管理模板 → 控制面板 → 个性化 → 屏幕保护程序超时 = 900 秒或更少。"
        compliance:
          - cis: ["2.2.1"]
        condition: all
        rules:
          - 'r:HKCU\\Control Panel\\Desktop -> ScreenSaveTimeOut -> r:^(\d+)$ compare <= 900'
    
      # 5. 屏幕保护程序强制启用
      - id: 30005
        title: "强制启用屏幕保护程序"
        description: "确保屏幕保护程序被启用,结合超时策略使用。"
        rationale: "无屏保时,超时锁定策略无法生效。"
        remediation: "在组策略中设置:启用屏幕保护程序。"
        compliance:
          - cis: ["2.2.2"]
        condition: all
        rules:
          - 'r:HKCU\\Control Panel\\Desktop -> ScreenSaveActive -> v:1'
    
      # 6. 禁止安装webex
      - id: 30006
        title: "禁止安装 Webex 软件"
        description: "检查系统中是否安装了包含 'webex' 字样的软件。"
        rationale: "Webex 可能不符合企业软件白名单策略。"
        remediation: "卸载 Webex 或联系 IT 管理员审批。"
        compliance:
          - custom: ["禁止使用 Webex"]
        condition: any
        rules:
          - 'c:wmic product get name -> r:webex'
    
      - id: 40001
        title: "操作系统为 Windows 10 及以上"
        description: "确保操作系统版本为 Windows 10 或更高。"
        condition: all
        rules:
          - 'r:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion -> ProductName -> r:Windows (10|11|12)'
      - id: 40002
        title: "已安装防病毒软件"
        description: "检查是否安装了主流防病毒软件。"
        condition: any
        rules:
          - 'c:wmic product get name -> r:(360|McAfee|Symantec|Kaspersky|Defender|ESET|Avast|Trend Micro|Bitdefender)'
    
      - id: 40003
        title: "禁止安装远程/VPN/网盘/Outlook等软件"
        description: "检查是否安装了Dameware、AnyConnect、UNC、网盘、Outlook等。"
        condition: any
        rules:
          - 'c:wmic product get name -> r:(Dameware|AnyConnect|UNC|百度网盘|Outlook|Dropbox|OneDrive|WeDrive)'
    
      - id: 40004
        title: "密码复杂度要求"
        description: "密码长度≥8,含大小写字母和数字。"
        condition: all
        rules:
          - '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: 40005
        title: "密码修改频率为每月一次"
        description: "最大密码有效期不超过31天。"
        condition: all
        rules:
          - '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: 40006
        title: "禁止本地文件共享"
        description: "检查是否存在非默认共享。"
        condition: all
        rules:
          - 'c:net share -> r:^[A-Z]\$'
    
      - id: 40007
        title: "禁止物理打印机"
        description: "仅允许XPS和PDF虚拟打印机。"
        condition: all
        rules:
          - 'c:wmic printer get name -> r:(?i)(?!.*(XPS|PDF)).+'
    
      - id: 40008
        title: "禁用蓝牙"
        description: "蓝牙服务被禁用。"
        condition: all
        rules:
          - 'r:HKLM\SYSTEM\CurrentControlSet\Services\BTHPORT -> Start -> v:4'
    
      - id: 40009
        title: "屏保5分钟自动锁屏并需密码"
        description: "屏保超时≤300秒,且恢复需密码。"
        condition: all
        rules:
          - 'r:HKCU\Control Panel\Desktop -> ScreenSaveTimeOut -> r:^(\d+)$ compare <= 300'
          - 'r:HKCU\Control Panel\Desktop -> ScreenSaverIsSecure -> v:1'
    
      - id: 40010
        title: "禁止访问指定外部网站"
        description: "检测能否访问 mail.qq.com、pan.baidu.com、apple.com 等外部站点。"
        condition: any
        rules:
          - '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: 40011
        title: "存在测试文件"
        description: "检查 D:\\123.csv 文件是否存在。"
        condition: any
        rules:
          - 'f:D:\\123.csv -> exists'
          - 'f:D:\123.csv -> exists'
    
    
      
    
    
      - id: 40012
        title: "存在 tcping 命令"
        description: "检查 C:\\Windows\\System32\\tcping.exe 是否存在。"
        condition: any
        rules:
          - 'f:C:\WINDOWS\System32\tcping.exe -> exists'
          - 'f:C:\WINDOWS\System32\tcping64.exe -> exists'
    
      - id: 40013
        title: "存在测试文件"
        description: "检查 clash.ini 文件是否存在。"
        condition: any
        rules:
          - 'c:powershell -Command "Test-Path D:\\clash.ini" -> r:^True$'   
    
    
      - id: 40014
        title: "存在测试文件"
        description: "检查 D:\\123.csv 文件是否存在。"
        condition: any
        rules:
          - 'c:powershell -Command "Test-Path D:\\123.csv" -> r:^True$'   
    
       
      - id: 99999
        title: "存在 notepad"
        description: "检查 C:\\Windows\\notepad.exe 是否存在。"
        condition: all
        rules:
          - '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

    ⚠️ 小技巧

    1. 优先用 c:(命令) → 万能兜底,特别是文件检测有问题时。
    2. f / r / s → 性能更好(直接 API 级别调用,比 c: 快)。
    3. 组合 conditioncondition: anyall 可以混合使用多种前缀,保证可靠性。

控制台端推送安全基线

🔑 关键点:SCA 策略集中管理

  • 不用在每台客户端单独放 YML 文件
  • 可以通过 Wazuh Manager 在服务端集中存放基线文件,并通过 agent.confgroup 配置下发给成百上千个 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 漏洞扫描
检测方式 被动(软件清单比对) 主动(网络探测 + 认证扫描)
实时性 持续监控 需定期扫描
能否验证漏洞可利用性 ❌ 不能 ✅ 部分可验证
配置风险检测 一般 强大(弱口令、服务配置)
成本 开源免费 商业收费(部分免费版)
风险 低(不影响业务) 中(扫描可能导致业务负载)
使用场景 合规、持续安全基线监控 深度安全检测、渗透前风险评估
相关推荐
科技小郑2 小时前
吱吱企业即时通讯以安全为基,重塑安全办公新体验
大数据·网络·人工智能·安全·信息与通信·吱吱企业通讯
就叫飞六吧2 小时前
生产环境禁用AI框架工具回调:安全风险与最佳实践
人工智能·安全
心 一4 小时前
Web安全基石:深入理解与防御越权问题
网络·安全·web安全
kaixin_啊啊4 小时前
openEuler系统远程管理方案:cpolar实现安全高效运维
运维·安全
智驱力人工智能4 小时前
深度学习在离岗检测中的应用
人工智能·深度学习·安全·视觉检测·离岗检测
RA生态工作室5 小时前
瑞萨RA家族新成员RA4C1,符合DLMS SUITE2表计安全规范、超低功耗、支持段码显示,专为智能表计应用开发
安全
ayaya_mana6 小时前
BilldDesk:基于Vue3+WebRTC+Nodejs+Electron的开源远程桌面控制
electron·开源·webrtc
shellvon6 小时前
从抓包到攻防:解锁API安全设计的秘密
后端·安全