Estylowy/wazuh-siem-rules

GitHub: Estylowy/wazuh-siem-rules

为 Wazuh SIEM 提供 20 条生产就绪的自定义检测规则,覆盖暴力破解、Web 扫描、权限提升、横向移动等攻击向量,附带测试工具和 MITRE ATT&CK 映射。

Stars: 1 | Forks: 0

# 🛡️ Wazuh SIEM — 自定义检测规则 **作者:** [Mateusz Rusnak](https://mateuszrusnak.pl) — 网络与安全专家 | QA 自动化工程师 **网站:** [mateuszrusnak.pl](https://mateuszrusnak.pl) **LinkedIn:** [linkedin.com/in/mateuszrusnak](https://www.linkedin.com/in/mateuszrusnak/) **技术栈:** Wazuh 4.7+, Python 3.12, MITRE ATT&CK **状态:** 生产就绪规则,经实验室测试 ## 📁 项目结构 ``` wazuh-siem-rules/ ├── rules/ │ └── rusnak_custom_rules.xml # 20 custom detection rules (IDs 10500–10590) ├── decoders/ │ └── rusnak_decoders.xml # Custom log decoders (app logs, anti-cheat, proxy) ├── wazuh_rule_tester.py # CLI tool: simulate alerts + live API watcher └── README.md ``` ## 🔍 检测类别 | 规则 ID | 类别 | MITRE ATT&CK | 最高级别 | |------------|-------------------------|---------------------|----------| | 10500–10505 | SSH 暴力破解 | T1110.001, T1078 | 14 | | 10520–10525 | Web 登录异常 | T1110.001, T1595 | 10 | | 10540–10544 | 权限提升 | T1548.003, T1136 | 12 | | 10560–10562 | 横向移动 / 侦察 | T1046, T1021 | 10 | | 10580–10584 | Windows 事件异常 | T1110.001, T1543 | 10 | ## ⚡ 核心规则 ### SSH 暴力破解 (10501) 在 **60 秒内来自同一 IP 的 5 次 SSH 登录失败** 后触发。 级别 14 变体 (10502) 在 20 次以上时触发 —— 表明使用了自动化工具。 ### 凭据泄露信号 (10503) 来自刚触发暴力破解规则的 IP 的 SSH **成功** 登录 —— 这是凭据泄露置信度最高的指标。 ### Web 扫描器检测 (10523) 将 `User-Agent` 与已知工具进行匹配:`sqlmap`、`nikto`、`nuclei`、`gobuster`、`hydra`、`zaproxy`、`acunetix`。 ### 权限提升链 (10541 → 10542 → 10544) - 单次 sudo 失败 → 级别 8 - 2 分钟内 5 次以上 sudo 失败 → 级别 12 - 用户被添加到 `sudo`/`wheel` 组 → 级别 12 ### 内部网络扫描 (10561) 检测源自 RFC1918 地址的扫描 —— 标记可能的 **失陷内部主机** 或横向移动尝试。 ## 🚀 在 Wazuh Manager 上安装 ``` # 复制规则到 Wazuh rules 目录 sudo cp rules/rusnak_custom_rules.xml /var/ossec/etc/rules/ # 复制 decoders sudo cp decoders/rusnak_decoders.xml /var/ossec/etc/decoders/ # 验证 XML 语法 sudo /var/ossec/bin/ossec-logtest -t # 重启 Wazuh manager sudo systemctl restart wazuh-manager # 验证规则已加载 sudo /var/ossec/bin/ossec-logtest # 粘贴测试日志行并检查规则是否触发 ``` ### ossec.conf — 指定 Wazuh 使用自定义规则 ``` etc/rules etc/decoders ``` ## 🧪 测试规则 ### 模拟所有告警类别 ``` python3 wazuh_rule_tester.py --test-all ``` ### 测试特定类别 ``` python3 wazuh_rule_tester.py --category ssh python3 wazuh_rule_tester.py --category web python3 wazuh_rule_tester.py --category privesc python3 wazuh_rule_tester.py --category lateral python3 wazuh_rule_tester.py --category windows ``` ### 生成测试日志文件(输入给 Wazuh agent) ``` python3 wazuh_rule_tester.py --generate-logs # → 写入 /tmp/rusnak_wazuh_test.log # 添加到 ossec.conf: # /tmp/rusnak_wazuh_test.logsyslog ``` ### 通过 Wazuh REST API 查看实时告警 ``` # 首先获取 auth token TOKEN=$(curl -su admin:admin -k -X POST \ https://WAZUH_HOST:55000/security/user/authenticate \ | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['token'])") # 实时查看 python3 wazuh_rule_tester.py --live --wazuh-host 192.168.1.10 --token $TOKEN ``` ## 🧠 设计决策 **为什么使用基于频率的规则?** 单次事件会产生噪音。规则 10501、10521、10542 使用 `` + `` 来关联重复事件 —— 在捕获真实攻击的同时减少误报。 **为什么使用 ``?** 确保仅当失败来自 *同一攻击者 IP* 时才触发关联,而不是跨不相关的来源。 **为什么使用 MITRE ATT&CK ID?** Wazuh 原生支持 MITRE 标记。带有标记的告警可直接输入到威胁报告和合规仪表板,无需额外映射。 **规则 ID 范围 10500–10590** Wazuh 保留 100000 以下的 ID 供自定义规则使用。ID 10500+ 安全地高于内置范围(1–9999 为 Wazuh 核心,10000–10499 通常被社区规则使用)。 ## 📊 告警级别参考 | 级别 | 含义 | 示例 | |------|----------------------------------|------------------------------| | 3–4 | 低 —— 信息性 | 单次认证失败 | | 5–7 | 中 —— 值得调查 | SSH 失败,sudo 使用 | | 8–11 | 高 —— 可能恶意 | 暴力破解,检测到扫描器 | | 12–14| 严重 —— 需立即响应 | 凭据泄露,rootkit | ## 🔗 参考资料 - [Wazuh 规则集文档](https://documentation.wazuh.com/current/user-manual/ruleset/) - [MITRE ATT&CK — 凭据访问](https://attack.mitre.org/tactics/TA0006/) - [Wazuh REST API](https://documentation.wazuh.com/current/user-manual/api/reference.html)
标签:AMSI绕过, Cloudflare, MITRE ATT&CK, PE 加载器, Python, SecOps, SSH暴力破解, Wazuh, Web扫描器检测, Windows事件, 云安全架构, 协议分析, 威胁检测, 安全运营, 密码管理, 异常检测, 扫描框架, 插件系统, 无后门, 日志解码器, 权限提升, 逆向工具