Halino/Wazuh-PostgreSQL

GitHub: Halino/Wazuh-PostgreSQL

为 Wazuh 提供支持英意双语的 PostgreSQL 日志解码器与规则集,解决非英语 locale 下默认解码器无法捕获本地化日志告警的问题。

Stars: 0 | Forks: 0

# 适用于 Wazuh 的 PostgreSQL 日志解析器(支持英/意双语) **Decoders** 和 **rules**,使 Wazuh 能够摄取并分析 **PostgreSQL** 服务器日志——包括在**非英语 locale** 下运行的服务器。 ## 原因 当 PostgreSQL 使用本地化的 `lc_messages`(例如 `it_IT`)运行时,它会用该语言写入日志 严重级别和消息:用 `FATALE` 代替 `FATAL`,用 `ERRORE` 代替 `ERROR`,用 `permesso negato` 代替 `permission denied`。**Wazuh 默认的 PostgreSQL decoders 仅匹配英语**,并会默默漏掉这些行——因此一个带有意大利语 日志的数据库*完全不会*产生 PostgreSQL 告警。 此 ruleset 解析标准的 `log-line-prefix` 格式,并且这些 rules 可**同时匹配英语 和意大利语**,因此无论服务器 locale 如何,身份验证失败、破坏性 DDL 和权限更改都能被捕获。 ## 包含内容 | 文件 | 用途 | |------|--------| | `wazuh/decoders/postgresql_decoders.xml` | 解析 ` [] : ` | | `wazuh/rules/postgresql_rules.xml` | 检测身份验证失败、破坏性 DDL、权限更改、FATAL/PANIC | | `wazuh/ossec-postgresql.conf.snippet` | 示例 `localfile` + 所需的 `postgresql.conf` 设置 | | `tests/sample_logs.txt` | 用于 `wazuh-logtest` 的英语 + 意大利语示例行 | ## 规则 | Rule ID | Level | 检测内容 | MITRE | |---------|-------|---------|-------| | 110000 | 0 | 分组(任何 PostgreSQL 日志行) | — | | 110001 | 7 | `FATAL`/`PANIC` (EN) · `FATALE`/`PANICO` (IT) | — | | 110002 | 6 | 身份验证失败 / 权限被拒绝(双语) | T1078 | | 110003 | 4 | `ERROR` / `ERRORE` | — | | 110004 | 11 | 破坏性 DDL:`DROP …` / `TRUNCATE` | T1485 | | 110005 | 7 | 权限 / 角色更改:`GRANT`/`REVOKE`/`CREATE ROLE` | T1098 | | 110006 | 0 | 降低常规应用 SQL 噪音(约束/重复键/autovacuum)的级别 | — | | 110007 | 10 | 重复的身份验证失败 = 暴力破解(频率 5 / 120 秒) | T1110 | Rule ID 使用专门的 **110000-110007** 区间,以避免与其他 rulesets 冲突。 ### 误报处理 - **110004 / 110005** 使用了负向先行断言(negative lookahead),因此回显的绑定值或包含 `DROP`/`GRANT` 单词的 `DETAIL:` / `Parameters:` 行**不会**触发——只有真正的语句才会触发。 - **110006** 将常规的应用程序 SQL 错误(外键/唯一性约束冲突、死锁、 autovacuum、语法错误)降级为级别 0,这样应用程序 bug 就不会淹没告警流。如果你*确实* 想要这些信息,可以删除/调整它。 ## 部署 ### 1. 将 decoder 和 rules 复制到 Wazuh manager ``` sudo cp wazuh/decoders/postgresql_decoders.xml /var/ossec/etc/decoders/ sudo cp wazuh/rules/postgresql_rules.xml /var/ossec/etc/rules/ sudo systemctl restart wazuh-manager ``` ### 2. 收集 PostgreSQL 日志 在**数据库服务器**(Wazuh agent)上——或者如果 PostgreSQL 在本地,则在 manager 上——将 `wazuh/ossec-postgresql.conf.snippet` 中的 `localfile` 块添加到 `ossec.conf` 中,并 指向你的 PostgreSQL 日志路径。 ### 3. 确保 PostgreSQL 记录了你想要检测的内容 在 `postgresql.conf` 中: ``` logging_collector = on log_line_prefix = '%m [%p] ' # timestamp + pid — matches the decoder log_statement = 'ddl' # required for DROP/TRUNCATE/GRANT detection # log_connections = on # 可选:auth 事件上的 source host ``` ## 测试 ``` /var/ossec/bin/wazuh-logtest ``` 粘贴(意大利语 locale)示例: ``` 2026-07-06 09:14:02.001 CEST [3312] FATALE: autenticazione con password fallita per l'utente "app" ``` 预期结果:decoder `postgresql-local`,rule **110002**(authentication_failed,T1078)。 完整的英语 + 意大利语集合请参见 `tests/sample_logs.txt`。 ## 兼容性 - Wazuh 4.x(使用 `pcre2` decoders/fields)。 - PostgreSQL 12+(带时间戳 + `[pid]` 前缀的 stderr 日志记录)。已针对 PG 17 进行测试。 ## 许可证 MIT — 请参见 [许可证](LICENSE)。
标签:PostgreSQL, Wazuh, 日志解析, 测试用例, 红队行动, 证书伪造, 防御框架