Halino/Wazuh-ThreatIntel

GitHub: Halino/Wazuh-ThreatIntel

一个轻量级的 Wazuh 威胁情报更新脚本,通过聚合多个公开恶意 IP 和恶意软件哈希数据源并写入 Wazuh 内置 CDB 列表,免自定义规则即可激活 IOC 检测。

Stars: 0 | Forks: 0

# Wazuh threat-intel 更新工具 这是一个轻量级、低依赖的更新工具,用于为 Wazuh 的**内置** threat-intel 检测提供数据支持。它会下载多个公开的 **IP 信誉**和**恶意软件哈希**数据源,验证每一条记录,并写入 Wazuh 内置 `malicious-ioc` 规则集已经监控的两个 **CDB 列表**。**无需自定义规则。** ## 包含内容 | 文件 | 用途 | |------|---------| | `threatintel-update.sh` | 下载 + 验证数据源,写入两个 CDB 列表,并重载 manager | | `wazuh/ossec-threatintel.conf.snippet` | `` 声明 + `cron.d` 示例 | | `tests/README.md`, `tests/sample-cdb-format.txt` | 验证方法 + 生成的 CDB 确切格式 | ## 什么是 CDB 列表? **CDB 列表**(constant database,常量数据库)是 Wazuh manager 上的一个快速键值对查询文件。规则通过 `path` 引用列表,并将某个字段(如 IP 或哈希值)与**键**(keys)进行匹配。Wazuh 会在 `etc/lists/...` 下保存一个纯文本的 `key:value` 文件,并在 manager 重载时将其编译为二进制的 `.cdb` 文件。本项目仅负责保持这两个纯文本文件处于最新状态;实际的匹配工作由 Wazuh 完成。 ## 检测:内置的 `malicious-ioc` 规则集 Wazuh 内置了 `malicious-ioc` 规则集(规则 ID 为 **99901-99920**),该规则集已经与这两个列表绑定。只需填充列表,规则就会生效——无需编写任何自定义内容。 | 列表(由本脚本写入) | 使用它的内置规则 | 触发条件 | |---------------------------|-------------------------|------------| | `etc/lists/malicious-ioc/malicious-ip` | **99902-99916, 99919-99920**(例如 **99904**) | 事件的 `srcip`/`dstip`/`ip_address`(如 sshd 认证、Web、Windows 登录、防火墙等)匹配到已知恶意 IP | | `etc/lists/malicious-ioc/malware-hashes` | **99901** | **FIM** 告警(syscheck 550/554)报告某个文件的 **sha256** 匹配到已知恶意软件哈希 | ## 数据源 所有数据源均为**公开**的。IP 数据源会被解析提取其中的 IPv4 地址;哈希数据源和 ThreatFox 则会被解析提取 sha256。 | 数据源 | 类型 | 来源 | |------|------|--------| | blocklist.de - all | IP | | | Emerging Threats - compromised IPs | IP | | | stamparm/ipsum - level 3 (>=3 lists) | IP | | | abuse.ch Feodo Tracker (botnet C2) | IP | | | CINS Army - ci-badguys | IP | | | GreenSnow | IP | | | abuse.ch MalwareBazaar - recent sha256 | hash | | | abuse.ch ThreatFox - recent CSV | IP + hash | | ### 验证 - **IPv4:** 每个八位组在 `0-255` 之间,无前导零;**私有/保留地址段会被排除**,因此您绝不会将自己内部流量列入黑名单——`0/8`、`10/8`、`127/8`、`172.16-31`、`192.168/16`、`169.254/16`(链路本地地址)、`100.64-127`(运营商级 NAT)以及 `224.0.0.0+`(组播/保留地址)。 - **sha256:** 必须为精确的 64 位十六进制字符,统一转换为小写并去重。 - **中止保护:** 如果存活的合法 IP 数量少于 **500** 个(可能是数据源中断),脚本将以非零状态退出,并且**保留之前的列表**,而不是将其清空。可通过 `THREATINTEL_MIN_IPS` 进行调整。 ## 环境要求 - 安装了内置 `malicious-ioc` 规则集的 Wazuh 4.x manager(参见配置代码段以确认 `ossec.conf` 中是否存在这两个 `` 条目)。 - 运行脚本的主机上具备 `curl` 和对外的 HTTPS 访问能力。 - 对于 Docker 模式:需要 `docker` 以及在 manager 容器中执行 `docker exec`/`docker cp` 的权限。 ## 部署 ### 配置(环境变量) | 变量 | 默认值 | 含义 | |----------|---------|---------| | `WAZUH_MANAGER_CONTAINER` | *(空)* | 容器名称 -> **Docker 模式**。留空 -> **软件包模式**(本地路径)。 | | `WAZUH_LIST_DIR` | `/var/ossec/etc/lists/malicious-ioc` | 列表存放路径(在 manager 内部) | | `WAZUH_CONTROL` | `/var/ossec/bin/wazuh-control` | Manager 控制程序 | | `WAZUH_RELOAD_ACTION` | `reload` | `reload`(平滑重载)或 `restart`(适用于旧版 Wazuh) | | `WAZUH_LIST_OWNER` | `wazuh:wazuh` | 应用于列表文件的归属者(尽最大努力设置) | | `THREATINTEL_MIN_IPS` | `500` | 如果合法 IP 数量少于此值,则中止运行 | | `THREATINTEL_CURL_TIMEOUT` | `45` | 单个数据源的 curl 超时时间(秒) | ### 模式 A - Docker 单节点(manager 在容器中) ``` sudo install -m 0755 threatintel-update.sh /usr/local/bin/threatintel-update.sh # 查找您的 manager container 名称: docker ps --format '{{.Names}}' | grep manager WAZUH_MANAGER_CONTAINER=single-node-wazuh.manager-1 \ /usr/local/bin/threatintel-update.sh ``` ### 模式 B - 软件包安装(manager 在当前主机上) ``` sudo install -m 0755 threatintel-update.sh /usr/local/bin/threatintel-update.sh sudo /usr/local/bin/threatintel-update.sh ``` ### 定时任务(每日) 安装 `/etc/cron.d/wazuh-threatintel`(完整示例见代码段): ``` # Docker 模式 17 4 * * * root WAZUH_MANAGER_CONTAINER=single-node-wazuh.manager-1 /usr/local/bin/threatintel-update.sh >> /var/log/wazuh-threatintel.log 2>&1 # Package 模式 17 4 * * * root /usr/local/bin/threatintel-update.sh >> /var/log/wazuh-threatintel.log 2>&1 ``` 脚本会将获取失败的数据源信息输出到 stderr,并在完全失败时(数据源不可达 / IP 数量低于下限 / manager 重载失败)以**非零状态**退出,这样 cron 邮件或 CI 就可以根据退出代码进行报警。脚本本身未内置任何通知功能。 ## 验证 1. 确认列表已写入并查看条目数量: # 软件包模式 wc -l /var/ossec/etc/lists/malicious-ioc/malicious-ip wc -l /var/ossec/etc/lists/malicious-ioc/malware-hashes # docker 模式 docker exec single-node-wazuh.manager-1 wc -l /var/ossec/etc/lists/malicious-ioc/malicious-ip 2. 验证规则是否触发。从列表中任选一个 IP,并将匹配该 IP 的事件输入到 `wazuh-logtest`(在 manager 上运行,或执行 `docker exec -it /var/ossec/bin/wazuh-logtest`): Jan 1 00:00:00 host sshd[1000]: Failed password for root from port 2222 ssh2 预期结果:sshd 认证失败规则触发,并且 Wazuh 会将其升级为 **规则 99904**(`Sample event from a malicious IP`),因为源 IP 位于 `malicious-ip` 列表中。对于哈希值,当 FIM (syscheck) 告警报告某个文件的 sha256 存在于 `malware-hashes` 列表中时,**规则 99901** 就会触发。 ## 注意事项 - 这些列表仅包含公开、不可归属的指标(Indicators);绝不写入任何私有网段、主机名、token 或内部基础设施信息。 - `reload` 会在不断开 agent 连接的情况下应用新列表;在不支持 reload 的 Wazuh 版本中,请使用 `WAZUH_RELOAD_ACTION=restart`。 ## 许可证 MIT - 见 [LICENSE](LICENSE)。
标签:Wazuh, 威胁情报, 安全运营, 开发者工具, 恶意IOC, 扫描框架, 数字取证, 自动化脚本, 请求拦截