Halino/Wazuh-Plex

GitHub: Halino/Wazuh-Plex

为 Wazuh 提供 Plex Media Server 日志的解析器与检测规则,在过滤大量 DEBUG 噪声的同时精准识别访问拒绝、暴力破解、账户安全事件和服务器崩溃。

Stars: 0 | Forks: 0

# 用于 Wazuh 的 Plex Media Server 解析器 **Decoders** 和 **rules**,让 Wazuh 能够摄入并分析 **Plex Media Server** 日志(`Plex Media Server.log`)—— 包括 HTTP 访问控制、账户安全和 稳定性 —— 而不会被 Plex 极其冗长的 DEBUG 输出淹没。 ## 包含内容 | 文件 | 用途 | |------|--------| | `wazuh/decoders/plex_decoders.xml` | 解析 `Plex Media Server.log` 行(`[0x...] LEVEL - ...`),包括 HTTP 请求/响应行 | | `wazuh/rules/plex_rules.xml` | HTTP 访问拒绝、暴力破解突发、账户安全、登录、严重错误 | | `wazuh/ossec-plex.conf.snippet` | 用于读取 Plex 日志的 `localfile` 配置示例 | | `tests/sample_logs.txt` | 用于 `wazuh-logtest` 的示例行 | ## 日志格式 Plex Media Server 将每个事件按行写入 `Plex Media Server.log`: ``` [0x7f3a1c] INFO - Completed: [203.0.113.10:52012 (WAN)] 403 GET /library/sections [0x7f3a1c] INFO - Account signed in: user alice [0x7f3a1c] ERROR - Database is locked, retrying ``` 每一行都以十六进制线程 ID(`[0x...]`)、日志 **LEVEL** (INFO / WARN / ERROR / DEBUG / VERBOSE / FATAL)和一段自由文本消息开始。HTTP 请求行(`Request:` / `Completed:`)还包含客户端 IP、 网络端(**WAN**/**LAN**)、HTTP 状态码、方法以及 URL。 提取的字段: - HTTP 行:`srcip`、`plex_network`(WAN/LAN)、`plex_status`(HTTP 码)、 `plex_method`、`plex_url` - 常规行:`plex_level`(INFO/ERROR/...)、`plex_message` ## 规则 | 规则 ID | 级别 | 检测内容 | MITRE | |---------|-------|---------|-------| | 110300 | 0 | 分组(任何 Plex 日志行)- 默认静默 | — | | 110301 | 3 | HTTP 访问拒绝(401 / 403) | — | | 110302 | 0 | 来自 localhost 的 401/403(transcoder/应用自身请求)- 已静默 | — | | 110303 | 8 | 拒绝访问突发(12 次 / 120 秒,相同 IP)- 暴力破解 / 扫描 | T1110 | | 110304 | 8 | 账户安全事件(新设备、token 无效/过期、认证失败、账户被锁定) | — | | 110305 | 5 | 账户登录(审计) | — | | 110306 | 4 | **严重错误**(损坏 / 崩溃 / panic / OOM / DB 锁定) | — | | 110307 | 0 | 操作性转码/请求错误 - 已静默 | — | 规则 ID 使用了专用的 **110300-110307** 段。 ### 为什么基础规则是静默的(DEBUG 噪声) Plex 默认以 **DEBUG** 级别记录日志,并且**极其冗长** —— 它每小时会写入 数千行日志:每一个 HTTP 请求、每一个转码步骤、每一次 时间线更新。如果对所有这些内容进行告警,会掩盖真正的信号,因此: - **基础分组规则 `110300` 为级别 0**(静默)。真正的检测建立在 其之上 —— 只有 HTTP 访问拒绝、账户安全和真正的崩溃才会 被呈现出来。 - **`110307` 静默了转码/请求错误噪声。** Plex 经常为良性的情况记录 `ERROR`/`FATAL` 日志行(`[Req#...]`、转码 session 故障、`ClientProfile`、`EventSource`、`pubsub`、元数据类型不匹配)。 这些已被静默,因此它们不会淹没真正的 `110306` 崩溃 (损坏、panic、死锁、内存溢出、数据库锁定、segmentation)。 - **`110302` 静默了 localhost 自身请求。** transcoder 和本地应用 在正常运行过程中会访问服务器上的 `127.0.0.1` 并收到 401/403 —— 这不是 安全事件,因此将其静默(而 `110301` 仍然会 显示来自 LAN/WAN 客户端的真实 401/403,并且 `110303` 会关联突发访问)。 您也可以直接从源头减少日志量 —— 请参阅 `wazuh/ossec-plex.conf.snippet` 中关于关闭 Plex debug/verbose 日志记录的提示。 ## 部署 ``` sudo cp wazuh/decoders/plex_decoders.xml /var/ossec/etc/decoders/ sudo cp wazuh/rules/plex_rules.xml /var/ossec/etc/rules/ sudo systemctl restart wazuh-manager ``` 然后将 Wazuh agent 指向 Plex 日志文件(它位于 Plex 主机上)。请参阅 `wazuh/ossec-plex.conf.snippet` 以获取 `` 块以及 Linux、NAS 和 Docker 上的典型日志 路径。 ## 测试 ``` /var/ossec/bin/wazuh-logtest ``` 例如,粘贴以下内容(无需 syslog 头部 —— 解码器是基于内容的): ``` [0x7f3a1c] INFO - Completed: [203.0.113.10:52012 (WAN)] 403 GET /library/sections ``` 预期结果:解码器 `plex`,规则 **110301**(access_denied,来自 `203.0.113.10` 的 HTTP 403)。 完整集合请参见 `tests/sample_logs.txt`。 ## 兼容性 - Wazuh 4.x(使用 `pcre2`)。 - 写入 `Plex Media Server.log` 的 Plex Media Server(任何近期版本)。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:Plex, Wazuh, 日志解析, 规则配置, 证书伪造