Rayan-Faiz/Mini-SOC-Wazuh-Rules

GitHub: Rayan-Faiz/Mini-SOC-Wazuh-Rules

基于 Wazuh 构建的迷你 SOC 方案,实现 SSH 暴力破解检测、GeoIP 富化、Slack/Teams 告警通知与攻击者 IP 自动封锁的完整安全运营流程。

Stars: 0 | Forks: 0

# Mini SOC - 威胁事件场景 此仓库包含了一个用于**威胁事件场景**的完整、可用于生产环境的实现。 目标:**检测 SSH 暴力破解尝试(多次失败登录)以及随后来自同一攻击者 IP 的成功登录**,然后通过 GeoIP 数据丰富告警,将其转发到协作渠道(Slack/Teams),并使用 SOAR 风格的 playbook 和 Wazuh 工具在防火墙自动封锁攻击者的 IP。 ## 仓库布局 ``` mini-soc-part2/ ├── README.md ├── rules/ │ ├── local_decoder.xml # Normalizes sshd log events │ └── local_rules.xml # Detection and correlation rules ├── integrations/ │ ├── slack.json # Slack integration template │ └── block-ip.sh # SOAR playbook script to block attacker IP ``` ## 检测逻辑 此检测使用 **Wazuh decoders + rules**: 1. **Decoder (`local_decoder.xml`)** – 确保 SSH 失败和成功的消息始终填充 `srcip` 和 `user` 字段。 2. **Rules (`local_rules.xml`)**: - **100000** → 检测单次登录失败尝试。 - **100010** → 聚合 60 秒内来自**同一 IP** 的 3 次或更多次失败登录。 - **100020** → 检测在暴力破解尝试后 120 秒内来自**同一 IP** 的成功登录。 - 此最终规则代表该**事件**。 3. **Enrichment**: - GeoIP 查询在 manager 配置中已启用。告警现在包含 `geoip.country_name`、`geoip.city_name` 等。 - Payload 包含元数据:攻击者 IP、用户名、上下文。 ## 已实现的功能 ### a) GeoIP 丰富 在 `/var/ossec/etc/ossec.conf` 中启用: ``` yes /var/ossec/etc/geoip/ ``` - 将 MaxMind **GeoLite2** 数据库文件放置在配置的路径中。 - 重启 Wazuh manager。 - 所有告警现在都包含攻击者 IP 的 GeoIP 上下文。 ### b) Slack/Teams 集成 在 `/var/ossec/etc/ossec.conf` 中配置: ``` slack https://hooks.slack.com/services/XXX/YYY/ZZZ json 100020 ``` **Template (`integrations/slack.json`)** 控制格式化。 每当 **rule 100020** 触发时,告警就会发送到 Slack(如果配置了自定义脚本,则发送到 Teams)。 ### c) SOAR Playbook(自动封锁 IP) 我们利用 Wazuh 的 **active response** 框架来自动封锁攻击者的 IP。 **脚本 (`integrations/block-ip.sh`)** **在 `/var/ossec/etc/ossec.conf` 中的配置片段:** ``` block-ip block-ip.sh srcip yes block-ip all 100020 ``` 这意味着:当 rule **100020** 触发时,Wazuh 会使用攻击者的 IP 运行 `block-ip.sh`,在防火墙(本例中为 UFW)处将其封锁。 ## 测试场景 1. 将自定义 decoder 和 rules 部署到 `/var/ossec/etc/`。 2. 重启 Wazuh manager: systemctl restart wazuh-manager 3. 从 agent 模拟事件: logger -p authpriv.notice 'sshd[1830]: Failed password for invalid user test1 from 203.0.113.5 port 50234 ssh2' logger -p authpriv.notice 'sshd[1830]: Failed password for invalid user test1 from 203.0.113.5 port 50234 ssh2' logger -p authpriv.notice 'sshd[1830]: Failed password for invalid user test1 from 203.0.113.5 port 50234 ssh2' logger -p authpriv.notice 'sshd[1830]: Accepted password for backupuser from 203.0.113.5 port 50234 ssh2' 4. 验证: - 在 **Wazuh Dashboard** 中,对 `rule.id:100020` 进行过滤以确认事件。 - 检查 **Raw JSON** 中的 GeoIP 字段。 - 检查 **Slack/Teams** 频道是否有告警。 - 在 manager 上运行 `ufw status` 以确认攻击者 IP 已被封锁。 ## 结论 此仓库演示了一个**完整的检测-丰富-响应 pipeline**: - **检测:** 暴力破解多阶段尝试及随后的成功登录(关联逻辑)。 - **丰富:** 进行 GeoIP 查询以获取攻击者上下文。 - **通知:** 将告警发送至 Slack/Teams。 - **响应:** 通过 SOAR 风格的 playbook 自动封锁防火墙。 它提供了一个实用的、真实的 SOC 工作流,可通过 CI/CD 完全自动化,符合现代安全运营的最佳实践。
标签:AMSI绕过, FOFA, FTP漏洞扫描, Wazuh, 威胁检测, 安全编排, 安全运营, 应用安全, 扫描框架, 自动化响应