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.log syslog
```
### 通过 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事件, 云安全架构, 协议分析, 威胁检测, 安全运营, 密码管理, 异常检测, 扫描框架, 插件系统, 无后门, 日志解码器, 权限提升, 逆向工具