
Wazuh 5.x SCA 自定义策略迁移指南从 4.x 格式到 PCRE2 与 YAML 新规范的完整实战【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh导读本文以 Wazuh 官方迁移文档为主体系统讲解如何把为 Wazuh 4.x 编写/定制的 Security Configuration AssessmentSCA安全配置评估策略迁移到 Wazuh 5.x覆盖正则引擎从 OSRegex 到 PCRE2 的语法改写、title到name的字段重命名、compliance与mitre元数据重构、数字比较运算符规范化以及skip_nfs等弃用配置的清理。读完本文你将掌握一套可复制、可验证的手工迁移流程并能在非生产 5.x 代理上完成策略校验与灰度发布。说明本文对应仓库文档为 docs/guide/migration/sca-policies-4x-to-5x.md同时结合 Wazuh 源码与测试验证其中的实现细节。一、为什么 SCA 策略迁移需要人工完成Wazuh 官方明确说明目前没有针对自定义 SCA 策略的自动迁移工具。升级到 5.x 后每一条自定义策略都需要人工审阅、按 5.x 策略格式改写并在非生产环境的 5.x 代理上验证通过后再逐步推广。原因在于 4.x 与 5.x 的 SCA 模块在底层发生了多项不兼容变更正则引擎替换、策略/检查命名字段调整、合规与 MITRE 元数据模型重构、数字比较运算符收紧以及 SCA 配置项清理。这些变更无法靠脚本一一对应转换尤其是正则表达式的语义差异只有熟悉原策略意图的人才能正确改写。在动手之前建议先通读 5.x 自定义策略的完整格式规范Creating custom SCA policies其中定义了 5.x 策略文件的policy、requirements、variables、checks四个区段及其字段约束。二、4.x 与 5.x 的变更摘要下表完整列出了 4.x 到 5.x 之间 SCA 策略相关的全部行为差异与对应迁移动作迁移时应逐条对照自查领域4.x 行为5.x 行为迁移动作正则表达式引擎osregex是 SCA 默认正则引擎策略和检查可设置regex_type所有 SCA 规则统一使用 PCRE2 求值regex_type字段被忽略引擎恒为 PCRE2OSRegex 不再可用重写所有依赖 OSRegex 语法的r:与n:表达式使其符合 PCRE2可删除已失效的regex_type字段策略与检查命名需求与检查使用titlename是规范字段内置策略、运行时状态与生成的事件均使用name。title仍被接受并自动映射到name但已弃用将requirements.title和每个checks[*].title重命名为name。由于旧title仍会映射到name此操作属于推荐而非强制合规元数据大量内置策略使用单键对象数组且常带版本化键名如pci_dss_v4.0compliance是对象仅接受规范化键名cmmc、fedramp、gdpr、hipaa、iso_27001、nis2、nist_800_171、nist_800_53、pci_dss、tsc将数组格式转换为对象只使用受支持的键不支持的键被忽略并给出告警MITRE 元数据MITRE 值常存放在合规键下如mitre_tactics、mitre_techniques、mitre_mitigationsMITRE 数据存放在独立的mitre对象中仅识别tactic、technique、subtechnique三个键把 MITRE 值从compliance移入mitre只使用tactic、technique、subtechnique数值比较部分内置 4.x 规则使用compare 、compare 、compare 、缺少空格或转义的\!等写法数值表达式要求compare 、compare 、compare 、compare !、compare 或compare 后跟数值compare与运算符两侧必须带空格规范化每条n:表达式并确保正则用捕获组捕获数值SCA 配置部分 4.x 配置包含skip_nfsskip_nfs在 SCA 中已弃用并产生告警SCA 同步设置位于synchronization下从 SCA 配置中删除skip_nfs按需保留或调整同步设置内置策略ruleset/sca下的内置策略文件由软件包托管升级会替换内置策略部分旧内置策略被移除包括 HP-UX、RHEL 5、SLES/SUSE 11、Solaris/SunOS 策略不要自定义ruleset/sca下的文件将自定义策略放在独立的受管路径并显式引用源码佐证旧策略文件名的静默跳过机制迁移文档特别提醒了一种隐蔽的坑SCA 配置读取器内置了一份旧策略文件名清单多为以_rcl.yml结尾的历史命名当scapolicies中仍引用这些文件名时会被静默跳过且不记录任何告警日志。这份内置清单可以在配置解析源码 src/config/src/wmodules-sca.c 中看到包含cis_rhel7_linux_rcl.yml、system_audit_rcl.yml、win_audit_rcl.yml等 21 个文件名。只有清单中完全一致的文件名才会被静默跳过其他缺失或无法解析的策略路径则会正常记录File ... not found或Policy file ... not found告警。三、分步迁移指南第 1 步盘点全部自定义 SCA 策略把当前实际使用的自定义策略全部登记造册包括scapolicies中显式引用的策略复制进共享代理组etc/shared的策略本地代理策略与管理端分发的策略都要覆盖。重点排查policy条目中引用旧文件名以_rcl.yml结尾的情况例如cis_rhel7_linux_rcl.yml、system_audit_rcl.yml、win_audit_rcl.yml。这些是从更早版本沿袭下来的旧命名并非 5.x 的 SCA 策略文件应删除或替换这些引用否则策略会被静默忽略。第 2 步备份策略并把自定义文件移出软件包托管目录切勿编辑或存放自定义策略于$WAZUH_HOME/ruleset/sca软件包升级会替换该目录下的内置策略文件。应使用管理员自主管理的路径并让policy条目指向该路径。路径语义需要区分清楚$WAZUH_HOME/etc/shared下的策略是共享策略。代理会把包含etc/shared/的路径视为远程策略因此这些策略中的命令规则c:只有在启用sca.remote_commands内部选项后才会执行etc/shared之外的外部本地路径如/opt/wazuh-sca/custom_linux.yml不会被该检查视为远程路径但文件必须存在于每台代理本地。一个完整的 5.x SCA 配置示例同时覆盖共享策略、外部本地策略与同步设置sca enabledyes/enabled scan_on_startyes/scan_on_start interval12h/interval policies !-- Shared policy: distributed through etc/shared; command rules require sca.remote_commands1. -- policyetc/shared/default/sca/custom_linux.yml/policy !-- External local policy: must exist on each agent. -- policy/opt/wazuh-sca/custom_linux_local.yml/policy policy enablednoruleset/sca/cis_debian12.yml/policy /policies synchronization enabledyes/enabled interval5m/interval integrity_interval24h/integrity_interval max_eps75/max_eps /synchronization /sca其中synchronization的解析逻辑enabled、interval、integrity_interval、max_eps及sync_end_delay、response_timeout等可在配置解析源码 src/config/src/wmodules-sca.c 中查到。第 3 步把title字段重命名为namename是规范字段。为保持向后兼容title仍会被接受并自动映射到name因此已有 4.x 策略可以继续运行但title已弃用应把requirements和每个检查中的title都改成namerequirements: name: Run only on Linux hosts checks: - id: 90001 name: Ensure SSH root login is disabled源码层面同样印证了这种兼容映射策略解析器 src/wazuh_modules/sca/sca_impl/src/sca_policy_parser.cpp 优先读取name字段仅在不存在时才回退读取title并写入name注释明确写着 Support both name (preferred) and title (legacy) for backward compatibility。第 4 步把 SCA 规则转换为 PCRE25.x 中regex_type字段被忽略引擎恒为 PCRE2可以直接删除。由于每条模式现在都按 PCRE2 求值需要审阅所有使用r:或n:的规则。以下改写是必须的——原模式在 PCRE2 下要么编译失败要么求值结果不再正确4.x 模式5.x 模式原因r:*r:\*裸*是量词但没有可重复的目标PCRE2 编译失败转义为匹配字面*n:audit_backlog_limit(d) compare 8192n:audit_backlog_limit(\d) compare 8192使用\d数字类别让捕获组匹配数值n:remember(\d) compare 5n:remember(\d) compare 5、、都不是合法运算符应使用、、n:gpgcheck(\d) compare \! 1n:gpgcheck(\d) compare ! 1不要转义比较运算符此外OSRegex 特有的通配符如\p需要替换为显式 PCRE2 字符类。例如如果策略需要匹配*、!、、-其中之一应写成[*!-]。以下模式在 PCRE2 下仍能编译但语义发生变化仅当原意图确需时改写4.x 模式PCRE2 改写何时应用r:pam_unix.so、r:127.0.0.1r:pam_unix\.so、r:127\.0\.0\.1PCRE2 中.匹配任意字符若必须匹配字面点号则需转义r:\.、r:\.*.confr:.、r:.*\.conf\.在 PCRE2 中是字面点若意图是任意字符则用.r:\wr:[\w-]\w本身合法仅当匹配值可能包含、-等字符时才扩大字符类数值比较运算符的底层实现数字规则解析位于 src/wazuh_modules/sca/sca_impl/src/sca_utils.cpp 的EvaluateNumericRegexComparison它先按compare关键字切分表达式再用std::istringstream读取运算符与期望值最后仅接受、、、!、、六种运算符其余一律抛出 Invalid operator in numeric comparison 异常。这解释了为什么、、这类 4.x 写法在 5.x 必然失效。测试用例 command_rule_evaluator_test.cpp 中的n:\d compare 50、n:Some string:\s(\d) compare 24也是标准的 5.x 写法范例。第 5 步转换 compliance 与 MITRE 元数据只使用受支持的合规键并把 MITRE 值移入mitre对象compliance: pci_dss: [2.2] nist_800_53: [CM-6] tsc: [CC6.6] mitre: tactic: [TA0005] technique: [T1036]注意5.x 的compliance对象取值是标识符字符串数组而更完整的 5.xmitre写法含 id 与 name 平行数组可参考 docs/ref/modules/sca/custom-policies.md。迁移文档中的简化数组写法同样受支持取决于你的校验需求。不合法键的告警行为策略解析器对未知合规键会记录 Invalid compliance key ... in check ..., ignoring 并移除该键若compliance整体不是预期格式则记录 Unexpected compliance format in check ..., ignoring 并整段忽略见 sca_policy_parser.cpp。第 6 步删除弃用的 SCA 配置从 SCA 模块配置中删除skip_nfs。若需显式配置同步按第 2 步示例放入synchronization中。源码佐证配置解析在遇到skip_nfs时只记录一条信息日志 Detected a deprecated configuration for SCA: skip_nfs is no longer available.见 src/config/src/wmodules-sca.c即该配置在 SCA 中已不再生效。需要说明的是skip_nfs作为其他模块如 rootcheck、syscheck的配置仍然有效只是对 SCA 模块而言已被移除。第 7 步在 Wazuh 5.x 上验证迁移后的策略在非生产环境的 5.x 代理或管理端安装策略重启服务并执行一次扫描。重点检查 Wazuh 日志中的以下信息策略解析错误搜索Failed to parse policy由 sca_policy_parser.cpp 抛出通常伴随具体异常信息非法合规键搜索Invalid compliance key合规格式异常搜索Unexpected compliance format正则编译失败搜索PCRE2 compilation failed。第 8 步增量灰度发布先从一个代理组或一种端点类型开始将 SCA 结果与预期的 4.x 行为对比确认迁移后的策略能干净解析、pass/fail/not applicable 结果符合预期后再逐步扩大部署范围。四、完整迁移示例4.x → 5.x下面这条 4.x 检查同时包含了title、OSRegex 语法、数组式 compliance 元数据、存放在compliance内的 MITRE 值以及倒置的数值比较运算符——几乎覆盖了所有需要迁移的要点。4.x 原始策略policy: id: custom_linux file: custom_linux.yml name: Custom Linux hardening description: Custom checks for Linux endpoints. regex_type: osregex requirements: title: Run only on Linux hosts description: Linux host requirement. condition: all rules: - f:/proc/sys/kernel/ostype - Linux checks: - id: 90001 title: Check SSH and password aging compliance: - pci_dss_v4.0: [2.2.6] - nist_sp_800-53: [CM-6] - mitre_tactics: [TA0005] - mitre_techniques: [T1036] condition: all rules: - f:/etc/pam.d/system-auth - r:pam_unix.so n:remember(\d) compare 5 - not f:/etc/shadow - n:^\w:\$\.*:\d:\d:(\d): compare 365迁移后的 5.x 版本——改用name、删除已失效的regex_type、转换 compliance 与 MITRE 元数据、按 PCRE2 重写表达式policy: id: custom_linux file: custom_linux.yml name: Custom Linux hardening description: Custom checks for Linux endpoints. requirements: name: Run only on Linux hosts description: Linux host requirement. condition: all rules: - f:/proc/sys/kernel/ostype - Linux checks: - id: 90001 name: Check SSH and password aging compliance: pci_dss: [2.2.6] nist_800_53: [CM-6] mitre: tactic: [TA0005] technique: [T1036] condition: all rules: - f:/etc/pam.d/system-auth - r:pam_unix\.so n:remember(\d) compare 5 - not f:/etc/shadow - n:^[\w-]:\$.*:\d:\d:(\d) compare 365逐项对照迁移要点regex_type: osregex已删除5.x 恒为 PCRE2compliance从单键对象数组改为对象键名pci_dss_v4.0→pci_dss、nist_sp_800-53→nist_800_53版本化/非规范键名在 5.x 会被忽略并告警mitre_tactics、mitre_techniques移入独立的mitre对象改用tactic、techniquer:pam_unix.so→r:pam_unix\.soPCRE2 中.需转义以匹配字面点compare 5→compare 5合法运算符之一\.*→.*意图是任意字符则用.\w扩为[\w-]匹配值可含、-title→namerequirements 与 checks 均同步。五、最终检查清单迁移完成后逐项核对以下清单即官方文档的最终验收标准自定义策略存放在$WAZUH_HOME/ruleset/sca之外SCA 配置引用了迁移后的自定义策略路径requirements与 checks 使用name弃用的title仍可用但应替换regex_type字段已删除5.x 中它被忽略所有模式一律按 PCRE2 处理所有正则与数值表达式均能以 PCRE2 编译compliance是对象且仅含受支持的键cmmc、fedramp、gdpr、hipaa、iso_27001、nis2、nist_800_171、nist_800_53、pci_dss、tscMITRE 元数据位于mitre对象下SCA 配置中已删除skip_nfs非生产 5.x 环境的验证扫描已通过无 SCA 解析或 PCRE2 错误。六、进一步阅读5.x 自定义 SCA 策略完整格式规范Creating custom SCA policies含policy/requirements/variables/checks区段、合规键、MITRE 键、条件求值表与规则类型其他 4.x → 5.0 迁移主题索引Migration guides管理端配置、代理组、CIS-CAT/OpenSCAP 替换、CDB 迁移等SCA 模块实现与单元测试src/wazuh_modules/sca/sca_impl/src、src/wazuh_modules/sca/sca_impl/tests内置策略目录升级后会被替换勿在此处存放自定义内容ruleset/sca。【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考