修改OSSEC规则提升告警级别遇异常:触发父规则而非自定义规则
问题:自定义OSSEC规则未触发,仅触发父规则告警
尝试在0015-ossec_rules.xml中添加以下自定义规则,目的是将/home目录下用户.ssh目录的完整性校验变更告警级别提升至10:
<rule id="10550" level="10"> <if_sid>550</if_sid> <regex>/home/.*/\.ssh/</regex> <description>Integrity checksum changed in /home/*/.ssh/</description> </rule>
但修改任意用户的.ssh目录时,触发的却是ID为550、级别为7的父规则告警:
<rule id="550" level="7"> <category>ossec</category> <decoded_as>syscheck_integrity_changed</decoded_as> <description>Integrity checksum changed.</description> <mitre> <id>T1565.001</id> </mitre> <group>syscheck,syscheck_entry_modified,syscheck_file,pci_dss_11.5,gpg13_4.11,gdpr_II_5.1.f,hipaa_164.312.c> </rule>
解决方案
1. 精准匹配目标字段(核心修复)
OSSEC的<regex>默认匹配整个日志内容,而syscheck告警的文件路径存储在file字段中,直接用全局正则可能无法精准命中。修改规则,明确指定匹配file字段,同时优化正则避免过度匹配:
<rule id="10550" level="10"> <if_sid>550</if_sid> <field name="file">/home/[^/]+/\.ssh/</field> <description>Integrity checksum changed in /home/*/.ssh/</description> </rule>
这里用<field>标签替代<regex>,直接锁定file字段;正则/home/[^/]+/\.ssh/确保只匹配单个用户目录下的.ssh路径,避免.*跨目录匹配的问题。
2. 调整规则加载顺序
OSSEC按规则文件的字母/数字顺序加载,系统默认规则文件0015-ossec_rules.xml会优先加载。建议将自定义规则放到编号更大的自定义文件中(比如local_rules.xml或1000-custom_rules.xml),确保自定义规则在父规则之后加载,才能正确继承并覆盖级别。
3. 验证规则并重启服务
- 用
ossec-logtest工具测试规则匹配效果:
输入触发syscheck的告警日志,确认是否能触发ID为10550的规则。/var/ossec/bin/ossec-logtest - 测试通过后重启OSSEC服务:
/var/ossec/bin/ossec-control restart
4. 确认syscheck监控配置
检查ossec.conf中的syscheck模块,确保已正确监控.ssh目录:
<syscheck> <directories check_all="yes">/home/*/.ssh</directories> </syscheck>
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

